Sebagai programmer pemula, haruskah saya lebih suka membangun perpustakaan saya sendiri daripada menggunakan perpustakaan pihak ketiga?

12

Sebagai seorang programmer Python awal, apakah itu ide yang baik untuk membangun dan memahami perpustakaan saya sendiri sebelum melompat ke perpustakaan pihak ketiga canggih yang berisi fungsi yang saya butuhkan?

Beberapa proyek (misalnya kerangka kerja web seperti Django) mungkin terlalu besar untuk pendekatan ini. Tetapi proyek lain (misalnya Web Crawler, pustaka grafik, pengurai HTML) tampaknya layak.

Saya khawatir ketergantungan awal pada perpustakaan pihak ketiga akan menghambat pertumbuhan saya.

Catatan: pertanyaan ini dan pertanyaan ini tampaknya lebih berfokus pada programmer yang berpengalaman, yang mungkin lebih fokus pada efisiensi penggunaan kembali daripada manfaat belajar. Pertanyaan saya, saya pikir, difokuskan pada pemula.

MikeRand
sumber
5
"tidak lebih dari integrator perpustakaan daripada programmer": pelanggan ingin Anda menjadi produktif. Mampu mengevaluasi dan mengintegrasikan perpustakaan yang ada adalah keterampilan penting yang Anda butuhkan untuk menjadi produktif. Jika tidak ada perpustakaan yang tersedia yang sesuai dengan kebutuhan Anda ... jika tidak, fokuskan pada penyelesaian masalah bisnis yang ditangani aplikasi Anda
Hamish Smith
2
Apa perbedaan yang Anda buat antara "integrator perpustakaan" dan "programmer". Dalam 30 tahun - bahkan membuat pengontrol perangkat tingkat chip tertanam - Saya tidak pernah bekerja tanpa perpustakaan. Bisakah Anda menjelaskan perbedaan ini?
S.Lott
Frasa buruk. Telah diedit.
MikeRand
Saya lebih suka menyewa integrator perpustakaan. Mengapa berkonsentrasi pada bagaimana sementara Anda dapat berkonsentrasi pada fitur? Setelah melihat beberapa lusin sepeda yang diciptakan kembali dengan buruk saya ngeri membayangkan melihat satu lagi. Desain perpustakaan adalah kerja keras dan penyeimbang. Toko perangkat lunak biasa tidak berspesialisasi dalam desain perpustakaan tidak memiliki keterampilan, sumber daya, dan kesabaran yang tepat untuk melakukannya dengan benar. Waspadalah terhadap penulisan ulang. Lebih baik menggunakan kode yang telah diuji oleh orang lain daripada memulai dari awal. Hanya ketika ada ruang hampa seharusnya orang menemukan, IMO.
Pekerjaan

Jawaban:

12

Ini selalu merupakan trade-off.

Sebagai programmer pemula, Anda harus bertanya pada diri sendiri dua pertanyaan ketika mempertimbangkan menggunakan kembali kode vs menciptakan kembali roda persegi:

  1. Akankah saya mempelajari lebih lanjut tentang masalah yang ingin saya selesaikan dengan menulis semuanya dari awal, atau dengan berfokus pada domain masalah dan mengesampingkan kerumitan yang tidak penting untuk masalah yang saya minati?
  2. Apakah lebih penting bagi saya untuk menyelesaikan masalah yang dihadapi atau lebih penting bagi saya untuk memahami beberapa konsep mendasar?

Jika Anda tidak harus menyelesaikan proyek Anda, tidak apa-apa memutar roda Anda pada masalah kompleks yang sudah diselesaikan orang lain, karena Anda akan belajar sesuatu. Tetapi Anda mungkin akan pindah ke hal lain sebelum Anda "selesai," yang mungkin atau mungkin tidak penting bagi Anda. Proyek-proyek lain akan mulai terlihat berkilau cepat ketika Anda berada di atas kepala Anda pada domain kompleks yang terlihat sederhana sampai Anda mulai mencoba menyelesaikannya sendiri.

Jangan terobsesi melepaskan kendali karena Anda tunduk pada cara berpikir orang lain; lebih fokus pada apa yang ingin Anda capai.

Jika tujuan Anda adalah untuk menulis parser HTML karena Anda ingin memahami cara kerja parser, lakukanlah. Jika tujuan Anda adalah untuk menulis parser HTML karena Anda ingin membersihkan input pengguna atau mengubah beberapa bit HTML acak, Anda mungkin berfokus pada hal yang salah, karena Anda mungkin lebih tertarik pada aplikasi parsing daripada parsing itu sendiri . Jika Anda merasa ingin menulis parser HTML karena Anda tidak ingin meluangkan waktu untuk memahami perpustakaan orang lain, Anda mungkin membuang-buang waktu, karena, setidaknya dalam kasus ini, saya jamin orang lain telah menghabiskan lebih banyak waktu mencari tahu bagaimana untuk menyelesaikan masalah ini secara efektif daripada yang Anda miliki. Dalam kasus yang benar-benar sepele, Anda dapat menghemat waktu dengan tidak menggunakan kembali kode, tetapi dalam kasus yang rumit, kecuali perpustakaan yang Anda gunakan menyebalkan atau kemampuan Anda untuk membaca dokumentasi dan sampel kode menyebalkan,

Di sisi lain, saya akan mengatakan bahwa itu layak untuk menulis perpustakaan grafik Anda sendiri, karena Anda akan lebih fokus pada transfer, algoritma mendasar dan struktur data yang Anda akan dapat terapkan ke domain lain, bahkan jika Anda akhirnya menggunakan perpustakaan orang lain saat Anda mengatasi masalah itu.

Jason True
sumber
Kerangka yang fantastis untuk memikirkan masalah. Sangat dihargai.
MikeRand
8

Kebanyakan pemrogram pemula sangat meremehkan kompleksitas masalah. Ini mengarah ke banyak situasi yang tidak menyenangkan, tetapi saya akan fokus hanya pada satu: mereka menolak banyak perpustakaan pihak ketiga karena "kembung" atau "terlalu rumit". Kemudian mereka mencoba menulis kode mereka sendiri untuk melakukan pekerjaan yang sama, dan membuat kekacauan total, karena mereka tidak mengantisipasi semua hal yang harus mereka tangani.

Ambil web crawling dan parsing HTML. Anda tampaknya memiliki sikap yang biasa-biasa saja terhadap tugas-tugas itu - yang membuat saya percaya bahwa Anda tidak pernah mencoba melakukannya pada skala yang sangat kecil. Berikut ini daftar singkat dari masalah potensial yang perlu dihadapi oleh perayap web nyata:

  • HTML salah bentuk.
  • Pengkodean banyak karakter (seluruh dunia tidak berjalan di ASCII).
  • Tautan yang dibuat atau dimodifikasi oleh JavaScript.
  • Tautan ke file biner multi-gigabyte.
  • Jenis pantomim salah.
  • Jatuh di tengah sesi perayapan.
  • Lubang tar.
  • Konsultan SEO.
  • Microsoft
Mike Baranczak
sumber
6

Saya khawatir bahwa ketergantungan awal pada perpustakaan pihak ketiga akan menghambat pertumbuhan saya dan membuat saya tidak lebih dari integrator perpustakaan daripada seorang programmer.

Itu salah.

Ketergantungan awal pada perpustakaan pihak ketiga akan mengajarkan cara kerja perpustakaan yang baik.

Pengembangan prematur selalu membuang-buang waktu. Menulis perpustakaan Anda sendiri tanpa mempelajari (dengan menggunakan) perpustakaan yang ada dengan hati-hati akan membuat Anda menemukan kembali roda - buruk - untuk sisa karir Anda.

Saya telah menghabiskan banyak waktu untuk membersihkan kekacauan itu.

S.Lott
sumber
Tidak yakin saya sepenuhnya setuju dengan itu .. Kadang-kadang perpustakaan pihak ke-3 ditulis dengan buruk dan benar-benar dapat mengajarkan kebiasaan buruk. Jika algoritma yang mendasarinya dipahami dengan baik, maka menciptakan kembali roda mungkin merupakan ide yang baik, dan kemudian membandingkannya dengan perpustakaan lain untuk melihat seberapa baik atau buruknya Anda menumpuk ke yang lain. Dalam kedua kasus itu, jelas beberapa bentuk bimbingan sangat bermanfaat :)
Demian Brecht
Memiliki itu, ada adalah manfaat untuk mempelajari API yang ada :)
Demian Brecht
2
@Demian Brecht: "Kadang-kadang perpustakaan pihak ke-3 ditulis dengan buruk dan benar-benar dapat mengajarkan kebiasaan buruk" Meskipun ini bisa benar, sebagian besar proyek open source banyak diperiksa oleh komunitas pengguna dan ide-ide buruk tidak tahan terhadap kebijaksanaan orang banyak. Lebih jauh, "ditulis dengan buruk" adalah penilaian yang tidak dapat dilakukan oleh n00b secara efektif.
S.Lott
@ S.Lott: Dikatakan dengan baik (re: n00b) :) Dan saya kira Anda hanya perlu berhati-hati tentang perpustakaan pihak ketiga mana yang Anda lihat, karena beberapa memiliki komunitas yang sangat kecil (jika ada). Misalnya, mencari-cari proyek acak di github, mungkin mulai menuntun Anda ke jalan yang salah.
Demian Brecht
2
@Demian Brecht: Anda tidak dapat mengembangkan penilaian apa pun sampai Anda telah melihat berbagai perpustakaan. Tidak ada cara yang mungkin untuk "pra-filter" perpustakaan untuk digunakan n00b. Ini semua perpustakaan atau tidak ada perpustakaan.
S.Lott
4

Kalimat ini, yang merupakan kalimat pertama sangat logis bagi saya:

Sebagai seorang programmer Python awal, apakah itu ide yang baik untuk membangun dan memahami perpustakaan saya sendiri sebelum melompat ke perpustakaan pihak ketiga canggih yang berisi fungsi yang saya butuhkan?

Bagaimana Anda percaya bahwa Anda dapat secara efektif menulis perpustakaan fungsionalitas lanjut (kata Anda) sebagai pemula yang akan benar, fitur lengkap dan diuji sebagai perpustakaan yang ada?

Ini bahkan tidak menyebutkan jumlah besar waktu yang Anda buang untuk menciptakan kembali sebuah roda yang tidak Anda mengerti sebagai seorang pemula, pada akhirnya akan meninggalkan ketika jika Anda beruntung Anda menyadari bahwa Anda berada di atas kepala Anda, dan harus belajar tetap keluar dari perpustakaan.

Ambil parsing HTML misalnya, Anda menyebutkan ini layak, tidak ada cara Anda bisa melakukan pekerjaan yang lebih baik daripada Beautiful Soup sebagai pemula. Polos dan sederhana Anda akan gagal. Hal-hal yang Anda anggap layak memiliki masalah kompleksitas besar yang tidak Anda perhitungkan, Anda tidak tahu domain masalah secara cukup detail untuk memahami kompleksitas, Anda pasti akan gagal hanya dari itu.

Pendapat saya adalah mempelajari apa yang telah dilakukan orang lain dan sudah menyelesaikan masalah Anda untuk Anda, sampai Anda tidak dapat menemukan sesuatu yang mengatasi masalah Anda.


sumber
1

Ini hanya pendapat saya, tapi saya sarankan membangun perpustakaan Anda sendiri untuk kode yang cukup sederhana dan dapat digunakan kembali. Untuk hal yang lebih kompleks, Anda dapat menggunakan perpustakaan pihak ke-3, yang telah dibangun dan diuji secara menyeluruh (semoga!). Membuat perpustakaan yang kuat bisa sangat memakan waktu, tergantung apa itu. Saya yakin Anda akan mendapatkan banyak latihan pemrograman hanya dengan membangun aplikasi Anda!

Jon Onstott
sumber