Sudah enam tahun sejak saya coding. Pengodean ke semua hal seperti ActionScript, JavaScript, Java, PHP, Ajax, XML HTML, ASP, dll. Saya telah menggunakan array, peta, daftar yang terhubung, 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 ada pada 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?
sumber
Jawaban:
Jika yang Anda tahu bagaimana melakukannya adalah menulis kode lem, Anda dapat menyebut diri Anda sendiri kode monyet. Banyak kode lem yang perlu ditulis dan Anda dapat hidup layak sebagai monyet kode. Untuk menyebut diri Anda seorang Real Programmer TM dan dipercaya ketika kode perlu ditulis dari awal, Anda harus mengetahui algoritma, struktur data, manajemen memori, pointer, bahasa assembly, dll. Dan memahami bagaimana menggunakan pengetahuan ini untuk mengevaluasi pengorbanan.
sumber
mereka yang tidak tahu sejarah dikutuk untuk menciptakannya kembali
sumber
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 akan perlu atau dapat menerapkan struktur data dalam JavaScript yang mengungguli kelas Array. Ini juga terjadi di PHP.
Untuk Java OTOH, ada perbedaan. Saya kira perpustakaan standar Java menyediakan Anda tentang struktur data apa pun yang Anda butuhkan. Namun:
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:
Struktur data dan algoritme hanyalah hal yang baik untuk dipahami. Dan itu adalah sesuatu yang sangat jelas dan formal 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 keuntungan Anda mengenal mereka.
sumber
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 yang lebih dalam ini diperlukan untuk melakukan pekerjaan semacam itu, itu tidak cukup . Dengan kata lain, hanya mengetahui cara kerja tabel hash 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 serta 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 punya 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.
sumber
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 pergi mereka menilai baik apakah Anda melakukan gelar Ilmu Komputer (dan bisa 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.
sumber
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 harus menggunakan satu di atas 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 efisien dan terukur kinerja. Intinya: mengetahui banyak API akan memberi Anda roti, tetapi untuk mentega Anda harus mulai dari dasar-dasar komputasi.
sumber
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 data / algoritma tertentu serta trade-off yang datang dengan itu. Saya berharap setiap pengembang yang saya wawancarai memiliki setidaknya pemahaman dasar, bahkan jika mereka tidak menggunakan jargon yang sama (walaupun tidak mengetahui jargon berarti Anda akan merasa lebih sulit untuk berkomunikasi dengan pengembang lain).
sumber
Pengetahuan tentang algoritma memungkinkan Anda untuk dengan yakin mengatakan bagaimana pilihan Anda akan berkembang ! Saya pribadi menganggap ini perlu untuk menjadi programmer senior
sumber
Saran yang baik dari Analisis Algoritma Oleh Charles E. Leiserson - MIT
sumber
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:
sumber
Anda mungkin menjadi programmer yang baik sekarang, 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 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.
sumber
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 skrip adalah semua yang perlu Anda lakukan, maka Anda mungkin 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.
sumber