Pertama, saya menyadari pertanyaan ini mungkin agak lama dan kabur dan saya minta maaf untuk ini. Ini mungkin adalah masalah dasar dengan nama pendek untuk siapa saja yang "mengerti", tetapi karena saya merasa kurang dalam hal ini, tolong jelaskan dengan saya dalam menggambarkan masalah.
Saya sudah melakukan pemrograman dengan cara ini atau yang lain sejak saya berusia sekitar 11 tahun. Ini berarti bahwa saya telah banyak belajar sendiri segalanya sejak awal. Saya menerima pendidikan teknis, tetapi tidak sepenuhnya dalam Ilmu Komputer (saya lulus dengan gelar di bidang Teknik Foton). Kami memiliki kursus pemrograman tentu saja, tetapi ini sebagian besar hal dasar bagi saya dan saya tidak belajar banyak hal baru. Saya terus mendidik diri sendiri untuk kesenangan itu dan selalu tahu saya akan mengejar karir dalam pemrograman, tetapi semua proyek saya cukup kecil pada waktu itu. Saya tidak kesulitan menyimpannya dalam pikiran saya dan mempertahankannya.
Sekarang, saya menemukan diri saya sebagai pemimpin dalam sebuah tim, tetapi tidak dalam lingkungan perusahaan - saya bekerja untuk universitas yang mengembangkan perangkat lunak ilmiah (dalam C ++) untuk aplikasi teknik. Tiba-tiba proyek ini tumbuh (relatif) besar dan saya kesulitan membungkus pikiran saya dengannya hampir sepanjang waktu. Saya kehilangan banyak waktu dan usaha untuk dua hal, kebanyakan:
- Ketika saya harus kembali ke bagian kode yang belum saya kerjakan untuk sementara waktu, saya kesulitan mengingat bagaimana cara kerjanya. Saya menghabiskan banyak waktu meninjau file header untuk kelas yang relevan dan membaca komentar yang saya tempatkan di sepanjang file sumber. Saya berharap ada semacam "skematis" yang bisa saya lihat sekilas dan mendapatkan kembali gambar itu dengan lebih mudah;
- Ketika saya memperkenalkan perubahan, kadang-kadang saya menyadari setengah jalan bahwa apa yang saya coba lakukan akan memecah hal-hal di tempat lain (atau lebih buruk, itu hanya muncul saat runtime sebagai kejutan). Saya kembali dan mulai melakukannya secara berbeda, hanya untuk mengetahui bahwa saya mengabaikan pengaruh pada beberapa komponen lain. Saya berharap ada beberapa "diagram arsitektur" di mana saya bisa melihat bagaimana hal-hal dilakukan, bagaimana apa yang saya coba lakukan akan mempengaruhi komponen lain dan cara bagi saya untuk merencanakan secara detail sebelum saya mulai menerapkan perubahan.
Sebagian besar orang yang bekerja dengan saya memiliki cerita yang serupa dengan saya - orientasi teknis yang kuat dan terkadang keterampilan yang hebat, tetapi tanpa cara mengatur pekerjaan mereka. Namun, proyek-proyek mereka biasanya jauh lebih kecil daripada proyek saya sehingga mereka dapat mengatasinya. Bagaimanapun, apa artinya itu bagi saya adalah bahwa saya sendirian dan tidak ada seorang pun yang dapat saya pelajari untuk praktik yang baik.
Saya mengambil kursus pascasarjana dalam mengelola TI dan meskipun saya merasa cukup memuaskan, sebagian besar ditargetkan untuk non-programmer, mengajar tentang metodologi manajemen proyek, estimasi anggaran / jadwal, arsitektur perusahaan, dll. - bukan desain dan perencanaan perangkat lunak. Tidak apa-apa, saya mencoba mempelajari hal-hal itu juga. Tentu saja, beberapa alat (seperti UML) dan jenis proses pengembangan perangkat lunak (kaskade, iteratif, lincah ...) diperkenalkan, tetapi jelas tidak secara terperinci dan saya sulit memutuskan apa yang harus saya pilih dan gunakan ( dan sejauh mana).
Saya telah membaca banyak pertanyaan dan jawaban tentang desain perangkat lunak pada SO - ada banyak tentang melakukannya dengan menggunakan alat atau metodologi ini atau itu, dan jika saya yakin bahwa dokumentasi UML akan menyelesaikan masalah saya - saya akan mengambilnya dan mulai menggunakannya. Tetapi beberapa orang bersumpah dengan itu, yang lain mengatakan itu tidak berguna. Saya mencari jawaban pada tingkat abstraksi yang lebih tinggi - adakah cara untuk menyelesaikan dua masalah yang saya alami, dan bagaimana Anda secara pribadi melakukannya? Apa yang harus saya pelajari untuk dapat melakukannya, mungkin tanpa terikat pada satu alat tertentu? Ini datang dan keluar dari gaya dari waktu ke waktu, dan saya berharap penerapannya bervariasi tergantung pada jenis proyek.
Terima kasih banyak untuk membaca, saya tidak dapat mengatakan apa yang saya maksud dengan lebih singkat (kurang dalam pengalaman desain perangkat lunak dan kosa kata).