Haruskah saya terus berinvestasi dalam struktur data dan algoritma? [Tutup]

28

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?

Chiron
sumber
5
Struktur dan algoritma data apa yang Anda kerjakan? Teka-teki pemrograman apa yang Anda gunakan?
oosterwal
Saya sedang bekerja / belum bekerja pada Hash-tables, Maps, Heaps, Graphs, Trees dan algoritma yang menyertainya (melintasi, hashing, mencari, menyisipkan, menghapus, dan beberapa jenis algoritma). Teka-teki ini berasal dari kompetisi TopCoder dan Google Code Jam.
Chiron

Jawaban:

24

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:

  • Waspadai sebagian besar dari mereka (termasuk membaca yang baru sesekali saat mereka keluar)
  • tahu di mana menemukan implementasi yang baik, teruji, dan bekerja
  • dapat membandingkan algoritma dan kegunaannya
  • dapat menyalin dengan benar satu dari contoh sumber terbuka ke lingkungan spesifik Anda, dengan sedikit penyesuaian

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.

blueberryfields
sumber
2
Sangat setuju. Saya hampir tidak pernah harus berurusan dengan algoritma secara langsung karena sebagian besar dari yang dibutuhkan sudah termasuk dalam perpustakaan dasar. Tetapi saya akan berada dalam masalah jika saya tidak cukup memahami karakteristik kinerja untuk memilih algoritma atau struktur yang sesuai untuk use case tertentu. OP, kecuali jika Anda ingin bekerja di algoritma, Anda bisa mendapatkan banyak, banyak , banyak keuntungan lebih baik untuk menghabiskan waktu belajar perpustakaan lain dan alat-alat dan teknik.
quentin-starin
1
Ugh, menulis algoritma Ukkonen dengan Python sudah cukup sulit, aku bahkan bisa mulai membayangkan melakukannya dalam perakitan.
rjzii
2
Ini termasuk dalam titik "bandingkan algoritma", tetapi saya hanya ingin menjelaskan bahwa Anda harus mengetahui pertukaran antara kompleksitas ruang dan waktu. Banyak algoritma yang biasa digunakan di desktop karena kecepatannya mungkin tidak layak di iOS karena membutuhkan struktur data yang besar.
Karl Bielefeldt
3
Saya tidak setuju. Alasan sederhana adalah ketika seseorang menghabiskan waktu untuk belajar Algoritma atau Perancangan atau Arsitektur, itu bukan hanya tentang kapan / di mana ia akan menggunakannya. Itu hanya membuat orang lebih pintar dan dia mungkin menggunakan pembelajaran sambil memecahkan masalah lain. Ini juga mendorong rasa melakukan sesuatu secara optimal. Untuk misalnya. mungkin tidak ada Algoritma buatan tangan untuk semuanya tetapi karena Anda tahu banyak hal Anda mungkin datang dengan sesuatu yang luar biasa pada Anda sendiri.
Geek
14

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.

Edward Strange
sumber
Saya telah melakukan pemrograman Java secara profesional (dipekerjakan saya maksudkan) sejak 2007. Sekarang saya akan (setidaknya saya berharap) untuk melakukan beberapa pengembangan iOS.
Chiron
9

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.

Carson63000
sumber
6

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.

smithco
sumber
1

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!

Hanya sedikit Roger
sumber
1

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.

tentang kosong
sumber
0

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.

Dunk
sumber