Saya melihat beberapa masalah serius dengan pertanyaan ini. Ayo mulai.
Bagaimana berhenti membuang-buang waktu mendesain arsitektur
Pertanyaan ini agak dimuat. Juga, Anda tidak merancang arsitektur. Anda arsitek . Arsitektur dan desain adalah kegiatan yang saling melengkapi dan terkait, tetapi tidak sama, bahkan jika mereka tumpang tindih.
Demikian pula, dengan cara yang sama dimungkinkan untuk membuang waktu melakukan arsitektur (dengan over-architecting), Anda juga dapat membuang waktu over-desain dan over-coding (dengan mengkodekan hal-hal dengan cara yang jauh lebih kompleks daripada yang diperlukan, atau dengan gagal untuk kode untuk hal-hal yang diperlukan.)
Arsitektur yang tepat bertujuan untuk mencegah pemborosan dalam pengkodean. Ia melakukannya dengan membatasi, mempersempit, dan mendokumentasikan cara-cara yang mungkin dilakukan oleh sistem yang kompleks 1) dirancang, 2) dikodekan dan diuji, 3) dikirim, 4) dipelihara, 5) pulih dari kegagalan, dan 6) akhirnya dinonaktifkan.
Pengalaman saya adalah bahwa orang-orang yang hanya menikmati pengkodean, mereka hanya kode tanpa memikirkan bagaimana sistem untuk beroperasi dan dipelihara dalam jangka panjang, pindah ke kentang panas berikutnya meninggalkan beberapa jiwa miskin untuk mempertahankan golem jelek.
Tapi saya ngelantur ...
Ini masalahnya: Untuk sistem yang cukup sederhana, arsitektur sudah terbukti dengan sendirinya dan berasal dari desain dan praktik implementasi yang baik.
Ini hanya untuk sistem besar yang melibatkan sejumlah besar orang atau perangkat lunak tingkat sistem yang melakukan hal-hal yang sangat kompleks yang memerlukan arsitektur eksplisit.
Saya baru saja lulus dari universitas dan mulai bekerja sebagai programmer. Saya tidak merasa sulit untuk menyelesaikan masalah "teknis" atau melakukan debugging, hal-hal yang saya katakan memiliki 1 solusi.
Itu adalah persyaratan minimum untuk profesi ini, dan saya senang Anda tidak memiliki masalah dalam melakukannya (saya akan khawatir jika melakukannya.)
Tetapi tampaknya ada kelas masalah yang tidak memiliki satu solusi
Itu adalah roti dan mentega dari profesi kita, jenis masalah di mana majikan bersedia membayar gaji kita (biasanya) jauh di atas rata-rata.
Faktanya, masalah yang layak dipecahkan adalah masalah yang dapat memiliki lebih dari satu solusi. Masalah dunia nyata, mereka memang seperti itu. Dan dunia membutuhkan keahlian kita, sebagai pengembang perangkat lunak, untuk menghasilkan pertukaran yang dapat diterima.
- hal-hal seperti arsitektur perangkat lunak.
Arsitektur benda adalah karakteristik sistem kompleks yang tak terhindarkan, baik itu virtual / perangkat lunak atau di dunia nyata. Setiap sistem yang beroperasi, yang mengambil input dan menghasilkan output, itu akan kompleks dan akan memiliki arsitektur.
Ketika kami mengembangkan perangkat lunak untuk sistem seperti itu (sistem perbankan, sistem pemantauan daya, sistem penjualan tiket, dll), kami bertujuan untuk menghasilkan perangkat lunak yang meniru fungsi dan persyaratan sistem tersebut.
Kami hanya tidak bisa hanya sayap dan kode itu gaya koboi. Kami membutuhkan semacam arsitektur. Ini terutama benar jika proyek tersebut membutuhkan lusinan insinyur, jika tidak lebih.
Hal-hal ini membingungkan saya dan menyebabkan saya sangat tertekan.
Itu tidak apa-apa. Ini bukan pelajaran yang mudah dipelajari atau diajarkan, bukan tanpa banyak latihan.
Saya menghabiskan waktu berjam-jam untuk mencoba memutuskan bagaimana "merancang" program dan sistem saya. Sebagai contoh, apakah saya membagi logika ini menjadi 1 atau 2 kelas, bagaimana saya memberi nama kelas-kelas tersebut, apakah saya harus menjadikan ini privat atau publik, dll. Pertanyaan-pertanyaan semacam ini menghabiskan banyak waktu saya, dan itu membuat saya frustrasi. Saya hanya ingin membuat program, arsitektur terkutuk.
Sayangnya, itu bukan arsitektur perangkat lunak.
Ini bahkan bukan desain, tetapi hanya coding. Saya akan memberikan beberapa saran di bagian bawah posting ini.
Bagaimana saya bisa lebih cepat melewati fase arsitektur dan ke fase coding dan debugging, yang saya nikmati ?
Saya mengalami kesulitan menemukan cara untuk menjawab ini, karena itu agak emosional.
Apakah kita sedang berusaha menyelesaikan pekerjaan, atau kita hanya mencoba untuk menikmati latihan? Sangat bagus ketika keduanya satu dan sama, tetapi dalam kehidupan nyata, sering kali mereka tidak sama.
Sangat bagus untuk melakukan hal-hal yang kita nikmati, tetapi dalam profesi yang kompleks seperti kita, untuk fokus hanya pada apa yang kita nikmati, itu tidak konduktif untuk memiliki karier yang bermanfaat.
Anda tidak akan maju, Anda tidak akan dewasa atau mendapatkan pengetahuan baru.
Ada pepatah di Angkatan Darat, "merangkul payah."
Frasa lain memiliki saran serupa. "Jika tidak mengisap, itu tidak layak" dan favorit saya, "Jika itu menyebalkan (dan ini penting), lakukan sampai berhenti mengisap."
Rekomendasi saya:
Sepertinya saya bahwa Anda masih berjuang untuk memahami perbedaan di antara keduanya
pengkodean (cara membuat kode kelas, modul atau tidak, konvensi penamaan, visibilitas akses, ruang lingkup, dll),
desain (berapa banyak tingkatan, front-end / back-end / db, bagaimana masing-masing berkomunikasi, apa yang terjadi di mana) dan keputusan arsitektur implisit yang berasal dari desain sistem sederhana,
arsitektur (seperti yang ditemukan dalam sistem kompleks yang membutuhkan ribuan, jika tidak ratusan ribu jam kerja)
Jadi saya sarankan Anda mempelajari secara mendalam subjek pertama (pengkodean) untuk membawanya ke tingkat berikutnya.
Kode Bersih
Robert "Paman Bob" "Kode Bersih " Martin adalah tempat yang baik untuk memulai.
Kohesi Perangkat Lunak
Selain itu, saya sarankan Anda membiasakan diri dengan metrik perangkat lunak Berorientasi Objek yang disebut LCOM atau lebih tepatnya LCOM4.
Ini bisa menjadi agak matematis dan bukan anti peluru, tetapi tujuan Anda harus memahami dan mendeteksi secara empiris (atau bola mata jika Anda mau) jika suatu kelas kohesif atau jika tidak memiliki kohesi.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Prinsip Perangkat Lunak
Ini terkait erat dengan "Prinsip Tanggung Jawab Tunggal" atau SRY yang harus kita ketahui bersama. SRY adalah salah satu dari 5 "SOLID" yang harus kita ketahui jika kita ingin menjadi ahli dalam pengkodean.
Ketika kita bergerak melalui prinsip-prinsip SOLID, kita juga perlu membiasakan diri dengan prinsip-prinsip "GRASP" , yang mengatur, atau lebih tepatnya membimbing bagaimana kita mengkode kelas.
Buku tambahan
Terakhir, saya juga menyarankan yang berikut:
"Refactoring" oleh Martin Fowler dan Ken Beck akan menjadi buku berikutnya yang saya baca dalam daftar ini.
"Desain oleh Kontrak, dengan Contoh" oleh Richard Mitchell, Jim McKim dan Bertrand Meyer (kemudian ketenaran Eiffel.) Buku ini tidak dicetak, tetapi Anda dapat menemukan salinan yang murah dan bekas di Amazon.
Dengan ini, Anda harus memahami cara memulai pengkodean dan desain, dan dengan latihan, untuk memindahkan dan menguasai (atau setidaknya memahami) arsitektur perangkat lunak.
Saya yakin akan ada profesional lain yang akan menambah, mengurangi, atau menolak saran ini. Mereka akan datang dengan saran lain, kemungkinan divalidasi oleh pengalaman mereka sendiri.
Yang bisa saya katakan adalah ini - tidak ada jalan pintas.
Semua yang terbaik.