Apakah berurusan dengan kode lama membantu seseorang berevolusi sebagai programmer? [Tutup]


18

Saya seorang pengembang Java dengan sedikit lebih dari satu tahun pengalaman yang menempatkan saya di suatu tempat di atas junior, tetapi belum di antara pengembang tingkat menengah. Baru-baru ini saya ditawari proyek jangka panjang yaitu mempelajari kode aplikasi perbankan yang ada selama 4 bulan dan kemudian memperkenalkan perubahan saat dibutuhkan. Sebagai programmer yang tidak terlalu berpengalaman, saya mencari cara untuk mengembangkan dan saya bertanya-tanya apa yang mungkin diberikan proyek semacam itu.

Apakah Anda menganggap berurusan dengan aplikasi yang besar dan mungkin tidak ditulis dengan baik sebagai praktik yang baik untuk pemula?


kemungkinan rangkap dari Menjadi "pengembang pemeliharaan"
agas

1
Belajar dari kesalahan orang lain adalah cara teraman untuk mendapatkan pengalaman ...
Michael Borgwardt

Saya mempelajari kode orang lain selama sekitar satu bulan baru-baru ini. Pengalaman belajar yang hebat, tetapi menyedot banyak waktu. Perlu bereksperimen dengan teh penenang.
usr

Mungkin ada Java yang bagus tetapi lebih sulit untuk menemukan jr. dev daripada devs dari kebanyakan latar belakang bahasa awal lainnya yang saya bayangkan berdasarkan pengalaman yang terutama sebagai pengembang web front-end pergi generalis yang telah terkena berbagai macam ujung belakang. Masalahnya saya pikir, Java adalah bahasa yang dapat diservis dengan sempurna tetapi Java budaya adalah tentang memainkan segala sesuatu seaman dan seaman mungkin.
Erik Reppen

Jawaban:


34

Memecahkan masalah kode yang ada adalah cara super untuk dikembangkan sebagai seorang programmer. Jika kodenya jelek, Anda akan belajar dampak dari kesalahan yang mereka buat, dan mungkin menghindarinya ketika Anda sedang mendesain. Jika kodenya bagus, Anda akan belajar sesuatu tentang cara membuat aplikasi yang bisa dirawat.

Anda juga akan belajar untuk menangani kompleksitas aplikasi bisnis nyata. Karena ini ada di sektor perbankan, Anda akan belajar tentang hal-hal seperti regulasi federal dan kontrol akuntansi internal yang mungkin tidak pernah Anda pikirkan. Ini adalah hal-hal yang baik untuk diketahui ketika Anda diminta untuk merancang sesuatu yang lain di dunia keuangan. Dan pemrograman keuangan bisa menjadi sektor yang sangat menguntungkan untuk bekerja, jadi mendapatkan pengalaman perbankan mungkin sangat baik untuk Anda.

Anda bahkan dapat belajar bahwa hanya karena sesuatu ditulis 15 tahun yang lalu, dalam bahasa yang Anda lebih suka untuk tidak menggunakannya, itu tidak selalu buruk. Bagaimanapun, ini telah berjalan dengan sukses selama ini.

Jika, seperti pada sebagian besar aplikasi lawas, aplikasi tidak memiliki pengujian unit, Anda harus benar-benar memastikan perubahan tidak akan memengaruhi sesuatu yang lain, Anda dapat mempelajari cara menambahkan pengujian itu dan cara menjual manajemen tentang mengapa menambahkan pengujian itu diperlukan. sebuah ide bagus.


2
Memang, jika Anda akan memiliki 4 bulan untuk mempelajari kode, Anda harus menghabiskan banyak dari 4 bulan itu untuk menambahkan komentar yang mendokumentasikan apa yang Anda pelajari, dan menulis tes yang membuktikan bahwa komponen kunci bekerja dengan benar (seperti yang diharapkan orang).
Ross Patterson

1
@RossPatterson, karena ini adalah perbankan, ya saya harap mereka benar-benar bekerja dengan benar sekarang. Bagaimanapun jika tidak ada tes, maka risiko melakukan perubahan sangat besar di perbankan dan tes unit menulis untuk membantu Anda mempelajari sistem harus menjadi penjualan yang mudah.
HLGEM

3
Pemrograman adalah mengetahui cara memindahkan potongan. Memahami sistem adalah mengetahui cara bermain game. Anda tidak akan menyesali pengalaman dari sudut pandang pengembangan keterampilan. Bekerja untuk perusahaan yang mencuri dari para janda dan anak yatim adalah sesuatu yang tidak bisa ditoleransi oleh nurani Anda.
Meredith Poor

8

Saya pikir ini latihan yang bagus untuk siapa pun yang pemula . Belajar dari pengalaman orang lain bisa sangat efektif.

Tantangan sebenarnya bukan untuk menemukan kesalahan, tetapi untuk masuk ke kepala pengembang lain dan mencoba mencari tahu whykode itu ditulis seperti itu. Kadang-kadang itu karena mereka ceroboh, dan kadang-kadang itu karena mereka punya alasan kuat. Anggap dev itu setidaknya sebaik Anda tetapi mungkin memiliki lebih banyak pengetahuan domain.


2
Ini juga membantu Anda untuk memahami bahwa metode yang Anda pikir seharusnya mereka gunakan tidak tersedia ketika kode itu ditulis.
HLGEM

Akan bagus untuk menemukan beberapa komentar kode atau dokumentasi proyek dalam situasi ini. Kalau tidak, hack atau cara aneh untuk mengimplementasikan suatu fungsi akan tetap menjadi misteri. Pengembang itu bahkan mungkin tidak ada di perusahaan lagi, jadi tidak ada cara bagi Anda untuk bertanya kepadanya tentang hal itu.
Radu Murzea

6

Ini adalah praktik yang baik untuk setiap pengembang di setiap titik dalam karir mereka. Jika Anda dapat meninjau dan menganalisis perangkat lunak yang ada dan menemukan cara untuk memperbaikinya, Anda akan menunjukkan bahwa Anda adalah pengembang yang berharga. Anda tidak hanya akan belajar bagaimana orang lain telah merancang dan mengembangkan perangkat lunak, tetapi sepanjang jalan Anda akan belajar apa yang tidak boleh dilakukan, yang merupakan pengetahuan yang berharga.

Jika Anda siap menghadapi tantangan, ambil proyek ini terus dan buatlah lebih baik.


2

Ini benar-benar akan membantu Anda, tetapi Anda harus berhati-hati.

Anda perlu memastikan Anda belajar dari kode lawas. Bagaimana Anda tahu apa yang baik dan apa yang buruk? Mungkin Anda bisa mengenali pro dan kontra dari berbagai pola / metode, tetapi jika Anda seorang pengembang junior yang baru memulai, Anda mungkin tidak bisa.

Dan tinggal terlalu lama dalam pekerjaan pertama itu, dan Anda mungkin tidak belajar atau membangun keterampilan yang cukup dan akhirnya terjebak di sana.


2

Legacy dapat berarti apa-apa selain berdasarkan komentar 'tidak ditulis dengan baik' Anda, saya akan berasumsi bahwa Legacy berarti teknologi dan pola 'buruk' atau setidaknya 'ketinggalan zaman'. Jika kode lawas itu baik, jangan menahan diri dan pelajari setiap barisnya.

Saya tidak berpikir ada peringatan yang cukup jelas terhadap jenis pekerjaan dan proyek yang mengalihkan karir Anda dan membuat Anda terjebak dalam lubang wastafel berharga di utas ini sampai saat ini.

Waspada analogi olahraga: Apakah Anda pikir seorang penyokong lini di NFL belajar lebih banyak dan menjadi lebih berharga dengan bermain di tim dengan rekor terburuk atau terbaik? Jawaban saya: Bukan saja mereka lebih berharga bermain untuk tim terbaik, tetapi mereka mungkin mengambil praktik dan pengetahuan terbaik dan menghindari mengambil praktik dan sikap mengakhiri karier.

Ada banyak kode anti-pola yang mengerikan di luar sana yang benar-benar bekerja untuk bisnis dan membayar banyak gaji dev. Saya mengusulkan bahwa pengembang yang belum melihat cukup kode melakukan cara yang 'benar' mungkin salah kode anti pola untuk solusi yang sah untuk suatu masalah. Bisnis ini mungkin mengatakan bahwa solusinya bekerja, tetapi itu bukan yang Anda inginkan di resume Anda atau yang Anda akan banggakan tentang pengembang lain. Ini juga hanya relevan jika jalur pertumbuhan pribadi Anda termasuk mendapatkan rasa hormat dari rekan-rekan teknik Anda dan tidak hanya sementara meningkatkan pendapatan perusahaan tempat Anda bekerja (Kedengarannya buruk, tetapi pada akhirnya, teknik terbaik benar-benar menghasilkan banyak uang IMO) .

Sayangnya ada banyak kode dan banyak waktu yang dapat berlalu sebelum utang teknologi terungkap. Dan utang teknologi itu biasanya diakui tepat ketika sudah terlambat. Siapa pun yang mungkin telah mencoba untuk menghentikan utang teknologi atau pola anti sebelumnya, bisa saja dikesampingkan karena biaya tambahan yang dirasakan atau kurangnya pemahaman tentang skalabilitas dll. Adalah tugas kita sebagai insinyur untuk mengekspos utang teknologi segera. Proyek tanpa insinyur berpengalaman dalam bahaya menabrak dinding bata di beberapa titik, sebenarnya semua proyek bahkan dengan pengembang yang berbakat. Sebagian besar bisnis melihat 'beberapa titik' sebagai banyak waktu untuk memperbaikinya nanti. Ini membuat pilihan pekerjaan bagi pengembang yang akan datang dan yang akan datang menjadi masalah yang sangat rumit. Ini juga menunjukkan tujuan dan pola pikir yang sama sekali berbeda antara pengembang dan bisnis dan betapa rumitnya menjembatani kesenjangan.

Ini adalah tujuan para insinyur untuk 'memasukkan' karya ilmiah dan pertimbangan desain yang sebenarnya sementara itu adalah tujuan bisnis untuk 'mengecualikan' biaya dan waktu yang tidak perlu. Karena insinyur sering tidak tahu apa tingkat usaha dan waktu sampai keadaan akhir benar-benar dilakukan, pengembangan perangkat lunak berjalan seperti drama yang baik dengan karakter seperti gesit, scrum, dan kanban memainkan peran utama.

Satu langkah mungkin untuk menjauh dari kode yang buruk sampai Anda telah melihat kode yang cukup baik untuk tidak 'rusak'. Saya suka mengatakan bahwa pengembang senior menciptakan solusi sederhana untuk masalah yang kompleks. Seperti bijaksana, pengembang tingkat menengah junior menciptakan solusi kompleks untuk masalah sederhana dan kompleks.

Cara lain yang bisa diambil adalah Anda harus mengerjakan kode yang baik DAN buruk di berbagai titik untuk mendapatkan pemahaman. Jika Anda tidak melakukan keduanya maka lakukanlah dan bersiaplah untuk melepaskan semuanya ketika Anda menemukan sistem yang lebih baik. Saya pikir ini mungkin lintasan yang lebih umum bagi kebanyakan pengembang.

Saya bias tahun ini karena saya merasa seperti mendaki gunung 'saus rahasia' yang sangat rumit. Sementara saya akan meningkatkan kemampuan saya untuk menguraikan beberapa pola terburuk yang pernah saya lihat, itu sangat 'kebiasaan' dan 'satu' bahwa saya tidak percaya perjuangan saya akan meningkatkan kemampuan pemasaran saya atau keterampilan yang dapat digunakan yang saya tetapkan di masa depan saya.

Untuk menjaga kewarasan saya, saya hanya berjalan dengan kecepatan tetap dan merangkul setiap blok jalan sebagai hal yang wajar untuk kursus. Baru saja meninjau tujuan tahunan saya dengan atasan saya yang termasuk menggali lubang warisan ini, saya agak berpikir itu mungkin pendakian pengorbanan. Saya bisa bertahan dalam proses dengan ulasan buruk dan kelambatan yang dirasakan. Ini adalah peringatan yang realistis dan firasat bagi Anda yang bertanya-tanya pekerjaan apa yang harus diambil.

Penafian: Posting ini akan hidup lebih lama dari pendapat saya jadi bawa dengan sebutir garam. Besok saya mungkin suka kode warisan! (Meragukannya).


1

Ini sangat tergantung pada bagaimana Anda mendefinisikan "warisan" dalam konteks ini. Biarkan saya memberi Anda contoh dari C dan C ++. Banyak programmer C ++ menyebutnya praktik yang buruk untuk menggunakan string C dalam aplikasi C ++, yang lain tidak menuntut pencampuran, sementara yang lain, mengklaim bahwa itu adalah semata-mata dan sama sekali tidak ada gunanya menggunakan bit kode C karena mereka sudah tua, yaitu, " Kode Warisan. Beberapa melangkah lebih jauh dan menghindari penggunaan pra-C ++ X (ganti 'X' dengan angka yang sesuai) idiom standar, gaya - yaitu sintaks, untuk gaya "warisan".

Mengesampingkan masalah kinerja aliran dan string C ++ dan beberapa kekhasan STL, sungguh merupakan praktik yang bagus untuk melihat apa yang ada di dalam arahan preprosesor yang sangat Anda cintai #include <string.h>. Jika Anda mengikuti jalan untuk pelaksanaan dan menemukan diri Anda pada mesin unix / linux di /usr/include/string.h(dan mendapatkan sumber pelaksanaan libc, misalnya, dari gnu.org ) dan membaca strcmp.catau strlen.catau strtok.c, saya yakin Anda sedang akan mendengar "Apa dunia yang indah "pentahapan secara bertahap.

Namun, ada peringatan untuk prosa ini - yaitu, kelas dan metode yang sudah ketinggalan zaman. Di Jawa cukup banyak barang warisan masih dapat diakses dari dalam lingkungan baru-baru ini, tetapi jika saya ingat dengan benar, tidak semuanya. Di sektor IB, dari pengalaman saya sendiri, tidak semua perangkat lunak ditulis oleh programmer yang baik. Banyak lulusan yang memiliki hampir nol paparan pemrograman dunia nyata sebelum mereka mulai pada posisi analis / pengembang. Tapi jangan menyamaratakan pernyataan ini. Saya tahu banyak orang yang menggunakan Java dan C # pada inti throughput tinggi, lingkungan latensi rendah. Saya tidak setuju dengan mereka, tapi yah, untungnya ini urusan mereka. Seandainya mereka benar-benar menjadi HFT, mereka akan terdorong ke belakang dalam barisan. Tapi lagi, mudah disimpulkan dari kalimat ini adalah asumsi (dan dalam banyak kasus faktanya) bahwa kode Java sangat dioptimalkan. Dan jika Anda dapat unggul dalam mengoptimalkan, jika diperlukan, tidak hanya memperbaiki ini atau itu, Anda akan menjadi sangat berharga sebagai seorang dev. Sangat memuaskan dengan cara menyadari berapa banyak Anda telah berkontribusi. Saya akan melakukannya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.