Mengapa struktur data sangat penting dalam wawancara? [Tutup]

106

Saya harus mengakui bahwa saya tidak begitu kuat dalam struktur data ketika saya lulus dari perguruan tinggi. Sepanjang penempatan kampus selama wisuda saya, saya telah menyaksikan bahwa sebagian besar perusahaan teknologi besar seperti Amazon, Microsoft dll berfokus terutama pada struktur data. Tampaknya struktur data adalah satu-satunya hal yang mereka harapkan dari seorang lulusan.

Sejujurnya, saya merasa tidak enak tentang itu. Saya menulis kode yang bagus. Saya mengikuti pola desain standar pengkodean, saya memang menggunakan struktur data tetapi pada tingkat yang dangkal seperti di Java terkena API seperti ArrayList, LinkedList dll. Tetapi perusahaan biasanya berfokus pada aspek-aspek rumit dari Struktur Data seperti manipulasi memori berbasis pointer dan kompleksitas waktu.

Mungkin karena latar belakang Java saya, saat itu, saya mengerti efisiensi kode dan logika hanya ketika berbicara dalam hal Pemrograman Berorientasi Objek seperti objek, instance, dll tapi saya tidak pernah mengebor ke tingkat bit dan byte. Saya tidak ingin orang-orang memandang rendah saya karena defisit pengetahuan saya dalam Struktur Data.

Jadi sungguh mengapa semua ini menekankan pada Struktur Data?

Vamsi Emani
sumber
36
Saya benar-benar tidak mendapatkan pertanyaan Anda. Anda mengatakan "Saya menulis kode yang baik" - bagaimana struktur data tidak menjadi bagian dari kode yang baik. Dan, saya ragu pewawancara yang tulus akan sangat terobsesi dengan mereka.
treecoder
6
@ Grengeng: Ada perbedaan antara menerapkan peta hash, dan menggunakan API-nya. Apa yang akan saya hargai dalam sebuah wawancara adalah jika mereka menggambarkan aplikasi untuk saya, kemudian meminta saya untuk membangun struktur data pusat, dan menjelaskan pilihan saya.
György Andrasek
7
Apa yang Anda inginkan untuk ditanyakan?
temptar
13
@Jurily - Untuk memahami kapan harus menggunakan pustaka kontainer, ada baiknya memiliki pengetahuan tentang cara kerja struktur data yang mendasarinya. Sulit untuk menerima bahwa Anda tahu tentang efisiensi kode jika Anda tidak tahu kompleksitas waktu dan ruang perpustakaan yang Anda gunakan - hanya karena itu bekerja dengan baik pada dataset uji kecil tidak berarti itu akan skala dengan baik untuk dataset yang lebih besar di dunia nyata. IMO, memahami kompleksitas waktu dan ruang adalah bagian dari memahami API seperti mengetahui nama kelas dan metode - mungkin lebih, karena intellisense tidak akan memberi tahu Anda kompleksitasnya.
Steve314
2
Struktur data yang baik memberikan kode yang bersih dan sederhana. Struktur data yang buruk memberikan kode kompleks. Penting untuk mendapatkan yang benar.

Jawaban:

121

sebagian besar perusahaan teknologi biggie seperti Microsoft fokus terutama pada struktur data. Tampaknya struktur data adalah satu-satunya hal yang mereka harapkan dari seorang lulusan.

Tidak, masih ada lagi. Misalnya, kami juga berharap Anda menjadi pembelajar cepat yang dapat mempelajari kerangka kerja baru, API, atau bahkan bahasa pemrograman dalam waktu singkat. Itu bar minimum yang telanjang. Seseorang yang membutuhkan waktu lama untuk mempelajari kerangka kerja baru, API atau bahasa tidak akan menjadi pengembang yang sukses di sebagian besar tim di Microsoft.

Dan tentu saja ada lebih banyak aspek yang kita fokuskan dalam wawancara selain hanya pengetahuan mentah tentang struktur data. Kemampuan untuk berurusan dengan spesifikasi yang ambigu, misalnya, atau kemampuan untuk mengenali pola pengkodean yang menghasilkan kode tidak aman, atau selusin hal lainnya. Tetapi kemampuan untuk memahami struktur data tentu saja sangat besar.

Hal ini terutama terjadi bahwa wawancara bias terhadap pengujian pengetahuan tentang struktur data untuk lulusan CS baru-baru ini. Lulusan baru-baru ini, kebanyakan dari mereka tidak memiliki banyak pengalaman di dunia nyata, tidak diharapkan untuk menjadi baik dalam hal-hal yang sama dengan seseorang yang memiliki pengalaman industri selama lima belas tahun.

Saya harus mengakui bahwa saya tidak begitu kuat dalam struktur data

Adalah baik bahwa Anda mengetahui hal itu tentang diri Anda sendiri. Jika Anda tidak dapat atau tidak mau mengubah itu tentang diri Anda maka rekomendasi saya adalah Anda tidak melamar pekerjaan yang membutuhkan fasilitas dengan struktur data.

ada perspektif umum ini bahwa seorang programmer yang baik tentu saja adalah seorang yang memiliki pengetahuan yang baik tentang struktur data.

Ini tautologis bahwa seorang programmer yang baik adalah seorang programmer yang pandai membangun jenis-jenis program yang perlu dibangun. Banyak programmer bekerja pada tugas-tugas yang tidak memerlukan pengetahuan mendalam tentang struktur data. Beberapa dari mereka mengerjakan tugas yang membutuhkan pengetahuan mendalam tentang desain antarmuka pengguna, misalnya. Atau normalisasi basis data. Atau terserah. Orang-orang itu masih bisa menjadi "programmer yang baik" di domain mereka.

mengapa semua ini menekankan pada Struktur Data?

Saya mengajukan pertanyaan wawancara tentang struktur data karena di tim saya pengembang mendesain, mengimplementasikan dan memanipulasi struktur data yang kompleks setiap hari setiap hari. Kemarin kami memiliki empat jam pertemuan di mana setengah lusin pengembang berpendapat pro dan kontra menambahkan bidang Boolean tunggal ke simpul pohon tertentu. Mungkin tidak ada keahlian di tim saya yang lebih penting daripada kemampuan untuk memahami struktur data pada level yang dalam. Sungguh bodoh untuk tidak menanyakan pertanyaan wawancara tentang hal itu, karena itulah yang kami lakukan.

Apakah tidak memiliki pengetahuan dalam Struktur Data benar-benar memengaruhi karier seseorang dalam pemrograman?

Yah itu pasti akan mencegah Anda mendapatkan pekerjaan di tim saya. Tapi seperti yang saya katakan sebelumnya, pemrograman adalah bidang yang sangat besar . Ada banyak jenis pemrograman komputer yang tidak memerlukan pengetahuan tentang struktur data.

Apakah pengetahuan dalam subjek ini benar-benar merupakan dasar yang cukup untuk membedakan programmer yang baik dan yang buruk?

Tidak. Tetapi hampir selalu cukup untuk mendeteksi pengembang yang tidak mungkin berhasil di Microsoft. Karena itulah yang saya terutama tertarik untuk mendeteksi, pengetahuan tentang struktur data adalah salah satu faktor yang saya uji dalam wawancara.

Eric Lippert
sumber
10
Terima kasih banyak, Eric! Ini adalah jawaban yang paling tidak mendemotivasi yang saya dapatkan untuk pertanyaan saya. :-)
Vamsi Emani
2
@EricLippert, terima kasih atas jawaban yang sangat bagus ini. Sebagai pengembang otodidak yang belum digigit oleh kurangnya pengetahuan formal tentang struktur data, apakah Anda merekomendasikan buku yang bisa menunjukkan kepada saya apa yang telah saya lewatkan?
Penutupan Koboi
5
@Closure Cowboy: Untuk dasar-dasar struktur data dan algoritma, "Pengantar Algoritma" oleh Cormen, Leieserson dan Rivest adalah buku teks standar. Jika Anda tertarik pada struktur data gaya fungsional, buku Chris Okasaki sangat bagus tetapi cukup canggih.
Eric Lippert
2
@ClosureCowboy Lihatlah kursus 'Algoritma I' Coursera yang ditawarkan oleh Princeton. Saya seorang programmer otodidak juga dan melakukan banyak hal untuk membantu mengisi kekosongan saya dalam pengetahuan teori CS.
Evan Plaice
133

Satu poin penting tentang struktur data adalah bahwa mereka bersifat universal dan tidak lekang oleh waktu, setidaknya untuk tujuan praktis. Siapa pun yang telah menjadi pengembang dalam 30 tahun terakhir harus mengetahui struktur data dasar seperti daftar tertaut tunggal / ganda, pohon biner, atau grafik. Jika Anda bertanya kepada dua pengembang tentang mereka, Anda dapat membandingkan pengetahuan pengembang dengan jawaban mereka. Ini hampir tidak bisa dikatakan untuk kerangka kerja atau bahkan bahasa: Jika Anda bertanya kepada dua pengembang tentang Rails, dan yang satu tahu lebih banyak daripada yang lain, apa artinya itu bagi Anda, sungguh? Seperti yang Anda katakan dalam pertanyaan, pengembang yang cerdas dapat mempelajari kerangka kerja baru dengan cukup cepat, jadi menguji pengetahuan mereka saat ini tidak masuk akal.

Apakah, Tidak memiliki pengetahuan dalam Struktur Data benar-benar memengaruhi karier seseorang dalam pemrograman?

Iya. Pastinya. Kecuali Anda ingin menghabiskan seluruh hidup Anda menulis aplikasi CRUD.

Atau apakah pengetahuan dalam subjek ini benar-benar dasar yang cukup untuk membedakan programmer yang baik dan yang buruk?

Tidak, itu tidak cukup. Tetapi ada beberapa hal yang bisa Anda tanyakan dalam wawancara kerja yang cukup. Dan saya akan mengatakan algoritma pengetahuan adalah salah satu indikator yang lebih baik, setidaknya untuk orang-orang yang baru keluar dari sekolah, di mana Anda tidak dapat bertanya tentang pengalaman kerja.

nikie
sumber
Sedikit nitpick, saya tidak akan mengatakan struktur datanya abadi. Banyak struktur dimodelkan untuk memecahkan masalah dengan perangkat keras saat ini. Sebagai contoh, kami menggunakan B + Tree untuk mengoptimalkan pencarian pada halaman file tetapi perangkat keras yang mendasarinya berubah. Mungkin SSD mungkin memerlukan algoritma yang berbeda, atau mungkin di mana bergerak lebih ke arah akses RAM daripada disk io. Jadi sementara algoritma itu sendiri mungkin "abadi" itu tempat dan tujuan tidak
Homde
3
@konrad: Itulah yang saya maksudkan dengan "untuk tujuan praktis". Saya tidak bisa memikirkan struktur data atau algoritma yang menjadi "usang", dan saya ragu Anda akan menemukan satu dalam wawancara kerja. Dan karena sebagian besar algoritma / struktur data dikembangkan jauh sebelum perangkat keras kami saat ini dan masih berguna, saya bahkan menduga ada semacam evolusi bersama, di mana pengembangan perangkat keras baru dipandu oleh struktur data yang kami tahu.
nikie
Jika / Ketika konkurensi menjadi de facto wajib, saya dapat memikirkan banyak sekali struktur data yang menjadi usang :)
Homde
9
@konrad: Dan jika / ketika komputer kuantum menjadi standar, saya bisa memikirkan beberapa lagi. Tapi saya berasumsi OP tidak mau menunggu dengan wawancara pekerjaannya sampai saat itu ;-)
nikie
3
... atau ketika tuan AI kami yang baru membuat pemrogram manusia yang lemah menjadi usang
Homde
45

Saya seorang pembelajar cepat dan saya bisa belajar kerangka kerja baru, API atau bahkan bahasa pemrograman dalam waktu yang sangat singkat.

Tidak terdengar terlalu keras, tetapi setiap pengembang yang setengah layak akan dapat mengambil bahasa atau kerangka kerja baru dalam periode waktu yang relatif singkat.

Struktur data bersifat universal, mereka adalah blok bangunan dasar ilmu komputer - pohon merah-hitam pada dasarnya sama, apakah itu diterapkan di Jawa, Python, PHP atau apa pun. Jadi, alih-alih menguji bahasa tertentu, atau kerangka kerja tertentu, pemberi kerja (setidaknya, pemberi kerja yang mencari pengembang yang menonjol) akan menguji apakah Anda mengetahui dasar - dasar ilmu komputer, daripada sekadar rasa apa pun yang mereka miliki bulan ini. sedang menggunakan.

(setidaknya, mereka harus menguji dasar-dasar di samping apa pun yang mereka gunakan saat ini ... tidak ada gunanya menyewa seorang penyihir ilmu komputer jika dia tidak pernah menulis sederet kode dalam hidupnya)

Dean Harding
sumber
1
Ilmu komputer adalah salah satu kata kunci di sini. Struktur data biasanya dilihat secara mendalam di Master dan tampaknya merupakan subjek yang penting.
James P.
1
Struktur data bersifat universal sampai Anda terpikat pada pemrograman fungsional murni: P.
Tikhon Jelvis
30

Apakah Anda percaya bahwa pembalap F1 hanya mengendarai mobil cepat? Tidak, mereka mengerti mobil yang mereka kendarai dan mereka bekerja dengan mekanik / insinyur untuk menyetelnya. Tentu saja, pengemudi normal hanya mengemudi.

Anda bisa menjadi programmer normal / rata-rata yang hanya menulis kode. Anda tidak mengerti apa yang ada di belakang. Anda menyelesaikan sesuatu. Itu saja, sampai jumpa hari berikutnya.

Tetapi banyak perusahaan mencari pengembang F1. Orang yang akan berkembang mengetahui apa yang ada di balik kode mereka. Orang yang juga akan membantu perusahaan untuk membangun sesuatu yang lebih baik.

Cukup baik untuk mengetahui struktur data tidak hanya karena Anda akan menggunakannya dalam bentuk "pra masak". Ini juga bagus karena Anda akan menciptakan sesuatu yang berasal dari ide mereka.

graffic
sumber
Jadi tunggu, apakah Anda mengatakan bahwa ada korelasi antara saya menjadi programmer, dan kebiasaan aneh saya untuk mengenal mobil secara intim sebelum saya mengendarainya?
Robbie
@Robbie: +1 LOL Anda suka membongkar barang?
graffic
2
Ya. Ayah saya mengajari saya cara membongkar apa pun . Dia lalai mengajari saya bagaimana menyatukan kembali semua hal, telah memikirkan hal itu sepanjang hidup saya.
Robbie
17

Di kelas saya tentang struktur data, hal pertama yang dikatakan profesor adalah: Kelas ini bukan tentang kemampuan mencari dengan sangat cepat. Kami kemudian menghabiskan setengah tahun untuk menemukan struktur data dan algoritma terbaik untuk mencari dengan sangat cepat.

Tetap saja, dia tetap benar. Mampu menganalisis struktur data, menerapkan struktur data yang tepat untuk masalah tertentu atau bahkan menghasilkan struktur data baru membutuhkan banyak kualitas seorang insinyur:

  • Menemukan abstraksi untuk memodelkan masalah konkret
  • Mampu menguraikan masalah
  • Mampu bernalar secara logis / formal
  • Kreativitas
  • dll.

Ketika Amazon dan Microsoft merekrut orang, mereka tidak mengajukan pertanyaan tentang struktur data karena mereka berharap dapat menemukan quicksort berikutnya . Mereka ingin memastikan mereka mempekerjakan seseorang dengan kualitas yang disebutkan di atas.

Tentu saja mungkin untuk memiliki seperangkat kualitas ini dan masih menyedot struktur data. Tetapi kemudian, jika itu masalahnya, Anda tidak perlu waktu lama untuk menjadi ahli dalam struktur data.


Yang sedang berkata, masih ada masalah yang ArrayListhanya tidak cukup skala. Ketika sistem menjadi besar, solusi adaptasi yang lebih baik diperlukan untuk melakukan pekerjaan itu. Dan tanpa pemahaman yang baik tentang struktur data, Anda tidak akan dapat menemukan dan menyusun struktur dan algoritma yang berskala luas dalam skenario konkret Anda.

blubb
sumber
3
Dan mengenai ArrayList, tanpa pemahaman yang baik tentang struktur data Anda bahkan mungkin tidak menyadari bahwa ArrayListitu tidak cukup skala dan Anda perlu menemukan dan menyusun struktur dan algoritma skala itu.
phoog
12

Secara umum algoritma dan struktur data dianggap sebagai dua topik yang paling "inti" dalam pemrograman. Ini karena ada banyak sekali pekerjaan dan penelitian tentang mereka dalam ilmu komputer. Mereka juga menarik program "lobus kiri" khas yang menyukai hal-hal seperti matematika dan sains (yang banyak programmer)

Yang sedang berkata, pengetahuan ini dapat mempengaruhi karir Anda dalam hal wawancara, terutama jika Anda wawancara di tempat kerja yang berorientasi teknik seperti google. Perusahaan lain sekarang mungkin peduli dengan aspek itu sama sekali.

Dalam pengalaman saya, algoritma / tuntutan struktur data kadang-kadang dapat dianggap sebagai "programmer elitism" di mana alpha geeks berebut untuk menunjukkan siapa yang paling pintar. Itu selalu baik untuk mengetahui apa yang ada di luar sana, tetapi ada banyak pekerjaan pemrograman yang berbeda di mana Anda tidak perlu tahu bagaimana menggunakan pohon merah / hitam atau kode pencarian boyer-moore.

Saya akan merekomendasikan belajar lebih banyak tentang topik-topik tersebut jika Anda menganggapnya menarik dan memiliki beberapa proyek pribadi di mana Anda dapat bermain-main dengannya, jika tidak, Anda mungkin dapat bertahan tanpa topik itu untuk saat ini

PS. Kemahiran dengan struktur data yang belum sempurna (daftar tertaut, kamus, tagar, dll.) Harus menjadi pengetahuan wajib untuk setiap programmer DS.

konrad
sumber
7

Jadi sungguh mengapa semua ini menekankan pada Struktur Data?

Dua alasan.

Untuk satu hal, ini menunjukkan Anda bisa memikirkan masalah dalam istilah abstrak, bukan dalam hal bahasa pemrograman tertentu. Apakah Anda tahu mengapa tabel hash mungkin menjadi pilihan yang lebih baik atau lebih buruk daripada pohon merah-hitam dalam situasi tertentu, terlepas dari penerapan yang mendasarinya?

Untuk yang lain, ada sejumlah orang yang menakutkan di luar sana mewawancarai pekerjaan yang hanya berbohong tentang pengalaman mereka dan memiliki kemampuan pemrograman yang sangat sedikit; pertanyaan struktur data adalah cara cepat menyiangi orang-orang ini.

John Bode
sumber
Saya akan memberikan pendapat di sini yang mungkin kontroversial. Pertanyaan mengapa satu struktur data cenderung ke efisiensi dan kinerja. Apa yang kami katakan agar tidak dilakukan pengembang? Tidak mengoptimalkan secara prematur! Kecuali Anda tahu dengan membuat profil bahwa pilihan struktur data menyebabkan masalah kinerja, yang 'tepat' untuk dipilih adalah yang paling Anda kenal. Keputusan lainnya adalah pengoptimalan prematur, dan karenanya jahat!
Tom W
2
Memilih struktur data yang tepat di depan berdasarkan penerapan dan diharapkan karakteristik kinerja secara independen dari pelaksanaan yang mendasari adalah bukan contoh optimasi prematur.
John Bode
Memilih fibonacci lebih dari tumpukan biner bisa. Menggunakan daftar heap vs (ketika heap sesuai) tidak.
user470365
5

Mereka mendasar, tetapi juga, apa yang akan Anda kuis pada lulusan? Mereka mungkin atau mungkin tidak memiliki pengalaman di luar pekerjaan kursus mereka. Kursus mereka mungkin lebih banyak membahas teknologi Microsoft daripada mengatakan Java, atau sebaliknya. Struktur data adalah landasan bersama.

Ian
sumber
Beri +1 untuk apa lagi yang akan Anda kuis pada lulusan, karena tidak ada hal lain yang harus diketahui oleh semua lulusan sains sci yang juga Anda ketahui.
Ian
4

Sering kali kode terbaik menghindari menciptakan kembali struktur data tingkat rendah. Ini terutama benar dalam bahasa tingkat tinggi. Saya telah memperhatikan tren pertanyaan struktur data tingkat rendah bahkan dalam pekerjaan CRUD. YMMV, tetapi tampaknya penekanan pada keahlian ilmuwan peretas telah membayangi keterampilan lain yang membuat pengembang hebat:

  • manajemen proyek / waktu: mampu mengikuti dunia nyata yang didorong oleh bisnis, bukan daftar tertaut baru yang beroperasi 1% lebih cepat.
  • jumlah minimum keterampilan sosial: pengembang yang sombong dan tidak bisa bergaul tidak lain adalah jangkar.
  • kemampuan untuk mempelajari hal-hal baru dengan cepat dan terus-menerus: struktur data hampir tidak berubah selama bertahun-tahun ... tetapi yang lainnya tidak. Struktur data adalah dasar yang bagus dan setiap pengembang harus mengetahuinya dengan cukup baik, tetapi seorang akuntan tidak diuji dalam keterampilan divisi panjang mereka ketika mereka pergi untuk wawancara. Pengembang hebat adalah tipe orang yang bisa mengetahui hal-hal baru dan menyukainya.

Struktur data sangat bagus. Struktur data penting. Setiap programmer harus memiliki pemahaman tentang mereka. Namun, kita menjadi terobsesi untuk mendorong dasar-dasar ini keluar dari tempatnya. Ini bukan SEMUA tentang struktur data, dan dalam 99% kasus tidak perlu bertanya di luar dasar-dasar struktur data. Jika Anda mewawancarai seorang akuntan, tanyakan kepada mereka apa yang dibagi dengan 9 itu, tetapi jika Anda terus bertanya "Apa akar pangkat tiga dari 98425454242412 * 4512324? ... tanpa kalkulator!" maka Anda akan menakutkan persentase yang baik dari orang-orang yang masuk akal, pintar, berbakat, dan menyenangkan yang bisa Anda miliki. Tanyakan apakah mereka dapat membangun model data relasional dasar, tanyakan apakah mereka dapat menggunakan struktur array ditingkatkan yang disediakan oleh kerangka kerja yang relevan, dan tanyakan apakah mereka dapat menjelaskan kapan pencarian biner lebih cepat daripada pencarian datar, tetapi tidak ada gunanya melangkah terlalu jauh dari itu. Jika mereka dapat melakukan hal-hal itu, maka mulailah mencari yang terbaik, paling profesional, paling kreatif dari kelompok itu.

Saya suka tulisan Joel, tapi saya pikir "Sekolah Jawa" masalahnya salah. Ada banyak hal yang dapat membuktikan seseorang pintar melampaui penguasaan C ++. Pikirkan tentang hal ini, Anda dapat berbicara dengan seseorang selama 10 menit, tanpa bertanya kepada mereka tentang aritmatika pointer, dan mendapatkan ide yang cukup bagus tentang apakah mereka adalah tipe yang dapat menyelesaikan sesuatu dan mencari tahu. Kita tidak perlu seperti ini:

Pewawancara: "Ceritakan tentang prestasi Anda."

Coder: "Di posisi terakhir saya, saya adalah satu-satunya pengembang untuk sistem ERP khusus untuk perusahaan finansial bernilai miliaran dolar. Kami mengirimkan beberapa bulan lebih cepat dari jadwal, dan sistem telah diproduksi selama 3 tahun terakhir."

Pewawancara: "Biarkan saya mengklarifikasi. Ceritakan tentang pencapaian pemrograman Anda "

Coder: "Umm ..."

Pewawancara: "Misalnya, apakah Anda pernah membuat daftar tautan Anda sendiri?"

Coder: "... [berjalan keluar]"

Morgan Herlocker
sumber
Menarik - daftar yang bagus. Bagaimana kalau dilihat sedikit berbeda? 1. manajemen proyek / waktu: mampu menyiapkan hal-hal sedemikian rupa sehingga struktur data hanya menghabiskan sebagian kecil waktu wawancara. 2. jumlah minimum keterampilan sosial: pengembang yang mampu memahami bahwa pewawancara biasanya ingin dengan cepat memeriksa struktur data dasar sebelum melanjutkan ke area yang lebih menarik. 3. kemampuan untuk mempelajari hal-hal baru dengan cepat dan terus menerus tanpa gangguan yang mungkin disebabkan oleh kurangnya pengetahuan, baik, dasar-dasar struktur data.
nyamuk
@gnat - Itu bagus juga. Saya kira apa yang saya maksudkan adalah bahwa pemahaman fundamental yang paling mendalam tidak berbicara dengan kemampuan keseluruhan melewati titik tertentu, tetapi ada kecenderungan untuk menganggap sebaliknya. Struktur data adalah sesuatu yang diajarkan kebanyakan orang oleh orang lain (biasanya seorang guru). Saya ingin tahu apa yang bisa mereka pelajari sendiri, karena itulah cara kerja dunia nyata. Pemrogram yang baik dapat merancang sistem yang masuk akal berdasarkan praktik terbaik. Pemrogram hebat dapat mempelajari sistem gila yang ditulis oleh pemrogram mengerikan menggunakan praktik terburuk dan membuatnya bekerja.
Morgan Herlocker
1
Saya bisa membayangkan bahwa orang yang bekerja pada sistem ERP tidak cocok untuk tim.
Christopher Mahan
4

Menjadi pemrogram yang baik bukan berarti bisa belajar bahasa dan kerangka kerja. Ini adalah tentang membangun solusi untuk masalah yang kompleks. Agar solusi ini menjadi efisien dan andal hampir selalu bergantung pada algoritma yang baik dan penggunaan struktur data yang tepat. Mengetahui struktur data yang ada tidak cukup. Anda perlu memahami struktur data yang cukup untuk menggunakan yang tepat untuk masalah ini. Daftar dan peta menawarkan beberapa fitur yang berharga, tetapi mereka datang dengan biaya, dan menggunakan yang salah dapat secara signifikan merusak kinerja perangkat lunak Anda.

Pewawancara yang baik mengetahui hal ini dan berusaha menentukan apakah Anda dapat berharga bagi tim atau perusahaannya. Bahasa yang akan Anda gunakan 2 tahun dari sekarang mungkin sangat berbeda, tetapi kebutuhan akan algoritma dan struktur data yang efektif tidak akan berubah.

cdkMoose
sumber
2

Struktur data, kompleksitas waktu, manipulasi memori, dan petunjuk adalah dasar-dasar yang harus diketahui oleh seseorang yang menyebut dirinya Ilmuwan Komputer. Monyet kode apa pun dapat mempelajari bahasa dan mempelajari cara menggunakannya, tetapi di mana profesional dan siswa CS harus membedakan diri mereka mengetahui bukan hanya bagaimana menggunakan daftar yang ditautkan atau peta hash, tetapi MENGAPA.

MENGAPA adalah apa yang benar-benar membedakan kita dari skrip dasar kiddie, kode monyet, dan dengusan dunia komputasi. MENGAPA menggunakan tabel hash bukan daftar yang ditautkan, MENGAPA tabel hash saya berada pada kepadatan cluster sekitar 0,6 -8,8, MENGAPA saya harus menggunakan daftar yang terhubung secara melingkar di sini, bukan daftar yang ditautkan secara ganda. MENGAPA kode saya harus berjalan pada efisiensi 'x' dalam kasus terburuk dan 'y' dalam kasus rata-rata.

Struktur data dasar ini dan pengetahuan tidak hanya BAGAIMANA mereka digunakan (bagaimana seharusnya dalam setiap programer repritoire tetap) tetapi bahasa agnostik MENGAPA mereka digunakan, yang cenderung lebih dari apa yang mereka cari dalam kasus ini.

Banyak tempat akan membuat Anda menulis kode dalam bahasa yang Anda tegaskan, tapi itu lebih bersifat umum, mengingat C benar-benar bukan langua franca dari dunia pemrograman lagi, dan penataan kode pseudo dapat berupa kecelakaan dan semua alih tempat dan, dalam kebanyakan kasus dengan kode pseudo / p & p kode tidak benar-benar diajarkan, benar tidak mungkin untuk berurusan dengan.

Jeff Langemeier
sumber
0

Struktur data adalah landasan mendasar dari semua program. Anda tidak perlu harus memiliki pemahaman yang mendalam tentang mereka, tetapi Anda benar-benar harus tahu cara kerjanya.

Mengapa? Karena semua kode Anda berinteraksi dengan dan memanipulasi data. Jika kumpulan data tidak dapat disimpan dalam struktur, maka tidak dapat digunakan. Data ibarat bahan bangunan rumah. Sampai Anda menyatukannya dalam sebuah struktur, Anda hanya memiliki tumpukan papan yang tidak berguna.

Setelah Anda memutuskan bagaimana memikirkan dan menetapkan set data Anda, maka Anda dapat mulai menggunakannya untuk melakukan sesuatu, bagian algoritma klasik dari duo tersebut. Setiap program yang Anda tulis menggunakan struktur data, meskipun dalam banyak kasus struktur ini sangat sederhana sehingga hampir tidak ada. Beberapa variabel untuk data keadaan dan kita selesai!

Setelah Anda bergerak melampaui program-program sepele, hampir semuanya membutuhkan struktur data. Yang mana yang Anda pilih, seorang arsitek profesional yang merancang gedung pencakar langit Anda dengan praktik terbaik dan matematika, atau paman joe bob yang segera mulai membangun?

Spencer Rathbun
sumber
-2

Untuk membangun apa yang dikatakan @Pelshoff , itu untuk menunjukkan bahwa Anda tahu apa yang Anda lakukan. Jika Anda menggunakan LinkedList untuk semuanya, itu mungkin menunjukkan Anda tidak tahu apa yang Anda lakukan atau Anda tidak peduli untuk berhenti dan memikirkan masalahnya. Selain itu, setidaknya mata kuliah struktur data yang saya ambil membahas, dasar, teori kompleksitas dari struktur data itu yang, ketika berhadapan dengan set data besar sangat penting. Itu sebabnya perusahaan seperti Amazon atau Microsoft akan melakukan hal seperti itu.

Saya harus mengatakan, sebelum saya mengambil kelas struktur data, saya pikir itu tidak penting, tetapi paling tidak bisa recongnize ketika daftar tertaut (atau ArrayList) tidak praktis atau apa yang menarik dari mereka adalah penting.

Jetti
sumber
"Jika Anda menggunakan LinkedList untuk semuanya, itu mungkin menunjukkan Anda tidak tahu apa yang Anda lakukan" atau Anda seorang programmer Lisp :-)
Peter Alexander
@ Peter - yang kemudian akan membuktikan pendapat saya Anda tidak tahu apa yang Anda lakukan! ;)
Jetti
ini tampaknya didasarkan pada tautan mati ke jawaban yang dihapus - cukup membingungkan bagi pembaca. Maukah Anda mengedit untuk mengurus ini?
nyamuk
-2

Apakah Anda menulis kode yang baik atau tidak adalah pernyataan subjektif. Penting untuk diketahui bahwa kode fungsional tidak selalu menghasilkan kode yang baik.

Yang mengatakan, struktur data penting karena mereka seperti pekerja di belakang layar yang Anda, sebagai programmer, arahkan. Memang benar bahwa Anda dapat memanggil metode pada struktur tanpa benar-benar memahami apa yang dilakukannya dan Anda dapat memanfaatkan struktur tanpa benar-benar mengetahui bagaimana data disimpan, tetapi mengetahui detail ini akan lebih mempersiapkan Anda untuk memahami kapan saat yang tepat untuk menggunakan satu struktur lebih dari satu. lain.

Mengetahui, misalnya, bahwa Anda dapat melintasi di kedua arah melalui daftar yang ditautkan dua kali lipat dan hanya meneruskan ke depan melalui daftar yang terhubung sendiri dapat membantu Anda menentukan struktur mana yang penting ketika menyimpan data. Anda dapat membuat keputusan pendidikan yang lebih banyak lagi dengan mengetahui bahwa daftar yang ditautkan secara tunggal dapat berpotensi memiliki overhead yang lebih rendah dalam hal konsumsi memori (karena tidak mengandung pointer ke elemen sebelumnya) jadi, jika Anda hanya perlu beralih ke depan melalui daftar, Anda dapat menghemat sebagian memori dengan menggunakan struktur yang sesuai.

Ini hanya contoh kecil dan, pada akhirnya, jika Anda merasa berhasil dengan baik dalam karier Anda tanpa pengetahuan mendalam tentang struktur data maka mungkin Anda tidak perlu belajar lebih banyak. Memahami apa yang terjadi di bawah tenda, benar-benar dapat membantu mengubah kode fungsional menjadi kode yang baik.

Jason
sumber
-3

Struktur data adalah blok bangunan dari banyak hal yang ingin Anda lakukan. Jika Anda tahu kegunaan untuk setiap struktur data, kelemahan dan poin kuatnya maka Anda dapat dengan mudah menyelesaikan masalah.

Misalnya, kami memiliki persyaratan untuk mengelola ribuan objek. Sesekali kita perlu memperbarui stempel waktu objek sesuai dengan ID-nya. Sesekali kami harus menghapus objek yang tidak diperbarui selama lebih dari X menit.

Jika Anda tahu struktur data Anda, Anda dapat dengan mudah mendefinisikan masalahnya, dan juga sangat mudah untuk menemukan solusi. Ketika seorang programmer yang tidak tahu struktur data yang cukup mencoba untuk datang dengan solusi, solusinya canggung. Dia seperti Anda - pintar, programmer kode, mampu mempelajari kerangka kerja dengan cepat. Tetapi tanpa pengetahuan dalam struktur data dia harus menemukan roda sendiri. Lebih dari itu - dia kesulitan memahami solusi yang lebih sederhana karena didasarkan pada struktur data yang tidak dia pahami seperti pohon merah-hitam (TreeMap lama di Jawa).

Jadi, saya akan mengatakan bahwa yang penting adalah mengetahui bagaimana dan kapan menggunakan setiap struktur data tanpa harus memikirkannya. Tapi saya tidak berpikir ada cara untuk mencapai itu tanpa benar-benar memahami cara kerjanya.

daramasala
sumber