Semua orang mengatakan hal yang sama: "seorang programmer sejati tahu bagaimana menangani masalah nyata." Tetapi mereka lupa bagaimana mereka mempelajari kemampuan ini atau di mana: itu tidak diajarkan di sekolah.
Apa yang bisa saya lakukan untuk meningkatkan kemampuan saya untuk mengatasi masalah pemrograman yang kompleks? Strategi apa yang berhasil untuk Anda? Apakah ada area spesifik yang harus saya fokuskan, seperti algoritma atau pola desain?
Jawaban:
Beberapa teknik yang mungkin atau mungkin tidak berfungsi:
sumber
Gunakan R-mode atau L-mode berpikir sesuai kebutuhan
R-mode adalah pendekatan kreatif, non-verbal yang biasa kita kaitkan dengan subconcious. L-mode adalah pendekatan linear, logis, verbal yang terkait dengan "suara hati" Anda.
Jika masalah tampaknya tidak dapat dipecahkan, itu mungkin karena Anda berusaha menyelesaikannya menggunakan mode berpikir yang salah. Untuk programmer, mode berpikir default cenderung ke mode L sehingga Anda dapat mematikannya untuk sementara dan mengakses mode-R.
Cara mengakses pemikiran mode-R
Ada banyak cara, tetapi mungkin coba metode Poincare (dinamai berdasarkan ahli matematika terkenal).
Tuliskan semua yang Anda ketahui tentang masalahnya. Segera selesaikan semua aspek mudahnya (jika ada). Pilih satu item dari daftar "masalah sulit" dan kemudian berjalan-jalan di mana Anda tidak akan terganggu atau terganggu.
Jangan mencoba menganalisis masalah selama berjalan, biarkan pikiran Anda mengembara dan amati gambar atau sensasi menarik yang muncul yang mungkin terkait dengan masalah tersebut. Biarkan mereka bersatu. Jika inspirasi menyerang segera hentikan jalannya dan kembali untuk menuliskan wawasan yang telah Anda dapatkan.
Bilas dan ulangi sampai semua masalah memiliki wawasan. Kemudian mulailah menjelajahi wawasan.
Rekomendasi buku
Juga membaca Pemikiran dan Pembelajaran Pragmatis dapat membantu Anda menjadi pemecah masalah yang lebih baik. (Sepertinya saya banyak merujuk buku ini baru-baru ini ...)
sumber
Tanya orang lain ...
Tidak serius Sumber daya terbesar Anda adalah orang yang duduk di sebelah Anda. Bahkan jangan meminta mereka untuk menjawab masalah, minta mereka untuk duduk di sebelah Anda dan membiarkan Anda menjelaskan masalahnya.
Seringkali Anda akan mengatasinya saat Anda mengucapkannya.
Terkadang orang lain akan mengajukan pertanyaan atau menunjukkan detail yang akan membuka pintu mental.
Pada akhirnya, Anda akan belajar meng verbalisasi hal-hal di kepala Anda tanpa menggunakan boneka, dan mengenali detail utama dalam masalah dengan lebih cepat.
Dan jika semuanya gagal setidaknya mereka mungkin dapat menunjukkan kepada Anda teknik yang Anda tidak akan berpikir untuk menggunakan.
sumber
Sebenarnya jawaban singkat saya adalah "menyelesaikan lebih banyak masalah". Tetapi intinya adalah: Benar-benar berkonsentrasi pada masalah dan jangan menyerah. Jangan meminta bantuan pada StackOverflow atau apa pun. (Membaca StackOverflow ok tentu saja!) Berusaha keras sampai Anda mendapatkan solusi yang hampir berfungsi, maka Anda hampir mencapai tujuan Anda. Dan lanjutkan sampai Anda memiliki solusi yang memuaskan.
Bagi saya pemecahan masalah adalah dua hal:
Poin 2 sangat penting menurut saya karena memaksa Anda untuk mengubah pemikiran Anda semakin lama Anda terjebak dengan masalah. Ini juga memungkinkan Anda untuk menghabiskan lebih banyak waktu dengan pemecahan masalah yang memungkinkan Anda untuk lebih meningkatkan keterampilan Anda. ;-)
Ngomong-ngomong, saya sarankan Anda untuk membaca Edward de Bono. Meskipun saya memperoleh keterampilan pemecahan masalah saya terutama dengan mempelajari Fisika, tulisannya benar-benar menarik.
Nah dan toolkit pemecahan masalah saya adalah ini:
Harap dicatat bahwa sebagian besar alat ini dapat diterapkan secara rekursif.
Dan algoritma saya adalah ini:
Langkah 1. adalah keputusan yang sulit, tetapi Anda membuat keputusan yang lebih baik semakin banyak Anda berlatih.
Oh dan saya hampir lupa bahan yang paling penting:
Berpikir positif tentang keseluruhan proses. Jangan berpikir, "Saya harap XYZ sekarang akan menyelesaikan masalah." Alih-alih berpikir: "Jika XYZ tidak berfungsi maka saya tahu YZX tidak bisa menjadi sumber masalah dan saya akan memeriksa apakah ZYX berfungsi." Pemecahan masalah kadang-kadang bisa menyenangkan terutama jika proses Anda menemukan masalah akhirnya menjadi elegan dan informatif.
sumber
Mulai bekerja pada keterampilan mengidentifikasi masalah juga. Terkadang Anda harus mengenali ada masalah sebelum Anda bisa menyelesaikannya. Di sekolah mereka membutuhkan terlalu banyak jawaban dan tidak cukup banyak pertanyaan dari siswa.
Temukan orang-orang di sekitar Anda yang memecahkan masalah dan tanyakan kepada mereka bagaimana mereka menyelesaikannya.
Bersiaplah untuk salah. Anda tidak akan membaik jika menyimpannya untuk diri sendiri dan tidak akan berguna.
sumber
Manfaat utama dari pendidikan ilmu komputer untuk insinyur perangkat lunak adalah kemampuan untuk membuat dan memahami abstraksi. Abstraksi digunakan untuk merangkum fungsionalitas umum, seperti metode kelas String, ke dalam paket yang rapat dan dapat digunakan kembali yang memungkinkan kita untuk fokus pada masalah yang lebih besar.
Belajar mengenali dan membuat Abstraksi :
Tetapi yang paling penting, abstraksi mengajari kita cara memecah masalah menjadi potongan yang lebih kecil dan lebih mudah dikelola . Ketika dikombinasikan dengan latar belakang sains, kombinasi dari ketrampilan-ketrampilan itu dapat menciptakan seorang insinyur yang mampu menembus kebisingan dan sampai ke inti masalahnya.
Belajar memecahkan masalah menggunakan Metode Ilmiah :
Ketika memecahkan masalah aplikasi produksi di mana ada masalah yang sulit ditemukan, kadang-kadang membantu untuk benar-benar memecah aplikasi lebih lanjut (dalam lingkungan non-produksi) untuk menghilangkan beberapa variabel untuk mengisolasi dan menghilangkan satu.
Singkatnya, metode ilmiah, belajar dari mengambil semua pilihan Fisika dan pilihan sains lainnya yang diperlukan untuk gelar ilmu komputer, membantu memecahkan masalah ini seolah-olah kita mencoba plasebo dan percobaan obat baru pada serangkaian sukarelawan. Seperti para ilmuwan yang terkadang harus membuat sesuatu yang lebih buruk untuk membuatnya lebih baik, kadang-kadang kita sebagai insinyur harus melakukan hal yang sama.
Berpikir ilmiah dengan cara ini dapat - secara umum - hanya datang dari memiliki pengalaman dalam latar belakang sains. Terkadang menyelesaikan masalah tidak dapat dianggap sebagai jalur linier dari A ke B.
Singkatnya, belajar ilmu komputer, mempelajari bidang ilmiah lainnya, belajar pemrograman fungsional. Ini akan membantu Anda berpikir seperti seorang ilmuwan dan berpikir di luar kebiasaan.
sumber
Itu semua tergantung pada jenis masalah apa yang ingin Anda selesaikan, tetapi belajar berpikir secara logis jika Anda belum melakukannya adalah hal yang baik.
Semua dalam semua, dan Anda akan membenci saya karena mengatakannya, tetapi latihan membuat sempurna. Saya tidak ditarik keluar dari rahim ibu saya karena tahu bagaimana menjadi pemecah masalah yang baik dan tidak ada orang lain yang melakukannya. Anda perlu berlatih dan belajar bagaimana melakukan sesuatu sendiri. Jika Anda masih di sekolah dan tidak memiliki kelas tipe pemrograman / ilmu komputer, matematika dan sains juga cukup baik untuk mendorong pengembangan keterampilan ini.
sumber
Saya pikir apa yang Anda cari adalah heuristik ilmu komputer.
Ketika sampai pada apa yang dilakukan 99% dari kita di parit, sebenarnya tidak ada yang baru di bawah matahari. Jadi, Anda mungkin melihat masalah dan mengenalinya sebagai masalah DP, atau yang lain sebagai masalah yang bisa mendapatkan manfaat dari memoisasi, dll ...
Bagaimana Anda mendapatkan pengetahuan ini? Gelar CS yang tepat adalah tempat yang baik untuk memulai ... Bukan Rekayasa Perangkat Lunak atau Sistem Informasi, tetapi hal-hal yang dikeluhkan sebagian besar undergrads tentang "tidak praktis".
Anda dapat melakukan ini sendiri, tetapi mungkin akan lebih sulit. Saya akan mulai dengan dua kursus ini:
Pengantar Algoritma
Gagasan Hebat dalam CS Teoritis
sumber
Jawaban saya berhubungan khusus dengan pengkodean tetapi dapat diterapkan untuk apa saja.
sumber
Dalam hal latihan, saya bisa memberi tahu Anda apa yang saya lakukan. Saya lebih tertarik pada matematika terapan, daripada pemrograman, tetapi matematika terapan yang diterapkan pada komputasi adalah pemrograman. Saya melihat masalah dan solusi di sekitar. Sebelum (atau kadang-kadang setelah, jika mengatakan pekerjaan saya membutuhkan solusi tepat waktu), menghubungkan ke solusi yang dikenal -atau perpustakaan kode yang ada, saya ingin bertanya pada diri sendiri: "Jika ini adalah masalah perawan -yaitu Anda tidak akan dapat menemukan solusi kalengan, bagaimana Anda akan melanjutkan? " Jika jawabannya agak mudah, pertimbangkan untuk menulis solusi (analitik, atau program komputer untuk menyelesaikannya). Abaikan kasus akhir yang rumit, -Anda tertarik untuk meneliti pendekatan, dan algoritma, bukan menciptakan kembali perpustakaan yang ada. Jika solusi akan membutuhkan terlalu banyak usaha, jangan program solusi lengkap, tetapi setidaknya pikirkan tentang jenis struktur data dan metode yang ingin Anda gunakan. Juga pikirkan metode alternatif.
sumber
Ada pertanyaan SO yang bagus tentang ini.
Jawaban saya adalah:
sumber
Bermain catur
Bermain catur adalah pelatih yang sangat baik untuk menyelesaikan masalah pemrograman. Lapisan masalah dan pohon logika berhubungan dengan sangat baik. Ini juga membantu Anda untuk berpikir ke depan dan merencanakan sebelum menempuh jalan yang tidak optimal dan membuang-buang waktu.
Catur juga membutuhkan keseimbangan antara "mode berpikir" kiri dan kanan. Jika Anda menjadi terlalu analitis, Anda bisa terjebak dalam upaya menghitung semuanya, yang tidak mungkin. Namun, setiap inspirasi kreatif perlu diperiksa dengan perhitungan untuk memastikannya sesuai dengan kenyataan konkret dari situasi tersebut. Masalah sulit seperti ini.
Catur menunjukkan bagaimana belajar dan berlatih menghasilkan peningkatan yang solid dalam cara yang sangat linier. Ini juga berlaku untuk pemecahan masalah program.
Bermain catur juga dapat membantu Anda memahami seberapa banyak yang harus dipelajari. Meskipun Anda telah pemrograman (atau bermain catur) selama 10 tahun, Anda belum menjadi grandmaster.
sumber
Saya baru-baru ini memecahkan masalah di Project Euler . Masalahnya adalah berbagai kesulitan. Solusi biasanya tidak memerlukan kode dalam jumlah besar, tetapi Anda harus mempertimbangkan banyak faktor seperti run-time dari algoritma Anda. Anda dapat menggunakan bahasa apa pun yang Anda suka, karena Anda baru saja memasukkan jawaban. Ada penulisan yang baik dari solusi optimal untuk banyak masalah, dan banyak diskusi tentang setiap masalah. Cobalah untuk memecahkan satu masalah setiap hari dan Anda akan kagum betapa banyak pemecahan masalah dan analisis Anda meningkat. Untuk kredit tambahan, cobalah memecahkan masalah yang sama dalam banyak bahasa, seperti bahasa prosedural (mungkin C ++), bahasa scripting (seperti python) dan bahasa fungsional (seperti F #).
sumber
Saya berasal dari latar belakang sains, jadi ketika saya melihat masalah, saya cenderung menggunakan taktik dari Metode Ilmiah . Saya terutama suka mengatur "eksperimen" berdasarkan hipotesis dan menggunakan "kontrol", jadi saya akan membangun sesuatu dan kemudian mengubah / menambahkan hanya 1 hal tentang itu dan melihat apa hasilnya dari satu perubahan / penambahan dan jika saya ' Saya tidak mendapatkan hasil yang saya butuhkan, saya akan mengubahnya kembali dan mengubah sesuatu yang lain. Ini berfungsi dengan baik untuk pemecahan masalah / kode debug. Kadang-kadang Anda mendapatkan jawaban yang Anda cari, tetapi Anda selalu belajar sesuatu yang baru melakukan itu bahkan ketika Anda gagal. Saya juga suka belajar melalui reduksionisme- mengambil sesuatu yang sudah ada (selalu baik untuk memulai dengan sesuatu yang Anda mungkin tidak mengerti, tetapi Anda tahu bekerja) dan terlihat rumit bagi saya dan melihat apakah saya dapat memecahnya menjadi bagian-bagian komponennya dan belajar bagaimana mereka bekerja terlebih dahulu. Kadang-kadang lebih mudah bagi otak saya untuk menangani pembelajaran seperti ini daripada mendekati masalah secara holistik dan saya dapat menggunakan pengetahuan itu untuk membangun hal-hal kompleks serupa lainnya sendiri. Saya juga merekomendasikan membaca buku-buku tentang logika dan penalaran memilih karya-karya dari para pemikir klasik dan modern (mulai dengan Aristoteles dan lanjutkan jalan Anda). Mereka dapat memberi Anda beberapa dasar logika dasar yang dapat Anda gunakan untuk membantu dalam pemecahan masalah di komputer. Dan, tentu saja, jika Anda tidak dapat memecahkan masalah dan Anda telah mengusahakannya untuk sementara waktu, istirahat sejenak. Merenungkan aspek tertentu dari suatu masalah kadang-kadang merugikan. Semua orang butuh istirahat :)
sumber
Bagian tersulit dari pemecahan masalah adalah "Perseptual Narrowing".
Anda memilih sesuatu yang tampaknya menjadi masalah dan dengan gigih pergi setelah itu sampai Anda lelah dan tidak membuat kemajuan.
Cara untuk melakukan ini adalah dengan memastikan - benar-benar yakin - Anda benar-benar memahami masalahnya. "Memecahkan Masalah yang Tepat" adalah bagian terpenting dari pemecahan masalah.
Terkadang mereka menyebut ini "berpikir di luar kotak". "Kotak" adalah sudut pandang sempit yang mungkin tidak termasuk masalah mendasar yang sebenarnya. Berpikir di luar kotak adalah mencari masalah yang tepat untuk dipecahkan.
Ada banyak buku tentang strategi untuk menghindari penyempitan yang terjadi dengan fokus prematur pada masalah yang salah.
Sebagian besar triknya adalah mengidentifikasi apa hasil yang seharusnya. Kemudian cari tahu apa yang menghalangi hasil yang diinginkan.
sumber
Jujur saya pikir semua orang berbeda, jadi peta jalan setiap orang untuk menjadi pemecah masalah yang lebih baik berbeda. Anda bisa belajar dari pengalaman orang lain, tetapi pada akhirnya Anda harus menempa jalan Anda sendiri. Ini pada dasarnya mempelajari sesuatu dengan "cara yang sulit", tetapi efektif dalam hal ini.
Inilah cara saya mulai memperbaiki penyelesaian masalah saya, meskipun saya belum menjadi pemecah masalah yang hebat, hanya yang lebih baik daripada saya tahun lalu. Saya diberi proyek baru di tempat kerja yang melibatkan perpanjangan perangkat lunak pelacakan waktu open source, dengan menambahkan tiga laporan baru untuk manajemen. Perangkat lunak ini ditulis dalam bahasa yang tidak pernah saya gunakan dan didokumentasikan dengan buruk dan sangat dikaburkan. Saya menggali dan melakukan banyak penelitian dan kemudian saya hanya mengerjakan laporan dalam langkah kecil, begitu saya memiliki fungsionalitas dasar, saya meningkatkannya dan akhirnya saya menambahkan lebih banyak fitur.
Jadi, dengan kata lain, saya sarankan Anda mencari semacam wastafel atau berenang proyek dunia nyata untuk dikerjakan. Jika saat ini Anda bekerja sebagai programmer, cari proyek atau minta atasan Anda. Jika skenario ini tidak mungkin ditemukan di luar pekerjaan, mungkin pekerjaan kontrak / lepas atau sesuatu. Saya memecahkan masalah dengan sangat baik dan sangat cepat ketika saya harus dan saya mempertahankan pengetahuan itu karena intensitas proyek. Jika ini tidak berhasil untuk Anda maka lakukan saja apa yang disarankan orang lain di utas ini :).
sumber
Jawabannya ada dalam Pertanyaan dengan mengeluarkan solusi yang berbeda. Selalu ada lebih dari satu solusi (mis. Penyortiran dapat dilakukan dengan cara yang berbeda yaitu. Bubble Sort, Seleksi dll.) Anda hanya perlu memilih cara Anda dapat melakukannya (Sorting) secara efisien. Coba dengan waktu yang berbeda dan seterusnya ..... Dan buku untuk Pemecahan masalah ..... Tidak ada Anda tidak dapat belajar keterampilan pemecahan masalah dari buku, lebih banyak kode Anda akan mengeksekusi lebih banyak pengetahuan yang akan Anda peroleh. Semoga berhasil
sumber
Sangat mudah bagi seorang programmer untuk secara mental menyerang masalah dengan memvisualisasikan bagaimana menyelesaikan masalah dengan bahasa pemrograman favorit mereka. Sama seperti tukang kayu klasik yang melihat semua masalah sebagai paku ketika alat favoritnya adalah palu.
Saya pikir latihan pemecahan masalah terbaik datang ketika Anda mendapatkan di atas tingkat praktis dan hanya berpikir dalam hal "ini adalah apa yang saya butuhkan untuk menyelesaikannya dengan cara yang optimal". Dalam beberapa kasus, Anda mungkin harus belajar (banyak) hal baru untuk menerapkan solusi sama sekali, tetapi intinya adalah bahwa kemampuan Anda untuk mencari solusi tidak harus terbatas pada sejarah dan teknik yang ada.
Sebuah contoh praktis lama bagi saya adalah saya belajar bagaimana menerapkan multitasking kooperatif yang efisien ketika saya menyadari bahwa masalah saya sebenarnya tidak memerlukan utas preemptive, meskipun saya biasanya akan langsung ke zona nyaman saya membenturkan semua mutexes (yang akhirnya sepertinya selalu berhenti merasa nyaman di beberapa titik ..).
sumber
Dalam pengembangan aplikasi, banyak masalah yang kita hadapi adalah penemuan kita sendiri atau penemuan idiot yang kita warisi yang mengacaukan basis kode. Menyelesaikan masalah paling sering terjadi untuk menemukan sumbernya . Seringkali, begitu kita menemukan di mana itu terjadi, hanya kompetensi yang diperlukan untuk menyelesaikannya .
Untuk itu:
Semua pelatihan otak di dunia tidak berguna tanpa informasi untuk digunakan otak. Untuk menyelesaikan masalah, Anda harus tahu kemungkinan apa yang pertama! Meski begitu, jauh lebih cepat untuk bekerja dengan informasi yang baik daripada hanya deskripsi masalah.
Saya mungkin berspekulasi sampai sapi pulang mengapa ada sesuatu yang terlalu lama untuk dieksekusi. Tetapi jika saya mengatakan "mari kita dapatkan data terlebih dahulu", saya mungkin melihat bahwa banyak pengecualian dilemparkan dan menyadari bahwa saya dapat mengubah ini menjadi pernyataan if. Tanpa mengetahui cara mengumpulkan informasi, mengetahui bahwa di platform saya pengecualian mengambil biaya overhead yang cukup tinggi, dan bahwa ada cara untuk memeriksa sebelum mencoba yang lebih cepat, saya tidak akan pernah menyelesaikan masalah.
sumber
Ada dua bagian jawaban Anda:
a) Teknik untuk pemecahan masalah yang sebenarnya
b) Membuat otak Anda secara inheren "lebih baik" dalam berpikir dan memecahkan masalah
Selalu ada beberapa jawaban yang bagus tentang teknik (anggap Anda tahu masalahnya dll) jadi saya tidak akan membahasnya sebanyak itu. Sedangkan untuk melatih otak Anda, ada beberapa hal yang dapat Anda lakukan untuk melewati sinapsis dan membangun lebih banyak interkoneksi
1) Belajar bahasa baru, bahasa nyata (seperti bahasa Prancis, atau bahasa Cina mungkin merupakan taruhan yang bagus saat ini)
2) Belajar memainkan instrumen baru
3) Lakukan sesuatu yang artistik seperti melukis, menggambar, atau memahat
4) Mainkan scrabble atau lakukan teka-teki silang
5) Menari seperti yang Anda maksudkan. Tidak, saya tidak bercanda. Menari telah terbukti berdampak pada otak dan cara berpikir Anda
6) Perluas pengalaman Anda, solusi inovatif datang dari penerapan teori di satu bidang di bidang lain, jadi pelajari bidang yang berbeda dan bidang yang menurut Anda menarik
7) Latihan, latihan sangat penting untuk meningkatkan proses berpikir
Akhirnya, saya akan menawarkan tip terbaik saya untuk memecahkan masalah sulit: berjalan-jalan. Saya telah menemukan bahwa itu bekerja mukjizat untuk menjernihkan pikiran Anda dan membiarkan seseorang merenungkan masalah
sumber
Saran saya adalah membuang buku!
Tentu saja tidak secara harfiah. Yang saya maksud adalah, masuk ke area topik yang Anda tidak memiliki banyak pengalaman, dan selesaikan masalah-masalah sulit di sana, tanpa belajar tentang solusi yang ada. Bergantung hanya pada kreativitas dan pemikiran kritis Anda dan mungkin sebuah referensi manual.
Anda mungkin mendesain format gambar. Atau server web. Atau skema kompresi. Berkas sistem. Inti. Kecerdasan buatan. Bahasa pemrograman. Sistem visi komputer.
Sesuatu yang Anda temukan menarik, itu cukup rumit, dan yang tidak pernah Anda pelajari. Jangan membacanya: langsung saja. Eksperimen Membuat kesalahan. Temukan kembali roda.
Jangan meminta bantuan. Tinggal jauh dari tutorial. Jauhi teori. Jangan menarik solusi dari rak.
Mengapa?
Lakukan beberapa upaya, dan sekali Anda merasa senang dengan apa yang telah Anda raih, tinggalkan selama beberapa bulan. Kemudian kembalilah segar dan lihat apakah Anda dapat menemukan perspektif baru. Setelah itu, saatnya untuk mulai membaca tentang masalah dan bagaimana orang lain menyelesaikannya (atau berbicara dengan orang lain). Pada titik ini, alih-alih berkata pada diri sendiri "ya, itu masuk akal" saat Anda membaca, Anda akan mengatakan "ya, tepat ", atau "sampai batas tertentu", atau "wow, itu pintar".
Dengan kata lain, Anda akan berpikir jauh lebih kritis tentang apa yang Anda baca, dan Anda akan merasa jauh lebih mudah untuk dipahami dan diingat karena Anda sudah memiliki "kerangka mental" yang besar untuk dilampirkan. Anda akan merasa senang dengan hal-hal yang Anda temukan secara independen, dan Anda akan pergi dengan tumpukan pengetahuan baru.
Jangan mencoba membuat solusi Anda sempurna. Buktikan saja pada diri sendiri bahwa Anda dapat menyelesaikan masalah. Gunakan sikap "bisa-lakukan", dan jika Anda merasa gentar dengan masalah tersebut, ingatlah bahwa orang yang pertama kali menyelesaikannya mungkin tahu sebanyak yang Anda lakukan (pada kenyataannya, mereka tidak tahu itu punya solusi!).
sumber
Pemecahan masalah bukanlah sesuatu yang bisa diajarkan atau bahkan dipelajari dengan membaca. Satu-satunya cara untuk menjadi lebih baik dalam memecahkan masalah adalah dengan memecahkan masalah.
Ada berbagai teknik dan metodologi untuk penyelesaian masalah yang dapat Anda baca, dan Anda dapat membaca tentang alat dan teknologi yang dapat Anda gunakan untuk memecahkan masalah dalam domain tertentu. Kecuali jika Anda terus memikirkan masalah, cobalah untuk menemukan solusi (datang dengan beberapa solusi untuk setiap masalah dan mengevaluasinya satu sama lain), dan kemudian mengevaluasi solusi Anda terhadap solusi yang dikembangkan oleh orang lain, Anda tidak akan menjadi lebih baik dalam masalah pemecahan
Saya sarankan mengambil salinan Pragmatis Berpikir dan Belajar: Refactor Your Wetware oleh Andy Hunt . Ini buku tentang memahami bagaimana Anda berpikir, bereaksi, dan belajar. Ini membawa teori yang relevan dari teori perilaku dan ilmu kognitif lainnya. Ini khusus ditujukan untuk pengembang perangkat lunak, tetapi berlaku untuk setiap pekerja berpengetahuan.
sumber
Untuk pemula dalam pemrograman seperti saya, saya merekomendasikan buku "Think Like a Programmer". Dalam bab pertama ini mencakup teknik pemecahan masalah seperti menyatakan kembali dan membagi masalah, dimulai dengan apa yang Anda ketahui, reduksi, analogi, dan bereksperimen.
Lalu ada teknik yang lebih maju dengan contoh-contoh dalam C ++: menyelesaikan masalah dengan array, pointer dan memori dinamis, kelas, rekursi, penggunaan kembali kode. Saya tidak dapat mengomentari bagian ini karena terlalu sulit bagi saya.
sumber
Saya memecahkan masalah sebanyak mungkin. Saya juga suka beberapa buku puzzle seperti ini . Saya juga bermain-main dengan permainan pemecahan masalah, seperti permainan matematika yang melibatkan bilangan prima atau sesuatu, sudoku, Menara Hanoi, dll. Temukan saja hal-hal yang harus dipecahkan. Juga, berikan kode bila memungkinkan.
sumber
Sampai jumpa menyelesaikan BANYAK masalah!
Anda mulai dengan masalah yang mudah dan Anda beralih ke masalah yang lebih sulit begitu yang mudah menjadi rutin alih-alih masalah.
sumber
Jangan terus teori, lakukan lebih banyak latihan. Dengan latihan muncullah pengalaman.
sumber