Hari-hari ini, saya banyak berinvestasi dalam struktur data dan algoritma dan mencoba memecahkan beberapa teka-teki pemrograman.
Saya mencoba kode dan selesaikan dengan Java dan Clojure.
Apakah saya membuang-buang waktu? haruskah saya berinvestasi lebih banyak dalam teknologi dan kerangka kerja yang sudah saya ketahui untuk mendapatkan pengetahuan yang lebih dalam (seluk beluk) dan dapat kode dengan mereka lebih cepat?
Dengan mempelajari struktur data dan algoritma, apakah saya akan menjadi programmer yang lebih baik atau mata pelajaran itu hanya penting selama tahun-tahun kuliah?
learning
algorithms
data-structures
Chiron
sumber
sumber
Jawaban:
Sangat mungkin untuk menghabiskan sebagian besar / semua karier Anda melakukan pekerjaan yang signifikan dan bermanfaat, dengan hanya sedikit pengetahuan tentang algoritma dan struktur data.
Tingkat minimum pengetahuan untuk algoritma dan struktur data, agar berhasil, akan mengharuskan Anda untuk:
Tidak ada * maksimum * . Jika Anda mau, Anda dapat mengambil studi Anda ke tingkat PhD dan seterusnya. Kegunaannya terkait langsung dengan jenis pekerjaan yang Anda minati, dan jenis pekerjaan apa yang menurut Anda paling menarik dan bermanfaat.
Yang mengatakan, sebagai pedoman kasar (tetapi tidak absolut), semakin rendah tingkat, sumber daya lebih intensif dan kurang otomatis bahasa, kerangka kerja, dan aplikasi yang sedang Anda kerjakan, semakin tinggi tingkat keterampilan yang dibutuhkan ketika datang untuk algoritma, dan struktur data. Misalnya, menerapkan algoritme Ukkonen dalam perakitan kemungkinan besar, tetapi tidak harus, berarti Anda ingin pemahaman tingkat master tentang algoritme dan struktur data yang terlibat.
Dalam situasi spesifik Anda, beralih dari latar belakang pengembangan Java ke mengerjakan IO, semua hal lain dianggap sama, mengharapkan permintaan yang sedikit lebih tinggi pada pemahaman umum Anda tentang algoritma dan struktur data. Anda ingin dapat berjalan secara efisien di perangkat dengan sumber daya yang tersedia lebih sedikit. Juga, berharap untuk menambahkan beberapa kategori baru ke gudang senjata Anda - terutama, Anda ingin tahu lebih banyak tentang manajemen memori.
sumber
Tidak Jika Anda baru memulai maka coba masuk ke hal-hal gambaran besar seperti pemrograman UI dan semacam itu hanya menahan Anda. Akhirnya Anda memang perlu pergi ke sana, dan mempelajari kerangka kerja yang lebih besar ... cara menggunakan struktur data dan algoritma yang ditulis orang LAIN. Ketika Anda baru memulai meskipun ada baiknya tetap berpegang pada masalah lingkup terbatas.
Algoritma dan struktur data pada dasarnya adalah dasar dari segalanya meskipun Anda mungkin tidak akan pernah menulis salah satu dari Anda sendiri setelah Anda melewati tahap pemula. Mengetahui mereka, atau setidaknya mengenal mereka, pada akhirnya akan menjadikan Anda pengembang yang lebih baik. Anda akan tahu kapan dan mengapa harus menggunakan masing-masing karena Anda akan tahu BAGAIMANA cara kerjanya. Plus, membuat algoritma dan struktur data Anda menjadi generik sehingga mereka dapat bekerja dengan semua jenis atau tipe dengan antarmuka X benar-benar ADALAH sesuatu yang akan Anda gunakan untuk sisa karir Anda.
Saya melihat terlalu banyak orang melompat ke hal-hal seperti Qt yang akhirnya mengajukan pertanyaan yang menunjukkan nol pengetahuan tentang C ++ (misalnya). Mereka mencoba melewati terlalu banyak langkah dan pada akhirnya butuh waktu lebih lama untuk mereka pelajari. Saya akan mengatakan Anda berada di jalan yang benar.
sumber
Anda tidak membuang waktu Anda.
Jika, dalam pekerjaan Anda, Anda perlu menggunakan alat atau kerangka kerja yang belum pernah Anda gunakan sebelumnya, Anda akan mempelajarinya dan menggunakannya.
Namun, jika Anda perlu menggunakan struktur data atau algoritma yang belum pernah Anda gunakan sebelumnya, kemungkinan Anda bahkan tidak akan tahu itu ada, dan Anda akan memecahkan masalah Anda menggunakan beberapa teknik sub-optimal mengerikan yang membutuhkan banyak lagi usaha dan skala sangat.
Yang ingin saya katakan adalah, ini adalah hal-hal yang tidak hanya Anda pelajari dengan melakukan, Anda perlu mempelajarinya dengan belajar , baik dalam situasi akademik, atau melalui investasi usaha pribadi, karena Anda Lakukan sekarang.
sumber
Dalam praktiknya, waspadai apa struktur data yang tersedia, apa karakteristik kerumitannya, di mana untuk mendapatkan implementasi yang baik dari mereka, dan di mana Anda menyimpan salinan Pengantar Algoritma untuk mencari detailnya nanti.
sumber
Jika itu yang membuat Anda bahagia, maka Anda harus tetap menggunakannya. Jika Anda khawatir tidak menerapkan cukup teori, pertimbangkan proyek yang sarat teori. Bangun bahasa pemrograman kecil, seperti Ramuan , dari awal. Implementasi penuh akan menggunakan tabel Hash, Grafik, Pohon, dan sejumlah besar algoritma. Jika tampaknya menarik, Anda bisa terjun lebih dalam ke optimasi, pembuatan kode asli, atau ekstensibilitas pengguna.
Anda akan menjadi programmer yang lebih baik ketika Anda tetap tertarik dan fokus, bukan ketika Anda mengerjakan proyek yang tampak praktis tetapi sedikit membosankan.
Menuruni lubang kelinci, Dorothy!
sumber
Saya menghabiskan banyak waktu meretas C / C ++ dengan OpenGL. Saya tahu bahasa dan API dengan cukup baik ... dan saya telah menjadi pengembang dan programmer yang masuk akal karena pengalaman itu. Yang mengatakan, pengetahuan algoritmik yang sebenarnya diperlukan untuk menyelesaikan berbagai masalah yang dihadapi, saya baru saja benar-benar bisa memahami.
Berbicara dari pengalaman pribadi, berfokus pada membangun aplikasi akan membuang-buang waktu Anda jika Anda tidak tahu teori di balik domain masalah yang berkaitan dengan apa yang Anda coba bangun.
Untuk berbagai jenis perangkat lunak, domain-domain ini akan berasal dari dasar-dasar yang Anda pelajari dari mempelajari algoritme, di samping teori spesifik berbasis niche mereka sendiri (misalnya, aljabar linier dalam grafik komputer, teori angka / informasi dalam kriptografi, dll.).
Anda tidak perlu harus menjadi ahli komputer komputasi di balik segalanya, tetapi melakukan apa yang Anda lakukan pada saat posting ini adalah jalan yang sangat, sangat diperlukan untuk turun setidaknya sekali dalam perjalanan pemrograman seseorang - terlepas dari apakah atau tidak bukan mereka belajar sendiri.
sumber
Saya kira jika Anda tidak mengenal mereka dengan baik maka Anda tidak akan menemukan alasan untuk menggunakannya. Saya sepertinya menemukan kegunaan untuk mereka sepanjang waktu. Tetapi saya harus mengakui bahwa dengan perbaikan dalam obat generik dalam setengah lusin tahun terakhir ini, kebutuhan untuk menggulirkan obat Anda sendiri semakin jarang terjadi. Itu masih tidak menghilangkan manfaat dari mengetahui bagaimana dan kapan menggunakannya dan mereka dapat sangat menyederhanakan kode yang rumit.
sumber