Bagaimana saya bisa meningkatkan kemampuan pemecahan masalah saya?

50

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?

gcc
sumber
3
Dua buku bermanfaat yang disebutkan dalam Code Complete adalah: Blockbusting Konseptual oleh James Adams, dan Lateral Thinking oleh Edward De Bono.
mctylr
1
AH! Saya lupa memposting di sini kembali ketika hanya memiliki beberapa jawaban.
Mark C

Jawaban:

25

Beberapa teknik yang mungkin atau mungkin tidak berfungsi:

  • Lihatlah solusi yang ada untuk masalah umum, misalnya 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 akan dibuat. Misalnya, alih-alih mendesain 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, misalnya 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 persisnya 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
user281377
sumber
Poin terakhir sangat bagus. Terkadang solusi untuk masalah ini adalah membuatnya bekerja untuk sebagian besar kasus dan kemudian melihat di mana ia perlu diperbaiki.
JeffO
4
Namun, perlu diketahui bahwa jumlah "Saya akan memperbaikinya nanti" yang berubah menjadi "Saya sudah memperbaikinya" adalah (setidaknya dalam pengalaman saya) kecil.
Gareth
3
Gareth: Benar, tetapi idenya bukan untuk membuatnya lebih baik minggu depan, bulan depan atau kapan saja, tetapi segera setelah itu berfungsi. Ini dimaksudkan sebagai metode untuk memecahkan kacang yang keras.
user281377
3
Saya tidak berselancar di internet sebagai cara menunggu inspirasi terjadi. Anda perlu siklus otak idle untuk mendapatkan inspirasi untuk terjadi, dan berselancar di internet adalah cara untuk membuang siklus otak menganggur itu. Sebagai gantinya, pergi berbelanja, atau berjalan-jalan, atau naik sepeda, bersihkan apartemen Anda - lakukan sesuatu yang tidak membutuhkan banyak daya otak. Inspirasi akan datang lebih cepat dalam situasi seperti itu.
Ken Bloom
1
Geek: Saya tahu bahwa # 4 terdengar agak paradoks, tetapi kadang-kadang, itu benar-benar bekerja untuk saya; khususnya dalam situasi di mana lebih dari satu pendekatan tampaknya mungkin dan masalahnya adalah pemilihan salah satu pendekatan tersebut. # 6 berarti jangan terlalu dibatasi oleh larangan yang biasa dilakukan dalam profesi kita. Kadang-kadang kita memiliki aturan yang diinternalisasi seperti "hindari variabel global" sampai-sampai kita tanpa sadar menolak setiap solusi yang memanfaatkan teknik yang sudah usang itu.
user281377
20

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

Gary Rowe
sumber
4
Berpikir dan Belajar Pragmatis luar biasa
Brad Cupit
Ref: drawright.com/theory.htm (apa itu R-mode dan L-mode)
mctylr
17

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.

roti jahe
sumber
Bertanya kepada orang lain atau membentuk kelompok belajar adalah cara terbaik untuk belajar.
Gary Rowe
saya melakukan hal yang sama, hanya untuk mendapatkan ide dari saya dan ini adalah salah satu cara terbaik.
Viswa
Teknik ini dikenal sebagai Rubber Ducking, artikel yang sangat bagus tentang hal ini dalam pengkodean horor codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki juga membantu en.wikipedia.org/wiki/Rubber_duck_debugging
spats
9

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

Philip
sumber
Saya mencari di halaman ini kata "Fisika" untuk melihat apakah seseorang sudah menulis tentangnya. Matematika adalah yang lain.
Mark C
Nilai mempelajari fisika yang berkaitan dengan kemampuan Anda memecahkan masalah sulit untuk dilebih-lebihkan, saya pikir.
Mark C
+1 untuk berpikir positif. Jika Anda mendapati diri Anda bekerja maka kemampuan pemecahan masalah Anda terganggu. Lihatlah masalah karena memberi Anda pengetahuan.
Gary Rowe
7

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.

JeffO
sumber
+1 untuk "Di sekolah mereka membutuhkan terlalu banyak jawaban dan tidak cukup banyak pertanyaan dari siswa." ini soo true dan luangkan waktu untuk belajar mengajukan pertanyaan yang tepat ... periksa di mana-mana ada begitu banyak contoh pertanyaan buruk
Rémi
4

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.

jmort253
sumber
Persis. Pecahkan masalah besar menjadi masalah yang lebih kecil.
Bill Michell
3

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.

user7007
sumber
3

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

kotoran merah
sumber
2

Jawaban saya berhubungan khusus 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) adalah jawabannya
  5. Periksa data pengujian Anda. Lebih dari setengah masalah saya yang sangat rumit disebabkan oleh data yang salah dan bukan kode atau algoritma yang salah.
Fortyrunner
sumber
1

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.

Omega Centauri
sumber
1

Ada pertanyaan SO yang bagus tentang 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 ) bagus ide juga 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 adalah masalah pemecahan masalah.

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

StuperUser
sumber
1

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.

Jeff Davis
sumber
Saya merasa pikiran saya semakin tajam dengan bermain catur secara teratur.
Paul Nathan
1

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

Erik
sumber
1

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

kelleystar
sumber
0

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.

S.Lott
sumber
0

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

hockfan86
sumber
0

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

Ranger
sumber
0

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

sharkin
sumber
0

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:

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

MIA
sumber
0

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


Homde
sumber
0

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?

  • 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 selesaikan, dan gagasan yang ingin Anda evaluasi. Hal ini mengarah pada pemahaman yang lebih mendalam 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, 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!).

Artelius
sumber
0

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.

Thomas Owens
sumber
0

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.

Gregory Krasutski
sumber
-1

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.

Corv1nus
sumber
-1

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.

Demian Kasier
sumber
-4

Jangan terus teori, lakukan lebih banyak latihan. Dengan latihan muncullah pengalaman.

Amir Rezaei
sumber