
Jika Anda tertarik pada pemrograman, Anda mungkin pernah mendengar ungkapan:
"Semua orang perlu belajar pemrograman karena mengajarkan Anda untuk berpikir."
- Steve Jobs
Mungkin Anda juga bertanya-tanya apa artinya berpikir sebagai seorang programmer?
Sebenarnya, kita berbicara tentang cara yang lebih efisien untuk menyelesaikan masalah.
Posting ini bertujuan untuk mengajarkan Anda hal ini.
Setelah membacanya, Anda akan lebih akurat memahami apa yang perlu dilakukan untuk menemukan solusi terbaik.
Mengapa ini penting?
Pemecahan masalah adalah keterampilan dasar.
Kami terus memecahkan masalah. Besar dan kecil. Bagaimana kita melakukan ini? Terkadang itu baik ... jika Anda beruntung.
Jika Anda tidak memiliki pendekatan sistematis, maka Anda mungkin menyelesaikan masalah sebagai berikut (saya melakukan ini ketika saya baru mulai kode):
- mencoba solusi
- jika tidak cocok, maka coba yang lain,
- jika tidak berhasil, ulangi langkah 2 hingga menang.
Anda mungkin beruntung, tetapi ini adalah cara terburuk! Dan itu bisa memakan banyak waktu.
Cara terbaik:
- punya pendekatan sistematis
- mempraktikkannya.
“Sebagian besar pengusaha menganggap kemampuan untuk menyelesaikan masalah lebih penting.
Kemampuan untuk memecahkan masalah hampir dengan suara bulat adalah kemampuan paling penting yang dicari pengusaha ... Lebih penting daripada pengetahuan tentang bahasa pemrograman, debugging, dan desain sistem.
Demonstrasi pemikiran terintegrasi dan kemampuan untuk memecahkan masalah kompleks besar sama berharganya (jika tidak lebih) dari keterampilan teknis dasar yang diperlukan untuk bekerja. "
- Peringkat Peretas ( Laporan Keterampilan Pengembang 2018 )
Pendekatan sistematis
Untuk menemukan pendekatan yang tepat, saya mengikuti saran dari buku Tim Ferriss tentang mengajar
The 4-Hour Chef .
Ini membawa saya ke sebuah wawancara dengan dua orang yang sangat mengesankan:
C. Jordan Ball (peringkat 1 atau 2 dari 65.000 pengguna
Coderbyte ) dan
V. Anton Spraul (penulis
Think of it sebagai Programmer. Pendekatan Kreatif untuk Membuat Kode. ").
Saya mengajukan pertanyaan yang sama kepada mereka, dan coba tebak? Jawaban mereka sangat mirip!
Segera Anda akan mengenalinya juga.
Catatan: ini tidak berarti bahwa mereka semua melakukan hal yang sama. Mereka adalah orang yang berbeda, dan Anda berbeda dari mereka. Tetapi jika Anda mulai dengan prinsip-prinsip dasar yang tepat, hasilnya akan jauh lebih baik dan lebih cepat."Kesalahan paling serius yang saya lihat dengan programmer muda adalah berfokus pada belajar sintaks, daripada belajar bagaimana menyelesaikan masalah."
- V. Anton Spraul
Jadi apa yang harus dilakukan ketika Anda menghadapi tantangan baru?
Mari kita ikuti langkah-langkahnya:
1. Memahami
Memahami apa yang sebenarnya perlu dilakukan. Sebagian besar tugas sulit karena Anda tidak memahaminya (itulah sebabnya ini adalah langkah pertama).
Bagaimana Anda tahu bahwa Anda memahami esensi masalah? Coba jelaskan dalam bahasa sederhana.
Ingat kasus ketika Anda terpaku pada suatu tugas dan mulai menjelaskannya kepada diri sendiri. Pada titik ini, muncul kesalahan logis yang belum Anda lihat sebelumnya.
Kebanyakan programmer mengetahui perasaan ini.
Inilah sebabnya mengapa Anda harus menggambarkan tugas Anda, menggambar diagram, atau memberi tahu seseorang tentang hal itu (beberapa menggunakan
bebek karet ).
"Jika Anda tidak dapat menjelaskan sesuatu dalam bahasa yang sederhana, maka Anda tidak memahaminya."
- Richard Feynman
2. Perencanaan
Jangan mulai memecahkan masalah tanpa rencana, berharap tidak bingung karenanya. Rencanakan keputusan Anda!
Dalam pemrograman, Anda tidak harus melanjutkan. Berikan waktu pada otak Anda untuk menganalisis dan memproses informasi.
Untuk mendapatkan rencana yang baik, jawab sendiri pertanyaan sederhana:
"Dengan menerapkan input X, langkah apa yang harus diambil untuk mendapatkan Y pada output?"
Catatan: programmer memiliki alat yang hebat untuk ini. Komentar!3. Penguraian
Ini adalah langkah terpenting. Berhati-hatilah!
Jangan mencoba memecahkan satu masalah besar.
Alih-alih, bagilah menjadi beberapa subtugas. Memecahkannya akan jauh lebih mudah.
Kemudian selesaikan subtugas, mulai dengan yang paling sederhana. Ketika tugas itu tampak sederhana, itu berarti Anda tahu jawabannya (atau dekat dengan itu).
Pecahkan setiap subtugas secara terpisah dari yang lain dan kombinasikan hasilnya setelah solusi.
Menggabungkan semua tugas kecil akan memberi Anda solusi ke aslinya.
Selamat!
Metode ini adalah landasan pemecahan masalah. Ingat ini (baca kembali langkah ini jika perlu).
Jika saya bisa mengajari setiap programmer muda cara mengatasi masalah, itu akan mengurangi jumlah utang teknis.
Misalkan Anda ingin menulis sebuah program yang mengambil 10 digit dan mengembalikan terbesar ketiga. Untuk seorang pemula, ini bisa menjadi tugas yang menakutkan, meskipun hanya membutuhkan pengetahuan tentang sintaks dasar.
Jika Anda mandek, maka Anda perlu menyederhanakan. Alih-alih angka terbesar ketiga, bagaimana kalau menemukan yang terbesar? Masih terlalu rumit? Bagaimana menemukan yang terbesar dari ketiga angka itu? Atau lebih dari keduanya?
Kurangi masalah sampai Anda mengerti bagaimana menyelesaikannya. Catat keputusannya. Kemudian perluas tugas sampai Anda kembali ke pertanyaan awal.
- V. Anton Spraul
4. Terjebak?
Sekarang Anda mungkin duduk dan berpikir: "Hei, ini keren, tapi bagaimana jika saya tidak bisa menyelesaikan masalah ini?"
Pertama-tama ambil napas dalam-dalam. Jangan khawatir. Itu terjadi pada semua orang!
Satu-satunya perbedaan adalah bahwa programmer terbaik memperbaiki bug dan menyelesaikan masalah dengan minat, bukan gangguan.
Sebenarnya, berikut adalah tiga hal yang harus Anda coba lakukan ketika menghadapi kesulitan:
- Debugging Periksa langkah demi langkah di mana Anda mungkin salah dalam keputusan Anda. Pemrogram menyebut debugging ini.
“Seni debugging adalah untuk mengetahui perbedaan antara apa yang Anda tulis dalam program dan apa yang ingin Anda tulis”
- Andrew Singer
- Perubahan pendekatan. Kembali satu langkah. Lihatlah tugas dari sudut yang berbeda. Apakah mungkin untuk mengabaikan implementasi dan menerapkan pendekatan yang lebih umum?
“Kadang-kadang kita masuk ke detail yang begitu banyak sehingga kita tidak memperhitungkan prinsip-prinsip umum yang dengannya kita dapat menyelesaikan masalah di tingkat yang lebih tinggi. [...]
Contoh klasiknya, tentu saja, adalah penjumlahan dari daftar panjang bilangan bulat berturut-turut 1 + 2 + 3 + ... + n, yang Gauss muda dengan mudah dihitung menggunakan rumus n (n + 1) / 2, menghindari masalah yang terkait dengan peningkatan jumlah elemen ”
- C. Jordan Ball
Catatan: Terkadang lebih baik untuk menghapus semuanya dan memulai kembali dengan kekuatan baru. Saya serius. Anda akan terkejut betapa efektifnya hal ini. - Penelitian Oh, Google tua yang baik. Apa pun tugas Anda, kemungkinan besar seseorang sudah menyelesaikannya sebelum Anda. Temukan orang atau solusi ini. Lakukan bahkan jika Anda mengetahuinya sendiri. Anda bisa belajar banyak dari orang lain.
Perhatian: Jangan mencari solusi untuk masalah besar. Cari solusi hanya untuk subtugas kecil. Mengapa Jika Anda tidak tegang (setidaknya sedikit), maka Anda tidak akan belajar sesuatu yang baru. Jika Anda tidak belajar apa pun, Anda membuang-buang waktu.
Berlatih
Jangan berharap menjadi seorang profesional dalam seminggu. Untuk menyelesaikan masalah dengan baik, Anda harus menyelesaikan banyak masalah!
Berlatih. Berlatih. Dan berlatih lagi. Hanya dengan waktu Anda dapat mengatakan: "Masalah ini dapat dengan mudah diselesaikan dengan bantuan <ganti solusi Anda di sini>".
Bagaimana cara melatih? Ada opsi menarik!
Teka-teki catur, masalah matematika, sudoku, pergi, monopoli, video game, dll.
Bahkan, praktik umum di antara orang-orang sukses adalah kebiasaan mereka "memecahkan microtasks". Misalnya, Peter Thiel bermain catur, dan Elon Musk memainkan video game.
Byron Reeves berkata: "Jika Anda ingin melihat seperti apa para pemimpin bisnis dalam tiga hingga lima tahun, lihatlah game online."
Maju cepat. Elon Musk, Reid Hoffman, Mark Zuckerberg, dan banyak lainnya mengatakan bahwa permainan sangat penting bagi keberhasilan mereka dalam mendirikan perusahaan mereka.
- Mary Meeker ( laporan tren internet 2017 )
Apakah ini berarti Anda hanya boleh bermain game? Tentu saja tidak.
Tapi apa esensi dari sebagian besar game? Itu benar, dalam menyelesaikan masalah!
Jadi apa yang harus dalam latihan praktis. Sesuatu yang memungkinkan Anda untuk menyelesaikan banyak tugas mikro (dan idealnya Anda menyukainya).
Sebagai contoh, saya suka tugas pemrograman. Dan setiap hari saya mencoba menyelesaikan setidaknya satu (terutama pada
Coderbyte ).
Seperti yang saya katakan, semua tugas memiliki model solusi yang serupa.
Kesimpulan
Itu saja!
Sekarang Anda tahu apa artinya berpikir seperti seorang programmer.
Anda juga tahu bahwa pemecahan masalah adalah keterampilan (dasar) yang luar biasa yang perlu dikembangkan.
Perhatikan, sekarang Anda juga tahu bagaimana melatih keterampilan pemecahan masalah Anda!
Akhirnya, saya ingin Anda menghadapi banyak tantangan.
“Ketika Anda berpikir bahwa Anda telah berhasil mengatasi satu kendala, yang lain muncul. Tapi inilah yang membuat hidup menarik. [...]
Hidup adalah proses mengatasi rintangan - benteng yang melaluinya kita harus menerobos.
Setiap kali Anda mempelajari sesuatu yang baru.
Setiap kali Anda akan mengembangkan kekuatan, kebijaksanaan, dan perspektif.
Setiap kali kompetisi akan berkurang. Dan pada akhirnya, hanya versi perbaikan Anda akan tetap. "
- Ryan Holiday ( Rintangan adalah Jalannya )
Sekarang, selesaikan masalahnya!
Dan semoga beruntung bersama Anda!
Terima kasih khusus kepada C. Jordan Ball dan V. Anton Spraul. Untuk saran bermanfaat yang mereka berikan.
Selain itu, saya tidak bisa memperoleh pengetahuan pemrograman saya begitu cepat tanpa
Lambda School . Saya tidak bisa berterima kasih atau merekomendasikan mereka.