Apakah praktik pemrograman yang buruk khas dalam industri perangkat lunak? [Tutup]

140

Saya baru saja memulai pekerjaan pertama saya sebagai pengembang perangkat lunak lebih dari sebulan yang lalu. Semua yang saya pelajari tentang OOP, SOLID , KERING , YAGNI, pola desain, SRP , dll. Dapat dibuang keluar jendela.

Mereka menggunakan C # .NET Webforms dan melakukan hampir semua yang ada dalam Code Behind dengan sangat sedikit Kelas eksternal, jelas tidak disebut objek. Mereka memang menggunakan kontrol khusus dan menggunakannya kembali. Tentang satu-satunya objek yang digunakan adalah oleh Entity Framework . Mereka menggunakan kembali Kode Di Balik untuk setiap klien. Mereka memiliki metode yang panjang 400 baris melakukan semua jenis barang. Untuk klien baru, mereka mengambil aspx dan aspx.cs dan menghapus kode klien dan mulai menambahkan kode khusus klien baru.

Alasan pertama mereka adalah menambahkan perawatan tambahan, dan lebih banyak kode adalah lebih banyak perawatan. Ini adalah toko kecil dari tiga pengembang termasuk saya. Satu pengembang memiliki lebih dari 30 tahun pengalaman dan yang lainnya memiliki 20+ tahun pengalaman. Satu digunakan untuk menjadi pengembang game dan yang lainnya selalu bekerja di C dan C ++.

Seberapa umum hal ini dalam industri perangkat lunak? Bagaimana saya bisa memastikan bahwa saya tetap di atas OOP dan prinsip-prinsip terkait? Saya berlatih di waktu luang, dan saya merasa saya benar-benar perlu bekerja di bawah pengembang yang lebih berpengalaman untuk menjadi lebih baik di OOP.

Suram
sumber
Saya telah membuka diskusi tentang judul dalam obrolan: chat.stackexchange.com/transcript/message/40126879#40126879 Silakan bergabung dengan saya.
dcorking
1
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Insinyur Dunia

Jawaban:

263
  1. Prinsip-prinsip yang Anda kutip dalam pertanyaan Anda hanyalah ... prinsip. Itu bukan mandat, hukum atau perintah.
  2. Sementara orang-orang yang mengemukakan prinsip-prinsip ini sangat cerdas, mereka bukan otoritas absolut. Mereka hanya orang-orang yang menawarkan wawasan dan bimbingan mereka.
  3. Tidak ada cara yang "benar" untuk memprogram. Ini dibuktikan oleh fakta bahwa cara "diterima" yang kita lakukan telah berubah, dan terus berubah, secara radikal seiring waktu.
  4. Pengiriman produk seringkali dapat diutamakan daripada melakukannya dengan cara yang "benar". Ini adalah praktik yang lazim sehingga memiliki nama: Hutang Teknis.
  5. Beberapa arsitektur perangkat lunak yang umum digunakan tidak ideal. Praktik terbaik berkembang dari aplikasi monolitik yang besar ke arah koleksi modul yang longgar.

  6. Konteks itu penting. Banyak prinsip arsitektur hanya membuktikan nilainya ketika Anda bekerja dengan program besar atau domain tertentu. Sebagai contoh, pewarisan sebagian besar berguna untuk hierarki UI dan struktur lain yang mendapat manfaat dari pengaturan yang bersarang dengan erat.

Jadi, bagaimana Anda mengikuti jalan "benar", jalan berprinsip, sehingga Anda dapat keluar dari hutan belantara?

  1. Pelajari kesesuaian, alih-alih kebenaran. Cara "benar" untuk melakukan apa pun dalam pengembangan perangkat lunak adalah cara yang paling efektif memenuhi persyaratan spesifik Anda.
  2. Belajar pengorbanan. Segala sesuatu dalam pengembangan perangkat lunak adalah tradeoff. Apakah Anda ingin lebih cepat atau lebih sedikit penggunaan memori? Apakah Anda ingin bahasa pemrograman yang sangat ekspresif dengan sedikit praktisi, atau bahasa yang kurang ekspresif yang diketahui banyak pengembang?
  3. Belajar keabadian. Beberapa prinsip telah teruji oleh waktu dan akan selalu relevan. Sistem tipe bersifat universal. Fungsi kelas satu bersifat universal. Struktur data bersifat universal.

  4. Pelajari pragmatisme. Menjadi praktis itu penting. Kemurnian matematika, arsitektur kristal-katedral dan prinsip menara gading tidak berguna jika Anda tidak bisa mengirimkannya.

  5. Jadilah pengrajin, bukan fanatik. Pengembang perangkat lunak terbaik adalah mereka yang mengetahui aturan, dan kemudian tahu cara melanggarnya ketika masuk akal untuk melakukannya. Merekalah yang masih tahu bagaimana memecahkan masalah dan berpikir sendiri. Mereka menggunakan prinsip untuk menginformasikan dan membimbing pilihan mereka, bukan mendikte mereka.
  6. Tulis kode Banyak sekali. Prinsip-prinsip desain perangkat lunak adalah optimasi prematur sampai Anda telah menulis banyak kode dan mengembangkan naluri bagaimana menerapkannya dengan benar.
Robert Harvey
sumber
1
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
yannis
Di mana saya bisa mendapatkan wawasan tersebut secara sistematis dan saya tidak memiliki panduan?
Ooker
4
Jangan hanya memahami apa praktik terbaik, tetapi apa manfaat nyata praktik terbaik. Hal ini memungkinkan Anda untuk menghubungkan praktik terbaik dengan kesesuaian dan juga memastikan efektivitas dalam menerapkan praktik untuk mendapatkan efek terbaik. Jika Anda hanya melafalkan bahwa praktik terbaik menyelesaikan "pemisahan kekhawatiran", maka Anda mungkin tidak dapat memastikan bahwa Anda mengiris cara yang tepat untuk menuai manfaat dari praktik tersebut.
AaronLS
51

Ini tidak biasa. Satu hal yang perlu disadari adalah bahwa industri perangkat lunak sangat beragam. Beberapa perusahaan terdepan. Universitas-universitas terkemuka dan perusahaan perangkat lunak inovatif (bahkan beberapa laboratorium di perusahaan besar!) Serta orang-orang atau kelompok-kelompok yang diberkati seperti geng beranggotakan empat orang menganalisis masalah yang terjadi dengan cara-cara umum untuk melakukan sesuatu dan menciptakan bahasa, mesin, alat, dan pola baru. Perusahaan baru, sering spin-off atau split-off, mencoba menggunakannya secara komersial, dan terkadang sukses luar biasa. Pikirkan Facebook atau Google.

Tetapi perangkat lunak digunakan hampir di mana-mana saat ini, mungkin sebagian besar di perusahaan yang sebenarnya bukan perusahaan perangkat lunak. Saya kebanyakan bekerja di industri transportasi (otomotif dan kereta api), dan ada banyak pengalaman. Tapi tak satu pun dari mereka yang mendekati "ujung tombak". Terkadang mereka tidak bisa; keamanan perangkat lunak yang relevan tergantung pada alat yang diperiksa dengan baik (kami saat ini menggunakan kompiler C ++ yang divalidasi dari tahun 1990-an). Terkadang mereka tidak memiliki orang yang tepat. Seringkali perangkat lunak dikembangkan oleh para insinyur di bidang lain yang kebetulan meluncur ke pengembangan perangkat lunak di perusahaan mereka ketika perangkat lunak menjadi semakin penting. Seseorang tidak dapat mengharapkan mereka untuk mengetahui atau menggunakan prinsip-prinsip rekayasa perangkat lunak.

Hal lain yang perlu dipertimbangkan adalah apa yang penting dalam seorang insinyur di dunia nyata. Seringkali tugas yang dihadapi adalah, secara harfiah, bukan ilmu roket. Masalah roti-dan-mentega di perusahaan non-perangkat lunak dapat diselesaikan dengan cara perangkat lunak sederhana. Apa yang membuat seorang insinyur perangkat lunak yang berguna, bahkan mungkin baik adalah sebagian yang membuat seorang insinyur umum yang baik: Dapat diandalkan; mengatur dan mendokumentasikan pekerjaan Anda secara bertanggung jawab; menjadi kooperatif; buat estimasi biaya dan waktu yang baik (validitas estimasi lebih penting daripada biaya dan waktu aktual!); memahami apa yang bisa dan tidak bisa Anda lakukan. Yang sangat hilang di sini adalah "ketahui dan gunakan alat dan prosedur canggih". Apa yang Anda gambarkan adalah perusahaan yang telah menetapkan seperangkat alat dan proses yang sesuai untuk mereka. Mereka mungkin tidak akan pernah menghasilkan sesuatu yang seksi atau luar biasa, tetapi mereka memenuhi permintaan pelanggan dengan cukup baik untuk menghasilkan aliran pendapatan yang cukup. Itu bisa menjadi definisi teknik ;-).

Jadi ya: Apa yang Anda pelajari di universitas sebenarnya tidak umum di banyak bidang.


Saya ingin menambahkan sedikit penghiburan, atau nada yang lebih optimis. Apa yang Anda pelajari tidak boleh dibuang ke luar jendela. Anda dapat menerapkan prinsip yang lebih baik dalam pekerjaan sehari-hari Anda di mana itu tidak merusak banyak hal. Mungkin akan ada jendela peluang untuk memperkenalkan alat atau pola desain baru. Peluang terbaik adalah ketika cara lama dalam melakukan sesuatu tidak menyenangkan bagi kolega, atau jika mereka mengalami masalah dengan mengelola kompleksitas atau pemeliharaan (dua masalah paling ganas yang ditangani oleh inovasi). Bersiaplah untuk menawarkan peningkatan ketika ada peluang. Menjadi pengaruh positif dan secara bertahap meningkatkan metode dan alat; sebarkan pengetahuan di mana itu dihargai.

Peter A. Schneider
sumber
2
@nocomprende: no entiendo ... Apakah maksud Anda bahwa kesamaan lebih umum, dan yang luar biasa, sayangnya, luar biasa? Atau bahwa hal yang biasa tidak baik? Baiklah.
Peter A. Schneider
3
"Apa yang Anda pelajari di universitas sebenarnya tidak umum di banyak bidang" - Itu tampaknya menjadi kunci ...
Brian Knoblauch
1
Saya hanya bermaksud bahwa bidang peranti lunak memiliki orang-orang dengan kemampuan manusia yang lengkap, keahlian yang lengkap, perusahaan memiliki kesiapan yang lengkap, berbagai macam masalah, dan sebagainya, seperti seluruh dunia. Perangkat lunak tidak berbeda dengan cara-cara ini daripada bidang lainnya. Masalahnya bisa ditimbulkan di situs SE mana pun.
1
"Perangkat lunak yang relevan untuk keselamatan tergantung pada alat yang diperiksa dengan baik (kami saat ini menggunakan kompiler C ++ yang divalidasi dari tahun 1990-an)" kedengarannya cukup canggih bagi saya!
Hovercouch
1
@ PeterA. Pemula itu adalah lelucon konyol tentang betapa mutakhirnya untuk benar-benar memeriksa alat Anda. ;)
Hovercouch
16

Mereka menggunakan C # .Net Webforms dan melakukan hampir semua yang ada dalam Code Behind dengan Kelas Eksternal yang sangat sedikit

Ada penjelasan Anda di sana. Jika Anda tidak sadar, kode Formulir Web out-of-the-box cukup banyak kebalikan dari OOP, SOLID, KERING, YAGNI, Pola Desain, SRP , dll. Bahkan contoh resmi dari Microsoft dari beberapa tahun yang lalu akan membuat Anda ngeri hari ini.

Formulir Web mendorong dirinya sendiri ke arah alur prosedural, dengan beberapa "acara" palsu dipicu oleh klik kontrol dan sejenisnya. Pengembang yang menghabiskan banyak waktu dalam membuat Formulir Web juga biasanya tampak enggan untuk menyimpang dari itu juga, mungkin karena mereka tenggelam begitu banyak waktu untuk mempelajari siklus hidup halaman dan bagaimana melakukan kontrol yang diberikan secara dinamis sehingga mereka enggan membuang pengetahuan itu sekarang. dalam menghadapi metode yang lebih baru / lebih baik. Versi yang tidak disadari dari kekeliruan biaya sunk. Para dev ini telah menghabiskan waktu bertahun-tahun untuk belajar bagaimana mengatasi Formulir Web, dan sekarang tidak akan dengan mudah menyimpang dari keahlian itu, karenanya pembicaraan mereka tentang waktu "pemeliharaan".

Dan ini cukup umum di ruang .NET Web Forms, btw.

Graham
sumber
6
Senang mengatasi tumpukan teknologi pertanyaan yang disebutkan
jasonoriordan
5
Siapa yang ingin melihat melalui 20 kelas bersarang dan memanggil satu sama lain hanya untuk mencari tahu apa yang terjadi ketika Anda mencentang atau menghapus centang pada kotak centang? Hanya orang-orang gila, atau orang-orang yang berpikir profesor perguruan tinggi adalah dewa.
developerwjk
1
Sebenarnya, ketika WebForm dibuat, praktik standar industri berbeda (atau tidak ada), dan aplikasi yang sudah ada tidak pernah menerima refactoring ketika "cara keren baru untuk melakukan sesuatu" mulai diadopsi. Itu sebabnya Anda melihat banyak kode WebForm berantakan dengan berantakan. Prinsip pemrograman dipisahkan dari tumpukan teknologi yang Anda gunakan, sehingga dapat diterapkan bahkan di WebForms, Cobol, Assembly, apa pun.
BgrWorker
1
Ya itu benar. Berapa MB kondisi tampilan Anda? Anehnya, saya pikir kontrol sisi Server cenderung mendorong logika bisnis ke UI. Namun programmer itu banyak yang salah karena siap dengan omong kosong pemrograman kargo asp.net. Jadi: begitu banyak peristiwa yang objek bisnis tidak dapat mencapai kondisi yang benar. Bis. objek tidak dapat saling memanggil karena sambungan UI. Lalu: oh, lihat Mo! Kita dapat bekerja "terputus!" nyuck, nyuck, nyuck. Volume data nyata membuat aplikasi Anda terhenti karena kelas asp.net berpura-pura menjadi mesin basis data. Tapi kami menyimpan koneksi agar tidak aus!
radarbob
1
Semua kata-kata kasar ini benar ... hati benar-benar menyedihkan. Saya telah melihat begitu banyak dari apa yang dijelaskan dalam posting ini mengenai aplikasi WebForms sehingga saya merasa seperti aplikasi ini sedikit lebih baik daripada beberapa skrip PHP yang dilempar bersama oleh seorang siswa sekolah menengah yang diajak minum energi - dan itu dianggap perangkat lunak perusahaan!
Greg Burghardt
12

Seberapa umum hal ini dalam industri perangkat lunak?

Sangat umum. Tentang kesamaan yang sama seperti memiliki tukang ledeng menghancurkan pipa ledeng Anda, tukang kayu yang memberikan sampah, atau penjahit murah yang membuat setelan jas yang tidak pas. Yaitu, itu semua manusia.

Ada alasan bagus mengapa ini terjadi: orang yang tidak benar-benar terlatih (atau tidak antusias) harus mengimplementasikan sesuatu di bawah tekanan.

Ini bukan masalah orang-orang itu, terutama, tetapi biasanya dari struktur seputar pengembangan perangkat lunak di perusahaan itu. Sebagai contoh, sebuah perusahaan mungkin memiliki sekelompok pekerja magang mengembangkan perangkat lunak internal mereka; bahkan jika pekerja magang itu cerdas dan berpengetahuan luas, mereka hanya akan berada di sana selama beberapa minggu atau bulan, dan kepemilikan akan sering berubah.

Atau beberapa orang yang hebat dalam domain, tetapi bukan seorang programmer, mungkin meretas bersama beberapa aplikasi VBA dll karena tampaknya cukup mudah di awal.

Atau aplikasi yang dibuat dengan baik berakhir pada fase pemeliharaan, semua pengembang yang baik melanjutkan, dan kemudian terus dikembangkan oleh beberapa orang (kasus terburuk: satu) yang tahu sedikit tentang hal itu, yang tidak memiliki dokumentasi, dll.

Bagaimana saya bisa memastikan bahwa saya tetap di atas OOP dan prinsip-prinsip terkait? Saya berlatih di waktu luang dan saya merasa perlu bekerja di bawah pengembang yang lebih berpengalaman untuk menjadi lebih baik di OOP.

Ada dua kemungkinan jawaban:

  • Baik: diskusikan ini dengan bos Anda dan pastikan Anda masuk ke proyek bersih. Jika tidak memungkinkan, cari bos baru.
  • Atau: bertanggung jawab untuk ini sendiri. Itu berarti melakukannya sendiri - di waktu luang Anda, atau jika Anda bisa, di perusahaan, tetapi didorong oleh diri sendiri (tidak mungkin).

Jika jawaban kedua terdengar terlalu sinis untuk Anda, maka izinkan saya meyakinkan Anda bahwa jawabannya tidak. Seorang tukang kayu yang memiliki toko woodworking di rumah akan paling pasti menjadi tukang kayu yang lebih baik daripada orang yang tidak.

Sebagai contoh, sangat mungkin dan sangat menyenangkan bagi sebagian orang untuk, misalnya, menggali ke dalam bahasa baru seperti Ruby, belajar tidak hanya sintaksis, tetapi juga dalam aspek OO khusus dari bahasa itu, dan benar-benar menyelam dalam-dalam. Semua ada di waktu luang Anda, tanpa memiliki koneksi ke pekerjaan Anda. Itu hanya akan menjadi hobi, tetapi menjadi profesional terlatih seperti Anda, itu bisa sama efektifnya (atau lebih tepatnya) dengan duduk di sebelah pengembang utama dan mencoba mengikuti apa yang mereka lakukan. Ini kemudian akan semata-mata untuk pengembangan pribadi Anda dan kesenangan Anda sendiri. Jika Anda tidak bersenang-senang melakukan ini, atau jika Anda merasa tidak dapat mencapai pemahaman apa pun, goreskan itu, dan kembali ke jawaban pertama.

Bahwa pengembang memimpin yang melatih Anda telah cukup mungkin belajar hal-hal yang persis dengan cara ini ...

AnoE
sumber
2
Jadi, hanya rekrut orang yang berkualifikasi, terlatih penuh dan antusias untuk melakukan ... baik, apa saja. Kenapa kita tidak melakukan ini? Ini menimbulkan pertanyaan: bagaimana orang yang tidak berkualitas, tidak terlatih dan tidak antusias hidup? Charles Dickens melaporkan jawaban untuk pertanyaan itu: tidak terlalu baik jika sama sekali.
@nocomprende, Anda memproyeksikan pendapat Anda, saya tidak menyiratkan apa yang Anda tulis dengan cara apa pun. Saya menjelaskan alasan fakta yang diperhatikan OP.
AnoE
Aku hanya terus berpikir tentang pertanyaan Kurt Vonnegut ini dari Tuhan memberkati Anda Tuan air mawar : "Apa di neraka adalah orang-orang untuk ?"
2
@nocomprende, jika saya berbicara tentang "orang yang tidak terlatih" Saya tidak mengatakan bahwa orang itu bodoh, saya mengatakan bahwa untuk alasan apa pun seseorang melakukan pekerjaan yang tidak terlatih dengan baik untuk pekerjaan itu. Kesalahannya bisa terjadi pada manajernya karena memberinya pekerjaan yang salah; atau dengan keadaan (yaitu rekan kerja yang sakit), atau berbagai alasan apa pun yang dapat Anda bayangkan. Tidak ada hubungannya dengan menyarankan bahwa kita hanya harus merekrut orang-orang hebat. Jika saya harus memperbaiki pipa ledeng di rumah saya, Anda bisa yakin bahwa saya akan membuat kekacauan, meskipun saya hebat dalam hal apa pun yang mungkin saya lakukan.
AnoE
1
Ada ide lama dari Antropologi, bahwa masyarakat budak seperti orang Mesir Kuno jauh lebih sedikit keluar dari masyarakat daripada masyarakat yang membantu orang 'berkembang'. Inilah sebabnya mengapa Kapitalisme lebih baik daripada budaya abad pertengahan. Idealnya, setiap orang dapat membuatnya berkembang, dan kemudian kita akan mendapatkan manfaat penuh dari setiap orang, dan setiap orang akan mendapatkan manfaat penuh dari masyarakat. Kapitalisme tidak cukup baik untuk memastikan hal ini, jadi kita membutuhkan sesuatu yang lebih. Bahwa ada orang yang melakukan pekerjaan yang kurang optimal adalah buktinya, karena jika Kapitalisme sempurna, ini tidak akan terjadi.
11

Saya berpikir bahwa di Spanyol adalah konstan karena ketika seorang pengembang melewati bertahun-tahun di sebuah perusahaan, dia (atau dia) biasanya dipromosikan ke bidang manajemen yang lebih seperti analisis dan manajemen proyek. Akibatnya tidak ada peer review yang dilakukan dan kode biasanya ditulis oleh orang yang kurang berpengalaman.

Kegagalan orang-orang yang berpengalaman ini tidak pernah diperbaiki: sebaliknya, satu-satunya fokus mereka adalah menyelesaikan pekerjaan. Akibatnya, semakin banyak praktik yang salah terakumulasi dalam kode.

Akhirnya beberapa keledai pintar mengatakan bahwa "solusi" terbaik adalah mengubah teknologi yang muncul yang akan menghasilkan kode yang lebih bersih dan lebih dapat dikelola, menciptakan aplikasi baru. Seolah-olah teknologi itu sendiri dapat melakukan itu.

Sekali lagi, programmer yang tidak berpengalaman dimasukkan untuk bekerja dalam teknologi baru itu, tidak ada yang meninjau kode dan lingkaran ditutup lagi .... selama-lamanya ....

Raul Luna
sumber
16
Tidak ada hubungannya dengan Spanyol. Itu adalah prinsip Peter — orang dipromosikan keluar dari posisi di mana ia bekerja dengan baik sampai mereka mencapai posisi di mana tidak, dan terjebak di sana, karena tidak ada yang mempromosikannya.
Jan Hudec
3
Ada juga fakta bahwa industri perangkat lunak masih berkembang, sehingga orang-orang dengan pengalaman yang relatif sedikit lebih banyak. Dan banyak perusahaan tidak memiliki orang yang berpengalaman sama sekali, karena mereka baru dan terlalu murah untuk menyewa seorang veteran, mengira sekelompok greenhorns segar dari kampus akan melakukannya — mereka tidak akan melakukannya.
Jan Hudec
1
@JanHudec Saya tidak tahu, saya merasa lebih suka memiliki anak muda yang baru lulus dari perguruan tinggi daripada salah satu dari 20+ tahun pengalaman orang-orang yang dibicarakan oleh poster asli
Mikey Mouse
9
@MikeyMouse, benar, ada banyak orang yang tidak memiliki pengalaman 20 tahun, tetapi lebih dari 20 kali pengalaman 1 tahun. Dan mereka mengeja masalah yang sangat besar.
Jan Hudec
".. prinsip peter .."; khususnya di lembaga pemerintah di mana itu adalah fenomena yang lebih sadar. Saya menyebutnya Program Inbreeding Manajemen mereka. Meskipun sering ada keseimbangan dari kode yang baik / buruk, kengeriannya adalah ketika MIP menegakkan kembali ketidakmampuan. Bertahun-tahun kemudian ketika mereka tertentu jr. programmer sekarang adalah kepala divisi, yang pada gilirannya tidak akan mempromosikan siapa pun yang lebih baik daripada mereka, orang-orang baik dan ide-ide pergi atau dipaksa keluar. Toko telah menjadi keranjang kasus ketidakmampuan; terjebak dalam "pola pikir radiasi latar belakang yang tersisa" pemrograman pada mainframe dalam budaya untuk bergaul.
radarbob
7

Beberapa "praktik terbaik" yang Anda pelajari di sekolah tidak praktis atau hemat biaya pada proyek dunia nyata. Salah satu perubahan terbesar yang saya perhatikan adalah pemformatan dan komentar. Sebagian besar profesor saya menekankan pentingnya mendokumentasikan kode Anda secara ekstensif, tetapi di dunia nyata, kode yang baik sering (tidak selalu!) Jelas, dan yang lebih penting banyak bos tidak ingin membayar Anda untuk menghabiskan waktu menulis komentar.

Terkadang Anda akan melihat programmer yang menekan waktu menggunakan pintasan dan anti-pola yang membutuhkan pelat ketel lebih sedikit daripada solusi berkualitas.

Namun, salah satu masalah terbesar yang saya perhatikan di banyak tim dan proyek adalah keengganan untuk mempelajari hal-hal baru. Banyak programmer lama yang saya ajak bicara memulai karier mereka di periode 'Wild West' dalam rekayasa perangkat lunak ketika kualifikasi dimulai dan diakhiri dengan kemauan untuk menulis kode. Mereka sering mengambil jurusan yang benar-benar berbeda, dan terjun ke pemrograman dengan sedikit atau tanpa pendidikan formal ketika ada kesempatan (misalnya majikan mereka tidak memiliki programmer dan membutuhkan seseorang untuk belajar untuk membangun perangkat lunak internal). Beberapa pemrogram otodidak sekolah tua ini tidak pernah berupaya mempelajari praktik pengkodean modern, dan terus membuat kode dengan gaya apa pun yang mereka pelajari beberapa dekade lalu. Ketika mereka akhirnya bertanggung jawab atas proyek baru karena senioritas, mereka cenderung menahan proyek dan merusak kualitas kode secara keseluruhan.

Tentu saja hal di atas tidak berlaku untuk semua programmer yang lebih lama, dan coders generasi yang lebih baru bisa sama bersalahnya. Saya telah bekerja dengan banyak programmer yang lebih muda yang mengambil beberapa alat dan perpustakaan yang baru lulus dari perguruan tinggi dan kemudian berhenti belajar sepenuhnya. Mereka akan mengunduh IDE atau pustaka sekali dan tidak pernah memperbaruinya kecuali jika perusahaan mereka membutuhkannya (Anda kadang-kadang dapat menebak tahun berapa seorang lulusan lulus berdasarkan seberapa ketinggalan perpustakaannya). Mereka tidak mengikuti fitur baru dalam bahasa pilihan mereka, dan tidak pernah belajar bahasa baru. Mereka tidak mempelajari strategi pemrograman baru, dan dapat menyalahgunakan pola atau paradigma karena mereka tidak tahu alternatif yang lebih tepat (oh MVC, betapa beratnya Anda dilecehkan). Seiring berjalannya waktu, alur kerja mereka menjadi semakin usang, dan mereka menjadi lebih dari kewajiban daripada aset.

Ringkasnya, dua penyebab terbesar dari basis kode yang berantakan adalah tenggat waktu yang terburu-buru dan programmer dengan pengetahuan yang ketinggalan zaman atau tidak lengkap. Sayangnya, tanggung jawab untuk kedua masalah ini bisa sangat berat pada bos atau CTO, yang harus memastikan bahwa tenggat waktu realistis dan bahwa staf mutakhir tentang pengetahuan dan keterampilan mereka. Jika bos tidak tahu apa-apa tentang praktik pemrograman yang baik, yang terbaik yang dapat Anda lakukan adalah mencoba menyarankan perubahan dan berharap mereka terbuka untuk saran. Sayangnya, mereka cenderung percaya pada kata-kata programmer yang lebih senior yang tidak mengerti OOP dan suka menulis 10.000 kelas garis.

pengguna45623
sumber
19
Saya sangat tidak menyukai mitos ini bahwa kode yang baik cukup jelas dan komentar sudah usang. Paling-paling kode yang baik akan memberi tahu Anda apa yang sedang terjadi. Namun, tidak memberikan indikasi mengapa melakukan sesuatu atau bahkan jika itu benar. Komentari kode Anda sehingga pengelolanya di masa depan tidak perlu menebak mengapa Anda fobricating foo tetapi tidak bar .
user369450
13
Saya tidak setuju dengan paragraf pertama Anda. Mendokumentasikan kode Anda (misalnya dengan komentar) setidaknya sama pentingnya dengan ketika Anda kuliah. Perbedaannya adalah bahwa tidak ada profesional akan berkomentar apa yang dilakukan garis - mereka akan mendokumentasikan MENGAPA. Apa yang terjadi dapat dibaca dari kode sumber. Mengapa sering merupakan hasil dari beberapa menit hingga berjam-jam berpikir.
Araho
1
Ada beberapa alasan untuk menulis mengapa kode melakukan sesuatu, dan sebagian besar waktu dapat dijelaskan dengan nama metode yang lebih baik. Mari kita hadapi itu, sebagian besar kode yang kita semua biasanya tulis cukup sederhana untuk tidak pantas komentar.
BgrWorker
1
Bagaimana lagi? Kode ditulis sekali dan dibaca berulang kali. Tulis komentar dan Anda akan menghemat waktu dalam jangka panjang. @ BgrWorker Tergantung pada orangnya, saya kira. Saya secara teratur menulis algoritme dan saya pikir mereka layak mendapatkan komentar (yang terbaru adalah parser matematika simbolis ... pasti perlu komentar)
person27
1
Saya pikir unit test jauh lebih berharga daripada komentar. Terlalu sering saya melihat situasi di mana kode diperbarui dan komentar tidak berlaku lagi. Dalam hal ini komentar yang kedaluwarsa mempersulit untuk mencari tahu apa yang terjadi. Tes unit mendokumentasikan maksud dari programmer asli, dan jika sistem CI Anda menjalankan tes unit pada saat check-in maka Anda berkewajiban untuk mempertahankannya.
bikeman868
2

Beberapa praktik pemrograman yang buruk dihasilkan dari keharusan bekerja dengan perangkat lunak lawas yang pertama kali memulai pengembangan beberapa dekade lalu. Jika ada perangkat lunak yang sangat kompleks, menulis ulang semuanya mungkin bukan pilihan. Bahkan mungkin sangat sulit untuk memahami segala sesuatu yang sebenarnya dilakukan oleh kode. Pilihan terbaik mungkin hanya menyalin apa yang berfungsi sambil juga mencoba mengintegrasikan praktik pemrograman yang lebih baik jika Anda dapat melakukannya tanpa merusak apa pun.

John Smith
sumber
Kegagalan biasanya juga bukan pilihan.
1

Saya pikir penting untuk tidak hanya mengatakan yang benar dari yang salah tetapi untuk mengetahui alasan di balik setiap benar dan salah. Ketika Anda tahu alasannya, Anda dapat memprediksi konsekuensi. Mengapa menggunakan prinsip ini atau itu bukan karena itu dijelaskan dalam sebuah buku, tetapi karena kita tahu bagaimana itu membantu dan apa yang sebenarnya terjadi jika kita melanggarnya. Jika Anda tahu apa yang terjadi ketika Anda dapat mempertimbangkan pro dan kontra dan membuat keputusan. Ini juga akan membantu Anda memperdebatkan posisi Anda setiap kali. SOLID dan OOP juga dapat mengurangi pemeliharaan jika digunakan dengan baik.

SOLID jika digunakan terlalu dogmatis mengarah ke terlalu banyak kelas dan metode yang tidak sebagus itu juga. Jangan berlebihan. Ini sebagian merupakan masalah besar dengan buku pelajaran dan tutorial kami karena mereka sering mencoba mempromosikan ide tanpa pembenaran yang tepat. OOP juga memiliki kontra. Banyak prinsip dan paradigma yang saling bertentangan. Anda tidak perlu berada di atas, Anda harus membuat semuanya masuk akal, dibenarkan, anggun, dan sederhana.

Juga, karena ini adalah pekerjaan pertama Anda, kemungkinan programmer ini tidak terlalu ahli. Tetapi sekali lagi, mereka mungkin dipercaya dengan tugas-tugas yang tidak terlalu sulit yang dapat dilakukan tanpa banyak keterampilan dan untuk gaji yang lebih rendah dengan coders murah yang kurang terampil. Begini cara ekonomi bekerja. Setiap tempat kerja berbeda.

Saya mengerti bagaimana perasaan anda. Jangan panik . Anda akan membutuhkan apa yang Anda ketahui, mungkin tidak segera, tetapi itu akan membantu Anda. Mungkin di tempat kerja yang berbeda, mungkin di beberapa kesempatan. Anda punya waktu di depan Anda untuk melangkah lebih jauh.

Gherman
sumber