it-swarm-id.com

Bagaimana saya bisa meningkatkan kemampuan pemecahan masalah saya?

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 dapat saya lakukan untuk meningkatkan kemampuan saya untuk mengatasi masalah pemrograman yang rumit? Strategi apa yang berhasil untuk Anda? Apakah ada area spesifik yang harus saya fokuskan, seperti algoritma atau pola desain?

50
user12278

Beberapa teknik yang mungkin atau mungkin tidak berfungsi:

  • Lihat solusi yang ada untuk masalah umum, mis. pola desain. Mungkin Anda menemukan sesuatu yang serupa yang setidaknya sebagian menyerupai masalah Anda. Cari di Web.
  • Bertindak seolah-olah masalah telah dipecahkan, dan melacak apa yang mengikuti kembali ke solusi yang dibuat. Misalnya, alih-alih merancang API untuk kelas, cukup tulis kode yang menggunakan kelas, dengan pemanggilan metode seperti yang Anda inginkan, dan kemudian terapkan API itu.
  • Lakukan sesuatu yang lain, mis. menjelajahi internet atau bermain solitaire, dan tunggu inspirasi terjadi.
  • Pikirkan orang yang paling Anda sukai, dan berpura-puralah Anda ingin membuatnya terkesan dengan keterampilan memecahkan masalah Anda. Apa yang akan menjadi solusi yang sangat mengesankan?
  • Periksa masalah untuk kontradiksi yang melekat atau persyaratan yang saling bertentangan, dan sebutkan persis apa itu dan kompromi apa yang dapat dilakukan. Seringkali, ketika konflik seperti itu ada, tetapi Anda tidak menyadarinya, Anda cenderung membuang satu kemungkinan solusi demi satu karena Anda tidak dapat dengan sempurna memenuhi semua persyaratan.
  • Jika Anda sudah memiliki solusi yang memungkinkan, tetapi rasanya "kotor" (salin-tempel, variabel global, kode spageti, dll.), Tetap gunakan dan perbaiki setelah itu
25
user281377

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 peroleh.

Bilas dan ulangi sampai semua masalah memiliki wawasan. Kemudian mulailah menjelajahi wawasan.

Rekomendasi buku

Juga membaca Berpikir dan Belajar Pragmatis dapat membantu Anda menjadi pemecah masalah yang lebih baik. (Sepertinya saya banyak merujuk buku ini baru-baru ini ...)

20
Gary Rowe

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.

17
gingerbreadboy

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:

  • strategi pemecahan masalah
  • kegigihan dan toleransi frustrasi

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:

  • coba sesuatu secara acak
  • baca artikel/blog/posting acak tentang topik yang saya minati (atau topik yang terkait erat)
  • membuat gambar yang bagus
  • membagi masalah menjadi beberapa masalah tetapi lebih sederhana
  • lakukan sesuatu yang lain
  • Google sesuatu yang terkait dalam beberapa hal dengan masalah tersebut
  • berbicara dengan orang lain tentang masalahnya
  • buat daftar TODO
  • tuliskan hal-hal yang Anda ketahui tentang efek masalahnya sehingga Anda dapat lebih mudah menemukan pola

Harap dicatat bahwa sebagian besar alat ini dapat diterapkan secara rekursif.

Dan algoritma saya adalah ini:

  1. Alat mana dari toolkit penyelesaian masalah saya yang paling masuk akal saat ini?
  2. Masalah tidak terpecahkan? Lanjutkan dengan 1. ;-)

Langkah 1. adalah keputusan yang sulit, tetapi Anda membuat keputusan yang lebih baik semakin banyak Anda berlatih.

Oh dan aku hampir lupa bahan terpenting:

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.

9
Philip

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 meningkat jika Anda menyimpannya untuk diri sendiri dan Anda tidak akan berguna.

7
JeffO

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:

Tapi 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 keterampilan itu dapat menciptakan seorang insinyur yang mampu memotong 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 ilmuwan yang terkadang harus membuat sesuatu yang lebih buruk untuk membuatnya lebih baik, terkadang kita sebagai insinyur harus melakukan hal yang sama.

Berpikir ilmiah dengan cara ini dapat - secara umum - hanya datang dari 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 ilmuwan dan berpikir di luar kebiasaan.

4
jmort253

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 undergrad tentang "tidak praktis".

Anda dapat melakukan ini sendiri, tetapi mungkin akan lebih sulit. Saya akan mulai dengan dua kursus ini:

Intro to Algorithms

Gagasan Hebat dalam CS Teoretis

3
red-dirt

Itu semua tergantung pada jenis masalah apa yang ingin Anda selesaikan, tetapi belajar berpikir logis jika Anda sudah tidak 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.

3
user7007

Jawaban saya terkait dengan pengkodean tetapi dapat diterapkan untuk apa saja.

  1. Menjauh dari keyboard. Bicara jalan-jalan, lari, bicarakan dengan seorang rekan sambil minum kopi
  2. Menjadi 10 tahun lebih tua! Pengalaman saya sangat membantu saya.
  3. Gunakan Binary chop. Membagi masalah menjadi dua dan mempersempit masalah: ulangi.
  4. Ingat Sherlock Holmes: Ketika Anda telah menghilangkan kemungkinan, apa pun yang tersisa (tidak peduli seberapa aneh) jawabannya
  5. Periksa data pengujian Anda. Lebih dari setengah masalah saya yang sangat sulit disebabkan oleh data yang salah dan bukan kode atau algoritma yang salah.
2
Fortyrunner

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 langsung pertimbangkan 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 solusinya akan membutuhkan terlalu banyak usaha, jangan programkan solusi lengkapnya, tetapi setidaknya pikirkan tentang jenis struktur data dan metode yang ingin Anda gunakan. Juga pikirkan metode alternatif.

1
Omega Centauri

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 memecahkannya turun ke 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 :)

1
kelleystar

Ada yang hebat pertanyaan SO dalam hal ini.

Jawaban saya adalah:

Cara terbaik untuk meningkatkan adalah berlatih!

Berlangganan RSS feed di: http://www.mensa.org.uk/puzzles/ dan luangkan waktu untuk menyelesaikannya saat keluar.

Kalender meja puzzle sehari (mis. http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link) ) juga merupakan ide yang baik karena akan memberi Anda masalah yang biasa, ukuran gigitan, dan beragam untuk dipecahkan.

Walaupun ini akan selalu menjadi topik keluar dari masalah yang akan Anda hadapi sendiri, variasi itu penting karena akan memaksa Anda berpikir dengan cara yang belum pernah Anda lakukan sebelumnya, yang sebenarnya merupakan pemecahan masalah.

Sunting: Juga periksa: http://www.mindtools.com/pages/main/newMN_TMC.htm untuk kiat pemecahan masalah yang baik.

1
StuperUser

Mainkan 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 dapat terjebak dalam mencoba 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.

1
Jeff Davis

Saya baru-baru ini memecahkan masalah di Project Euler . Masalahnya beragam 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 #).

1
Erik

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 memastikan - benar-benar yakin - Anda benar-benar memahami masalahnya. "Memecahkan Masalah yang Tepat" adalah bagian terpenting dari pemecahan masalah.

Kadang-kadang mereka menyebutnya "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.

Kebanyakan triknya adalah mengidentifikasi apa hasil yang seharusnya. Kemudian cari tahu apa yang menghalangi hasil yang diinginkan.

0
S.Lott

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 sampai pada menemukan sumber. Seringkali, begitu kita menemukan di mana itu terjadi, hanya kompetensi yang diperlukan untuk menyelesaikan itu.

Untuk itu:

  1. Pelajari platform Anda.
  2. Pelajari alat Anda.
  3. Pelajari alat apa yang tersedia untuk platform Anda yang belum Anda temui.

Semua pelatihan otak di dunia tidak berguna tanpa informasi untuk digunakan otak. Untuk menyelesaikan masalah, Anda harus tahu apa kemungkinan 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 mendapatkan beberapa data terlebih dahulu", saya mungkin melihat bahwa banyak pengecualian yang 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.

0
MIA

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 memiliki dampak pada otak dan pemikiran Anda

6) Perluas pengalaman Anda, solusi inovatif datang dari penerapan teori di satu bidang di bidang lainnya, jadi pelajari bidang yang berbeda dan bidang yang menurut Anda menarik

7) Latihan, latihan sangat penting 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


0
Homde

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 secara 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.

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 ..).

0
sharkin

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 perbedaan 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-menerus memikirkan masalah, cobalah untuk mencari 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 Berpikir dan Belajar Pragmatis: 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.

0
Thomas Owens

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 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.

0

Saran saya adalah membuang buku!

Tentu saja tidak secara harfiah. Yang saya maksudkan adalah, masuk ke area topik yang kurang memiliki pengalaman, dan selesaikan masalah yang 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 baca tentang itu: langsung saja. Eksperimen. Membuat kesalahan. Temukan kembali roda.

Jangan minta bantuan. Tinggal jauh dari tutorial. Jauhi teori. Jangan menarik solusi dari rak.

Mengapa?

  • Kami belajar terbaik dari kesalahan.
  • Ini memberi Anda kesempatan untuk berlatih menghasilkan solusi secara kreatif, daripada memuntahkan dan mengadaptasi solusi lama.
  • Anda dipaksa untuk mengevaluasi ide-ide Anda. Anda tidak dapat mengevaluasi mereka tanpa mengembangkan pemahaman yang baik tentang alat Anda, tentang masalah yang Anda pecahkan, dan gagasan yang ingin Anda evaluasi. Ini mengarah ke pemahaman yang lebih dalam tentang topik daripada yang seharusnya Anda kembangkan. (Jangan ragu untuk membaca tentang alat yang Anda gunakan, tapi jangan membaca tentang masalah yang Anda coba selesaikan.)

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, persis", 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. Adopsi 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!).

0
Artelius

Jujur saya pikir semua orang berbeda, jadi peta jalan setiap orang untuk menjadi pemecah masalah 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 fungsi dasar saya meningkatkannya dan akhirnya saya menambahkan lebih banyak fitur.

Jadi, dengan kata lain, saya sarankan Anda mencari semacam proyek tenggelam atau berenang di 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, lakukan saja apa yang disarankan orang lain di utas ini :).

0
hockfan86

Jawabannya adalah itu sendiri dalam Pertanyaan dengan keluar dengan 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 bisa belajar keterampilan pemecahan masalah dari buku, lebih banyak kode Anda akan mengeksekusi lebih banyak pengetahuan yang akan Anda peroleh. Semoga berhasil

0
Ranger