Saat ini saya seorang programmer, saya hampir 16 tahun dan telah cukup banyak menyempitkan karir saya ke sesuatu yang melibatkan gelar Ilmu Komputer atau gelar Teknik Elektro (saya tahu mereka sangat berbeda tetapi pertanyaan ini tentang teman saya) tetapi saya teman tidak begitu yakin.
Dia sangat tertarik dalam matematika dan sangat baik dalam hal itu dan saya pikir dia akan menikmati pemrograman tapi dia tidak bersedia untuk mencobanya ( mengedit ia adalah bersedia untuk mencoba tapi belum pernah dilakukan sebelumnya). Adakah yang bisa memberi saya saran untuk bahasa atau alat yang dia bisa coba-coba dalam pemrograman (pada tingkat yang cukup dasar saya anggap) untuk memecahkan masalah matematika atau melibatkan beberapa jenis matematika.
Seperti yang saya katakan dia sangat menyukai matematika tetapi saya pikir dia akan menikmati pemrograman, masalahnya adalah saya tidak ingin dia ditunda oleh hal-hal yang tidak relevan pada tingkat pengantar seperti alokasi memori et al. Saya tahu itu sangat penting tetapi intinya adalah saya ingin dia belajar sedikit pemrograman dengan matematika maka mudah-mudahan jika dia cukup tertarik dia bisa mulai belajar pemrograman sebagai pemrograman.
Sunting: Bukannya dia sama sekali tidak tertarik - lebih karena dia belum secara aktif menjelajahi daerah itu sebelumnya, mungkin karena dia tidak diberitahu tentang hal itu. Saya tidak ingin memaksanya melakukan sesuatu yang tidak ia inginkan, saya melihat ini lebih sebagai dorongan kecil sehingga ia dapat belajar tentang pemrograman. Jika dia tidak menyukainya - cukup adil, saya tidak bisa mengendalikan itu dan tidak mau tetapi jika dia ternyata menikmatinya - dorongan ini akan menjadi hal yang benar.
Jawaban:
Jika Anda menginginkan bahasa "seperti matematika", Haskell adalah teman terbaik Anda (untuk sahabat Anda). Anda dapat dengan mudah membuat fungsi baru tanpa kesulitan. Ini adalah rekomendasi bahasa terbaik yang bisa saya berikan untuk Anda, teman. Berikut ini beberapa tautan:
Mathematica
Wolfram's Mathematica adalah minat lain yang mungkin dia miliki.
Meskipun mahal, itu sepadan. Berikut ini beberapa tautan:
Algoritma
Algoritma penting untuk program apa pun, tetapi teman Anda harus mulai dengan ini ketika dia terbiasa dengan bahasa. Berikut beberapa tautan lainnya:
Semoga ini membantu! Jika Anda memiliki pertanyaan atau umpan balik, jangan ragu untuk berkomentar! Omong-omong, semua tautan ini adalah sumber daya gratis . Jika Anda ingin buku cetak, saya punya beberapa rekomendasi, tinggalkan komentar!
sumber
x = x + 1
hanya menggelikan.Pemrograman fungsional dan bahasa dalam keluarga ML atau Haskell cenderung cocok dengan pikiran para matematikawan.
sumber
Jika dia mengambil jurusan matematika, maka dia tidak diragukan lagi akan melakukan sedikit pemrograman, jika tidak dalam bahasa tingkat rendah seperti C ++, kemudian di tingkat yang lebih tinggi, matematika khusus, bahasa seperti Maple atau Mathematica tergantung pada apa yang dia lakukan.
Juga, tergantung pada bidang penelitiannya, ia mungkin pada akhirnya melakukan matematika terapan atau analisis statis, yang keduanya akan membutuhkan sejumlah besar pemrograman. Dia lebih baik membiasakan pemrograman sekarang terlepas dari apa yang dia putuskan.
sumber
Ajari dia Haskell. Ini adalah bahasa di mana Anda dapat berpikir seperti dalam matematika:
Saya sarankan Anda untuk menunjukkan kepadanya http://learnyouahaskell.com , salah satu tutorial terbaik untuk Haskell.
sumber
Sebagai seseorang yang belajar matematika (saya memiliki gelar BS dalam matematika murni dan baru saja menerima MS saya dalam Matematika Terapan / Statistik) dan kemudian menyadari kesenangan / kepraktisan / pentingnya pemrograman lebih jauh dalam karir saya, saya sangat menghargai pertanyaan ini. Saya berharap saya punya teman seperti Anda 10 tahun yang lalu untuk mendorong saya ke arah pemrograman.
Anda berdua harus memeriksa Project Euler . Apa itu?
Meskipun itu bukan saran khusus bahasa, itu akan menjadi motivator yang bagus untuk memulai pemrograman (terutama jika sudah ada minat dalam matematika). Permasalahan dimulai dengan sangat mudah dan mudah didekati tetapi dengan cepat menjadi sangat rumit dan / atau sulit. Tantangan dan motivasi yang baik yang mungkin Anda berdua nikmati.
Adapun bahasa yang digunakan, saya memiliki pengalaman dengan C ++, R, Matlab dan Mathematica yang semuanya hebat dan banyak digunakan dalam komunitas matematika. Tetapi lebih khusus, saya sangat menyarankan belajar Python yang sangat berguna untuk matematika tetapi tidak sebatas matematika seperti beberapa yang lain (kalau-kalau dia ingin lebih banyak pilihan di kemudian hari). Sangat mudah untuk memulai dengan Python tetapi ada banyak hal untuk dipelajari. Ini juga gratis tidak seperti yang lain. C ++ mungkin bisa menjadi pilihan yang baik tetapi bisa memiliki lebih banyak rintangan dari awal.
sumber
Untuk matematikawan, Turn-on terbesar adalah Algoritma. Teman Anda harus mulai menerapkannya dengan Python (ramah).
Lingkungan komputasi numerik seperti MATLAB akan berguna untuk manipulasi matriks, merencanakan fungsi dan data, implementasi algoritma.
sumber
Itu tergantung pada bidang matematika yang dia minati.
Jika dia lebih ke Abstrak Aljabar atau Combinatorics, dia mungkin akan menyukai Haskell karena sistem tipe kompleks memungkinkan untuk pemrograman langsung dari berbagai matematika. ATS mungkin juga menjadi pilihan.
Saya akan merekomendasikan Pelajari Anda Haskell untuk Bagus untuk tutorial intro dan Struktur Data Murni Fungsional untuk Algoritma.
Jika dia lebih ke Analisis Matriks, Persamaan Diferensial atau Sistem Dinamis, saya akan merekomendasikan Matlab , NumPy , atau Octave . APL melalui Dyalog mungkin juga menarik; meskipun aku tidak akan memulainya dengan itu. Resep Numerik , sementara di C ++ dapat diadaptasi untuk dijadikan panduan yang baik untuk algoritma.
Jika dia ingin melakukan Statistik maka R adalah pilihan alami.
sumber
Saya seorang mahasiswa pascasarjana di bidang matematika, dan meraih gelar sarjana saya di bidang ilmu komputer. Saya membuat blog yang disebut Pemrograman Matematika ∩ di mana saya mengeksplorasi aplikasi matematika untuk pemrograman (dan sebaliknya), dan saya harus mengakui bahwa saya menemukan sebagian besar aspek matematika yang kurang dari ilmu komputer agak kering dan tidak terinspirasi (pada dasarnya, penolakan saya terhadap semua peretasan konyol yang masuk ke pemrograman sistem dalam pengalaman saya di industri).
Di sisi lain, di blog saya, saya melihat masalah seperti pengenalan wajah (sedikit aljabar linier), metode enkripsi, mesin Turing dan automata seluler, model untuk memprediksi aktivitas pembunuh berantai, mesin pencari, dan banyak konsep matematika lainnya . Bagian terbaiknya adalah saya bisa mengimplementasikan ide-ide itu, dan ide saya sendiri!
Untuk membuat teman Anda menyukai pemrograman seperti yang kita lakukan, temukan dia yang benar-benar menarikproyek. Aspek pemrograman tidak akan bertahan tanpa bekerja menuju produk yang menurutnya cantik. Adapun bahasa, saya merekomendasikan Mathematica, Racket (turunan Skema yang sangat ramah, tetapi masih kuat), Python, dan Haskell. Mathematica mungkin adalah yang terbaik, karena ia dapat secara selektif mengimplementasikan fungsi matematikanya sendiri, dan menggunakan perpustakaan yang dibangun di Mathematica untuk menyelesaikan proyek (misalnya, menulis fungsi yang menghitung koefisien Fourier, dan kemudian menggunakan Mathematica untuk melakukan sisa analisis, seperti sebagai penyaringan, pembuatan gambar, dll.). Bahkan topik dasar seperti integrasi memberikan beberapa proyek yang menarik (aturan quadrature yang berbeda, integrasi monte carlo, transisi yang lembut ke pembelajaran mesin dengan set data besar).
Juga, sepertinya banyak tanggapan di sini berasal dari orang-orang yang tidak melakukan matematika, atau yang belum menggunakan bahasa yang mereka sarankan untuk melakukan perangkat lunak matematika. Alasan orang merekomendasikan Haskell adalah karena ia sedekat mungkin dengan implementasi teori kategori secara harfiah, dan sangat cocok dengan beberapa definisi matematis dari beberapa konsep dasar. Tetapi jika teman Anda dekat dengan usia Anda, maka dia tidak siap untuk teori kategori secara matematis (kedewasaan itu kurang lebih tidak berguna hingga lulus sekolah, dan jahat untuk mengajar diri sendiri), dan sebagai bahasa pertama Haskell memiliki curamkurva belajar bahasa yang disarankan (mungkin Prolog lebih curam). Saya menggunakan Haskell untuk mengimplementasikan kompiler Javascript, dan saya berakhir dengan sepotong kode yang sangat indah dan elegan, tetapi untuk hal-hal intuitif seperti mutasi variabel, Anda sudah harus mencoba-coba dalam monad nontrivial.
Python dan Mathematica akan jauh lebih ramah, dan Mathematica memiliki kurva belajar paling dangkal hanya karena semua perpustakaan dikemas ke dalam antarmuka pengguna yang bagus dengan dokumentasi yang mengagumkan (tekan saja F1!). Di sisi lain, ada satu buku yang pernah saya dengar (tetapi tidak dibaca) yang menyediakan transisi ke matematika tingkat lanjut dan pengantar Haskell secara bersamaan . Tampaknya memiliki ulasan Amazon positif, jadi Anda mungkin ingin memeriksanya. Dia bisa naik ke bahasa seperti C # dan Java jika dia ingin melakukan hal-hal industri, tetapi lebih mungkin dia tidak akan pernah perlu memasuki hutan itu (dan banyak hal industri matematika adalah Matlab murni pula).
Tapi seperti yang saya katakan, dengan proyek yang tepat belajar bahasa menjadi suatu kesenangan, apa pun proyeknya.
sumber
Jika teman Anda menikmati logika formal, dan menganggap Intelegensi Buatan menarik, ia mungkin ingin melihat Prolog .
Dengan bahasa ini, Anda menyatakan predikat Anda (asumsi awal, "fakta") dan aturan inferensi ("hubungan"), dan kemudian mengajukan pertanyaan.
Prolog kemudian berbunyi dan mencari tahu apakah pertanyaan itu dapat dijawab hanya dengan menggunakan fakta dan hubungan yang diberikan, dan jika demikian, memberi tahu Anda jawabannya.
Jadi Anda mengatakan bahwa "tom adalah kucing" dan "semua kucing adalah binatang" dan bertanya "apakah ini binatang?" dan Anda akan mendapatkan jawaban "benar".
Atau Anda dapat memintanya untuk "daftar semua hewan yang Anda ketahui" dan Anda akan mendapatkan daftar item tunggal "tom".
Tentu saja sintaks sedikit lebih rumit dari itu, tetapi Anda mendapatkan ide umum.
sumber
Cara terbaik untuk mendorong teman Anda untuk mencobanya mungkin dengan membuatnya memulai pemrograman tanpa terlalu memikirkan fakta bahwa ia pemrograman.
Setelah dia siap berurusan dengan "pemrograman", Anda bisa mulai dengan buku yang sama dan belajar pemrograman dari dasar yang lebih matematis. Dua buku favorit saya saat ini adalah:
"Struktur dan Interpretasi Program Komputer" SICP (Abelson / Sussman)
"Tanah Lisp: Belajarlah Memprogram dalam Lisp, Satu Pertandingan Sekaligus!" (Barski) , mengajarkan pemrograman melalui latihan pemrograman game.
SICP dapat dilihat secara bebas di situs web MIT Press .
Jika teman Anda condong secara matematis, Lisp tidak akan mengalami kesulitan, dan itu membebaskan Anda dari keharusan mempelajari sintaksis khusus. Saya pikir Lisp lebih mudah dipelajari daripada Haskell.
sumber
Saya setuju dengan Haskell, tetapi dari sudut pandang praktis, ia juga harus belajar bahasa pada mesin abstrak yang banyak digunakan. Maksud saya bahasa JVM atau .NET tentu saja.
Ada bahasa pada platform ini yang sedikit lebih menarik daripada bahasa unggulan. Di JVM kita lihat Clojure dan Scala. Pada platform .NET lihatlah F #.
Ada juga. NET bahasa dari Microsoft Research disebut c-omega yang sangat menarik, tetapi hanya proyek penelitian.
sumber
Matlab umumnya digunakan untuk pemrograman matematika dan ilmiah. Ini adalah bahasa berbasis skrip, tidak sulit untuk dipelajari dan semua masalah memori disembunyikan dari pengguna.
Rekayasa Perangkat Lunak dan Teknik Listrik dapat digabungkan ke dalam Teknik Komputer.
sumber
Jika teman Anda tidak mau mencoba pemrograman, saya tidak mengerti mengapa Anda ingin memaksakan masalah ini. Saya pikir kunci untuk menjadi seorang programmer adalah mau belajar, dan jika dia tidak mau belajar maka pemrograman mungkin bukan untuknya
Tapi itu dikatakan, taruhan terbaik Anda mungkin untuk membuat program kecil sendiri dan pamerkan padanya. Mungkin meninggalkan beberapa bagian dari itu belum selesai dan lihat apakah Anda dapat membuatnya tertarik membantu Anda menyelesaikannya. Saya tahu bagi saya, algoritma dan logika di balik suatu program jauh lebih menarik daripada menuliskan sintaksisnya, jadi mungkin cobalah dan minta dia membantu Anda dengan logika program, dan kemudian Anda pergi dan kode hal itu dan biarkan dia melihat hasil itu.
Jika dia menunjukkan minat sama sekali dalam kode sumber, maka tunjukkan padanya bagaimana menulis barang-barangnya sendiri. Secara pribadi saya pikir bahasa itu sendiri tidak masalah asalkan mudah dipelajari dan memiliki banyak dokumentasi.
sumber
Ada seluruh perpustakaan dan komunitas matematika gratis yang dibangun di sekitar Python. Saya akan mulai dengan "Sage", dia harus benar-benar menikmati menggunakannya dan akan belajar Pemrograman dengan Python secara tidak sengaja.
sumber
Saya pikir Anda harus menunjukkan kepada teman Anda beberapa varian yang berbeda, seperti:
Saya pikir C dan LISP adalah titik awal yang baik, menunjukkan bahwa bahasa yang berbeda lebih cocok untuk tugas yang berbeda. Saya tidak percaya menggunakan Haskell atau Erlang untuk semuanya.
Kode mesin (atau assembler) untuk prosesor sederhana mungkin menarik juga. Saya selalu senang saya mulai dengan kode mesin pada C64 pertama saya . ( MOS 6510 ) Pengalaman langsung yang sulit didapat sebagai orang dewasa dengan waktu terbatas untuk "buang".
sumber
Bagi saya, pemrograman dimulai dari keinginan untuk "melakukan sesuatu", "bagaimana jika?" pertanyaan:
"Saya ingin membuat situs web sendiri", jadi pelajari tentang HTML, dll.
"Aku benci kalau aku harus mengklik X atau aku melihat Y di situs web ini setiap kali aku berkunjung. Apakah tidak ada cara untuk mengotomatisasi itu?" Jadi, Anda belajar tentang bookmarklet atau menulis ekstensi browser.
"Saya ingin katalog semua musik saya dan tidak ada alat yang saya lihat melakukannya dengan cara yang saya inginkan", jadi Anda belajar tentang database.
"Saya ingin melacak pengeluaran untuk Klub Matematika saya", jadi Anda belajar tentang spreadsheet, makro pemrograman, atau bahkan mungkin basis data.
Agar drive benar-benar ada, masalah yang mendasarinya harus datang dari dia . Saya akan mencoba untuk menemukan masalah yang ingin dia selesaikan dan kemudian memilih alat / bahasa / sistem yang memungkinkan dia untuk mengotomatisasi / memprogram solusinya.
sumber
Haskell dan Mathematica adalah cara untuk pergi, menurut saya. Sebagian besar bahasa fungsional juga baik untuk matematika. Python juga bagus, lihat dokumentasi matematika .
sumber