Berjuang sebagai programmer. Butuh saran [ditutup]

20

Saya telah menjadi pengembang sekarang selama beberapa tahun. Saya cukup bagus dalam apa yang saya lakukan dan dapat "menyelesaikan pekerjaan".

Tapi, ada perbedaan antara "menyelesaikan pekerjaan" dan "melakukan pekerjaan dengan benar". Mari kita gunakan sebuah contoh.

Baru-baru ini saya mengembangkan situs web dari awal. Situs web berjalan dengan baik dan saya tidak punya masalah. Melihat kode itu, saya berpikir bahwa saya bisa melakukannya dengan lebih baik. Saya bisa mengurangi pertanyaan MySQL saya. Saya bisa menggunakan MVC sehingga lebih mudah untuk memperpanjang (memang perlu diperpanjang sekarang).

Saya memutuskan untuk menulis ulang proyek menggunakan CodeIgniter. Saya suka frameworknya. Tapi saya kemudian teralihkan karena untuk mengurangi pertanyaan MySQL saya, saya harus belajar bergabung dengan mahir.

Dan ini masalahnya. Setiap kali saya melakukan pekerjaan dengan benar, saya berada di roda pembelajaran yang konstan. Dan topik-topik seperti gabungan MySQL lanjutan membutuhkan waktu untuk belajar, dan kemudian waktu untuk diterapkan.

Saya tidak bekerja untuk perusahaan. Saya melakukan semuanya sendiri. Jadi saya bayangkan jika saya bekerja sebagai pengembang PHP untuk sebuah perusahaan akan ada tim terpisah yang menangani SQL.

Menjadi solo itu sulit. Dan terkadang, meskipun pengetahuan saya maju, saya mendapati diri saya bertanya, demi pertanyaan. Saya mungkin memiliki banyak kebanggaan dalam pekerjaan saya. Tetapi jika saya harus bekerja untuk perusahaan yang menangani proyek lengkap, saya bisa membayangkan proyek butuh waktu karena saya harus belajar lebih banyak dan lebih untuk memuaskan kebanggaan saya dan untuk memastikan saya melakukan hal-hal "dengan benar".

Saya berencana mendapatkan pekerjaan setelah tahun baru. Saya membutuhkan keamanan pekerjaan. Itulah sebabnya saya menanyakan pertanyaan ini.

Apa saran yang dapat Anda berikan dalam hal pengembangan diri dan peningkatan diri? Haruskah saya mengurangi kekhawatiran? Atau mungkin mencari pekerjaan sebagai pengembang PHP ketika saya tidak akan menangani permintaan SQL secara langsung?

James Guvna Jeffery
sumber
54
jika Anda tidak ingin terus-menerus belajar Anda berada di bidang yang salah
6
@JamesGuvnaJeffery: jika mereka tidak mengizinkan (ada) waktu (sama sekali) untuk belajar selama proyek, saya tidak ingin bekerja di sana karena sebagai pengembang saya akan berhenti meningkatkan diri.
Marjan Venema
3
pekerjaan adalah pembelajaran, mereka tidak memberi Anda waktu ajaib untuk belajar, sebenarnya mereka melakukannya, itu disebut "waktu pribadi Anda". Mereka tidak menyebutnya "on the job training" tanpa alasan. Jika Anda tidak nyaman menjadi pembelajar mandiri dan belajar sepanjang waktu tanpa bayaran, seperti saya katakan, Anda mungkin berada di bidang yang salah.
5
Kode lama seharusnya menyedot. Jangan bunuh diri karena itu; coba untuk meningkatkan dari waktu ke waktu. Menulis ulang proyek yang sedang berjalan tidak masuk akal secara praktis. Klien tidak akan membayar ekstra untuk itu. codinghorror.com/blog/2006/10/…
Ayub
2
Anda tidak mengerti apa yang saya katakan, bekerja untuk sebuah perusahaan adalah PELUANG persis dari apa yang Anda sukai yang Anda sukai. Ini bekerja berdasarkan jadwal seseorang, menggunakan apa yang mereka tentukan dan bagaimana mereka menentukannya dengan tidak ada kompromi dan tidak ada waktu untuk mempelajari hal-hal baru pada waktu mereka dan tidak ada waktu untuk mengimplementasikan hal-hal dalam hal-hal menarik baru yang Anda pelajari dalam waktu pribadi Anda. Ini adalah kenyataan menjadi pengembang perangkat lunak perusahaan. Saya ragu Anda akan berdedikasi pada lingkungan korporat seperti yang Anda katakan Anda terhadap gaya penelitian dan pengembangan eksperimental yang biasa Anda lakukan.

Jawaban:

33

Saran: Jangan takut mempelajari hal-hal baru - Anda membuat Langkah Pertama yang baik dalam mengakui bahwa Anda bisa melakukan lebih baik dan kemudian berusaha untuk mempelajari bagaimana Anda bisa melakukan lebih baik. Ya, itu membutuhkan lebih banyak waktu di depan, tetapi hasilnya biasanya sepadan dalam jangka panjang. Sekarang Anda tahu CodeIgniter, Anda dapat menggunakannya untuk proyek selanjutnya di masa depan. Anda dapat meletakkannya di resume Anda. Sekarang Anda sudah tahu teknik SQL canggih, proyek masa depan Anda akan mendapat manfaat. Jika Anda berhenti belajar, Anda akan mandek.

FrustratedWithFormsDesigner
sumber
21

Apa yang Anda alami terdengar sangat normal bagi saya. Inilah cara kami mengerjakan kerajinan kami dan menjadi lebih baik dan lebih baik dalam apa yang kami lakukan.

grokus
sumber
10

... Saya memutuskan untuk menulis ulang proyek menggunakan CodeIgniter. Saya suka frameworknya. Tapi saya kemudian teralihkan karena untuk mengurangi pertanyaan MySQL saya, saya harus belajar bergabung dengan mahir.

Dan ini masalahnya. Setiap kali saya melakukan pekerjaan dengan benar, saya berada di roda pembelajaran yang konstan. Dan topik seperti bergabung dengan MySQL canggih membutuhkan waktu untuk belajar, dan kemudian waktu untuk mengimplementasikan ...

Baik diberikan di atas saya pikir masuk akal bagi Anda untuk fokus pada peningkatan kemampuan Anda untuk merencanakan ke depan, membangun dan memprioritaskan antrian kerja, mengelola waktu Anda - hal-hal seperti itu.

Sungguh, ini sepertinya satu-satunya hal yang hilang dalam sikap Anda. Apa yang Anda sebut "sidetracking" pada dasarnya adalah karya lain ("pelajari sambungan lanjutan") yang harus direncanakan, diprioritaskan, dan dimasukkan ke dalam antrian.

agas
sumber
Terima kasih @gnat. Saya sangat menghargai tanggapan positif ini. Saya bisa setuju dengan Anda tentang apa yang Anda katakan.
James Guvna Jeffery
9

Menjadi seorang profesional di bidang ini berarti terus-menerus menghancurkan diri sendiri terhadap ketidakmampuan Anda sendiri. Lakukan itu 8-5 Senin hingga Jumat, mungkin lebih jika ada tenggat waktu yang akan datang, bersenang-senang di akhir pekan, dan kembali lagi pada hari Senin. Itu pekerjaannya.

Pembuatan perangkat lunak membutuhkan kerendahan hati tertentu. Jika Anda seseorang yang harus benar, dan yang harus membuktikan bahwa mereka sudah mengetahui segalanya, ini mungkin bukan bidang untuk Anda.

Saya tidak dapat memahami tidak belajar sesuatu setiap hari. Saya tidak berpikir saya menginginkan pekerjaan itu.

Dan Ray
sumber
Pengalaman saya adalah tidak apa-apa untuk menjadi seseorang yang harus benar, selama Anda juga bisa gagal perut. Saya menendang diri saya sendiri untuk setiap hal kecil yang tidak sempurna. Itu sebabnya saya melakukan hal-hal yang lebih baik seiring berjalannya waktu.
Tom Anderson
Nah, itu paradoksnya bukan? Hubris adalah salah satu dari tiga kebajikan programmer. Tetapi dalam pengalaman saya, "terdorong secara kompulsif untuk membuktikan saya pintar dengan menunjukkan bahwa saya sudah tahu segalanya sebelum mempelajarinya" adalah kecenderungan yang dilepaskan oleh pengembang pemula, atau mereka tidak bertahan lama di bidang ini.
Dan Ray
Mungkin melambatkan kembali daripada melepaskan? Saya sudah lama, untungnya, keluar dari kebiasaan menyatakan bahwa saya tahu hal-hal yang saya tidak tahu. Namun, saya masih benci mengakui tidak mengetahui hal-hal; kebutuhan untuk menutup celah antara apa yang saya tahu dan apa yang saya ingin dapat katakan saya tahu adalah cukup driver untuk saya. Belum tentu untuk semua orang!
Tom Anderson
Saya tidak tahu, Tom. Menurut saya, saat yang memalukan bahwa Anda belum tahu sesuatu adalah momen yang bisa Anda habiskan untuk mempelajarinya. Saya ingin tahu sebanyak orang berikutnya, tetapi saya tidak punya masalah sama sekali mengatakan "Saya tidak tahu".
Dan Ray
6

Menjadi solo itu sulit. Sebaliknya, ketika Anda bekerja dengan tim pengembang, semua orang belajar dari satu sama lain. Sebagai bagian dari tim, Anda akan mengambil banyak pengetahuan dengan bekerja dengan pengembang lain, dan dengan usaha yang jauh lebih sedikit daripada ketika Anda mencoba untuk mencari tahu semuanya sendiri.

Yang mengatakan, sebagai pengembang, Anda harus berkomitmen untuk terus belajar. Apakah itu membaca dokumentasi untuk kerangka kerja baru, atau buku-buku tentang pengembangan, Anda harus melakukan upaya terus-menerus untuk menjaga pengetahuan Anda saat ini dan tumbuh. Namun, menjadi bagian dari tim dapat mengklarifikasi bidang apa yang paling perlu Anda pelajari pada titik waktu tertentu.

Mengenai poin Anda tentang meninjau kembali kode lama Anda, dan menulis ulang: Saya telah menemukan bahwa kode saya sendiri selalu mewakili yang terbaik dari apa yang saya ketahui pada saat saya menulisnya. Berkali-kali saya kembali ke sesuatu yang saya tulis bertahun-tahun yang lalu, dan menampar dahi saya, ketika saya melihat betapa jauh lebih baik yang bisa saya lakukan, mengingat apa yang saya ketahui sekarang . Tapi itulah sifat pengalaman, Anda mendapatkannya setelah Anda membutuhkannya ...

Terakhir, ketika Anda sedang mengembangkan aplikasi, Anda selalu membutuhkan akal sehat bisnis, untuk memutuskan kapan yang terbaik untuk mengambil jalan pintas untuk menyelesaikan lebih cepat, dan ketika perlu mengambil lebih banyak waktu untuk mempelajari sesuatu yang baru yang akan meningkatkan desain dan kualitas aplikasi. Ada banyak hal untuk dipelajari di dunia perangkat lunak. Tanpa melakukan penilaian yang baik seperti itu, Anda dapat menemukan diri Anda memutar roda belajar, berpikir, mendesain ulang, tetapi tidak pernah menyelesaikan apa pun.

Sam Goldberg
sumber
+1 untuk kalimat kedua. Saya belajar lebih banyak dari rekan-rekan saya, bekerja di sejumlah organisasi berbeda, daripada yang pernah saya pelajari dari membaca (buku atau online). Kedengarannya dari pertanyaan Anda seperti bekerja dalam tim untuk sementara waktu akan membuat Anda menjadi dunia yang baik.
Dawood mengatakan mengembalikan Monica
3

Saya pikir kekhawatiran Anda valid, tetapi Anda tidak boleh terlena karenanya. Adalah keyakinan saya bahwa makhluk teknologi datang dengan bagasi berikut:

  • Anda harus terus-menerus mempelajari hal-hal baru. Anda belajar untuk mencintai ini, atau tidak.
  • Ada banyak hal yang ingin Anda kuasai daripada yang mungkin Anda ketahui.
  • Anda akan mengembangkan keterampilan selama proyek yang Anda inginkan selama proyek.
  • Akibatnya, Anda akan selalu ingin kembali dan mengulang proyek itu. Sangat sulit untuk melepaskan sesuatu yang Anda tahu bisa lebih baik.

Pada akhirnya, sepertinya Anda peduli untuk membangun perangkat lunak berkualitas, yang merupakan sesuatu yang tidak dapat Anda pelajari . Ketahuilah bahwa Anda perlu membedakan membangun solusi yang berkualitas tinggi dengan membangun sesuatu yang sempurna. Sepertinya Anda seperti saya, dan tidak akan pernah merasa itu sempurna. Akan lebih memprihatinkan jika Anda tidak merasa memiliki kesempatan untuk meningkatkan diri dan pekerjaan Anda.

Sangat sulit untuk menjadi pelopor dari semua perdagangan (master of none), tetapi Anda benar-benar perlu mencari cara untuk mengidentifikasi hal-hal yang paling menarik dan berguna bagi Anda, dan fokus pada mereka. Cari tahu cara terbaik untuk "mengalihdayakan" pekerjaan lain ke orang lain atau alat .

Joe
sumber
2

Saya pikir Anda tidak perlu terlalu khawatir tentang "menyelesaikannya dengan benar". Berusaha keras untuk kesempurnaan, tetapi sadari bahwa tidaklah mungkin untuk merancang solusi yang sempurna, terlebih lagi pada putaran pertama. Fakta bahwa Anda cukup khawatir untuk menyelesaikannya dengan benar untuk mengajukan pertanyaan ini berarti Anda sudah berada di jalur yang benar.

Adapun frustrasi Anda dengan mempelajari hal-hal baru, saya menemukan bahwa bekerja dalam kelompok, dan mampu bertanya dan mendiskusikan masalah dengan programmer lain menghilangkan rasa sakit untuk mengetahui apa yang perlu saya pelajari, dan menggantinya dengan sukacita dari menemukan sesuatu yang baru dan belajar bagaimana menerapkannya.

Saya suka menulis perangkat lunak, tetapi kadang-kadang memang ada rasa sakit karena bukan belajar sesuatu yang baru, tetapi menemukan apa yang sebenarnya Anda perlu pelajari untuk dapat mencapai apa yang ingin Anda lakukan.

Dari apa yang saya mengerti, saya berada di posisi yang sama dengan Anda. Mengode sesuatu sendiri bisa membuat frustasi dan sulit di kali, dan bermanfaat dan agak menyenangkan di lain waktu.

Lakukan persis apa yang Anda rencanakan, temukan pekerjaan di mana Anda akan menjadi bagian dari tim (dan lakukan yang terbaik untuk memastikan Anda mendapatkan pekerjaan di tempat yang tidak payah). Bekerja dengan orang lain yang menggunakan teknologi yang sama dan mendesain perangkat lunak yang sama akan memperluas pemahaman dan penerapan teknologi dan pola desain itu hampir dalam semalam.

Sedangkan untuk mengetahui bagaimana melakukan sesuatu dengan benar pertama kali, well, bagaimana Anda tahu ada cara yang lebih baik kecuali Anda sudah melakukannya dengan cara tertentu pada kali pertama? Keterampilan dalam desain perangkat lunak seringkali sangat tergantung pada pengalaman. Joel Spolsky adalah seorang jenius perangkat lunak, tetapi jika Anda membaca banyak artikelnya, Anda akan melihat bahwa itu adalah hasil dari pengalaman dan kecerdasan.

Adapun bagian SQL, sebagai pengembang NET. Saya belum pernah bekerja di mana saja yang memiliki pengembang basis data khusus, kita semua menulis SQL kita sendiri, tetapi sering ada pengembang yang sangat pandai SQL yang bersedia membantu Anda keluar dengan hal-hal yang lebih mendalam.

Kamu terdengar seperti orang yang pintar, aku tidak berpikir kamu harus terlalu keras pada dirimu sendiri.

333Mhz
sumber
1

Ini benar-benar normal dan bukan sesuatu yang harus Anda khawatirkan terlalu banyak. Anda memang perlu terus belajar keterampilan baru, tetapi Anda juga perlu belajar memprioritaskan dan mengatur waktu Anda. Anda juga perlu menghindari jebakan pembangunan kembali yang tidak perlu.

Programmer yang tidak berpengalaman sering akan ditarik ke dalam perangkap pembangunan kembali:

Saya tidak menulis program ini dengan sempurna, dan sekarang saya perlu memperluas atau mengubahnya. Ini akan menjadi banyak pekerjaan untuk memodifikasi kode yang ada karena cara saya menulisnya. Saya telah belajar lebih banyak sejak saat itu, saya yakin yang terbaik adalah menulis ulang seluruh program. Saya yakin saya bisa menulisnya jauh lebih baik kali ini.

Ada beberapa hal yang salah dengan logika ini.

  • itu banyak pekerjaan untuk memodifikasi atau menambah kode yang ada, tetapi bukankah akan lebih banyak pekerjaan untuk menulis ulang semuanya?
  • jika Anda menulis ulang semua ada kemungkinan Anda akan membuat bug baru, & itu akan memakan waktu lebih lama dari yang Anda pikirkan (terutama jika Anda tidak berpengalaman). Apakah Anda mempertimbangkan semua yang terlibat dalam penulisan sistem? (ingat berapa lama Anda pertama kali)
  • Anda telah belajar banyak sejak Anda awalnya menulis program (sehingga Anda mungkin dapat memperbaikinya), tetapi Anda juga akan belajar lebih banyak bulan / tahun berikutnya. Apa yang membuat Anda berpikir Anda tidak ingin menulis ulang semuanya lagi di beberapa titik di masa depan?
  • ujian utama suatu program adalah program itu berfungsi . Apakah kamu tidak memiliki sesuatu yang lebih baik untuk dilakukan?

Tidak ada salahnya untuk merenungkan dan merencanakan pembangunan kembali. Itu berarti mempertimbangkan bagaimana Anda ingin menulis ulang program Anda, dan berusaha mengidentifikasi masalah yang akan Anda alami. Dalam hal ini Anda akan mengidentifikasi 'gabungan SQL canggih' yang sekarang Anda perlukan, dan kemudian menyelidiki bagaimana mereka bekerja dan mempelajarinya.

Jika Anda pikir Anda tidak akan mengidentifikasi kesenjangan pengetahuan lanjutan melalui perencanaan (tanpa memulai pengembangan) maka Anda perlu meningkatkan keterampilan perencanaan Anda. Coba pikirkan bagian rencana mana yang tidak cukup detail. Anda harus masuk ke detail sebanyak yang diperlukan sampai Anda yakin bahwa seluruh sistem secara teknis mungkin.

Pendekatan ini akan memungkinkan Anda untuk belajar lebih dulu .

Akhirnya, belajar di tempat kerja adalah bagian normal dari pemrograman. Namun, ini tidak berarti bahwa Anda memulai tugas dan kemudian menyadari bahwa Anda harus berhenti selama seminggu untuk belajar tentang, katakanlah, HTML dasar. Anda dapat berhenti selama beberapa jam untuk mempelajari sesuatu, tetapi majikan Anda hanya membayar Anda untuk menyelesaikan pekerjaan. Belajar secara efisien - jangan baca pengantar dan riwayatnya, hanya cara kerjanya dan bagaimana itu akan cocok dengan program Anda. Jika Anda harus berhenti bekerja selama berhari-hari untuk mempelajari cara menyelesaikan bagian dari program, Anda salah melakukannya.

Kirk Broadhurst
sumber
1

Anda mungkin berpikir bahwa mempelajari teknologi dan masalah baru adalah tenggang waktu. Tapi jangan panik. Itu normal. Ini adalah bagian dari latihan Anda sebagai programmer untuk belajar ... atau kita semua akan terjebak dengan COBOL.

Profesional freelance menyesuaikan komisi mereka sesuai dan periode belajar adalah banyak hal lain yang harus diperhitungkan dalam perkiraan waktu Anda. Lain kali Anda memutuskan untuk membawa kerangka kerja baru, pastikan Anda merencanakan waktu yang cukup untuk mempelajarinya.

Spoike
sumber
0

Tapi, ada perbedaan antara "menyelesaikan pekerjaan" dan "melakukan pekerjaan dengan benar".

Tidak, tidak ada, dan saya pikir itulah akar masalah Anda di sini. Bagi saya, Anda terlalu terpaku pada kekhawatiran untuk melakukan hal-hal 'dengan benar' karena sebagai pengembang individu Anda tidak melihat cara orang lain beroperasi. Tetapi benar menurut siapa? Siapa orang ajaib ini yang memutuskan bahwa apa yang Anda lakukan adalah 'benar'? Ambil 100 programmer terbaik dunia, dan saya jamin tidak ada yang setuju 100% untuk setiap topik pemrograman.

Pada akhirnya yang penting adalah jika pelanggan Anda bahagia. Jika program yang Anda buat memecahkan masalah yang seharusnya, dan melakukannya dengan cara yang hemat biaya, Anda melakukannya dengan benar. Misalnya, tidak secara inheren benar, menggunakan codeigniter daripada menggunakan kerangka kerja Anda sendiri. Sebagai akibatnya adalah jika Anda menghasilkan tumpukan sampah, Anda melakukannya 'salah' terlepas dari proses atau 'praktik terbaik' yang diikuti.

Bahwa Anda meninjau kembali kode Anda dan melihat cara untuk memperbaikinya adalah bagian normal dari proses pengembangan. Itu bukan pertanda bahwa Anda tidak melakukan sesuatu dengan benar. Ini pertanda bahwa Anda berdedikasi untuk belajar dan meningkatkan. Dari semua yang saya lihat di pos Anda, Anda tidak punya masalah.

Sekarang, tendang beberapa * * *

GrandmasterB
sumber
Saya tidak setuju dengan ini. Ada cara pemrograman yang jauh lebih mudah dikelola dan mudah dibaca daripada yang lain, dan ada tumpukan buku yang didedikasikan untuk meningkatkan programmer sehingga mereka dapat menulis kode yang lebih baik.
TehShrike
Terima kasih @ grandmasterB. TehShrike, dan referensi ke buku-buku ini?
James Guvna Jeffery
3
" tidak ada dua yang akan menyetujui 100% pada setiap topik pemrograman " - mungkin, tetapi setidaknya 80% akan menyetujui setidaknya 80% dari topik pemrograman. Itulah konsensus profesional. Tidak ada 'hak' absolut, tetapi ada praktik terbaik dan mereka patut diketahui.
Kirk Broadhurst
1
Semua baik dan bagus, tetapi jika program Anda tidak menyelesaikan masalah yang seharusnya, praktik terbaik atau tidak, itu dilakukan secara tidak benar. Ada satu cara obyektif untuk mengetahui apakah suatu program dilakukan dengan benar - jika pelanggan menyerahkan selembar kertas hijau atau pembayaran lain sebagai imbalan atas pekerjaan Anda. Ukuran lain hanyalah opini.
GrandmasterB
2
Dan ketika klien Anda merasa penawaran Anda untuk perubahan berlebihan dan menemukan pakar lain untuk mengonfirmasi perasaan itu karena kode itu buruk, Anda tidak memiliki pekerjaan.
JeffO