Bahasa apa yang harus saya pelajari untuk ilmu komputasi?


11

Saya sepenuhnya baru dengan gagasan ilmu komputasi, dan saya sedang mencari titik awal yang baik.

Saya mengerti bahwa tidak ada bahasa terbaik yang objektif, tetapi saya ingin belajar bahasa yang memiliki kehadiran yang kuat dan menonjol dalam hal ilmu komputasi - yang dianggap memiliki kemampuan dan efisiensi yang luar biasa.

Untuk memulai, saya condong ke arah pemodelan yang berkaitan dengan ikatan atom dan interaksi, dengan persyaratan untuk representasi / simulasi grafis.

Apakah beberapa bahasa cenderung lebih baik untuk beberapa bidang daripada yang lain (yaitu fisika vs matematika murni)? Atau apakah memilih bahasa berdasarkan faktor lain?

Saya sudah sering mendengar nama Fortran.

Saran?


1
C ++ dan Fortran adalah bahasa yang terkenal di komunitas. Baru-baru ini, Anda dapat melihat peningkatan dalam penggunaan bahasa dinamis. Seringkali Anda memilih perpustakaan Anda dan bukan bahasa Anda.
vanCompute

9
Saya teringat akan diktum bahwa Pemrogram Nyata dapat menulis Fortran dalam bahasa apa pun.
hardmath

1
Berikut adalah pertanyaan yang sangat mirip dengan banyak jawaban: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Saya mengerti bahwa tidak ada bahasa terbaik yang objektif" - tepatnya, jadi mengapa tidak belajar menjadi agnostik bahasa, sehingga Anda dapat menulis dalam bahasa apa pun yang dilemparkan kepada Anda?
JM

2
Anda harus menguasai bahasa Inggris. Tanpanya, Anda tidak akan mendapatkan apa pun dalam Ilmu Komputasi.
Johannes

Jawaban:


15

Sebagian besar turun ke perpustakaan numerik yang tersedia untuk Anda yang akan membantu menyelesaikan tugas Anda. C / C ++ memiliki sejumlah besar perpustakaan numerik yang diimplementasikan untuk mereka, tetapi menjadi bahasa tingkat rendah bukan yang terbaik untuk membuat prototipe sesuatu dengan cepat.

Saya pikir untuk segera menuju solusi, saya akan merekomendasikan menggunakan sesuatu seperti Matlab atau Mathematica. Mereka memiliki toolset yang besar dan levelnya sangat tinggi. Kemungkinan besar, implementasi Anda di sana tidak akan menjadi skala untuk penggunaan produksi, tetapi bisa menjadi taman bermain yang bagus untuk mencoba berbagai metode. Setelah Anda tahu jalan yang harus diambil, Anda selalu dapat mengimplementasikan sesuatu dalam C / C ++ secara lebih efisien.


4
Banyak orang - baik di dalam maupun di luar akademisi - tidak benar-benar mempercayai kode kecuali memiliki setidaknya beberapa suite pengujian otomatis. Saya tidak tahu seperti apa tooling untuk hal-hal seperti itu di matlab dan Mathematica, tetapi ada beberapa paket yang bagus untuk bahasa yang lebih umum seperti Python dan C ++.
cjordan1

3
MATLAB memiliki MATLAB xUnit, tetapi Python dan C ++ memiliki lebih banyak (dan, menurut saya, lebih baik) pengujian suites.
Geoff Oxberry

24

Python!

  1. Mulai langsung menggunakan perpustakaan numpy , skrip kecil, dan shell interaktif ipython .
  2. Dapatkan lebih maju dengan bantuan banyak buku dan tutorial gratis .
  3. Dapatkan lebih produktif menggunakan scipy sebagai antarmuka untuk numerik yang berkinerja tinggi dan matplotlib untuk visualisasi
  4. Manfaatkan modul yang dikembangkan dengan baik dan kuat untuk komputasi ilmiah seperti Krypy , FeNiCS , dan banyak lainnya
  5. Perhatikan, bahwa transisi yang mulus antara pemrograman datar dan berorientasi objek dan modularitas inheren Python membuat proyek-proyek besar mudah ditangani.
  6. Buat kode Anda secepat C atau Fortran hanya dengan menulis ulang bagian penting dalam cython . Anda juga dapat dengan mudah memasukkan rutinitas ditulis dalam Fortran atau C .

Mengutip apa yang saya pikirkan adalah cara terbaik untuk mendekati masalah dalam komputasi ilmiah. Mulailah dengan membantu masalah dengan bermain-main dengan contoh mainan dalam skrip kecil. Menjadi lebih sistematis dan mengatur seperangkat kode. Kemudian buat kode Anda bekerja !!! Akhirnya, jika perlu, lakukan optimasi kode. Jangan menemukan kembali roda dan jangan melakukan optimasi prematur.

(Tambahan tambahan: Python datang gratis - tidak ada masalah lisensi, komunitas besar misalnya pada stackoverflow, modul untuk pemrograman yang baik sebagai pengujian unit atau pencatatan ...)




5

Fortran: Seperti Matlab, mudah dipelajari dan digunakan dan cepat menjadi produktif tetapi hanya bagus untuk komputasi numerik

C ++: Sulit untuk dikuasai (akan membawa Anda bertahun-tahun) tetapi banyak digunakan di luar komputasi numerik (keamanan pekerjaan)

Python: Banyak direkomendasikan akhir-akhir ini tetapi terlalu lambat untuk pekerjaan yang tidak sepele. Anda harus menulis semua kernel komputasi mahal yang mendasarinya di C dan kemudian memanggilnya dari Python yang berarti Anda harus belajar (setidaknya) dua bahasa


1
Saya berpendapat bahwa kurva belajar untuk Fortran dan C ++ agak mirip. Saya mengambil keterampilan yang cukup di keduanya untuk menyelesaikan akhir masalah yang lebih sederhana dalam hitungan beberapa bulan masing-masing berasal dari latar belakang java, matlab, dan c #. Bergantung pada bahasa apa yang diketahui seseorang, saya dapat melihat c ++ lebih mudah dipelajari daripada fortran karena sebagian besar kode besar di luar sana ditulis dalam versi tanggal.
Godric Seer

@Godric: Pada ~ 600 halaman standar Fortran 2008 kurang dari setengah dari C ++ 11 (~ 1300 halaman)
stali

1
@stali, Ya, tapi misalnya saya bekerja dengan sekitar seperempat juta baris kode warisan yang ditulis dalam Fortran77. Jadi saya harus belajar gaya 77 untuk bisa bekerja dengannya, 90-95 untuk membuat perubahan yang dapat dipertahankan padanya (karena balok-balok umum sangat kuat), dan kemudian '08 untuk tidak terjebak selama satu dekade di masa lalu. Fortran, sementara bahasa lama, telah mengalami perubahan besar selama beberapa dekade terakhir, dan kecuali Anda memulai dari awal, mengetahui warisannya tidaklah sepele.
Godric Seer

2
Saya tidak setuju dengan pernyataan bahwa Python "terlalu lambat untuk pekerjaan yang tidak sepele". Memang, jika Anda menulis perkalian matriks-vektor Anda (dan sejenisnya) murni dengan Python, Anda akan memiliki waktu yang buruk. Abstraksi ke beberapa bahasa yang lebih efisien telah dilakukan untuk Anda: NumPy, Scipy mungkin memiliki semua yang Anda butuhkan. Atau salah satu dari 50.000 paket lainnya.
Nico Schlömer

1
@ NicoSchlömer Saya setuju dengan "terlalu lambat untuk pekerjaan yang tidak sepele". Simulasi saya dengan Python (Numpy / Scipy) lebih lambat dari kode yang sama dalam versi Fortran90 sekitar 10x. Saya merekomendasikan Fortran90 atau C ++.
fronthem

4

Jawaban singkat
Pelajari tentang dasar-dasar kode berorientasi objek melalui python, dan pelajari tentang dasar-dasar ilmu komputer melalui C. Saat Anda setidaknya cukup oke dengan kedua bahasa lainnya pelajari C ++, karena Anda dapat melakukan hampir semua hal dalam C ++ dan membuatnya berjalan cepat (meskipun butuh waktu lama untuk menulis).

Jawaban yang lebih panjang
Jadi, inilah masalahnya: untuk proyek pertama Anda, Anda akan berada di lab seseorang mengerjakan kode orang lain. Dalam hal ini mereka akan menjadi orang yang memilih bahasa pemrograman. Yang menurut saya pribadi agak hebat!

Maksud saya, sebagai pemula, Anda tidak benar-benar akan tahu apa yang Anda lakukan selama ini, dan, terutama ketika Anda tidak tahu apa yang Anda lakukan, belajar program bisa jadi hal yang sulit. Dengan demikian, ada baiknya memiliki struktur dan batasan yang berasal dari mengerjakan kode orang lain, dan ada baiknya memiliki motivasi dan kegembiraan yang hanya bisa datang dari bekerja pada proyek nyata.

Namun, terlepas dari bahasa apa pun yang digunakan lab Anda (terutama jika itu Matlab), Anda mungkin harus belajar python, C, dan C ++. Khususnya, jika Anda tidak berasal dari latar belakang ilmu komputer, Anda HARUS membaca Kernighan dan Ritchie "The C Programming Language". Umurnya 35 tahun dan memberi kesan berbeda bahwa penulisnya memprogram kartu punch, tetapi burung itu paling langka: buku ilmu komputer yang tak lekang oleh waktu. Ini akan membuat banyak hal menjadi lebih jelas.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.