Saya mencari cara yang efisien, yang juga tidak datang sebagai penghinaan, untuk memperkenalkan konsep OOP kepada anggota tim yang ada? Rekan satu tim saya bukan orang baru dalam bahasa OO. Kami telah melakukan C ++ / C # untuk waktu yang lama sehingga teknologi itu sendiri sudah tidak asing lagi.
Namun, saya melihat-lihat dan tanpa upaya besar-besaran (kebanyakan dalam bentuk ulasan kode), sepertinya yang kami produksi adalah kode C yang kebetulan berada di dalam kelas. Hampir tidak ada penggunaan prinsip tanggung jawab tunggal, abstraksi atau upaya untuk meminimalkan sambungan, hanya untuk beberapa nama. Saya telah melihat kelas yang tidak memiliki konstruktor tetapi mendapatkan memset ke 0 setiap kali mereka dipakai.
Tetapi setiap kali saya membuka OOP, semua orang selalu mengangguk dan membuatnya tampak seperti mereka tahu persis apa yang saya bicarakan. Mengetahui konsep itu baik, tetapi kami (beberapa lebih dari yang lain) tampaknya memiliki waktu yang sangat sulit menerapkannya dalam hal memberikan pekerjaan yang sebenarnya.
Ulasan kode telah sangat membantu tetapi masalah dengan ulasan kode adalah bahwa mereka hanya terjadi setelah fakta sehingga untuk beberapa tampaknya kita akhirnya menulis ulang (kebanyakan refactoring, tetapi masih membutuhkan banyak waktu) kode yang baru saja ditulis. Juga ulasan kode hanya memberikan umpan balik ke insinyur individu, bukan seluruh tim.
Saya bermain-main dengan ide melakukan presentasi (atau seri) dan mencoba untuk memunculkan OOP lagi bersama dengan beberapa contoh kode yang ada yang bisa ditulis lebih baik dan dapat di refactored. Saya bisa menggunakan beberapa proyek yang benar-benar tua yang tidak ada yang memiliki lagi jadi setidaknya bagian itu tidak boleh menjadi masalah sensitif. Namun, apakah ini akan berhasil? Seperti yang saya katakan kebanyakan orang telah melakukan C ++ untuk waktu yang lama jadi dugaan saya adalah a) mereka akan duduk di sana berpikir mengapa saya memberi tahu mereka hal-hal yang sudah mereka ketahui atau b) mereka mungkin menganggapnya sebagai penghinaan karena saya mengatakan kepada mereka bahwa mereka tidak tahu bagaimana melakukan pekerjaan yang telah mereka lakukan selama bertahun-tahun jika tidak beberapa dekade.
Apakah ada pendekatan lain yang akan menjangkau khalayak yang lebih luas daripada tinjauan kode, tetapi pada saat yang sama tidak akan terasa seperti kuliah hukuman?
Saya bukan anak baru keluar dari perguruan tinggi yang memiliki cita-cita utopis kode yang dirancang dengan sempurna dan saya tidak mengharapkan itu dari siapa pun. Alasan saya menulis ini adalah karena saya baru saja mengulas seseorang yang sebenarnya memiliki desain tingkat tinggi yang layak di atas kertas. Namun, jika Anda menggambarkan kelas: A -> B -> C -> D, dalam kode B, C dan D semuanya mengimplementasikan antarmuka publik yang hampir sama dan B / C memiliki fungsi satu liner sehingga kelas A paling top melakukan hal yang mutlak semua pekerjaan (hingga manajemen memori, penguraian string, pengaturan negosiasi ...) terutama dalam 4 metode mongo dan, untuk semua maksud dan tujuan, panggilan hampir secara langsung ke D.
Pembaruan: Saya seorang pemimpin teknologi (6 bulan dalam peran ini) dan memiliki dukungan penuh dari manajer grup. Kami sedang mengerjakan produk yang sangat matang dan biaya perawatan pasti membuat mereka diketahui.
Jawaban:
Mengapa Anda tidak mengembangkan pelatihan singkat dalam prinsip-prinsip SOLID dan memberi mereka pelatihan ini? Tampaknya telah bekerja cukup baik bagi saya di organisasi saya saat ini dan saya merasa memberikan pelatihan singkat sebenarnya menyenangkan (untuk semua orang yang terlibat).
Ketika saya memberikan pelatihan saya, saya mengambil waktu untuk mencari contoh "buruk" patologis dalam kode yang ada (dari berbagai proyek), dan refactored mereka dalam presentasi, langkah demi langkah, menggunakan prinsip-prinsip. Ini menunjukkan hal itu
sumber
Pada satu proyek, kami melakukan tinjauan desain.
15 menit. Di papan tulis. Bicara melalui desain sebelum pengkodean.
Bagian yang paling penting adalah menjadwalkan tinjauan desain sebelum pekerjaan implementasi.
Kami juga memiliki "Ulasan Desain Kritis" yang merupakan kesepakatan besar, berkeringat. Mereka melibatkan banyak dokumen dan presentasi yang panjang. Mereka sulit untuk menjadwalkan dan hampir selalu terdorong keluar sampai setelah pengkodean dimulai, mengurangi nilainya menjadi nol.
Tinjauan desain informal - sebelum pengkodean - tanpa tekanan - tanpa dokumentasi - memungkinkan diskusi yang lebih baik tentang bagaimana tanggung jawab diberikan dan bagaimana benda akan berkolaborasi.
sumber
Saya berasumsi Anda lebih muda dari beberapa pengembang, tetapi lebih tinggi dalam rantai makanan.
Dengan risiko terkurung dalam downvotes, bisa jadi 'insinyur berpengalaman' sebenarnya melakukan hal yang benar - atau karena ini adalah produk matang yang mungkin telah ada selama beberapa dekade, apa yang pernah menjadi hal yang benar.
Kode lama cenderung telah dioptimalkan untuk berjalan dengan cepat pada perangkat keras saat itu; antara lain hal ini berarti mengurangi tingkat warisan dan menghindari panggilan fungsi / metode untuk operasi sepele.
Kompiler telah menjadi jauh lebih pintar selama bertahun-tahun, jadi tidak semua yang dulu benar sekarang adalah - misalnya, kompiler dapat memilih untuk menjalankan fungsi kecil.
Mungkin rute ke depan adalah mengadopsi pendekatan yang berbeda - minta pengembang untuk menjelaskan bagaimana / mengapa metode mereka lebih baik daripada teori yang Anda ajarkan - dan jujurlah tentang hal itu.
sumber
Akan mendorong untuk unit test dengan cakupan cabang 100% dari setiap metode baru / yang diubah tidak mengarah untuk meminimalkan kopling antar metode.
sumber
Anda mungkin ingin mengambil buku "Pola Desain" dari Gang of Four. Ini tidak spesifik untuk C ++, jadi Anda tidak secara terbuka mengkritik pengetahuan C ++ rekan Anda saat Anda merujuknya. Namun pada saat yang sama itu membahas topik yang Anda anggap relevan. Selain itu, buku ini diterima secara luas sebagai relevan, sehingga mereka tidak dapat dengan mudah menganggapnya sebagai teori atau tidak praktis.
Di sisi lain, pertimbangkan bahwa C ++ bukan bahasa OO murni, baik dalam desain maupun dalam praktik. Keseluruhan cerita konstruktor / memset kedengarannya Anda harus memperkenalkan RAII, yang sama sekali bukan teknik OO tetapi khusus untuk C ++ (sayangnya - .Net IDispose menunjukkan apa yang terjadi ketika RAII adalah renungan). Buku-buku yang relevan di sini adalah (Lebih Banyak) Efektif C ++ dan (Lebih Banyak) Luar Biasa C ++.
sumber
But every time I bring up OOP, everyone always nods and makes it seem like they know exactly what I'm talking about
danMy teammates are not new to OO languages
, tapi saya bisa melihat bagaimana itu memang agak kabur karena mereka mungkin berbohong tentang mengetahui OOP ketika OP berbicara kepada mereka tentang hal itu.