it-swarm-id.com

Apakah saya perlu memahami algoritma dan struktur data untuk disebut seorang programmer?

Sudah enam tahun sejak saya coding. Melakukan pengkodean ke semua hal seperti ActionScript, JavaScript, Java, PHP, Ajax, XML HTML, ASP, dll. Saya telah menggunakan array, peta, daftar tertaut, set, dll dan di mana pun saya bekerja orang-orang seperti saya. Tetapi setiap kali saya diwawancarai, sangat mungkin bahwa orang bertanya kepada saya tentang hash, pohon, tumpukan, dan antrian. Beberapa pertanyaan tentang juggling beberapa algoritma penyortiran. Saya tidak tahu apakah saya harus benar-benar mengenal mereka atau haruskah saya berhenti menyebut diri saya seorang programmer. Ada sesuatu dalam diri saya yang juga memberi tahu saya bahkan jika orang yang menanyakan semua pertanyaan ini memilih saya, mereka tidak akan pernah membuat saya mengerjakan hal-hal ini. Apakah saya benar-benar harus mengetahui semua ini?

38
sushil bharwani

Jika yang Anda tahu bagaimana melakukannya adalah menulis kode lem, Anda bisa menyebut diri Anda sendiri kode monyet. Banyak kode lem yang perlu ditulis dan Anda bisa hidup layak sebagai monyet kode. Untuk menyebut diri Anda seorang Programmer Nyata TM dan dipercaya ketika kode perlu ditulis dari awal, Anda harus mengetahui algoritma, struktur data, manajemen memori, pointer, bahasa Majelis, dll. dan memahami bagaimana menggunakan pengetahuan ini untuk mengevaluasi pengorbanan.

80
dsimcha

mereka yang tidak tahu sejarah dikutuk untuk menciptakannya kembali

33
Steven A. Lowe

Nah, bekerja dalam bahasa seperti JavaScript membuat ini sangat usang, karena Array adalah campuran antara vektor, hash dan pohon dan dapat digunakan sebagai tumpukan atau antrian. Sangat tidak mungkin Anda perlu atau dapat mengimplementasikan struktur data dalam JavaScript yang mengungguli kelas Array. Ini juga terjadi di PHP.

Untuk Java OTOH, ada perbedaan. Saya kira perpustakaan standar Java memberi Anda tentang setiap struktur data kebutuhan Anda. Namun:

  1. Anda perlu mengetahui dan membedakan struktur data tersebut dan memahami bagaimana kinerjanya dalam situasi yang berbeda sehingga Anda dapat memilih yang benar.
  2. Di Jawa, bukan tidak mungkin Anda akhirnya akan ingin menulis implementasi Anda sendiri untuk sebuah hashmap untuk mendapatkan kecepatan yang lebih baik dalam beberapa kasus yang sangat spesifik (misalnya jika kunci yang ingin Anda penuhi memenuhi beberapa kendala khusus yang memungkinkan optimasi).

Ketika datang ke pengurutan algoritma, tidak perlu banyak tahu atau memahaminya, karena tidak perlu untuk mengimplementasikannya sendiri. Namun, jika algoritma seperti itu diberikan kepada Anda, Anda harus dapat memahami dan mengimplementasikannya.

Ada dua hal yang pasti:

  1. Anda dapat berkarir sebagai programmer tanpa mengandalkan pengetahuan seperti ini.
  2. Itu pastinya tidak ada salahnya Anda mengenal mereka.

Struktur data dan algoritme hanyalah hal yang baik untuk dipahami. Dan itu adalah sesuatu yang sangat jelas dan diformalkan dan dengan demikian cukup sepele dibandingkan dengan seluk-beluk aplikasi atau rekayasa sistem. Mereka hanya satu bagian kecil dalam teka-teki, tetapi mudah dipahami - jika Anda mau meluangkan waktu.

Jadi tidak, Anda tidak membutuhkannya, tetapi hanya untuk manfaat Anda untuk mengenal mereka.

30
back2dos

Ini mungkin suatu kesempatan di mana ada perbedaan semantik yang bermakna antara 'programmer' dan 'insinyur perangkat lunak.' Dalam konteks ini, secara khusus, kami melihat bahwa Anda memiliki pengetahuan tentang beberapa bahasa pemrograman dan teknologi terkait dan bahwa Anda dapat menggunakannya untuk menghasilkan hasil yang diinginkan. Ini adalah definisi operasional yang bagus tentang 'programmer komputer.'

Saya menganggap diri saya sebagai insinyur perangkat lunak. Dalam sebagian besar aspek pekerjaan saya sehari-hari, saya mungkin melakukan hal yang sama seperti yang Anda lakukan. Saya menggunakan bahasa komputer dan teknologi terkait untuk menghasilkan beberapa hasil yang diinginkan. Namun, saya memiliki pemahaman tentang struktur data dan algoritma, dan saya menganggap pengetahuan itu sebagai dasar yang mendasari kemampuan saya untuk melakukan lebih banyak lagi.

Seringkali - meskipun tidak pernah hari - pekerjaan saya melibatkan menemukan solusi untuk masalah kompleks yang tidak ada solusi yang jelas, tidak ada yang secara langsung ditangani oleh fitur kerangka kerja yang saya gunakan atau kemampuan bahasa yang saya gunakan dengan. Dalam hal ini, saya perlu menganalisis masalah dan menyusun solusi dan kadang-kadang proses ini berjalan di bidang arsitektur skala besar.

Sementara pemahaman yang sangat baik tentang masalah-masalah yang lebih dalam ini diperlukan untuk melakukan pekerjaan semacam itu, itu tidak cukup. Dengan kata lain, hanya mengetahui bagaimana tabel hash bekerja atau mengapa heap sort biasanya memiliki karakteristik kinerja yang baik tidak cukup untuk menjadi arsitek sistem atau insinyur senior. Ini adalah tempat awal yang logis, dan dari sana Anda dapat mulai menggali lebih dalam dan melakukan perjalanan lebih luas dan mendapatkan pengalaman yang juga diperlukan untuk mengatasi masalah yang lebih besar.

Saya kira bahwa untuk menjawab pertanyaan Anda, Anda harus bertanya pada diri sendiri, "Apa yang saya inginkan? Di mana saya akan pergi dengan karier saya?" Jika Anda puas untuk terus melakukan apa yang Anda lakukan, maka Anda mungkin hanya ingin mempelajari cukup struktur data dan algoritma untuk melewati pertanyaan wawancara yang sebagian besar arbitrer yang Anda hadapi.

Jika Anda ingin tumbuh dalam karir Anda dan Anda memiliki hasrat untuk itu yang sangat penting, Anda harus merangkul mata pelajaran ini sekencang mungkin. Jika Anda memiliki waktu untuk mengatasinya, pikiran terbuka dan antusiasme sejati, Anda akan menemukan beberapa hal yang indah dan menarik. Saya tidak akan pernah melupakan hari pertama kali saya memahami quicksort. Perasaan gembira dan penemuan mengatur jalan bagi sebagian besar sisa hidup saya, dan saya tidak bisa lebih bersyukur untuk itu. Sekarang, saya tidak bisa membayangkan melakukan apa pun selain bekerja sebagai insinyur perangkat lunak.

Semoga beruntung dengan apa pun yang Anda pilih.

13
Adam Crossland

Itu tergantung untuk apa pekerjaan itu. Hal-hal semacam ini adalah pertanyaan wawancara yang cukup standar tetapi juga tidak imajinatif dan mungkin tidak berhubungan dengan pekerjaan sama sekali - tentu saja bukan pekerjaan yang menggunakan teknologi yang Anda daftarkan.

Bagi saya sebagai pertanyaan wawancara, mereka adalah penilaian yang baik untuk apakah Anda meraih gelar Ilmu Komputer (dan dapat mengingatnya) daripada ukuran kemampuan pemrograman umum atau pengetahuan.

Saya menyarankan agar Anda mempelajari hal-hal ini sehingga Anda dapat melewati wawancara, atau Anda hanya menerima bahwa di mana pun menanyakan hal-hal ini bukan untuk Anda, tetapi tidak, Anda tidak perlu tahu mereka untuk menyebut diri Anda seorang programmer.

12
Jon Hopkins

Pertanyaan bagus Javascript atau Java atau VC++ adalah bahasa pemrograman super pintar di mana Anda tidak perlu membuat daftar tertaut atau tabel hash dari awal. Tetapi Anda masih harus memiliki kemampuan untuk memutuskan kapan akan menggunakannya. yang lain, hukuman kinerja dan bonus masing-masing bertambah dll.

Saya telah mewawancarai banyak programmer API alias kode monyet, dan dalam sebagian besar wawancara mereka secara rutin gagal merancang sistem yang kinerja efisien dan terukur. Intinya: mengetahui banyak API akan memberi Anda roti, tetapi untuk mentega Anda harus mulai dari dasar-dasar komputasi.

6
Fanatic23

Saya akan menambahkan "ya, tentu saja Anda masih bisa menyebut diri Anda seorang programmer". Tapi Anda ingin menjadi programmer seperti apa? Saya pikir programmer terbaik memiliki setidaknya beberapa landasan teori. Mereka tahu mengapa mereka memilih struktur/algoritma data tertentu serta pengorbanan yang datang dengan itu. Saya berharap setiap pengembang yang saya wawancarai memiliki setidaknya pemahaman dasar, bahkan jika mereka tidak menggunakan jargon yang sama (meskipun tidak mengetahui jargon berarti Anda akan merasa lebih sulit untuk berkomunikasi dengan pengembang lain).

3
Martijn Verburg

Pengetahuan tentang algoritma memungkinkan Anda untuk dengan yakin mengatakan bagaimana pilihan Anda Akan skala! Saya pribadi menganggap ini perlu untuk menjadi programmer senior

2
user1249

"Jika Anda ingin menjadi programmer yang baik, Anda hanya memprogram setiap hari selama dua tahun. Jika Anda ingin menjadi programmer kelas dunia, Anda dapat memprogram setiap hari selama sepuluh tahun, atau Anda dapat memprogram setiap hari selama dua tahun dan mengambil kelas algoritma . "

-Charles E. Leiserson

Saran bagus dari Analisis Algoritma Oleh Charles E. Leiserson - MIT

2
milan-j

Anda mungkin menjadi programmer yang baik saat ini, tetapi pengetahuan tentang Struktur Data, Algoritma dan pengetahuan tentang topik lain dalam ilmu komputer tentu akan banyak membantu dalam meningkatkan diri Anda dalam banyak hal:

  • Anda mungkin bisa lebih efektif dan lebih cepat dalam melakukan sesuatu. Bahkan orang-orang yang sudah memiliki gelar Ilmu Komputer dan tahu banyak dari topik-topik ini akan cenderung untuk mengikuti perkembangan terbaru untuk meningkatkan diri mereka sendiri.

  • Pengetahuan ini juga akan baik untuk, jika sampai tingkat yang lebih rendah, katakanlah jika Anda pindah dari programmer ke track manajemen nanti, karena Anda masih akan dapat memahami aspek teknis proyek dengan lebih baik dengan pengetahuan ini.

  • Tentu saja struktur data dan algoritma banyak ditanyakan dalam wawancara, sehingga merupakan satu alasan lagi mengapa mungkin berguna untuk mengetahuinya.

1
aditya

Tergantung dari proyeknya: Saya seorang Insinyur Komputer dan saya bekerja sebagai programmer analis.

Saya menghabiskan banyak waktu untuk bekerja dalam desain (pengujian, doc, desain kode). Tetapi, ketika saya menemukan bug (atau kinerja yang buruk) atau saya harus mengkodekan struktur data baru (karena persyaratannya sangat BARU untuk aplikasi), saya harus memahami di mana masalah dalam algoritme dan saya harus memperbaikinya ( Saya melakukan ini tidak terlalu baik, jadi :))

Algoritma dan struktur data klasik adalah semacam "pola kamus" di dunia pengembang.

Beberapa tautan luar biasa:

1
alepuzio

Anda menyebutkan hash, pohon, tumpukan, antrian dan algoritma penyortiran. Nah, teknologi yang Anda sebutkan sebagian besar terkait laman web dan skrip web. Setidaknya Anda harus memahami pohon, sehingga Anda dapat bekerja dengan DOM dengan baik. Tetapi jika Anda hanya perlu menulis skrip, mungkin Anda baik-baik saja. Anda tidak akan memerlukan sebagian besar alat perdagangan untuk programmer sejati. Tapi itu karena ada perbedaan besar antara string-juggling yang membentuk sebagian besar scripting Web dan apa yang kebanyakan dari kita anggap "program menulis."

Saya bekerja dengan hash dan pohon secara praktis setiap hari, dan tumpukan dan antrian lebih jarang tetapi cukup sering. Penyortiran pada dasarnya adalah masalah yang diselesaikan; hampir semua bahasa memiliki quicksort yang dibangun di perpustakaan standar, metode Sortir pada tipe koleksi dasar, dll, tetapi Anda harus tahu dalam keadaan apa kinerja quicksort dapat sangat menurun dan strategi yang tepat untuk menunda penyortiran.

Jika saya tidak tahu prinsip-prinsip ini dan bagaimana cara kerjanya, saya mungkin bisa meretas solusi pengkodean yang berfungsi, tetapi mereka tidak akan menjadi solusi berkualitas sangat baik. Mereka berjalan lambat, sulit dibaca, dan sulit untuk memodifikasi, menggunakan kembali atau memperluas. Jadi jika Anda ingin belajar menjadi programmer yang baik, Anda harus membaca tentang algoritma dan struktur data Anda. Mereka benar-benar akan meningkatkan kualitas kode Anda.

0
Mason Wheeler