Apakah dianggap malas jika saya menggunakan paket aljabar linier untuk C ++?

11

Pertama, izinkan saya memberi latar belakang sebelum saya benar-benar menyatakan pertanyaan. Saya belajar fisika dan semua kelas pemrograman saya menggunakan bahasa pemrograman yang mudah seperti MATLAB. Dengan mudah saya maksudkan bahwa bahasa tersebut banyak berfikir untuk Anda ... Untuk tahun-tahun berikutnya saya akan mengambil kursus ilmu komputer dan saya berpikir untuk mengejar karir di bidang pemrograman.

Mengingat banyak kuliah di C ++, apakah menggunakan paket aljabar linier (Armadillo) dengan sintaksis yang mirip dengan MATLAB dianggap malas?

Saya sedang mengkode algoritma genetika saat ini, dan sementara itu berjalan cepat di MATLAB itu membutuhkan banyak waktu di C ++ tanpa bantuan paket-paket ini.

Bagaimana cara kerjanya dalam kehidupan nyata? Paket apa yang diizinkan untuk Anda gunakan?

Misalnya saya tidak ingin membangun pengetahuan C ++ saya dengan armadillo dan tidak memiliki pengetahuan mendalam tentang paket lain yang lebih banyak digunakan seperti "vector.h" "algoritma" "daftar" dll.

DLV
sumber
9
Anda diperbolehkan menggunakan apa pun yang memiliki lisensi yang kompatibel dengan proyek Anda. Kalau tidak, Anda hanya membuang-buang waktu. (Jenis yang tepat) kemalasan itu baik
Richard Tingle
Dengan asumsi kurikulum Anda termasuk di dalamnya, saya ragu menggunakan paket aljabar linier dengan sendirinya akan mencegah Anda belajar <vector>, <algorithm> dan <list>.
Brandin
@RichardTingle: seseorang diperbolehkan menggunakan apa saja asalkan atasannya tidak melarangnya ;-)
Doc Brown
Ubah lazyke sensibledalam judul Anda, dan jawabannya adalah "ya" (dengan asumsi Anda melakukan tugas yang melibatkan aljabar linier, tentu saja).
Jerry Coffin

Jawaban:

21

Komentar Richard sudah sebagian besar jawabannya. Setiap kali Anda memprogram untuk apa pun kecuali latihan kelas, Anda akan ingin menggunakan kembali sebanyak mungkin kode yang ada, dengan hanya beberapa pertimbangan lain untuk menyeimbangkan.

Keuntungan dari penggunaan kembali kode adalah:

  • Anda bekerja lebih cepat, karena beberapa pekerjaan telah dilakukan.
  • Kode yang ada memiliki peluang bagus untuk menjadi lebih baik daripada apa pun yang Anda tulis dari awal, karena mungkin sudah ada lebih lama, telah diuji lebih baik, dan dioptimalkan dengan lebih baik.
  • Cukup sering, kode yang ada ada di domain yang tidak Anda kenal. Misalnya, Anda melakukan simulasi fisika, tetapi itu tidak berarti Anda tahu banyak tentang cara membuat aljabar linier efisien untuk dikomputasi. Menggunakan kode yang ditulis oleh orang lain berarti Anda dapat mengandalkan keahlian mereka.

Ada beberapa hal yang perlu dipertimbangkan:

  • Perizinan. Pembuat kode yang ingin Anda gunakan kembali memegang hak ciptanya, dan Anda tidak dapat menggunakan kode itu tanpa seizinnya. Perpustakaan akan datang dengan lisensi yang memberi tahu Anda apa yang dapat Anda lakukan dengannya, dan jika Anda ingin menggunakan perpustakaan, Anda harus mematuhi lisensi tersebut. Armadillo berada di bawah Mozilla Public License 2.0, yang berarti Anda dapat menggunakannya secara bebas.
  • Integrasi. Jika proyek Anda lebih besar, mungkin cukup rumit untuk mengintegrasikan perpustakaan pihak ke-3. Bergantung pada jumlah penggunaan yang Anda dapatkan dari perpustakaan, mungkin tidak sepadan.
  • Distribusi. Jika perpustakaan hanya tersedia sebagai DLL, atau perlu registrasi dengan sistem, tetapi metode distribusi Anda harus terdiri dari "salin ini dapat dijalankan di suatu tempat", Anda mungkin tidak dapat menggunakan perpustakaan.

Seperti kata pepatah, dalam seorang programmer, kemalasan adalah suatu kebajikan.

Sebastian Redl
sumber
1
Anda menyentuhnya, tetapi karena pertanyaannya menyebutkan pekerjaan kelas, penting untuk tidak menggunakan paket atau pustaka untuk bagian yang ingin Anda pelajari. Jika Anda mencoba mempelajari cara membangun jaringan saraf, silakan gunakan perpustakaan untuk parsing argumen, ajukan io, tetapi tulis sendiri jaringan saraf itu.
Alan Shutko
3
Poin penting yang hilang dalam daftar Anda adalah pemeliharaan di masa depan. Ketika mempertimbangkan untuk menggunakan lib pihak ketiga, dan itu adalah sumber tertutup, atau sumber terbuka tetapi terlalu rumit untuk memungkinkan pemeliharaan di masa depan oleh organisasi sendiri, orang perlu memastikan vendor perpustakaan akan menyediakan layanan pemeliharaan di masa depan (termasuk pengembangan lib ) untuk jumlah waktu tertentu. Itu adalah salah satu alasan paling utama mengapa perusahaan perangkat lunak tertentu tidak menggunakan lib tertentu dan lebih memilih untuk membuat sendiri, bahkan jika itu terlihat boros pada pandangan pertama.
Doc Brown
1

Apa yang Anda maksud dengan "diizinkan"? Saya kira saya mungkin menambahkan sesuatu di sini yang dapat membantu memperjelas kesalahpahaman beberapa siswa pemula: Anda diminta untuk menulis kode dan algoritma Anda sendiri dll. Di universitas, karena Anda sedang belajar kursus dan Anda ingin mengkonsolidasikan apa Anda telah belajar di kelas dengan benar-benar menulis kode sendiri. Pengkodean semacam itu adalah pembantu proses belajar Anda . Misalnya, setelah mempelajari struktur data / algoritma tertentu, Anda menulis kode Anda sendiri untuk melihat bagaimana cara kerjanya dan memperdalam pemahaman Anda. Ini masuk akal.

Ketika Anda melakukan proyek pemrograman kehidupan nyata, Anda tidak menulis kode sebagai pembantu untuk belajar beberapa konsep / pengetahuan; Anda mencoba menghasilkan produk teknik. Rekayasa sebenarnya bukan tentang penemuan, tetapi membangun di atas fondasi yang telah ditetapkan oleh orang lain, untuk memenuhi kebutuhan praktis tertentu. Ada yang mengatakan bahwa pemrograman 80% membaca / menggunakan kembali perpustakaan / kode orang lain dan 20% menulis sendiri. Mungkin sedikit berlebihan tetapi Anda mendapatkan semangat.

Dalam kasus Anda, jika Anda melakukan proyek pemrograman untuk suatu kursus dan secara eksplisit meminta Anda untuk membuat kode algoritma Anda sendiri, Anda tidak akan ingin menggunakan perpustakaan eksternal. Jika Anda melakukan proyek teknik Anda sendiri, gunakan perpustakaan sebanyak mungkin sebelum mencoba untuk membuat sendiri.

Buat perbedaan ini jelas, dan Anda akan mengerti apa yang Anda lakukan.

xji
sumber