"Ilmuwan Komputasi" agak luas karena mencakup orang yang melakukan analisis numerik dengan kertas / LaTeX dan implementasi proof-of-concept, orang yang menulis perpustakaan tujuan umum, dan orang yang mengembangkan aplikasi yang memecahkan kelas masalah tertentu, dan pengguna akhir yang memanfaatkannya aplikasi. Keterampilan yang dibutuhkan untuk kelompok-kelompok ini berbeda, tetapi ada keuntungan besar untuk memiliki keakraban dengan "tumpukan penuh". Saya akan menjelaskan apa yang saya pikir adalah bagian penting dari tumpukan ini, orang-orang yang bekerja pada level itu tentu saja harus memiliki pengetahuan yang lebih dalam.
Pengetahuan domain (misalnya latar belakang fisika dan teknik)
Setiap orang harus mengetahui dasar-dasar kelas masalah yang mereka pecahkan. Jika Anda bekerja pada PDE, ini berarti beberapa pengetahuan umum tentang beberapa kelas PDE (misalnya Poisson, elastisitas, dan Navier-Stokes yang kompresibel dan kompresibel), terutama properti apa yang penting untuk ditangkap secara "tepat" dan apa yang bisa sampai pada diskritisasi kesalahan (ini menginformasikan pemilihan metode mengenai konservasi lokal dan integrator symplectic). Anda harus tahu tentang beberapa fungsional dan jenis analisis yang menarik untuk aplikasi (optimisasi angkat dan seret, prediksi kegagalan, inversi parameter, dll).
Matematika
Setiap orang harus memiliki pengetahuan umum tentang kelas-kelas metode yang relevan dengan domain masalahnya. Ini termasuk karakteristik dasar aljabar linier yang jarang versus padat, ketersediaan "metode cepat", sifat-sifat teknik diskritisasi spasial dan temporal dan bagaimana mengevaluasi sifat-sifat masalah fisik apa yang diperlukan agar teknik diskritisasi sesuai. Jika Anda sebagian besar adalah pengguna akhir, pengetahuan ini bisa sangat tinggi.
Rekayasa perangkat lunak dan perpustakaan
Beberapa keakraban dengan teknik abstraksi dan desain perpustakaan berguna untuk hampir semua orang dalam ilmu komputasi. Jika Anda mengerjakan metode pembuktian konsep, ini akan meningkatkan pengorganisasian kode Anda (membuatnya lebih mudah bagi orang lain untuk "menerjemahkannya" ke dalam implementasi yang kuat). Jika Anda bekerja pada aplikasi ilmiah, ini akan membuat perangkat lunak Anda lebih fleksibel dan membuatnya lebih mudah untuk berinteraksi dengan perpustakaan. Bersikap defensif ketika mengembangkan kode, sehingga kesalahan terdeteksi sedini mungkin dan pesan kesalahan sedapat mungkin informatif.
Alat
Bekerja dengan perangkat lunak adalah bagian penting dari ilmu komputasi. Kemahiran dengan bahasa yang Anda pilih, dukungan editor (mis. Tag, analisis statis), dan alat debugging (debugger, valgrind) sangat meningkatkan efisiensi pengembangan Anda. Jika Anda bekerja di lingkungan batch, Anda harus tahu cara mengirim pekerjaan dan mendapatkan sesi interaktif. Jika Anda bekerja dengan kode terkompilasi, pengetahuan kompiler, tautan, dan alat bantu pembuatan seperti Make akan menghemat banyak waktu. Kontrol versi sangat penting untuk semua orang, bahkan jika Anda bekerja sendiri. Pelajari Git atau Mercurial dan gunakan untuk setiap proyek. Jika Anda mengembangkan perpustakaan, Anda harus mengetahui standar bahasa secara wajar sehingga Anda hampir selalu menulis kode portabel pertama kali, jika tidak, Anda akan dimakamkan dalam permintaan dukungan pengguna ketika kode Anda tidak dibangun di lingkungan funky mereka.
Getah
LaTeX adalah standar de-facto untuk publikasi ilmiah dan kolaborasi. Kemahiran dengan LaTeX penting untuk dapat mengkomunikasikan hasil Anda, berkolaborasi dalam proposal, dll. Pembuatan skrip angka juga penting untuk reproduktifitas dan sumber data.