Saya merasa bahwa saya pandai menulis kode sedikit demi sedikit, tetapi desain saya benar-benar payah. Pertanyaannya adalah, bagaimana cara meningkatkan desain saya - dan pada gilirannya menjadi desainer yang lebih baik?
Saya pikir sekolah dan perguruan tinggi melakukan pekerjaan yang baik dalam mengajar orang bagaimana menjadi pandai memecahkan masalah matematika, tetapi mari kita akui kenyataan bahwa sebagian besar aplikasi yang dibuat di sekolah umumnya panjangnya sekitar 1000 - 2000 baris, yang berarti bahwa sebagian besar merupakan latihan akademis yang tidak mencerminkan kompleksitas perangkat lunak dunia nyata - pada urutan beberapa ratus ribu hingga jutaan baris kode.
Di sinilah saya percaya bahwa bahkan proyek-proyek seperti topcoder / project euler juga tidak akan banyak membantu, mereka mungkin mempertajam kemampuan pemecahan masalah matematika Anda - tetapi Anda mungkin menjadi programmer akademik; seseorang yang lebih tertarik pada hal-hal yang bagus dan bersih, yang sama sekali tidak tertarik pada hal-hal duniawi dan berbulu sehari-hari yang ditangani sebagian besar programmer aplikasi.
Jadi pertanyaan saya adalah bagaimana cara meningkatkan keterampilan desain saya? Artinya, kemampuan merancang aplikasi skala kecil / menengah yang akan masuk ke beberapa ribu baris kode? Bagaimana saya bisa belajar keterampilan desain yang akan membantu saya membangun kit editor html yang lebih baik, atau beberapa program grafis seperti gimp?
Jawaban:
Satu-satunya cara untuk menjadi benar-benar hebat dalam sesuatu adalah mencoba, gagal secara spektakuler, coba lagi, gagal sedikit kurang dari sebelumnya, dan seiring waktu kembangkan pengalaman untuk mengenali apa yang menyebabkan kegagalan Anda sehingga Anda dapat mengelola situasi kegagalan potensial di kemudian hari. Ini sama benarnya dengan belajar memainkan alat musik, mengendarai mobil, atau mendapatkan PWN-usia yang serius di penembak orang pertama favorit Anda, karena mempelajari segala aspek pengembangan perangkat lunak.
Tidak ada jalan pintas nyata, tetapi ada hal-hal yang dapat Anda lakukan untuk menghindari masalah saat Anda memperoleh pengalaman.
sumber
Nah, tidak ada apel emas untuk pertanyaan semacam ini, dan saya merasa mungkin ini adalah untuk setiap pembuat kode sendiri untuk menemukan apa yang tepat untuknya. Inilah yang saya ambil.
Anda bisa membaca buku tentang masalah ini. Buku bagus. Buku yang fantastis. Tetapi saya menemukan bahwa buku-buku ini hanya membantu Anda setelah Anda mencoba membangun dan mendesain aplikasi - dan gagal.
Bagi saya, ini semua tentang pengalaman. Ketika saya mulai sebagai pemula saya membaca buku tentang cara mendesain. Saya tidak mengerti banyak konten saat itu. Ketika saya mulai bekerja dan harus merancang aplikasi sendiri, saya membuat aplikasi yang sangat berantakan. Mereka bekerja, tetapi mereka sulit dipertahankan. Kemudian saya membaca buku-buku itu lagi - dan kali ini saya lebih memahami mereka.
Sekarang, saya terus membuat kesalahan baru dan belajar dari kesalahan lama.
sumber
Berhentilah mendesain dan belajar kode refactor. Pengembangan tambahan dengan refactoring yang terus menerus dan agresif akan menghasilkan produk akhir yang jauh lebih bersih daripada desain di muka.
sumber
Baca tentang pola, tentu saja, tetapi yang pertama dan terutama baca tentang pola anti. Mengenali pola-anti penting, dan lebih mudah untuk memahami mengapa sesuatu tidak boleh dilakukan sedemikian rupa daripada mengapa harus dilakukan.
Lihat http://sourcemaking.com/antipatterns/software-development-antipatterns misalnya.
Tulis kode sehingga dapat disesuaikan dengan cepat jika persyaratan berubah (yang sangat umum di lingkungan produksi).
Jadilah super-skeptis tentang menambahkan "hanya satu hack kecil lagi." Satu lagi di sini, satu lagi di sana, dan kodenya menjadi tidak dapat dipelihara.
Nilai prinsip terbuka / tertutup .
Tulis tes (seperti dalam TDD). Mereka memaksa Anda untuk memikirkan desain Anda bahkan sebelum Anda benar-benar mengimplementasikannya.
Jelajahi kode proyek sumber terbuka (yang berukuran wajar, yaitu). Saya biasanya terkejut - biasanya - melihat begitu banyak tingkat abstraksi. Sekarang saya mengerti itu bukan seni demi seni, ada alasan mengapa itu dilakukan dengan cara ini.
sumber
Salah satu prinsip yang menurut saya sangat penting untuk desain yang baik adalah dekomposisi: jika sebuah kelas terlalu besar (lebih dari, katakanlah, 300-400 baris kode) pecah menjadi kelas yang lebih kecil; jika suatu metode terlalu besar (katakanlah, lebih dari 50 baris kode) uraikan; jika suatu proyek berisi lebih dari 50 kelas, dekomposisikan.
Kuncinya adalah memperkirakan ukuran sistem Anda dan membangun beberapa lapisan abstraksi (mis. Subsistem, aplikasi, proyek, modul, kelas, metode) yang memungkinkan Anda untuk menguraikan kode Anda menjadi unit yang dapat dipahami dengan hubungan yang jelas antara mereka dan beberapa dependensi.
sumber
Sulit, yang sebenarnya kita bicarakan adalah kemampuan untuk abstrak daripada membuat kode yang lebih baik, tetapi dua hal akan membuat Anda lebih baik dan satu hal akan membuat Anda lebih bahagia:
"Lebih baik"
A) Temukan desainer terbaik yang Anda bisa dan pasangkan program / lakukan desain bersama. Minta mereka untuk menjelaskan apa yang mereka pikirkan saat mereka mengatasi masalah, jangan puas dengan "rasanya benar" dan terus menggali. Proses itu akan membantu pesta "mentoring" juga
B) Bayangkan semuanya sebagai aktor individu dan percakapan di antara mereka. Masing-masing aktor harus memiliki peran / tanggung jawab tunggal dan kelompok mereka menangani sistem yang berbeda. Jika percakapan itu berhasil dan masing-masing aktor merasa koheren dan kohesif maka Anda berada di jalan Anda.
Dan "Lebih Bahagia"
C) Jika Anda sudah mencoba yang terbaik dan itu masih belum terjadi maka tidak ada salahnya menerima bahwa beberapa orang tidak dapat melakukan beberapa hal. Anda bisa menulis kode yang ketat dan cemerlang, tetapi tidak pernah bisa mendesain atau arsitek. Terus? Saya tidak bisa bermain olahraga fisik untuk minum kopi, saya tidak tampan dan mengendarai mobil saya tidak akan pernah lebih baik dari rata-rata. Nikmati dan manfaatkan keahlian Anda.
sumber
Dalam pengalaman pribadi saya membaca kode orang lain adalah sumber yang baik untuk "inspirasi". Maksud saya, mencoba memahami desain orang lain dan bertanya pada diri sendiri mengapa ia melakukan hal-hal seperti itu?
Anda dapat menemukan banyak proyek sumber terbuka untuk penelitian.
Lagi pula Anda perlu latihan.
sumber
Jangan hidup dalam ketakutan
Berjuang untuk kesederhanaan
Dengarkan pengguna Anda
Coba banyak ide
Buat sesuatu, lalu buat lebih baik
Kerjakan hal-hal yang menambah nilai, tinggalkan hal-hal yang tidak
sumber
Belajarlah untuk mengajukan pertanyaan yang tepat. Lebih sering daripada tidak, Anda akan meningkatkan desain Anda dengan melihat masalah dari sudut yang berbeda. Secara khusus ini akan membantu Anda menjauh dari fokus pada penyelesaian masalah yang dihadapi dan mencari lebih ke solusi yang memecahkan berbagai masalah terkait.
sumber