Melihat kembali karier dan kehidupan saya sebagai seorang programmer, ada banyak cara saya meningkatkan keterampilan pemrograman saya - membaca kode, menulis kode, membaca buku, mendengarkan podcast, menonton screencast dan banyak lagi.
Pertanyaan saya adalah: Apa hal paling efektif yang telah Anda lakukan yang meningkatkan keterampilan pemrograman Anda? Apa yang akan Anda rekomendasikan kepada orang lain yang ingin ditingkatkan?
Saya mengharapkan jawaban yang bervariasi di sini dan tidak ada satu jawaban "satu ukuran cocok untuk semua" - Saya ingin tahu apa yang berhasil untuk orang yang berbeda.
self-improvement
skills
Oded
sumber
sumber
Jawaban:
Tanpa urutan tertentu ...
Bekerja dengan orang-orang yang jauh lebih pintar daripada saya
Selalu dengarkan apa yang orang lain katakan, terlepas dari apakah itu junior, menengah, senior atau guru. jabatan tidak berarti apa-apa.
Mempelajari kerangka / bahasa lain, dan melihat bagaimana mereka melakukan sesuatu, dan membandingkannya dengan hal-hal yang sudah saya ketahui
Membaca tentang pola, praktik terbaik, dan kemudian memeriksa barang lama saya dan menerapkan pola itu jika perlu
Memasangkan pemrograman
Tidak setuju dengan semua yang dikatakan Joel. ;)
sumber
Memutuskan TO menjadi 'Jack-of-all-Trades'
Cukup awal dalam karir saya, saya adalah seorang ahli dengan database dan bahasa pemrograman tertentu. Sayangnya, basis data itu kehilangan 'perang basis data', dan saya menemukan bahwa pilihan karier saya ... terbatas. Setelah itu saya secara sadar memutuskan bahwa saya tidak akan pernah membiarkan diri saya menjadi seperti itu lagi. Jadi saya mempelajari semua yang saya bisa dapatkan: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL, dll. Apa pun alat dan teknologi yang baru atau tidak biasa, saya menjadi 'go-to-guy' - "Tanya Craig, jika dia tidak mengetahuinya, dia akan mempelajarinya." Sebagai hasilnya, saya telah mengerjakan semua jenis proyek, dari sistem tertanam untuk telemetri lingkungan hingga sistem komando dan kontrol untuk pertahanan rudal.
Satu-satunya masalah yang pernah saya miliki adalah dengan perusahaan yang menuntut saya untuk menjadi spesialis, ketika spesialisasi saya menjadi generalis. [EDIT: Juga dikenal sebagai Polymath atau Renaissance Man atau multi-spesialis. ]
Sesuatu yang perlu diingat ... apa paruh pengetahuan di teknologi tinggi? Itu sesuai dengan Hukum Moore: setengah dari semua yang Anda tahu akan usang dalam 18-24 bulan. Seorang ahli yang memilih disiplin yang salah dapat dengan mudah dirusak oleh pers teknologi; seorang generalis hanya perlu menambahkan lebih banyak keterampilan dan mengingat pelajaran masa lalu dalam menerapkan keterampilan itu.
sumber
Saya selalu menganggap diri saya sebagai programmer yang sangat hot-shot. Kemudian seorang pria baru, memanggilnya Aaron, dipekerjakan di tim kami. Aaron jelas jauh lebih baik daripada saya di sebagian besar wilayah. Dia juga lebih muda dariku. Dia menyadarkan saya bahwa saya belum banyak membaik dalam beberapa tahun terakhir. Saya adalah seorang hacker ad-hoc, dan yang biasa-biasa saja pada saat itu.
Ini mengingatkan saya untuk secara sadar mencoba memperbaiki diri dan terutama kualitas kode yang saya tulis.
Aaron menuntun saya untuk belajar banyak hal. Dia mengajari saya bagaimana sebagian besar kode yang saya tulis harus dipelihara dan diperpanjang setidaknya untuk beberapa tahun, jadi saya harus menulis kode dengan itu dalam pikiran. Saya harus menulis tes otomatis untuk kode saya. Aaron selalu berbicara tentang bagaimana saya seharusnya tidak berhenti pada versi kerja pertama, tetapi refactor dan perbaiki sampai kode tersebut elegan. Saya telah menemukan bahwa bahasa dan alat yang saya gunakan memiliki banyak ruang untuk perbaikan.
Hal terpenting yang saya pelajari dari Harun adalah tidak pernah berhenti belajar.
Setelah beberapa tahun, Aaron meninggalkan perusahaan. Saya merasa kosong. Tahun-tahun terakhir bersamanya telah mengangkat saya ke tingkat keterampilan yang sama sekali baru, dan saya menyadari saya sekarang jauh lebih baik daripada anggota tim lainnya. Mereka masih menulis kode yang buruk, dan melakukan kesalahan yang sama seperti sebelumnya. Saya mencoba mengajar mereka, tetapi mereka tidak tertarik untuk belajar. Bahkan, mereka jengkel karena seseorang akan begitu sombong untuk memberi tahu mereka kesalahan apa yang mereka lakukan.
Jadi, beberapa bulan kemudian, saya meninggalkan perusahaan juga. Saya pindah ke perusahaan yang lebih kecil dengan tim yang sangat berbakat. Semua orang di sana ingin belajar lebih banyak, dan saya menyukainya.
Aku senang bertemu dengan Harun. Tanpa dia, saya mungkin masih akan bekerja di perusahaan lama dengan geng lama, tidak pergi ke mana-mana, dan terlalu memikirkan diri sendiri.
sumber
Dua hal:
Menulis kode sangat mudah; setiap orang yang saya kenal bisa melakukan itu. Tetapi membaca kode orang lain dan mencari tahu apa yang dilakukannya adalah dunia yang sama sekali baru bagi saya.
sumber
Kunjungi gym secara teratur.
Serius, otak saya bekerja jauh lebih baik ketika saya bugar. Masalah menjadi lebih mudah dan tidak terlalu berat, bermain-main jauh lebih sedikit dari godaan, dan bekerja melalui hal-hal langkah demi langkah tidak tampak seperti tugas yang sulit.
sumber
Pemrograman Bekerja pada proyek yang menarik. Tidak ada yang seperti masuk dan mengerjakan hal-hal. Terutama di bawah tekanan. Saya selalu memberi tahu siapa pun yang bertanya kepada saya bagaimana memprogram - temukan saja proyek keren (bahkan jika Anda harus menebusnya) dan kerjakan.
sumber
Mengambil pekerjaan paruh waktu mengajari siswa CS di universitas saya. Ini benar-benar memaksa Anda untuk memahami sesuatu pada tingkat yang sama sekali berbeda ketika Anda harus menjelaskannya kepada orang lain.
sumber
Saya penggemar berat sistem "belajar satu bahasa pemrograman setiap tahun". Satu tahun memberi Anda cukup waktu untuk melewati bias "oke, saya tahu sintaksnya, jadi sekarang saya tahu bahasa", dan memaksa Anda untuk melangkah lebih jauh dan memahami apa yang bermanfaat dalam bahasa itu, dan program dalam gaya yang berasal dari bahasa itu (maksud saya, Anda tidak berakhir menulis aplikasi java menggunakan sintaksis Ruby). Setiap bahasa akan mengubah cara Anda berpikir tentang pemrograman - saya tahu bagaimana menggunakan rekursi, tetapi berpikir dalam rekursi tidak terjadi sampai saya mengambil kelas pada prolog (saya membayangkan bahasa fungsional seperti ML akan memiliki efek yang sama).
Mulai proyek kesayangan. Persamaan pribadi saya untuk proyek kesayangan yang baik adalah, sesuatu yang Anda miliki dengan + sesuatu yang tidak Anda = aplikasi yang menurut Anda berguna. Sebagai contoh, Migratr (proyek caffeinated-weekend-turn-berkelanjutan saya) dimulai dengan "Saya tahu c #, tapi saya tidak pernah mengkodekan terhadap web API. Dan saya ingin memindahkan semua foto saya ke Zooomr". Itu bisa saja dengan mudah "Saya sudah mengkodekan terhadap API web sebelumnya, tapi saya tidak tahu C #"
Mempublikasikan proyek kesayangan Anda merupakan pengalaman pendidikan yang luar biasa. Tiba-tiba semua hal praktis tidak ada yang mengajarkan tetapi semua orang seharusnya tahu (bagi saya itu sedang menyiapkan sistem pengujian Anda sendiri, mendapatkan hasil maksimal dari sistem kontrol versi, bagaimana mengatur kecepatan diri sendiri ketika tidak ada orang lain yang menetapkan tenggat waktu Anda, bagaimana berinteraksi dengan Anda pengguna dan bagaimana mengetahui kapan harus mengatakan "tidak" untuk menampilkan permintaan), semua hal itu muncul ke permukaan dan memaksa Anda untuk mendidik diri sendiri pada tingkat yang sebelumnya tidak Anda lakukan - setidaknya tidak dengan membaca flamewars di dzone dengan iseng tentang pro / kontra dari cara "foo" vs "bar" dalam melakukan sesuatu.
Melakukan dua hal ini mencakup kedua ujung spektrum. Mempelajari bahasa baru akan membuat Anda menjadi pembuat kode yang lebih baik. Proyek peliharaan akan membuat Anda menjadi pengembang yang lebih baik: P
sumber
Diajarkan diriku majelis. Apakah itu pada chip 6502 lama ketika saya berusia 13? 14? Terlalu lama. Tapi saya tidak bisa memikirkan apa pun yang akan meningkatkan pengembangan Anda lebih dari sekadar turun ke tingkat bit.
Unit pembelajaran memberi Anda wawasan tentang cara komputer 'berpikir' pada tingkat yang pada dasarnya lebih rendah, dan keanggunan pada tingkat ini mengejutkan ... tidak ada gerakan yang sia-sia, tidak ada 'pembuangan' data. Berkembang di tingkat ini akan mengajarkan Anda efisiensi dan mengasah kemampuan berpikir kritis dan logika Anda. Ini juga akan menyembuhkan Anda dari kebiasaan buruk yang Anda miliki dengan cukup cepat!
Chip 65xx memiliki tiga register (akumulator, X, dan Y) dan tidak ada instruksi level mesin untuk dikalikan atau dibagi. Saya ingat coding rutin untuk menghitung kerusakan pertempuran, melihat-lihat buku, dan tiba-tiba menyadari bahwa saya harus menulis perpustakaan matematika saya sendiri. Menghabiskan beberapa minggu mencoret-coret 1 dan 0 di seluruh buku catatan saya, mencoba mencari tahu apa yang sebenarnya 'membagi' dan 'tempat desimal'.
Saya telah mempelajari C ++, pascal, .NET, banyak lainnya sejak saat itu ... tetapi tidak satu pun dari mereka yang mengajar saya sebanyak mungkin, membuat saya penasaran, atau membuat saya merasa 'wah' yang perakitan di komodore lama saya lakukan. .
sumber
Melihat kembali hal-hal lama yang saya tulis dan menyadari betapa buruknya mereka.
sumber
Baca
Cukup kembangkan selera membaca.
sumber
Pemrograman
Serius, ada buku, ada kode katas, ada situs seperti ini, tapi saya percaya bahwa cara terbaik untuk meningkatkan sebagai pengembang adalah bekerja pada proyek nyata, dengan pelanggan yang berubah-ubah dengan persyaratan nyata, selalu berubah dengan kebutuhan nyata dengan rekayasa nyata masalah. Tidak ada pengganti untuk pengalaman.
sumber
Saya pikir hal terpenting yang dapat Anda lakukan adalah melakukan upaya sadar untuk meningkatkan. Tidak ada peluru perak, Anda harus terus mencari sumber informasi baru, pengalaman baru, dan lebih banyak latihan.
Dan hal terpenting kedua, pikirkan apa yang Anda lakukan, mengapa Anda melakukannya, dan bagaimana Anda bisa melakukannya dengan lebih baik. Hal yang sama dengan proyek sebelumnya. Lihatlah kembali apa yang telah Anda lakukan, dan bagaimana Anda dapat melakukannya secara berbeda sekarang. Pikirkan tentang apa yang bisa dilakukan dengan lebih baik, atau di mana Anda masih bisa meningkatkannya.
Saya melihat dua contoh hebat dari ini di tempat kerja setiap hari. Saya memiliki satu rekan kerja yang suka belajar, dan ingin menjadi pengembang terbaik yang dia bisa. Dia menggunakan downtime untuk membaca blog, membaca buku, mendiskusikan teknik pemrograman, dan mengajukan banyak pertanyaan. Dia juga sangat meningkat dalam satu tahun terakhir. Rekan kerja lain melakukan pekerjaannya, dan melakukannya dengan cukup baik. Tapi hanya itu yang dia lakukan. Dia berpegang teguh pada apa yang dia ketahui, tidak melakukan banyak upaya untuk meningkatkan, tidak bekerja pada proyek apa pun di luar yang sudah ada, dan setelah 4 tahun, dia memiliki keahlian yang sama persis dan kemampuan pemrograman yang dia miliki ketika saya bertemu dia.
sumber
Banyak orang menyarankan menulis kode. Saya harus mengatakan bahwa membaca kode orang lain jauh lebih bermanfaat.
sumber
Dipasangkan dengan orang-orang yang sangat beragam dan memiliki pendapat
sumber
Hal-hal dasar yang membantu saya sebagai programmer:
Mengetik untuk seorang programmer sangat penting. Setiap orang memiliki rekan kerja "programmer" yang mengetik tepat menggunakan dua jari dan harus melihat keyboard untuk semuanya. Tidak menyenangkan. Belajar untuk menyentuh tipe memberikan dorongan besar untuk produktivitas Anda sebagai seorang programmer.
Dan jika Anda tidak bertanya, tidak ada yang akan memberi tahu Anda.
sumber
Berkontribusi / berpartisipasi dalam proyek-proyek open-source sejauh ini merupakan hal terbesar bagi saya.
sumber
Anda dapat membaca semua buku, kode, dan proyek sumber terbuka yang Anda suka, tetapi Anda perlu memahami aspek pengguna akhir dari pengembangan perangkat lunak. Anda harus keluar dari ruang gema. Jadi saya akan membahas beberapa poin non-teknis yang akan membantu karir teknis Anda.
Menjauh dari keyboard dan berinteraksi dengan pengguna akhir dan lihat, melalui mata mereka, bagaimana mereka menggunakan perangkat lunak. Pengguna akhir biasanya tidak teknis, sehingga mereka melihat perangkat lunak sebagai karya ajaib, sementara Anda melihat perangkat lunak sebagai serangkaian langkah logis. Kedua dunia ini sangat berbeda. Jadi apa yang tampaknya mudah dan logis bagi Anda mungkin tampak samar dan menakutkan bagi orang lain.
Tes tes tes. Banyak perangkat lunak yang saya lihat di perusahaan besar menggunakan test case. Sial, mereka menggunakan JUnit, xUnit, dan semua bahasa pengujian unit lain di luar sana. Tetapi masalah yang saya lihat adalah kebanyakan programmer tidak pernah melihat seperti apa software mereka di Production. Pelajari bagaimana pengguna (atau sistem, jika ini adalah pekerjaan batch) berinteraksi dengan aplikasi, perpustakaan, atau antarmuka Anda untuk mencari tahu informasi menjijikkan seperti apa yang mereka berikan. Ini akan membantu Anda menghasilkan kasus pengujian yang baik dan berhenti dengan asumsi program Anda akan selalu diberi kumpulan data yang benar.
sumber
Skema Belajar.
sumber
Menulis kode dan banyak lagi.
sumber
Belajar ekspresi reguler.
sumber
Bersaing dalam kontes Algoritma TopCoder .
sumber
Go all out: buat proyek Anda sendiri, tonggak pencapaian Anda, sumber daya Anda, dependensi, persyaratan, dan rencana pengujian. Ini akan memaksa Anda tidak hanya untuk meningkatkan keterampilan pemrograman Anda untuk beroperasi dalam parameter tertentu, tetapi juga akan berfungsi untuk menyoroti dengan tepat di mana Anda paling perlu untuk meningkatkan. Buat pembaruan rutin tentang kemajuan Anda, baik melalui blog atau lebih banyak pembaruan proyek formal, sehingga Anda dapat melihat dengan tepat di mana Anda pernah dan ke mana Anda ingin pergi.
sumber
Keluar dari pekerjaan terakhir saya.
sumber
Saya pikir terus-menerus mempertanyakan apa yang Anda lakukan adalah hal terbesar. Jangan pernah berpikir bahwa kode Anda sempurna, selalu berusaha untuk memperbaikinya.
Sepertinya saya sudah 2 atau 3 kali ketika saya pikir kode saya sempurna, kemudian menyadari bahwa saya masih harus menempuh jalan panjang.
Saya kira hal terbesar adalah ketika saya mulai melihat kode saya sendiri seperti yang dikonsumsi oleh programmer lain dan bukan mesin. Sangat mudah untuk menulis kode yang dapat diproses mesin Anda, tetapi sulit menulis kode KERING, dapat dimengerti.
Dan saya tidak bermaksud hanya memahami "Apa yang dilakukan garis ini", maksud saya membuatnya sepele untuk mencari tahu "Bagaimana kelas ini cocok dengan semua kelas lainnya" sementara membuat antarmuka kelas terbentuk dengan sangat baik sehingga hampir tidak mungkin untuk menyalahgunakannya.
sumber
Mereka mengatakan bahwa 70% dari kode yang baik adalah pengecekan dan penanganan kesalahan. Ketika saya mulai pemrograman seperti itu, kode saya menjadi jauh lebih baik. Memikirkan apa yang salah dan kemudian menanganinya langsung telah membuat perbedaan besar. Ini terasa seperti melakukan semua yang memeriksa hanya mendapatkan di jalan untuk mendapatkan kode dan berjalan, tetapi mempersingkat waktu dari awal sampai akhir dengan faktor 2 sampai 4.
sumber
Keterampilan coding saya meningkat banyak ketika saya mulai bertanya-tanya sebelum mengimplementasikan sesuatu bagaimana saya akan mendokumentasikan hal ini .
"Hal" di sini harus memiliki semua kemungkinan rincian. Dari metode hingga seluruh produk. Misalnya pada tingkat metode, ia mencegah menambahkan metode di API yang tidak cocok, atau tidak jelas, sebelum benar-benar menulisnya. Dan jika saya benar-benar perlu menerapkan metode yang tidak dapat saya dokumentasikan (dengan mudah), itu pertanda ada masalah desain di suatu tempat ...
Secara otomatis, sikap " jika saya tidak bisa menjelaskannya, saya tidak menulisnya " menyaring kode buruk dan sebaliknya begitu saya tahu cara mendokumentasikan sesuatu dengan benar, itu menjadi lebih mudah dan lebih bersih untuk diterapkan.
sumber
Teruslah belajar dan latih apa yang Anda pelajari.
Melalui:
Proyek Pribadi: Sejak saya mulai pemrograman saya telah melakukan proyek pribadi. Mulai dari permainan kecil, pemrosesan gambar, steganografi, menerapkan spesifikasi tipe file, menerapkan berbagai protokol dari awal, atau mengimplementasikan berbagai program dari waktu ke waktu.
Membaca buku: Saya memutuskan untuk membaca dan mengikuti berbagai buku di waktu luang saya. Ada banyak buku yang ditulis dengan baik oleh para ahli hanya duduk menunggu untuk dibaca. Kedalaman yang Anda dapatkan dari sebuah buku tidak tertandingi dengan misalnya membaca berbagai posting forum.
sumber
Ini biasanya urutan kronologis saya untuk mempelajari teknologi baru:
Secara teratur membaca blog yang bagus (Atwood, Martin Fowler, dll.), Tetap update dengan berita teknologi, Ikuti hal-hal tentang teknologi baru yang menarik. Langkah-langkah ini akan membuat saya memutuskan jika saya menemukan sesuatu yang menarik untuk dijelajahi lebih lanjut.
Baca buku yang tepat atau sumber daya lainnya untuk mempelajari level Anda (misalnya untuk pemula jika Anda ingin mempelajari pola desain, saya sarankan 'Head First Design Patterns'). Saya juga memiliki preferensi khusus untuk buku .
Luncurkan satu atau dua proyek mainan menggunakan hal yang saya pelajari. Saya tidak khawatir tentang kegunaan proyek ini. Niat saya hanyalah untuk mengeksploitasi pembelajaran saya. (mis. Proyek kalkulator untuk OOP akan baik-baik saja)
Saya akan melihat apakah saya bisa menggunakan barang-barang di tempat kerja . (mis. Meskipun kami tidak menggunakan subversi di tempat kerja, saya menggunakannya sebagai repositori lokal saya, saya menggunakan Ruby untuk tugas yang seharusnya terlalu monoton, dan memakan waktu)
Ini adalah bagian terbaik yang saya pikir kebanyakan orang lewatkan. Sesi berbagi pengetahuan. Berikan satu atau dua sesi kepada sesama anggota tim misalnya. Saya percaya mengajar adalah salah satu cara terbaik untuk benar-benar mempelajari teknologi. Saya menjamin tingkat pemahaman Anda tentang teknologi akan menjadi multi-lipat, apakah audiens Anda mendapatkannya atau tidak. :-)
sumber
Meretas beberapa proyek sumber terbuka selama beberapa bulan; semakin besar semakin baik. Ketika Anda berinteraksi dengan beberapa orang yang memiliki pendapat sangat tinggi, secara geografis beragam yang tidak mengenal Anda, Anda tidak dapat membantu tetapi belajar dari kesalahan Anda jauh lebih cepat - saya pikir itu adalah faktor penghinaan tertentu. Plus, jika Anda mengidentifikasi satu atau dua orang yang benar-benar pintar, maka Anda dapat memperoleh wawasan yang berharga, jika bukan pengetahuan murni, dari mereka.
sumber