Apa hal paling efektif yang Anda lakukan untuk meningkatkan keterampilan pemrograman Anda?

876

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.

Oded
sumber
18
Berlatih, berlatih, berlatih. Dan jangan pernah puas dengan hal pertama yang terlintas dalam pikiran.
Mark Ransom
2
+1 untuk Mark Ransom ... Kesulitan datang ketika Anda masih belum puas dengan hal ke-100 yang muncul di benak Anda!
Stimul8d
5
Tidak membuang waktu saya di situs Programmer Stack Exchange membantu saya meningkatkan keterampilan pengkodean saya.
Pekerjaan
3
@ Mark Trapp bagaimana ini tidak konstruktif?
sayap kanan
1
@WTP - Baca deskripsi. "Pertanyaan ini tidak cocok dengan format tanya jawab kami." - sebagai seseorang yang menanyakan pertanyaan ini, saya setuju. Itu diminta dalam waktu yang lebih santai.
Oded

Jawaban:

753

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. ;)

cranley
sumber
41
Saya tahu ini kelihatannya benar-benar serampangan dan berpotensi melecehkan reputasi, tetapi jika Anda memisahkan item-item itu menjadi satu per jawaban, orang-orang dapat memilih mana yang mereka setujui, memungkinkan "solusi" suara akhir yang lebih spesifik dari pertanyaan ini.
117
Tonton bagaimana orang pintar menangani kesalahan - saat itulah saya belajar paling banyak dari mereka
82
jika ini adalah daftar tanpa urutan tertentu, bukankah seharusnya itu adalah daftar yang tidak terurut dan bukan yang dipesan? : P
Jon W
3
Saya setuju dengan mmyers - hanya karena Anda tidak setuju dengan seseorang tidak berarti Anda mengabaikannya. Sebenarnya, sebaliknya - untuk tidak setuju dengan mereka, Anda sebenarnya memperhatikan mereka.
Cristián Romo
15
Saya tidak gerobak tidak setuju dengan semua yang dikatakan Joel, saya pikir sebagian besar waktu dia memiliki beberapa hal menarik untuk dikatakan. Komentar saya adalah lidah di pipi. Ada banyak hal yang saya setujui ketika berbicara tentang Joel, tetapi sekitar sebulan sekali dia membuat saya menggelengkan kepala dan bertanya, "Apa? Apakah kamu serius?". Yang saya suka, karena saya menemukan hal-hal yang paling menantang yang memaksa saya untuk benar-benar memeriksa posisi saya dan apa yang saya yakini.
557

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.

Craig Trader
sumber
224
"Jack dari semua perdagangan, tidak menguasai apa pun, meskipun seringkali lebih baik dari pada menguasai satu." -Adam Savage
jms
9
Nasihat luar biasa, dipilih. "Teknologi yatim" di masa lalu saya adalah Atari 8-bit saya, yang hilang dari C64. Saya mencapai kesimpulan yang sama - mengutip Heinlein, "spesialisasi adalah untuk serangga."
17
Selalu ada pengorbanan, dan hanya ada 86.400 detik dalam sehari - Anda harus memutuskan bagaimana Anda ingin menghabiskannya. Dalam kasus saya, saya telah memilih untuk menghabiskan waktu ekstra (di atas dan di luar jam 'kerja' saya) untuk mempelajari hal-hal yang saya pikir menarik atau akan diminati di masa depan; Anda harus membuat pilihan sendiri.
Craig Trader
74
"Spesialisasi untuk serangga." - Heinlein
Kelly S. Prancis
31
Di mana lencana "Generalis" Anda? ^^
Arnis Lapsa
459

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.

Ville Laurikari
sumber
54
Itu biasanya bekerja dua arah. Saya telah datang ke beberapa perusahaan sekarang sebagai 'Aaron' dan menemukan bahwa begitu saya mendapatkan coders lain diberi energi bahwa mereka mulai memberi saya lari untuk uang saya dan mendorong saya untuk melipatgandakan upaya saya sendiri. Pos yang bagus!
28
+1 untuk "Aaron selalu berbicara tentang bagaimana saya seharusnya tidak pernah berhenti pada versi kerja pertama, tetapi refactor dan sempurnakan sampai kodenya elegan"
17
"tidak pernah berhenti di versi kerja pertama" ??? - kapan Anda harus menyelesaikan pekerjaan Anda? :)
4
Saya berusaha menjadi Harun, kadang berhasil, tapi kadang saya salah. "Mereka yang tidak bisa belajar dari sejarah ditakdirkan untuk mengulanginya." Adalah baik untuk menjaga pikiran kita terbuka terhadap ide-ide baru, tetapi buruk untuk mendengarkan n00b atas mereka yang telah membuat kesalahan untuk Anda. Setiap orang membutuhkan skeptisisme, karena kita belajar dari mengajukan pertanyaan tentang diri kita sendiri dan orang lain.
27
Masalahnya adalah terlalu banyak orang mengira mereka "Aaron"
cinqoTimo
257

Dua hal:

  1. Baca kode yang ditulis oleh orang yang berbeda.
  2. Tulis dokumentasi untuk kode yang ditulis oleh orang lain.

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.

Swati
sumber
42
DAN salah satu cara terbaik untuk mempelajari apa yang TIDAK boleh dilakukan :)
AviD
9
Anda dapat melihat bagaimana mereka melakukan sesuatu. Mungkin mereka melakukannya dengan cara yang lebih baik daripada Anda?
4
Saya harus menggali ke dalam proyek yang benar-benar tua dan benar-benar tidak berdokumen, mendokumentasikannya, memperbaiki beberapa bug di dalamnya, dan port ke sistem baru. Saya belajar banyak, dan tidak semuanya tidak bisa saya lakukan. Padahal saya memang belajar nilai komentar.
Dan saat Anda sedang menulis dokumentasi, mungkin menulis beberapa test case unit untuk itu (jika tidak ada). Kemudian Anda juga akan tahu cara menggunakan kode.
dhable
Begitu benar, itu adalah bagian tersulit dari pekerjaan saya untuk waktu yang lama.
199

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.

Ken
sumber
30
Fakta menyedihkan bahwa mayoritas orang tidak berolahraga atau bahkan melakukan peregangan sama sekali secara teratur adalah masalah besar di dunia saat ini.
Sneakyness
5
Saya akan memperpanjang ini, jika saya bisa, ke sejumlah perjalanan fisik. Kadang-kadang, ketika saya tidak melakukan banyak pekerjaan manual untuk sementara waktu, saya mulai mendambakan kelelahan fisik. Ini agak baru ketika Anda sudah terbiasa dengan kekeringan mental dan membantu Anda keluar ketika Anda hanya memikirkan diri Anda sendiri dalam lingkaran.
Stimul8d
1
ya itu masalah besar hari ini. kami tidak punya waktu terutama di pakistan di mana jam kerja lebih banyak
maz3tt
2
Memberi +1 pada saya sebagai pengingat bagi diri saya untuk lebih banyak berolahraga.
SingleNegationElimination
Saya menemukan bahwa olahraga adalah motivator yang hebat - bagi saya, itu adalah bola basket.
Adel
181

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.

pengguna13276
sumber
4
Saya setuju. Membuat tangan saya kotor dalam suatu proyek mungkin merupakan kontributor terbesar bagi peningkatan saya. ; )
Mike Grace
1
Persis. Cara terbaik tunggal untuk menjadi pembuat kode yang lebih baik adalah dengan kode. Anda dapat mempelajari semua yang Anda inginkan dari buku, podcast, dan rekan kerja, tetapi Anda harus menerapkannya sebelum Anda benar-benar memahaminya. Kode lebih banyak, dan kode lebih banyak hal berbeda. Karena Anda tidak belajar banyak dari mengulangi trik lama yang sama.
Memilih proyek yang menantang dan menarik untuk dilakukan. Saya pikir perjuangan untuk mengatasi di luar zona nyaman Anda benar-benar mempercepat keterampilan Anda. Mereka tidak pergi ke bulan karena itu mudah.
Kim Jong Woo
172

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.

Bill the Lizard
sumber
1
Saya dapat menjamin itu.
1
Seorang instruktur di universitas memberi tahu saya tentang pembukaan ketika saya masih mahasiswa. Saya tinggal selama hampir satu tahun (paruh waktu) setelah saya lulus.
Bill the Lizard
29
Seperti yang ditulis Douglas Adams dalam "Agen Detektif Holistik Dirk Gentley": "cara terbaik adalah mencoba dan menjelaskannya kepada orang lain. Itu memaksa Anda untuk mengatasinya dalam pikiran Anda. semakin Anda harus memecah hal-hal menjadi ide-ide yang lebih dan lebih sederhana. "
2
Terlalu benar Mengajar fotografi menjadikan saya seorang fotografer yang lebih baik. Tidak banyak coder tho :(
CAD bloke
9
kualitaso fiunt, dan homines dum docent discunt - Seneca
135
  1. 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).

  2. 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

callingshotgun
sumber
Saya hanya bisa setuju; "proyek kesayangan dalam bahasa yang sebelumnya tidak dikenal" adalah baik, saya dapat mengonfirmasi
Saran yang sangat bagus untuk mempelajari sesuatu yang setengah akrab.
Saran bagus "sesuatu yang Anda punya + pengalaman yang tidak Anda miliki"! Terima kasih
sica07
Saya butuh hewan peliharaan sekarang.
Adel
118

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. .

snogfish
sumber
16
Saya harus memilih Anda hanya untuk membawa kembali kenangan indah! Mungkin saya sedikit menangis :)
Charlie Flowers
3
Saya masih secara mental menerjemahkan C / C ++ ke dalam bahasa assembly 68K. Sungguh menakjubkan bagaimana hal itu membantu Anda menulis kode efisien untuk platform apa pun.
Bob Murphy
1
Ah, 6502, membawa kembali kenangan indah. Saya belajar banyak dengan assembler pada chip ini.
5
SETIAP siswa pemrograman harus memiliki paparan mendalam kepada assembler di awal pendidikan mereka!
2
Saya melakukan hal yang sama seperti anak muda. Itu benar-benar mengajarkan bagaimana komputer bekerja, lebih dari bahasa tingkat tinggi yang pernah ada.
CAD cowok
110

Melihat kembali hal-hal lama yang saya tulis dan menyadari betapa buruknya mereka.

Grant Johnson
sumber
Saya kedua itu ... Saya bahkan tidak bisa membaca beberapa barang lama saya.
Unkwntech
28
Ketika saya memeriksa barang-barang lama saya, saya mendapat dorongan yang hampir tak tertahankan untuk menghapus seluruh file. Terkadang seluruh direktori.
Christopher Mahan
+1 untuk objektivitas. Melihat kode lama Anda tidak akan memberi tahu Anda cara meningkatkan, hanya jika Anda telah meningkatkan dan bagaimana - atau sebaliknya, jika Anda belum memperbaiki.
Saya telah melakukan ini - saya menulis seluruh penerjemah naskah ini dalam VB6, saya menulisnya selama dua tahun; itu bisa membuat jendela, menangani acara mereka, dll. Itu tumbuh begitu besar dan di luar kendali sehingga saya tidak bisa lagi menambahkannya tanpa merusak segalanya. Itu adalah hal terakhir yang saya tulis sebelum saya menyerah pemrograman untuk buku tentang pemrograman. Sekarang saya jauh lebih baik Fiuh . Membaca kembali proyek monster itu membuat saya menyadari seberapa jauh saya telah datang
Carson Myers
3
@Christopher Mahan: Dan pada kesempatan yang sangat buruk, seluruh volume.
Thanatos
93

Baca

  • buku, bukan hanya situs web
  • untuk pengembangan diri, bukan hanya untuk proyek terbaru
  • tentang meningkatkan perdagangan Anda, bukan hanya tentang teknologi terbaru
  • baca kode, bukan hanya yang sedang Anda kerjakan.

Cukup kembangkan selera membaca.

lamcro
sumber
2
Ditambah lagi, 1. Aku mulai bertanya-tanya di mana pilihan ini.
Thanatos
87

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.

Fishtoaster
sumber
8
Jika Anda ingin menjadi lebih baik dalam sesuatu, tidak ada yang lebih baik daripada melakukannya.
Jeff Siver
4
+1 - Ini mengingatkan saya pada Finding Forrester : "Kunci pertama untuk menulis adalah ... untuk menulis"
Wizard79
2
Tidak ada jawaban lain. Anda tidak dapat benar-benar mengatakan Anda tahu apa yang Anda lakukan sampai Anda telah menulis setumpuk kode yang tidak sepele dan terjebak dengan itu melalui beberapa iterasi produk dengan para pelaku bisnis + pelanggan. Anda tidak / benar-benar / tahu betapa baiknya kode Anda sampai tiba saatnya untuk mengubahnya agar memenuhi persyaratan baru.
blucz
1
Jelas hal terbaik yang saya lakukan untuk memperbaiki pemrograman adalah mendapatkan pekerjaan.
Matt Ellen
1
Dugaan saya adalah bahwa pertanyaannya menyiratkan "selain pemrograman" ...
UncleZeiv
81

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.

Christopher Cashell
sumber
7
Dan dia mungkin kurang memiliki keterampilan karena beberapa pengetahuannya menjadi usang ..
72

Banyak orang menyarankan menulis kode. Saya harus mengatakan bahwa membaca kode orang lain jauh lebih bermanfaat.

baudtack
sumber
11
perpaduan keduanya sebenarnya yang paling cocok untuk saya; membaca kode orang lain dan refactoring untuk membuatnya lebih mudah dibaca adalah latihan yang bagus
Membaca kode yang bagus tentu saja ... dan memahaminya. Dan memodifikasinya, atau menulis tes untuk itu.
4
Membaca kode adalah perantaraan, tetapi itu tidak benar-benar masuk ke dalam kulit Anda sampai Anda benar-benar melakukannya.
Anda harus MELAKUKANNYA untuk mempelajarinya. Ini seperti mengendarai sepeda ...
70

Dipasangkan dengan orang-orang yang sangat beragam dan memiliki pendapat

Perbatasan Heath
sumber
Satu-satunya "pengalaman" dengan pemrograman pasangan yang saya miliki adalah saat-saat saya harus membantu sesama rekan kerja. Saya memprogram jauh lebih bahagia ketika ada orang lain di sana bersama saya untuk membahas masalah yang saya hadapi dan bagaimana saya akan menyelesaikannya.
mhitza
67

Hal-hal dasar yang membantu saya sebagai programmer:

  • Belajar Mengetik Sentuh.
  • Belajar mengatasi rasa malu dan bertanya.

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.

Nasir
sumber
15
Pengetikan Sentuh adalah keterampilan yang paling penting. Kejahatan terbesar dalam pemrograman telah dilakukan oleh mereka yang mencoba menyelamatkan beberapa penekanan tombol.
5
Ini mengalahkan semua jawaban lain, menurut saya. Mengetik menghemat banyak waktu, yang berarti Anda dapat menghabiskan lebih banyak waktu memasukkan kode dan mencobanya. Ini berarti Anda dapat mengetikkan contoh-contoh dalam sebuah buku alih-alih hanya menganggukkan kepala, melanjutkan, dan melupakan. Mencoba menjadi seorang programmer dengan perburuan-dan-peck adalah seperti mencoba menjadi pianis konser dengan menggelitik gading dengan kaki Anda.
Kyralessa
2
Saya telah melihat orang menekan 15 panah untuk memulihkan perintah 2 karakter. Sedih sekali. Ini seperti beberapa anak tanpa IDE ... benar-benar tidak kompeten.
7
Sebaliknya di sini, saya tidak pernah belajar menyentuh tipe. Saya mencoba belajar sekali, tetapi segera mulai terasa sakit di pergelangan tangan saya, meletakkannya di atas meja untuk mengasumsikan posisi tangan yang tepat memberi tekanan pada terowongan karpal yang sangat penting. Jadi saya pikir saya memilih mengetik setidaknya memiliki beberapa keunggulan ergonomis. Dan saya sudah melakukannya begitu lama, saya hanya melirik keyboard sesekali, jadi tidak ada kerugian produktivitas nyata. Lagipula, sebagian besar waktu saya tidak dihabiskan untuk memasukkan karakter, menghabiskan waktu membaca kode dan mencari cara terbaik untuk memecahkan masalah saat masalah itu datang.
Eloff
2
Posisi tangan tidak penting - yang penting adalah Anda dapat mengetik tanpa harus melihat. Di laptop saya, saya tidak mengistirahatkan pergelangan tangan saya.
56

Berkontribusi / berpartisipasi dalam proyek-proyek open-source sejauh ini merupakan hal terbesar bagi saya.

pengguna13643
sumber
53

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.

  1. 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.

  2. 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.

tipikal
sumber
Benar. Anda dapat menguji versi final Anda (hingga sekarang) dengan membiarkan sekelompok orang yang Anda kenal sebagai non-teknis mencobanya, dan dengarkan komentar mereka mengenai hal itu (pastikan untuk memilih yang tidak akan mengatakan "Ini bagus!", Karena ini jelas tidak membantu Anda sedikit pun.)
48

Skema Belajar.

mbishop
sumber
Yup, itu juga yang besar bagiku. Juga penting adalah pengetikan sentuh dan pemrograman pasangan.
46

Menulis kode dan banyak lagi.

Oded
sumber
Kita semua mulai menulis kode jelek. Jika Anda cukup menulis dan Anda mengerjakannya, Anda akan menjadi lebih baik. Ulasan kode membantu, tetapi cara terbaik adalah meninjau kode Anda sendiri.
Membaca kode dan banyak lagi.
Stefan
3
Membaca dan menulis banyak kode ... Open source adalah suatu anugerah bagi kami;)
Oded
45

Belajar ekspresi reguler.

Vhaerun
sumber
Baru saja melakukannya empat bulan lalu ketika saya mulai belajar perl sendiri! Kemampuan saya untuk menggunakan vim dan unix di langit umum meroket! Luar biasa.
sixtyfootersdude
Ekspresi reguler tidak hanya berguna, tetapi juga membuat Anda berpikir dengan cara yang berbeda.
Tikhon Jelvis
+1. Sangat setuju. Saya terkejut membuat orang terkejut cukup sering melakukan hal-hal yang cukup mendasar dalam vi, sed atau grep.
39

Bersaing dalam kontes Algoritma TopCoder .

Paul Reiners
sumber
14
Saya menemukan TopCoder sedikit bermasalah. OK, itu membuat Anda lebih baik dalam memikirkan algoritma, tetapi Anda dipaksa untuk bekerja dengan gaya buruk (semua kode dalam satu kelas) dan di bawah tekanan waktu, jadi Anda mungkin tidak akan berkomentar dan menguji. Mungkin Project Euler adalah pilihan yang lebih baik.
3
Anda tidak dipaksa bekerja dengan gaya buruk; Anda dapat memiliki kelas sebanyak yang Anda suka. Selain itu, Anda memiliki tes yang lebih baik jika Anda ingin lulus secara konsisten, karena solusi yang gagal casing tepi tunggal mendapat poin nol.
2
@hstoerr - belum lagi fakta bahwa pesaing dihargai karena membuat kode mereka sulit dibaca (solusi mereka lebih sulit untuk ditantang)
Shane Fulmer
7
(maaf jika ini terdengar menyinggung) Saya menemukan orang-orang yang tidak suka Topcoder (atau kontes serupa lainnya) mencoba untuk menemukan alasan mengapa melakukan itu akan membuat Anda seorang programmer yang mengerikan. Tidak apa-apa jika Anda tidak menyukainya. Tetapi mengarang alasan palsu adalah IMHO tidak membantu. Tidak ada kontestan serius di TC yang sengaja mengaburkan kode (sebenarnya alasan untuk didiskualifikasi jika tertangkap). Saya melihat banyak orang yang tidak bersaing menulis kode buruk sepanjang waktu. Kontes Algoritma tidak bertujuan untuk mengajarkan kebiasaan pengkodean yang baik (belajar dari tempat lain), tetapi mereka bertujuan untuk mengajarkan / mengembangkan sesuatu yang jauh lebih dalam.
MAK
2
TopCoder adalah cara untuk menunjukkan kepada diri Anda seberapa baik Anda bisa menjadi.
38

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.

Magsol
sumber
36

Keluar dari pekerjaan terakhir saya.

mihn
sumber
2
saya juga! (butuh beberapa karakter lagi ...)
6
Jika Anda mau memberi tahu kami alasannya, ini mungkin bahkan merupakan jawaban. ;-)
2
Mendukung proyek yang dibuat dengan inhouse framework (berdasarkan EJB2) bukan ide saya yang menyenangkan. Tidak ada barang baru, hanya omong kosong lama. Dan perspektif dalam pekerjaan baru tidak lebih baik. :(
mihn
Pernah ke sana, melakukan itu.
Allbite
+1 Semoga beruntung mendapatkan pekerjaan yang bukan jalan buntu.
Tomek Szpakowicz
29

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.

Bill K
sumber
29

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.

Hanya siapakah orang-orang ini "mereka" dan di mana "mereka" tinggal?

Harold Bamford
sumber
28

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.

kabado
sumber
28

Teruslah belajar dan latih apa yang Anda pelajari.

Melalui:

  1. 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.

  2. 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.

Brian R. Bondy
sumber
10
+1 untuk menyebutkan buku. Banyak pengalaman tidak bernilai banyak jika itu semua dihabiskan melakukan hal-hal dengan cara yang salah.
mbillard
27

Ini biasanya urutan kronologis saya untuk mempelajari teknologi baru:

  1. 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.

  2. 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 .

  3. 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)

  4. 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)

  5. 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. :-)

rpattabi
sumber
24

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.

rampok
sumber