Saya bukan programmer yang baik (dalam logika), bagaimana saya harus memperbaikinya? [Tutup]

50

Ok, jadi ini masalah saya:

Saya bekerja untuk sebuah perusahaan besar, beberapa cara mendapatkan pekerjaan (terus terang karena wawancara itu mudah). Bukan karena saya tidak tahu barang-barang saya, saya cukup pandai memahami java, itu perpustakaan dll

Tetapi, ketika saya mencoba untuk memecahkan beberapa masalah logika, saya merasa sangat sulit untuk menemukan solusi.

Misalnya, conversion of decimal to romanketika saya melihat solusinya, saya menemukan bahwa itu adalah masalah sederhana. Tapi saya tidak bisa mengimplementasikannya setelah 1-2 jam mencoba!

Saya merasa bodoh dan tidak layak menjadi insinyur perangkat lunak. Kemampuan memecahkan teka-teki harusnya berasal dari seorang programmer yang hebat. Tetapi ketika saya mencoba untuk memecahkan beberapa teka-teki, saya tidak dapat menemukan solusi dan saya hanya google itu! .... dan saya benci itu!

Ketika diberi masalah (seperti mengimplementasikan fitur xyz) di tempat kerja, saya cukup cepat dalam hal itu dan saya menghormati tempat kerja saya untuk itu, tetapi saya sama sekali tidak bangga dengan hal itu. Karena ketika saya mencoba menyelesaikan masalah yang menantang secara matematis atau logis, saya gagal. Saya masih merasa saya mencintai apa yang saya lakukan (sebagai insinyur) tetapi merasa benar-benar sedih bahwa saya tidak dapat menyelesaikan beberapa masalah logika yang sulit yang saya teman-temani.

Saya merasa terdemoralisasi :(

TL; DR: Saya mengerti hal-hal dari sudut pandang praktis (menerapkan fitur dalam produk kami) tetapi ketika mencoba untuk mengatasi masalah dari mengatakan ProjectEuler, saya SUCK buruk! Dan saya perlu Mempertajam otak saya!

Jadi, pertanyaan saya adalah:

  1. Bagaimana saya harus memperbaikinya? Haruskah saya mulai dengan memecahkan (dan memaksa diri saya) masalah proyek euler? Bahkan jika perlu berjam-jam bagiku untuk menyelesaikan beberapa masalah mendasar ?
  2. Atau haruskah saya kembali ke dasar dan belajar matematika dasar?
  3. Saya tidak benar-benar menemukan penyelesaian teka-teki yang menyenangkan. Tetapi saya ingin menjadikannya menyenangkan untuk diri saya sendiri! Dan saya pikir jika saya memahaminya dengan cara yang lebih baik, saya akan menyukainya!

PS: Saya tidak pernah dididik di CS (sarjana saya adalah electrial). Tapi itu bukan alasan untuk menjadi pengembang yang sial.

Terima kasih!

John
sumber
3
Jika itu tidak memecahkan teka-teki menyenangkan untuk Anda maka mengapa repot-repot!
V4Vendetta
3
Ini tidak menyenangkan karena saya kesulitan menyelesaikannya. Jika saya pandai, saya yakin saya akan menyukainya!
John
1
Anda selalu bisa mencoba ini (peringatan, SERIUS adiktif jika Anda berada dalam memecahkan teka-teki)
Benjol
2
Tidak ada yang datang secara asli. Bahkan keterampilan paling dasar pun perlu dipelajari. Saya akan merekomendasikan kalkulus dan mekanika klasik sebagai taman bermain untuk melatih kemampuan yang diperlukan, tetapi banyak mata pelajaran lain (termasuk seluruhnya non-matematika) dapat melakukan hal yang sama.
SK-logic
3
@ John Dikonfirmasi. Itu masalah yang sulit. Anda seharusnya tidak merasa sedih jika Anda tidak bisa menyelesaikannya dalam 5 menit. Satu setengah jam untuk melakukannya, setelah membaca Wiki tentang angka romawi, dan hanya dengan membandingkan hasilnya dengan hasil implementasi lain saya dapat memperbaiki bug. Saya (seperti banyak yang lain) berpikir bahwa IL adalah angka yang valid. Salah. XXXIX adalah nomor yang benar. Plus saya harus menonton implementasi lain untuk mengoptimalkannya (saya pra-caching II, III, XX, XXX dan sebagainya, tetapi tidak berguna). Jangan merasa buruk!
xanatos

Jawaban:

24

Pertama, luar biasa bahwa Anda melihat ini sebagai kelemahan dalam keterampilan Anda. Anda benar-benar tahu di mana Anda perlu meningkatkan, yang membuat waktu yang jauh lebih mudah melakukannya, dan menunjukkan bahwa Anda lebih baik daripada yang Anda pikirkan.

Saya percaya masalah utama Anda, yang telah saya lihat berkali-kali sebelumnya, adalah bahwa Anda tidak memiliki "toolset pemecahan masalah". Saat menghadapi masalah, apa yang Anda lakukan? Bagaimana Anda menyelesaikannya? Saya lambat dalam matematika, tetapi karena saya tahu bagaimana menggunakan alat-alat kecil matematika bersama-sama, saya mengakses kalkulus.

Jadi, selain hanya mengerjakan pemecahan masalah, Anda perlu melihat alat dan keterampilan apa yang Anda bawa saat Anda melakukannya. Jika Anda akan mengerjakan fitur baru di tempat kerja, apakah Anda hanya duduk tanpa IDE, tanpa debugger, tanpa dokumentasi, tanpa internet, dan tanpa kode sumber? Tentu saja tidak!

Ada alat untuk memecahkan masalah, Anda hanya belum mengetahuinya .... belum . Artikel wikipedia memiliki beberapa tautan ke teknik pemecahan masalah. Tetapi alat yang paling penting adalah metode ilmiah . Artikel wikipedia mencakup pendekatan pragmatis:

  1. Definisikan sebuah pertanyaan
  2. Kumpulkan informasi dan sumber daya (amati)
  3. Bentuk hipotesis penjelasan
  4. Uji hipotesis dengan melakukan percobaan dan mengumpulkan data dengan cara yang dapat direproduksi
  5. Analisis data
  6. Menafsirkan data dan menarik kesimpulan yang berfungsi sebagai titik awal untuk hipotesis baru
  7. Publikasikan hasil
  8. Retest (sering dilakukan oleh ilmuwan lain)

Semua masalah bisa diselesaikan dengan cara ini! Banyak orang tidak melalui langkah-langkah ini. Ini seperti pengembang yang menolak untuk menguji kodenya. Sama sekali. Dia akan memiliki masalah mencari tahu bug bahkan ada.

Akhirnya, alat utama lain untuk pemecahan masalah adalah memecahnya dengan langkah-langkah sederhana . Misalnya, masalah pertama dalam contoh proyek Euler :

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

Kami memiliki dua fakta, dan ada masalah di sini. Fakta satu menunjukkan kepada kita bagaimana mendefinisikan kelipatan tiga atau lima di bawah 10. 3 * 1,3 * 2,3 * 3,5 * 1 semuanya valid. 5 * 2 bukan karena sama dengan 10. Lalu, fakta dua memberi tahu kita bahwa kita menambahkannya bersama untuk mendapatkan 23.

Jadi kita sudah memiliki metode untuk menemukan nilai, dan kita bisa menambahkannya bersama untuk mendapatkan jumlah kita. Tentu saja, kita dapat melihat fakta dan menerapkan urutan sederhana. 3, 5, 6 dan 9 adalah kelipatan dari 3 atau 5. Yaitu 3% 3, 5% 5, 6% 3, 9% 3 semua memberikan mod nol. Jadi pendekatan lain akan melalui 999 ke 1 dan modulus setiap angka dengan 3 dan 5. Kumpulkan daftar nilai dan tambahkan bersama-sama.

Saya akan menyarankan Seni pemrograman unix sebagai contoh yang sangat baik untuk menggunakan alat kecil di dunia pemrograman. Mempersatukannya memungkinkan Anda untuk memecahkan masalah yang sangat kompleks, dan saya tidak dapat menghitung berapa kali konsep-konsep ini membantu saya.

Spencer Rathbun
sumber
19

Banyak pemrogram juga "pemecah teka-teki" alami, tetapi ada jauh lebih banyak pemrograman daripada itu. Jika semua programmer berfokus pada pemecahan masalah algoritmik yang menarik, kita akan memiliki banyak dan banyak perangkat lunak yang dapat memecahkan masalah keren, tetapi tidak satupun dari mereka akan dapat digunakan atau dipelihara.

Saya menemukan bahwa ada sedikit tantangan tipe "pemecahan teka-teki" dalam pekerjaan saya. Sebagian besar tantangan lebih lanjut tentang mempelajari kode lama, mempelajari API baru, merancang arsitektur beberapa komponen dengan cara yang orang tidak akan bersumpah dalam waktu tiga tahun. Semua ini menantang, tetapi tidak begitu banyak dari jenis teka-teki logika. Di sisi lain, saya memiliki kolega yang menghabiskan sebagian besar waktu mereka memikirkan algoritma pengoptimalan kompiler, dan yang sangat pandai dalam hal itu.

Saya pikir penting bagi programmer untuk terus berpikir tentang "bagaimana saya bisa menjadi lebih baik pada apa yang saya lakukan?", Tetapi menjadi seorang programmer yang baik tidak selalu mengharuskan Anda pandai dalam memecahkan teka-teki.

Secara pribadi, saya mendapatkan perbaikan pemecahan teka-teki dengan memecahkan "misteri geocaches" .

JesperE
sumber
Tetapi banyak dari startup baru HANYA menekankan keterampilan memecahkan teka-teki. Ambil facebook. Jika saya tidak pandai memecahkan puzzle, saya bahkan tidak memenuhi syarat untuk mendaftar di sana!
John
6
Facebook memiliki robot puzzle sebagai cek pertama hanya untuk menghindari harus menyaring ribuan CV. Jika Anda benar-benar ingin bekerja untuk FB, maka Anda harus bisa menyelesaikan masalah seperti itu, tetapi ada banyak dan banyak tempat bagus lainnya untuk bekerja.
JesperE
jawaban yang fantastis. membuat saya nyaman juga ... =]
Hartley Brody
9

Biarkan saya memperingatkan Anda, semakin Anda tahu, semakin Anda menyadari betapa sedikit yang Anda tahu.

Hanya saja, jangan berkecil hati dengan itu. Teruslah belajar dan berusaha untuk mengerjakan bidang-bidang yang Anda sadari masih kurang.

Sekarang ke pertanyaan Anda. Saran saya adalah mulai mengerjakan masalah pada proyek eule r.

Alasan saya untuk ini sederhana, mulai dari pertanyaan paling populer, ini biasanya masalah yang lebih mudah untuk dipecahkan.

Ketika Anda dihadapkan dengan suatu masalah, coba dan selesaikan, kerjakan sendiri, cobalah berbagai pendekatan. Cara project euler bekerja memungkinkan Anda memeriksa dan menguji jawaban Anda.

Jika Anda memutuskan bahwa Anda tidak dapat menyelesaikan masalah ini, mulailah meneliti masalah (tidak mencari jawabannya). Jangan coba lagi.

Setelah Anda memecahkan masalah, project euler memiliki bagian di mana mereka menunjukkan kepada Anda jawaban terbaik untuk setiap implementasi bahasa. Periksalah jawaban mereka dalam bahasa pilihan Anda, pahami solusi mereka dan pemikiran yang masuk ke dalamnya.

Sekarang tutup jawaban yang mereka berikan, dan coba lagi sendiri sampai Anda menyelesaikannya lagi.

Jika Anda cukup berlatih, logika dan pemikiran untuk menyelesaikan masalah ini akan semakin mudah bagi Anda.

SetiSeeker
sumber
4

Sebagian besar pekerjaan pemrograman tidak memerlukan banyak logika. Tetapi ini mungkin bukan pekerjaan yang Anda sukai.

Sebagai pedoman umum, cobalah mempelajari algoritma dan struktur. Saya dapat menyarankan manual The Algorithm Design dari Skiena. Setelah Anda mengetahuinya, Anda akan mulai mengelompokkan masalah. Ini sangat mirip dengan masalah salesman keliling, di sini saya dapat menggunakan pohon, di sini saya dapat menggunakan pencarian biner ...

Project Euler memiliki variasi puzzle yang luas. Banyak dari ini mudah dilakukan dengan pengetahuan matematika dasar. Yang lain lebih mudah diselesaikan setelah Anda mengetahui beberapa algoritma ini.

Carra
sumber
2

Saya sangat percaya bahwa Anda baru saja memulai perjalanan Anda dalam pemrograman, jadi hal pertama jika Anda butuh waktu untuk memahami dan melakukannya dengan benar tampaknya bukan masalah. Satu-satunya perbedaan apa yang dibuat adalah dengan setiap upaya Anda belajar sesuatu seperti WoW! ! hal terakhir yang saya lakukan tidak masuk akal sama sekali karena saya butuh desimal dan bukan ganda

Jika memecahkan teka-teki tidak menarik bagi Anda, maka jangan mencari kepala untuk itu, ada masalah logis lain yang beredar setelah Anda tahu basis kode Anda, Anda dapat memilih untuk mengerjakannya dan menyajikan editan yang disarankan kepada mentor atau pimpinan Anda . (jangan khawatir jika Anda melakukan kesalahan besar mereka akan membantu Anda tahu mengapa metodologi Anda salah, jadi jadilah pengamat yang tajam dan pendengar yang tepat)

Ini akan memakan waktu bagi Anda untuk menetap dan kemudian mungkin Anda akan mulai menembaki semua silinder. Tak perlu dikatakan hindari dorongan untuk mencari solusi di google atau SO, lakukan beberapa upaya dari Anda dan hanya jalankan browser Anda ketika Anda ragu atau benar-benar tidak mengerti

V4Vendetta
sumber
1

Yang terpenting, mengetahui kelemahan Anda adalah kekuatan yang sebenarnya, maka Anda tahu apa yang harus dipelajari untuk mendapatkan permainan yang lebih baik.

Saran saya, baca banyak kode yang memecahkan masalah logika. Setiap orang memiliki gaya mereka sendiri dalam menyelesaikan teka-teki, membaca kode mungkin memberi petunjuk kepada Anda bagaimana Anda bisa belajar melakukan ini. Selain bisa memahami kode mungkin juga mengarahkan Anda ke teori matematika yang menggambarkan masalah, jadi sepanjang jalan Anda akan belajar tentang masalah yang mendasarinya juga.

Salam, Carlo

Carlo Kuip
sumber
1

Saya merasa saya harus menambahkan ini.

Seperti yang sudah dijawab oleh jawaban yang dipilih, mengetahui kelemahan Anda adalah keuntungan besar, dan ada beberapa alat dasar untuk mempelajari teknik pemecahan masalah. Apa yang saya pikir kurang dalam jawabannya, adalah hanya untuk menemukan cara untuk mempraktikkan masalah yang sulit - banyak. Keras kepala untuk sepenuhnya menyelesaikan setiap masalah yang Anda coba. Membaca kode, banyak kode, adalah baik, seperti membaca buku tentang masalah penyelesaian masalah, tetapi menulis kode hampir lebih penting.

Dalam beberapa hal, kami memiliki kelemahan yang sama (meskipun, itu tidak seburuk yang Anda kira). Untuk mempraktikkan keterampilan pemecahan masalah saya, saya selalu mengerjakan beberapa masalah proyek Euler atau HackerRank. Jika ini masalah yang mudah, saya memilih 7 bahasa pemrograman dan mencoba menyelesaikannya di semua bahasa itu. Untuk masalah yang lebih sulit, saya mungkin memilih 3 bahasa yang sangat berbeda satu sama lain, hanya agar waktu yang saya habiskan untuk masalah itu masuk akal. Untuk semua masalah, begitu saya menemukan solusi, saya mencari solusi yang orang lain buat dan memastikan saya memahaminya. Jika Anda tidak memahami beberapa solusi, Anda selalu dapat memposting ke StackOverflow atau bahkan mungkin di sini ke Programmer Stack Exchange atau sesuatu dan saya yakin ada seseorang di situs yang dapat menjawab pertanyaan Anda (jarang ada yang tidak).

Pada dasarnya, pastikan Anda berlatih, dan tidak hanya membaca, dan banyak berlatih. Sama seperti olahraga, berpikir jernih membutuhkan waktu dan usaha.

Hal lain yang dapat Anda lakukan untuk membantu membantu cara Anda berpikir tentang masalah adalah menulis test suite untuk masalah yang Anda selesaikan terlebih dahulu. Anda tidak dapat menulis tes yang bagus untuk suatu masalah tanpa terlebih dahulu memahaminya. Jika Anda melakukan ini untuk bahasa yang berbeda, ini memiliki keuntungan mengajar Anda teknik pengujian yang berbeda pada saat yang sama.

Josiah
sumber