Saya menemukan diri saya terus-menerus berlari ke ungkapan ini "jangan menemukan kembali roda" atau "tidak pernah menemukan kembali roda" ketika saya mengajukan beberapa pertanyaan pada SO. Mereka memberi tahu Anda untuk menggunakan beberapa kerangka kerja atau paket yang ada. Saya tahu dari mana sikap ini berasal karena tidak bijaksana membuang waktu untuk sesuatu yang sudah diselesaikan orang lain. Atau begitukah?
Sebagai seorang siswa, saya menemukan dengan menggunakan beberapa kode yang ditulis orang lain untuk menyelesaikan masalah saya, saya tidak dapat belajar sebanyak yang saya inginkan, dan saya memperoleh lebih sedikit wawasan. Dan kadang-kadang saya berpikir kalimat itu terutama untuk programmer yang bekerja menghadapi tenggat waktu dan bukan untuk siswa seperti saya.
Apakah seburuk itu untuk "menemukan kembali roda"? Mungkin saya salah memikirkannya? Mungkin ada cara saya bisa menghindari menciptakan kembali roda dan pada saat yang sama belajar banyak?
sumber
Jawaban:
Saya pikir Anda membuat poin yang bagus. Sebagian besar programmer di situs ini cenderung bekerja profesional yang tujuannya cukup banyak untuk menciptakan perangkat lunak berkualitas secepat mungkin. Menciptakan kembali roda gagal tujuan ini pada dua hitungan.
Yang mengatakan, dalam lingkungan akademik tujuannya adalah untuk belajar , bukan memberikan perangkat lunak dengan anggaran. Menemukan kembali sebuah roda untuk memahami bagaimana kerja roda atau poros adalah cara yang bagus untuk mencapai tujuan itu. Itu sebabnya banyak kurikulum pemrograman menyertakan kelas untuk membangun kompiler ketika sangat sedikit programmer yang pernah bekerja perlu melakukan itu.
sumber
Jawabannya sangat tergantung pada konteksnya. Jika Anda ingin mendapatkan pemahaman yang lebih mendalam tentang struktur data dengan mencoba tangan Anda dalam mengimplementasikan tabel hash, "reinventing the wheel" adalah hal terbaik yang dapat Anda lakukan. Jika Anda belajar cara menulis kompiler dan membutuhkan tabel simbol, menerapkan peta hash Anda sendiri daripada menggunakan kembali dari perpustakaan standar adalah buang-buang waktu Anda.
sumber
Sebagai seorang siswa, saya berharap Anda memulai pendidikan pemrograman Anda dengan terlebih dahulu menyalin satu atau dua roda , kemudian belajar memodifikasi roda untuk melihat cara kerjanya, dan untuk memahami segala batasan. Kemudian, Anda bahkan mungkin membuat roda baru Anda sendiri untuk melihat apakah Anda dapat meningkatkan desain, atau untuk menunjukkan kepada pengawas kursus Anda pemahaman Anda tentang konsep-konsep yang terlibat.
Namun, sebagai seorang profesional yang bekerja, saya berharap Anda telah mempelajari roda mana yang digunakan untuk menyelesaikan masalah apa pun, dan kapan mungkin tepat untuk memodifikasi roda yang sudah ada jika hanya sebagian menyelesaikan masalah Anda. Jika Anda tidak dapat menemukan roda di mana pun, maka mungkin Anda telah mengidentifikasi ceruk pasar, atau Anda belum menjelajahi cukup jauh, dan Anda akan perlu cukup berpengalaman untuk mengetahui kapan akan tepat untuk membuat roda baru Anda sendiri.
Masalah kapan tepat untuk menemukan kembali suatu solusi adalah kompleks, dan itu membutuhkan waktu dan pengalaman untuk belajar ketika mungkin lebih baik untuk membuat versi baru dari sesuatu yang telah dilakukan sebelumnya. Ketika Anda hanya mengembangkan untuk waktu yang singkat, lebih baik menggunakan solusi yang ada, dan meminta mentor Anda untuk menyarankan opsi. Ketika Anda memiliki tenggat waktu yang ketat dan banyak ketidakpastian dalam suatu proyek, menggunakan sesuatu yang sudah ada bisa menjadi penghemat waktu yang sangat besar, dan selalu menjadi pilihan pertama Anda. Anda selalu dapat menolak untuk menggunakan solusi lain nanti jika memang tepat untuk melakukannya, bahkan jika ini berarti akhirnya kembali untuk menemukan kembali roda Anda .
sumber
Menjadi seorang guru atau pemrograman, saya terus-menerus berjuang dengan sisi berlawanan dari masalah: kapan saya meminta siswa untuk menemukan kembali roda?
Ambil situasi sederhana ini: kami sedang mempelajari algoritma penyortiran, dan saya menetapkan tugas untuk menulis sebuah program yang mengurutkan beberapa data; atau bekerja pada fungsi tanggal, dan saya meminta kalender.
Untuk keduanya, ada banyak perpustakaan siap pakai dan fungsionalitas yang tersedia; tetapi saya ingin para siswa menghindari mereka, dan mengembangkan versi mereka sendiri dari algoritma penyortiran atau kalender.
Sekarang ambil yang lain ini: Saya menetapkan tugas untuk menulis aplikasi sederhana untuk, katakanlah, menjadwalkan janji temu. Ini mungkin membutuhkan penyortiran, dan kalender, dan banyak lagi. Kali ini "jangan menemukan kembali roda" berlaku: Saya tidak ingin siswa bergumul dengan masalah yang diselesaikan, tetapi kumpulkan fungsionalitas yang ada untuk mendapatkan hasil.
Kesulitan saya adalah, seberapa banyak yang diminta Anda untuk membuat ulang yang ada, yang membuat Anda belajar, dan memiliki keuntungan dari masalah yang sudah diatasi dengan kesulitan yang dapat saya gunakan untuk membuat Anda berlatih kerajinan, dan berapa banyak yang harus saya tempatkan Anda dalam pengaturan dunia nyata, di mana roda tidak diciptakan kembali?
Untuk menjawab pertanyaan Anda secara lebih langsung, dua saran:
sumber
Praktek Saya ragu 1000 baris pertama dari kode yang ditulis oleh siapa pun sangat unik.
Perluas perangkat Anda Menggunakan kerangka kerja memiliki manfaat lebih ketika Anda memahami apa yang dilakukannya (Sebaris sampai Anda bisa melakukannya sendiri.) Sehingga Anda tahu bagaimana menerapkannya.
Memahami "Roda" Menggunakan roda yang dibangun dengan buruk dan usang atau yang tidak cocok, tidak ada alasan untuk secara buta menempel pada aturan praktis ini. Anda mungkin kekurangan waktu, dana, keahlian, jadi Anda hanya menambalnya dan menyelesaikan perjalanan.
Ada beberapa kemutlakan .
sumber
Siswa tidak memiliki anggaran uang untuk menyelesaikan tugas, tetapi ada tanggal jatuh tempo yang harus dipertimbangkan.
Sebagai seseorang yang masih mahasiswa hingga saat ini, saya pikir jumlah reinventing roda yang sesuai tergantung pada kelas apa Anda melakukan tugas. Anda tidak ingin menulis perpustakaan soket Anda sendiri untuk pengembangan web dan kelas desain (jika Anda bisa melakukannya dan menyerahkan tugas tepat waktu, apa yang Anda lakukan mengambil kelas yang mudah?), Tetapi Anda akan hilang banyak jika itu adalah tugas untuk kelas jaringan. Tentu saja, profesor biasanya mempertimbangkan hal-hal ini ketika mereka sedang membuat tugas, jadi Anda sebagian besar akan melakukan pekerjaan yang berhubungan dengan kelas, tetapi kadang-kadang, mengetahui apa yang tidak boleh Anda tulis sendiri juga penting.
Yang mengatakan, begitu Anda meninggalkan sekolah, sulit untuk menemukan waktu untuk membangun hal-hal yang sudah ada. Manfaatkan setiap kesempatan yang Anda dapatkan saat Anda bisa, saat Anda masih di sekolah.
Jika Anda mendapatkan "Gunakan pustaka X / kerangka kerja Y" di SO, awali pertanyaan Anda dengan "Saya menulis X sendiri untuk mempelajari lebih lanjut tentang itu"
sumber
Jika Anda tidak memiliki tenggat waktu yang ditetapkan untuk proyek Anda, IMO, lebih baik untuk menciptakan kembali roda. Jika Anda tidak memiliki pekerjaan, atau hanya ingin belajar memprogram, bukan untuk menghasilkan uang pemrograman, apa gunanya menggunakan pintasan yang tidak akan menjadikan Anda seorang programmer yang lebih baik, yang hanya akan menyelesaikan proyek Anda lebih cepat? Meskipun ini benar, ini jelas merupakan keterampilan yang baik untuk mengetahui cara menggunakan perpustakaan, kerangka kerja, dan kode orang lain.
sumber
Dalam kehidupan nyata, roda diciptakan kembali berulang kali. Jika kita mencari alasannya, kita mungkin menemukan beberapa wawasan seperti ketika kita perlu menemukan kembali roda dalam pemrograman.
Sejak zaman Sumeria, banyak hal telah berubah:
Bagaimana itu diterjemahkan ke dunia perangkat lunak? Baik,
sumber
Saya seorang siswa yang baru berpendidikan. Di sekolah kami 'belajar' asp.net dan C #, selama 2 tahun pendidikan, kami tidak pernah mencoba membuat sistem email, sistem login, atau CMS kami sendiri. Semuanya hanya menyeret, dan menjatuhkan kontrol ke tampilan desain .
Kami mulai 102 siswa, 23 selesai. 4 orang punya pekerjaan. Alasannya?: Keempat orang itu (termasuk saya) memang tahu cara memprogram sebelum kami benar-benar memulai pendidikan.
Sisa orang hilang. Karena kita tidak pernah 'menciptakan kembali roda'. Kami tidak pernah tahu bagaimana kode itu bekerja. Cukup mudah untuk membangun sistem login penuh, dengan manajemen pengguna - Tetapi siswa dari pendidikan saya, tidak tahu bagaimana cara melakukannya. Karena mereka tidak tahu bagaimana sistem login sebenarnya bekerja.
Saya merasa sedih, bahwa pada titik tertentu, sebenarnya terbuang 2 tahun, tidak belajar apa-apa. - Saya berharap, bahwa para guru di seluruh dunia, berkata: Ya, kami tahu ada kerangka kerja, di mana kodenya ada, Anda dapat menggunakannya dalam kehidupan nyata .. Tetapi pada pendidikan ini Anda akan belajar bagaimana melakukan pemrograman ..
Banyak pendidikan pemrograman sangat pendek, sehingga pendidikan perlu mencakup banyak hal dalam waktu itu. Saya pikir akan lebih baik jika daftar hal-hal dipotong menjadi setengah, dan menghabiskan lebih banyak waktu untuk pemrograman. Orang dapat 'menciptakan roda jenis baru' jika mereka tahu cara membangun 'roda' yang normal. Orang-orang tidak bodoh jika mereka memiliki sedikit pengetahuan, tetapi Anda tidak dapat meminta seorang pria yang tidak tahu apa-apa tentang mobil, untuk membuat mobil .. Tetapi meminta seorang pria yang tahu cara membuat sepeda, akan jauh lebih mudah dengan benar-benar membangun mobil.
sumber
Itu benar-benar tergantung pada apa yang Anda lakukan. Jika Anda mencoba memahami roda, itu ide yang baik untuk menciptakannya sendiri. Namun jika Anda mencoba memahami mobil, menciptakan kembali roda atau mesin pembakaran internal umumnya boros dan mengganggu.
Jadi misalnya, ketika Anda tertarik untuk memahami bagaimana indeks pencarian teks lengkap dapat bekerja, itu ide yang baik untuk mencoba untuk roll Anda sendiri. Jika Anda mencoba membangun aplikasi untuk manajemen dokumen, lebih baik menggunakan kembali perpustakaan yang sudah ada, karena sebagian besar pekerjaan Anda adalah mendapatkan arsitektur aplikasi dan pengalaman pengguna dengan baik sekaligus.
sumber
Ya, pantas untuk memberi tahu siswa untuk tidak menemukan kembali kemudi. Tetapi perlu ada pemahaman yang jelas tentang apa artinya bagi seorang siswa: tulis apa yang cocok dengan tugas itu. Itu tidak berarti jika tugasnya adalah untuk menulis gelembung, Anda menyalinnya dari Wikipedia, juga tidak berarti menggunakan array.sort atau yang setara jika kerangka kerja atau bahasa Anda menyediakannya. Tetapi setelah Anda membahas berbagai algoritma penyortiran, telah menulis gelembung Anda sendiri dan quicksort, jangan repot-repot menulis ulang untuk setiap tugas baru, gunakan penyortiran bawaan atau apa yang Anda tulis, jangan lakukan hal yang sama lagi .
Menemukan kembali roda adalah tentang tidak membuang-buang waktu, yang sama berlaku untuk siswa seperti halnya bagi para profesional - perbedaannya terletak pada apa yang ada tujuan. Siswa harus belajar, jadi sesuatu yang tidak memajukan pemahaman mereka, adalah buang-buang waktu - setelah Anda menulis satu gelembung, Anda tahu apa fungsinya, Anda tahu mengapa Anda tidak ingin menggunakannya pada set besar, dan menulis ulang lagi dan lagi adalah buang-buang waktu. Anda tidak akan belajar sesuatu yang baru pada penulisan ulang ke-25.
Untuk siswa, itu tidak berarti tidak menulis apa yang telah ditulis orang lain, itu berarti jangan ulangi apa yang sudah Anda kuasai - waktu itu bisa lebih baik dihabiskan untuk apa yang belum Anda kuasai.
sumber
Banyak pemikiran dan upaya telah dilakukan untuk menciptakan roda. Sarannya adalah "bukan untuk menciptakan kembali roda" tetapi Anda dapat melanjutkan dan merekayasa balik roda dan memahami mengapa hal-hal tertentu dilakukan dengan cara yang dilakukan. Setelah ini, Anda dapat mencoba mengimplementasikan roda dengan cara Anda sendiri yang mungkin menghasilkan salah satu dari tiga tujuan logis.
Bagi saya siswa tidak boleh menemukan kembali roda, tetapi cobalah untuk merekayasa balik & memahami implikasinya.
sumber
Saya akan mengatakan bahwa itu tergantung pada apakah Anda menemukan kembali untuk melihat bagaimana roda bekerja atau menemukan kembali roda dalam proses menyelesaikan beberapa tugas lain. Tentu saja ada roda yang perlu diterapkan setiap siswa setidaknya satu kali pada mereka sendiri. Anda harus tahu bagaimana beberapa struktur data dasar dan algoritma bekerja untuk memahami bagaimana mereka akan mempengaruhi kinerja kode Anda atau memilih mana yang akan digunakan dalam berbagai keadaan.
Tumpukan, tumpukan, daftar terkait, pohon, dll. Pasti bernilai investasi tepat waktu untuk diterapkan sekali; lalu setelah itu gunakan yang disediakan oleh framework. Setiap orang yang menggunakan plugin jQuery harus menulis setidaknya satu, tetapi Anda tidak harus menulis setiap jenis yang berbeda yang akan Anda gunakan. Saya akan mengatakan bahwa itu membantu, tetapi tidak perlu, untuk menulis penjadwal proses kecil atau mini-OS sehingga Anda dapat memahami apa yang terjadi di bawah tenda di komputer. Anda DO perlu memahami bagaimana proses, utas, dll. Bekerja.
Setelah Anda memiliki pengetahuan kerja yang baik, penting juga (dan menyenangkan) untuk kembali dan menerapkan struktur / algoritma baru untuk merasakannya. Kecuali itu pekerjaan Anda atau Anda benar-benar hebat, saya akan tetap menggunakan yang sudah ada dalam kode Anda.
sumber
Jawabannya tergantung pada apakah Anda ingin belajar atau membuat.
Jika belajar adalah tujuannya, "menciptakan kembali roda" dapat memberi Anda wawasan yang lebih besar dan pemahaman yang lebih baik daripada menggunakan roda yang ada (fungsi perpustakaan).
Tetapi jika menciptakan produk yang rumit adalah tujuannya, maka "menciptakan kembali roda" dapat menjadi praktik yang memakan waktu dan akan sedikit membantu penciptaan produk.
Namun demikian, jika tujuan jiwa adalah belajar dengan waktu dan stamina yang cukup, "menciptakan kembali roda" adalah pilihan terbaik, karena membantu menyesuaikan setiap fitur.
sumber
Nah, ada dua aspek dalam hal ini.
Pertama, jika Anda mencoba untuk belajar, dapat berguna untuk melakukan beberapa hal dari awal, atau menggunakan antarmuka tingkat yang lebih rendah dari yang diperlukan. Namun, masih perlu mengidentifikasi apa yang Anda pelajari: jika Anda ingin belajar tentang protokol HTTP, Anda tidak perlu melakukan pemrograman soket sendiri. Temukan kembali hal-hal yang Anda pelajari , dan lakukan saja untuk benar-benar mengeksplorasi dan memahaminya.
Tetapi - salah satu keterampilan paling penting dari seorang programmer profesional adalah memilih, mempelajari, dan menggunakan perangkat lunak yang sudah ada sebelumnya. Ini adalah sesuatu yang juga perlu Anda pelajari. Sebagian besar pertanyaan tentang SO tampaknya berasal dari orang-orang yang tidak mampu membaca dokumentasi.
Akhirnya, pemrograman bertumpu pada landasan teori yang substansial. Anda perlu menggunakan kedua latihan praktis tersebut, ditambah dengan membaca, untuk mempelajari teorinya.
sumber
Saya telah menghadapi situasi yang sama. Itu karena perbedaan persepsi dalam industri dan akademisi.
Jika Anda tidak "menemukan kembali roda" maka Anda benar-benar tidak dapat mempelajari apa pun di sekolah atau memahami cara kerja sesuatu.
Sedangkan dalam suatu industri tujuannya adalah untuk mengeluarkan suatu produk dalam waktu dan upaya yang paling sedikit.
Secara pribadi, saya suka turun ke lubang kelinci dan saya benci filosofi industri tapi itulah cara bisnis dilakukan dan Anda tidak bisa mengeluh.
sumber
The Hacker Jargon Lexikon memiliki komentar yang sangat baik pada menciptakan kembali roda :
Jadi mungkin baik untuk menemukan kembali roda, tetapi pastikan Anda melihat solusi orang lain sebelum atau setelah melakukannya.
sumber
Jawaban A: Temukan kembali roda. Ini memperdalam pemahaman Anda tentang struktur data dan algoritma dan membuatnya menjadi BANYAK lebih mungkin bahwa Anda akan menulis hal-hal yang baik. Saya yakin ketika Guido van Rossum mulai menggunakan Python, orang-orang mengatakan kepadanya untuk tidak menemukan kembali kemudi. Sudah banyak bahasa. Mengapa menulis google ketika sudah ada Yahoo! Bagaimana dengan dentang? Pelajari semuanya. Jadilah raksasa. Jangan biarkan orang kecil membatasi Anda. Jawaban B: Jika seorang instruktur memberi tahu Anda apa yang harus dilakukan, beri dia apa yang diinginkannya, atau hanya sedikit lebih walaupun itu tampak konyol. Jika Anda ingin JUGA gila membuat solusi yang menakjubkan dan memberinya tautan untuk melanjutkan. Namun, pertama-tama, penuhi persyaratan yang ditentukan sebagaimana diberikan sehingga dia senang.
sumber
Jika Anda seorang siswa, dan karenanya tidak memiliki tenggat waktu yang ditetapkan untuk proyek Anda, lebih baik untuk "menemukan kembali roda". Jika Anda pemrograman sekarang hanya untuk belajar bagaimana memprogram, dan bukan untuk menghasilkan uang, mengapa mengambil jalan pintas yang tidak akan membantu Anda belajar? Mengapa tidak melakukannya dengan cara yang sulit? Tapi, ketika Anda menjadi programmer yang bekerja, orang akan skeptis jika Anda tidak tahu cara menggunakan framework atau perpustakaan ...
sumber
Lakukan apa yang diminta tugas / pertanyaan / ujian Anda.
Bertahun-tahun yang lalu saya adalah seorang TA untuk kelas pemrograman C. Pertanyaan ujian adalah 'Menulis program untuk menyalin file'. Beberapa siswa menanyakan jenis pertanyaan yang sama - dapatkah mereka menelurkan suatu proses dan menjalankan perintah OS cp?
Yang kami tanyakan kepada mereka adalah 'Apakah program Anda akan menyalin file?'
Pertanyaan ujian meminta mereka untuk menulis kode untuk menyalin file. Jika jawabannya tidak memiliki kode C yang menyalin file (mis. Input terbuka, keluaran terbuka, loop untuk membaca / menulis byte, tutup input, tutup keluaran) maka itu tidak menyalin file.
Jika guru mengatakan menggunakan kerangka kerja atau perpustakaan (misalnya kelas grafis mungkin memberitahu Anda untuk menggunakan perpustakaan 3D) maka gunakan apa yang mereka perintahkan untuk Anda gunakan. Jangan menciptakan milik Anda sendiri atau menggunakan yang lain. Perbedaan apa pun akan mempersulit guru untuk menilai pekerjaan Anda.
Dalam wawancara kerja, pengetahuan tentang kerangka kerja populer akan membantu Anda menjawab pertanyaan. Buat proyek Anda sendiri untuk belajar. Semoga berhasil dengan studi Anda.
sumber
cp
program mereka sebenarnya akan menyalin file.