Saya memiliki pekerjaan nyata pertama saya sebagai programmer, tetapi saya tidak dapat menyelesaikan masalah karena gaya pengkodean yang digunakan. Kode di sini:
- Tidak punya komentar
- Tidak memiliki fungsi (50, 100, 200, 300 atau lebih baris dieksekusi secara berurutan)
- Menggunakan banyak
if
pernyataan dengan banyak jalur - Memiliki variabel yang tidak masuk akal (misalnya .:
cf_cfop
,CF_Natop
,lnom
,r_procod
) - Menggunakan bahasa lama (Visual FoxPro 8 dari 2002), tetapi ada rilis baru dari 2007.
Saya merasa seperti telah kembali ke tahun 1970. Apakah normal bagi seorang programmer yang akrab dengan OOP, kode bersih, pola desain, dll. Memiliki masalah dengan pengkodean dengan cara lama seperti ini?
EDIT : Semua jawaban sangat bagus. Untuk harapan saya, tampak bahwa ada banyak basis kode semacam ini di seluruh dunia. Poin yang disebutkan untuk semua jawaban adalah refactor kodenya. Ya, saya sangat suka melakukannya. Dalam proyek pribadi saya, saya selalu melakukan ini, tapi ... Saya tidak bisa memperbaiki kode. Pemrogram hanya diperbolehkan untuk mengubah file dalam tugas yang dirancang untuk mereka.
Setiap perubahan dalam kode lama harus tetap dikomentari dalam kode (bahkan dengan Subversion sebagai kontrol versi), ditambah informasi meta (tanggal, programmer, tugas) terkait dengan perubahan itu (ini menjadi berantakan, ada kode dengan 3 baris yang digunakan dan 50 komentar lama). Saya berpikir itu bukan hanya masalah kode, tetapi manajemen masalah pengembangan perangkat lunak.
sumber
Jawaban:
Ok, saya akan berterus terang. Itu adalah tempat yang buruk untuk bekerja ... Saya sudah dalam situasi seperti itu, dan biasanya berakhir dengan Anda ditelan oleh kode ini. Setelah satu tahun atau lebih, Anda akan terbiasa dengan hal itu, dan Anda akan kehilangan pegangan tentang bagaimana alternatif modern dapat digunakan untuk mencapai tugas yang sama dengan lebih mudah, dengan cara yang lebih dapat dipertahankan, dan juga, lebih cepat saat dijalankan di Kebanyakan kasus.
Saya meninggalkan tempat kerja seperti itu, karena, setelah hanya satu bulan, saya merasa diseret ke dalam kode skool lama. Saya mencoba mencobanya, tetapi memutuskan untuk tidak melakukannya. Saya tidak bisa menggunakan kode bersih dan mulai kehilangan keterampilan karena tidak ada latihan sehari-hari. Setiap pendekatan modern harus disetujui oleh 3 lapis pengembang, yang tidak pernah terjadi, karena idenya adalah bahwa hal-hal mungkin rusak ketika pendekatan modern digunakan. Dan sifat rapuh dari kode yang keluar ketika Anda tidak menggunakan pendekatan modern cukup menakutkan.
Jangan salah, ada kasus di mana orang over-engineer solusi, dan saya menentangnya. Tetapi terseret ke konvensi dan gaya pengkodean '80 untuk waktu yang lama akan menghentikan kemajuan Anda, dan juga, saya pikir, peluang karier.
Kemudian lagi, Anda harus mendapatkan uang, jadi kadang-kadang Anda harus melakukan apa yang tidak Anda sukai. Mengawasi gejala kelelahan dan mengubah pengkodean menjadi tugas biasa dalam kasus tersebut.
sumber
Gaya pengkodean ini (jika Anda ingin menyebutnya gaya apa pun ) adalah gaya pengkodean yang buruk .
Seseorang dapat menulis fungsi pendek dengan nama variabel deskriptif dan kontrol aliran waras di sebagian besar bahasa modern (Visual FoxPro modern, ya).
Masalah yang Anda hadapi adalah dengan basis kode yang buruk , tidak lebih, tidak kurang.
Basis kode semacam itu ada dan banyak - fakta bahwa Anda mengalami masalah dengan mereka membuktikan betapa buruknya mereka (dan bahwa Anda memiliki pelatihan yang baik).
Apa yang dapat Anda coba dan lakukan adalah meningkatkan hal-hal di mana Anda dapat - mengganti nama variabel, mengekstrak persamaan dan membagi fungsi besar menjadi yang lebih kecil dll ... Dapatkan salinan Bekerja Secara Efektif dengan Kode Warisan ...
Saya berada di proyek C # dengan struktur yang sangat buruk, tidak jauh dari apa yang Anda gambarkan. Baru saja menggabungkan 12 fungsi terpisah (copy-paste yang jelas) menjadi satu yang mengambil satu parameter.
sumber
Itu tidak benar-benar "kuno" kecuali dalam praktik desain yang baik (saat ini) tidak selalu sepopuler. Itu hanya kode yang buruk. Kode yang buruk memperlambat siapa pun. Anda akhirnya terbiasa, tapi itu hanya karena Anda terbiasa dengan kebiasaan khusus dalam sistem spesifik Anda. Diberikan proyek baru, Anda mungkin menemukan cara baru untuk menulis kode yang buruk. Hal yang baik adalah Anda tahu cara mengidentifikasi kode ini sudah bau.
Hal terbesar yang dapat Anda lakukan adalah jangan menyebarkan masalah . Jangan menganggap praktik buruk ini sebagai konvensi kecuali tim Anda. Tetap bersihkan kode baru dengan cara yang tidak memaksa refactor. Jika seburuk itu dan Anda punya waktu, pertimbangkan refactor besar ... tetapi dalam praktiknya Anda jarang memiliki kemewahan itu.
Pertimbangkan untuk menambahkan komentar saat Anda memikirkannya, dan ubah sedikit demi sedikit sebagai hal praktis. Kecuali jika Anda menulis solo, Anda perlu mengatasinya dengan tim Anda; jika tidak ada konvensi Anda harus meluangkan waktu untuk membuatnya, dan mungkin berkomitmen untuk perlahan-lahan meningkatkan basis kode jika Anda tetap mempertahankannya.
Jika Anda menemukan fungsi yang benar-benar terisolasi dengan nama-nama variabel buruk dan Anda tetap memperbaikinya, Anda mungkin juga membuat nama-nama variabel sesuatu yang berguna, refactor ifs. Jangan membuat perubahan pada fitur-fitur umum kecuali Anda akan memperbaiki sebagian besar dari itu.
sumber
Ini mungkin berasal dari iterasi kode sebelumnya. Pada titik ini, saya akan berhati-hati terhadap perbedaan halus antara blok kode yang mirip yang telah menjadi "fitur". Tetapi terlepas dari seberapa buruk ide jenis struktur ini, cukup sederhana untuk dipahami ... jadi saya tidak yakin di mana Anda akan mengalami kesulitan dengannya.
Saya akan menekankan hati-hati dengan bit 'penggantian nama variabel'. Ada kesempatan yang adil untuk Anda belum memahami istilah tersebut, dan nama variabel akan lebih masuk akal setelah Anda berada di sana untuk sementara waktu. Bukan untuk mengatakan bahwa tidak mungkin ada nama variabel yang bermasalah juga, tetapi contoh Anda terlihat seperti ada logika untuk mereka, jika Anda tahu apa akronim umum di situs Anda. Ini jelas tidak terlalu penting jika Anda adalah tim dari 1.
sumber
Bagi saya ini kedengarannya seperti Peluang .
Sudah jelas bahwa Anda sudah dapat melihat banyak masalah dalam hal apa yang dilakukan dan dikelola. Anda dapat mengeluh bahwa itu semua sampah dan bahwa Anda tidak dapat melakukan apa pun, ATAU Anda dapat menggunakan ini sebagai kesempatan emas untuk benar-benar menunjukkan kepada majikan Anda nilai Anda.
Sekarang, itu tidak akan membantu Anda jika Anda berbaris ke majikan Anda dan katakan kepadanya bahwa semuanya perlu berubah. Jadi triknya adalah bermain bersama untuk sementara waktu, mengajukan banyak pertanyaan, dan ketika Anda diminta untuk menulis kode, Anda harus bermain sesuai aturan mereka dengan semua komentar, dll, karena Anda harus menyimpan pengembang lain diinformasikan menggunakan sistem apa pun yang mereka sukai saat ini, sementara pada saat yang sama Anda dapat memperkenalkan refactoring yang masuk akal yang tidak akan mengambil risiko apa pun dari Anda. Anda dapat mengekstrak beberapa metode, dan jika bahasa Anda mendukungnya, perkenalkan beberapa tes unit. Ketika ditanya mengapa Anda melakukannya dengan cara ini, atau jika mengatakan Anda melakukan sesuatu yang "salah", hindari bersikap defensif atau argumentatif sambil membuat presentasi yang bagus mengenai posisi Anda untuk gaya penulisan kode yang Anda sukai. Sebagai contoh, Anda dapat merujuk ke buku-buku seperti Bob Clean Code, atau Anda dapat merujuk ke buku-buku lain, artikel, atau bahkan pertanyaan dan jawaban yang Anda temui di Programmers.SE. Apa pun yang Anda temukan bermanfaat untuk mendukung posisi Anda dengan fakta-fakta yang mungkin berada di luar pengalaman Anda di mata orang-orang yang bekerja bersama Anda.
Sehubungan dengan komentar yang berlebihan, beberapa di antaranya dapat dihapus jika Anda menambahkan beberapa nama deskriptif untuk variabel dan metode, tetapi Anda mungkin juga dapat membuat kasus untuk sistem kontrol versi yang baik, dan menggunakannya untuk menyimpan catatan perubahan dan tanggal dll, dan untuk penggunaan alat untuk membandingkan berbagai versi file sumber Anda jika belum ada yang datang dengan VCS pilihan Anda.
Seperti saya katakan, ini adalah kesempatan untuk berkontribusi pada peningkatan tim pengembangan yang sepertinya seperti kehilangan arah untuk berbicara. Anda memiliki kesempatan untuk menonjol sebagai orang yang terampil dan berpengetahuan, dan sebagai seseorang yang dapat memimpin dengan memberi contoh. Ini semua adalah hal-hal baik untuk membantu Anda di kemudian hari saat karier Anda maju.
sumber
Selamat Datang di hutan !
Sayangnya, sering mulai bekerja di perusahaan berarti mulai menghadapi situasi seperti ini, kecuali jika Anda bekerja untuk perusahaan yang terstruktur dan terorganisir dengan baik, situasi ini sangat biasa ...
Saran saya adalah:
Mulai belajar dan kenali: bahasa pemrograman yang digunakan (Clipper / dBase) dan lingkungan (Visual FoxPro)
Baca dan Analisis basis kode dan mulai berkomentar
mengatur / refactoring kode (mengatasi masalah terlalu banyak baris yang dieksekusi secara berurutan)
Memiliki masalah menghadapi basis kode yang sama itu normal, tetapi dapat menjadi tantangan besar mencoba untuk meningkatkan kualitas kode dan memberikan "sentuhan Anda" untuk program meningkatkan basis kode dan mungkin membuatnya menjadi program yang lebih baik ...
sumber
Untuk menjawab pertanyaan Anda: Ya, orang / perusahaan di mana saja menggunakan infrastruktur yang dapat dibangun di atas kode jelek. Ketika mengintegrasikan diri Anda ke dalam situasi seperti itu, bisa sangat sulit untuk dihadapi.
Musim panas lalu, saya bekerja sebagai pekerja magang untuk mengembangkan aplikasi yang akan digunakan oleh tim QA yang melekat pada departemen tertentu. Tim QA menggunakan banyak skrip mandiri (VBScript, Perl, Bash) untuk menjalankan tes pada database dan semacamnya, dan mereka ingin menggabungkan semuanya menjadi satu aplikasi. Masalah dengan ini, bagaimanapun, adalah skrip-skrip tersebut digunakan di tempat lain di perusahaan (sehingga fungsi inti / nama variabel tidak dapat diubah), dan kode itu "ditambahkan ke" selama hampir 10 tahun; banyak omong kosong yang terbangun.
Inilah yang dapat Anda lakukan tentang itu:
Seperti halnya di mana-mana, selama fitur eksternal kode berfungsi dengan benar, tidak masalah bagaimana internal bekerja.
sumber
Saya akan membuat beberapa komentar yang berbeda dari banyak responden di sini. Banyak komentar saya mungkin jelas bagi Anda, tetapi tetap perlu diucapkan.
Sangat mudah untuk menambahkan kode murni, saran praktik terbaik tanpa memahami politik lingkungan Anda. Orang-orang yang bekerja dengan Anda mungkin tidak ingin mengubah, atau mengalokasikan waktu untuk mengubah basis kode Anda, tetapi cobalah untuk menjual ide itu kepada semua orang sebelum melompat dan mengubah segalanya (yang memiliki risiko yang melekat pada dan dari dirinya sendiri)
Semoga ini membantu.
sumber
Salah satu hal yang menonjol adalah komentar Anda yang diedit
Saya juga punya proyek di mana saya mewarisi basis kode FoxPro warisan dengan banyak masalah yang Anda uraikan. Salah satu hal pertama yang saya perkenalkan kepada proyek adalah repositori kode sumber yang baik. FoxPro dapat berintegrasi dengan SourceSafe, tetapi produk itu menyakitkan untuk digunakan.
Saya mengambil salinan alat scx Paul McNett http://paulmcnett.com/scX.php dan mengintegrasikannya ke dalam siklus pengembangan saya. Ia melakukan pekerjaan yang cukup bagus untuk mengekstraksi kode biner FoxPro ke format teks yang kemudian dapat dimasukkan ke dalam repositori sumber, seperti Subversion, Mercurial, atau bahkan git. (Anda mungkin menemukan proyek SubFox di http://vfpx.codeplex.com bermanfaat.
Alat-alat ini menyediakan Sejarah dan memungkinkan programmer untuk melanjutkan pekerjaan mempertahankan kode. Jelas butuh waktu untuk belajar menggunakan alat ini, tetapi karena semuanya gratis, tidak masuk akal untuk tidak menginvestasikan waktu untuk menggunakannya. (Bahkan jika Anda tidak bisa membuat proyek-proyek Pekerjaan bergerak seperti itu).
sumber
Saya akan sangat setuju dengan jawaban funkymushroom. Jika Anda adalah lingkungan tim, pastikan orang lain tahu bahwa Anda adalah refactor atau reorganisasi kode, jika Anda pernah berencana untuk mendapatkan tugas yang baik di masa depan.
Dari pengalaman pribadi saya tahu, walaupun bukan gaya pengkodean Anda, jika Anda memelihara kode, yang juga dimodifikasi dan dipelihara, tetaplah dalam gaya kode yang ada. Menambahkan komentar dan klarifikasi baik-baik saja, tetapi tata letak dan konvensi dasar harus tetap ada. Guru / senjata tua di proyek mengharapkan kode untuk menjadi serupa dengan apa yang telah mereka lihat selama bertahun-tahun.
Ketika seorang pelanggan berteriak tentang bug, manajemen Anda akan pergi ke senjata lama untuk memperbaiki masalah secepat mungkin. Jika senjata lama ini, ketika berada di bawah tekanan, menemukan Anda "membersihkan kode" dan karenanya mereka sekarang harus menghabiskan waktu mencari tahu di mana Anda pindah atau mengganti nama bahwa satu variabel yang mereka tahu perlu diubah, nama Anda di perusahaan akan diubah menjadi " lumpur".
Setelah krisis berakhir, pertama-tama senjata lama akan menyalahkan Anda secara perlahan dalam pembaruan penting. Selanjutnya Anda akan menemukan bahwa Anda bisa menjaga kode yang telah dibersihkan selama Anda di perusahaan. Akhirnya, ketika proyek-proyek baru yang menarik tersedia, manajer Anda akan bertanya kepada guru tentang siapa yang harus mengerjakan proyek, dan jika Anda pernah mengacaukannya sekali, Anda tidak akan pernah berhasil mencapai proyek baru, sampai makanan ternak Anda dilemparkan pada akhirnya untuk memenuhi tenggat waktu.
Jika Anda belajar di perguruan tinggi cara kode yang "benar", dan sekarang Anda berada di dunia kerja, lupakan cara "benar" itu. Ini bukan tugas perguruan tinggi, proyek-proyek ini tidak berlangsung hanya satu semester, mereka dapat hidup selama bertahun-tahun, dan harus dikelola oleh sekelompok orang dengan tingkat keahlian yang berbeda dan tingkat minat yang berbeda dalam tren CS terbaru. Anda harus menjadi pemain tim.
Anda bisa menjadi program hot shot terbesar di sekolah, tetapi di tempat kerja, pekerjaan pertama Anda, Anda seorang pemula dengan kredibilitas nol jalanan. Orang-orang yang telah pemrograman selama bertahun-tahun tidak peduli dengan sekolah atau nilai Anda, itu adalah seberapa baik Anda bermain dengan orang lain dan berapa banyak gangguan yang Anda bawa dalam hidup mereka.
Dalam 20 tahun saya, saya tampaknya beberapa programmer ace dipecat, terutama karena mereka menuntut untuk melakukan hal-hal dengan cara "benar". Kecuali jika Anda membawa sesuatu yang sangat, sangat, sangat unik untuk pekerjaan itu, Anda dapat diganti. Anda mungkin berada di atas kelas Anda, tetapi tahun depan, orang lain akan berada di atas kelas mereka, dan mencari pekerjaan.
Saya melihatnya sebagai pekerjaan utama Anda, adalah mempertahankan pekerjaan Anda, sampai Anda memutuskan untuk berganti pekerjaan. Untuk mempertahankan pekerjaan Anda berarti Anda harus bermain bagus di taman bermain yang dibangun dan dibayar orang lain.
Saya tahu saya terdengar negatif, tetapi selalu ada harapan. Ketika Anda mendapatkan pengalaman, sukses, Anda akan mendapatkan pengaruh, dan dapat mengubah hal-hal menjadi lebih baik. Saat menulis kode baru atau pada proyek baru, dorong untuk perubahan yang Anda cari. Jika ini adalah kode baru, senjata lama tidak mengharapkannya menjadi cara mereka meninggalkannya, dan ketika mereka melihat keuntungannya, mereka mungkin belajar dan beradaptasi dengan cara baru.
Sistem lama dapat berubah, tetapi butuh waktu. Mengubah sesuatu menimbulkan risiko, dan risiko kebencian bisnis, dan Anda harus meluangkan waktu dan bekerja untuk membuat perusahaan nyaman dengan perubahan itu.
sumber