Prioritas untuk belajar metode komputasi, kapan saya harus menulis kode saya sendiri vs menggunakan perpustakaan sebagai mahasiswa pascasarjana?

10

Saya memulai studi pascasarjana saya di bidang teknik dan akan bekerja pada proyek-proyek ilmu komputasi. Saya perhatikan bahwa telah ada beberapa diskusi tentang kelebihan dan kekurangan menerapkan algoritma Anda sendiri di sini . Apakah analisis biaya-manfaat dari penerapan algoritma Anda sendiri dibandingkan dengan menggunakan perpustakaan berbeda ketika Anda seorang mahasiswa pascasarjana?

Pelihat Godric
sumber
2
Saya punya jawaban panjang, tetapi setelah beberapa diskusi dengan mod lain, saya memutuskan untuk menghapusnya dan meminta klarifikasi atas pertanyaan Anda. Apa poin utama dari pertanyaan Anda? Apakah ini "di mana saya menekankan pembelajaran saya?", "Bagaimana Anda akan merekomendasikan memprioritaskan pembelajaran versus kemajuan pemodelan?", "Akan memilih perpustakaan daripada kode yang diterapkan sendiri tergantung pada masalah yang dipecahkan?", Atau "Apa manfaatnya / kekurangan dari pengodean algoritma saya sendiri pada tahap yang jauh lebih awal dalam karier saya? " Jawaban saya terlalu luas, dan akan lebih baik memberi Anda jawaban terfokus untuk pertanyaan yang lebih fokus.
Geoff Oxberry
Saya menambahkan bagian tebal untuk mengklarifikasi persis apa yang saya minta tetapi membiarkan sisanya tetap utuh. Jika Anda merasa ada bagian lain yang harus dilepas, jangan ragu.
Godric Seer
Terima kasih. Saya akan mengedit beberapa untuk membuat pertanyaan terfokus, dan kemudian mengirim jawaban.
Geoff Oxberry

Jawaban:

10

Menurut pendapat saya, menjadi mahasiswa pascasarjana tidak mengubah jawaban oleh David Ketcheson di sini untuk pertanyaan yang Anda tautkan dalam posting Anda.

Kode algoritma versi minimal yang ingin Anda pelajari. Kemudian sisihkan mereka. Menyandikan algoritme Anda sendiri paling berguna untuk pembelajaran, tetapi untuk kode penelitian (atau produksi), kecuali jika tujuan penelitian Anda adalah menulis perangkat lunak yang meningkatkan perpustakaan mutakhir di luar sana (jika ada bahkan), Anda lebih baik menggunakan perpustakaan. Perpustakaan cenderung terdokumentasi dengan lebih baik, lebih terukur, dan lebih kuat dari apa yang Anda kodekan sendiri, kecuali jika Anda (atau menjadi) sangat pandai dalam pengkodean. Juga, perpustakaan mungkin akan diuji dan didebug untuk Anda (meskipun tentu saja, itu tergantung siapa yang menulis perpustakaan ...). Anda akan bertanggung jawab untuk mendukung, men-debug, dan menguji kode apa pun yang Anda tulis untuk tesis Anda, dan untuk menghemat waktu, ada baiknya meminimalkan jumlah kode yang perlu Anda tulis.

Satu-satunya skenario lain yang dapat saya pikirkan (yaitu, mungkin ada yang lain) adalah:

  • Tidak ada perpustakaan di luar sana yang menyediakan fitur yang Anda butuhkan. Pertimbangkan untuk berkontribusi ke perpustakaan sumber terbuka yang ada atau menulis perpustakaan sumber terbuka Anda sendiri, sehingga orang lain dapat memperoleh manfaat.
  • Anda memerlukan kinerja tambahan dan dapat memanfaatkan struktur masalah khusus untuk mendapatkannya. Kemudian dokumentasikan dan modifikasi perpustakaan yang ada, atau tulis sendiri implementasi kinerja yang lebih tinggi.
  • Seorang penyelia bersikeras agar Anda memutar perangkat lunak Anda sendiri. Ya, Anda sendiri di sana, tetapi saya sarankan untuk menyampaikan poin-poin di atas untuk mencoba meyakinkan mereka bahwa Anda akan lebih baik menggunakan perpustakaan (jika itu mungkin dalam situasi Anda).
Geoff Oxberry
sumber
10

Saya ingin memberikan sedikit lebih banyak jawaban Geoff yang bijaksana . Secara khusus, saya ingin memberi Anda sedikit lebih banyak perspektif tentang nilai upaya pemrograman Anda sebagai lawan upaya penelitian Anda di awal karir Anda sebagai seorang akademisi.

Anda akan menemukan bahwa mampu menulis perangkat lunak untuk menambah penelitian ilmiah Anda akan membuat Anda menjadi anggota yang berharga dari hampir semua tim peneliti. Namun, kali ini tidak akan dianggap "berharga" oleh rekan-rekan akademis Anda atau mereka yang mempekerjakan untuk posisi akademik.

Dari survei penelitian 2011 yang dilakukan di Princeton, "Sebuah Survei Praktik Ilmu Komputasi" :

Para ilmuwan menghabiskan banyak waktu pemrograman pemrograman. Rata-rata, para ilmuwan memperkirakan bahwa 35% dari waktu penelitian mereka dihabiskan untuk pemrograman / pengembangan perangkat lunak. Sementara awalnya beberapa waktu dihabiskan untuk menulis kode baru, sebagian besar waktu dihabiskan dalam banyak kegiatan yang membosankan. Sebagai contoh, para peneliti di bidang Politik dan Sosiologi yang menggunakan R / Stata harus melakukan pemrograman yang cukup untuk retrofit data sensus ke dalam format yang dipahami oleh masing-masing paket dalam R / Stata. Beberapa peneliti Teknik Kimia harus merekayasa balik kode warisan tidak berdokumen yang melakukan simulasi nyala api, lama setelah penulis asli lulus, untuk menyesuaikan kode dengan bahan bakar yang lebih baru ... Meskipun demikian, sebagian besar peneliti ini merasa bahwa "mereka menghabiskan lebih banyak waktu pemrograman daripada yang seharusnya, "

Itu tidak berarti bahwa itu bukan ide yang baik untuk mengimplementasikan atau mendesain ulang perpustakaan inti atau aplikasi, tetapi jika Anda akan terlibat dalam pengembangan perangkat lunak yang serius (lebih dari 25% dari waktu Anda bekerja dengan kode), pertahankan ketiga ini pikiran dalam pikiran.

  • Kompleksitas dan risiko tumbuh secara eksponensial dengan ukuran proyek dan jumlah pengembang. Sampai Anda telah menulis atau bekerja dengan perangkat lunak yang lebih besar atau tim pengembang yang melampaui lab Anda, akan sulit bagi Anda untuk mendapatkan apresiasi yang baik dari ini dan upaya perkiraan yang tepat.

  • Anda harus baik. Diperlukan tingkat kematangan tertentu, baik sebagai programmer dan sebagai ilmuwan aplikasi, untuk menulis perangkat lunak yang bermanfaat. Anda harus tahu apa saja fitur penting, di mana risiko numeriknya, dan dapat memperkirakan upaya pemrograman untuk serangkaian fitur dan ketahanan yang diberikan. Tentu saja, satu-satunya cara untuk mendapatkan yang baik adalah menghabiskan waktu untuk proyek-proyek yang bukan Anda pimpin atau yang bisa gagal atau tertunda dengan aman, yang membawa saya ke titik akhir saya.

  • Meskipun banyak laboratorium penelitian dan posisi industri sangat menghargai pengalaman pemrograman, pemrograman ilmiah dapat bertindak sebagai potensi kerugian bagi karier akademis Anda, bahkan jika perangkat lunak Anda lebih menguntungkan sains daripada makalah Anda. Semua waktu yang Anda habiskan belajar bagaimana memprogram dengan baik, pemrograman, mendokumentasikan kode Anda, dan membuatnya kuat diterjemahkan ke dalam makalah yang tidak ditulis. Seorang penasihat tidak akan selalu memikirkan minat terbaik siswa mereka di sini, karena ini adalah salah satu kasus di mana siswa dapat memberikan pekerjaan yang menguntungkan kelompok penasihat tanpa memberi manfaat pada jumlah kutipan siswa. Cari satu atau lebih mentor tepercaya di bidang yang Anda minati dan pastikan Anda memiliki pemahaman yang jelas tentang kontribusi apa yang dianggap berharga. academia.stackexchange.com adalah tempat yang sangat baik untuk mengajukan pertanyaan tindak lanjut tentang ini.


Sebagai catatan kaki: jumlah proyek upaya satu orang yang secara signifikan memajukan setiap bidang komputasi semakin berkurang, baik itu bidang aplikasi atau sesuatu yang lebih teknis seperti aljabar linier padat. Semakin banyak paket perangkat lunak yang membentuk "roti-dan-mentega" dari riset komputasi adalah 10 tahun lebih tua atau lebih. Kode ilmiah yang belum mencapai tingkat kematangan ini cenderung memiliki lebih banyak bug, lebih sedikit fitur, dan dokumentasi yang jarang. Cobalah untuk menghindari bekerja dengan kode belum matang yang tidak didukung secara aktif, terlepas dari berapa lama itu.

Aron Ahmadia
sumber
Saya sudah khawatir tentang jumlah kertas saya. Karena saya akan menjadi siswa komputasi untuk sejumlah besar siswa eksperimental, kemungkinan saya akan memiliki banyak kepengarangan ke-2 dan ke-3. Mungkin juga saya hanya akan menggabungkan berbagai program di awal (kode 0D dari lab saya, kode 2D dari universitas lain, perangkat lunak Meshing dari lab lain di universitas saya). Pasti banyak yang harus dipikirkan untuk membahas hal ini.
Godric Seer
6

Saya pikir analisis biaya-manfaat tergantung pada literasi komputasi ilmiah yang diinginkan yang ingin Anda capai selama studi Anda.

Bagi sebagian besar ilmuwan yang bekerja dengan komputer yang mahir dalam komputasi ilmiah sudah cukup, ini membutuhkan: pemahaman tingkat tinggi (abstrak) tentang algoritma utama yang digunakan, dan keterampilan pemrograman yang memungkinkan Anda untuk secara efektif menggunakan perpustakaan perangkat lunak (membangun perangkat lunak, menghubungkan, menggunakan Daftar surat).

Sebaliknya, jika Anda berencana untuk menjadi ahli di bidang komputasi ilmiah, Anda akan membutuhkan pemahaman mendalam tentang metode numerik, aritmatika floating-point, dan teknologi komputasi. Anda dapat mempelajari teori topik-topik ini dari buku-buku, namun pengalaman melalui latihan diperlukan untuk membangun dan mempertahankan keterampilan tingkat lanjut. Oleh karena itu, mungkin ide yang bagus untuk memprogram semua yang Anda gunakan saat Anda belajar (misalnya jika Anda ingin memasak seperti koki: Anda belajar dengan makan apa yang Anda masak, dan dengan sering memasak!)

Tingkat kemahiran yang benar tergantung pada karier Anda. Lihat tingkat keterampilan apa yang digunakan oleh pekerja di bidang Anda.

fcruz
sumber