Memperkenalkan Pemrograman Untuk Matematikawan [ditutup]

30

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.

ell
sumber
17
Mengapa Anda ingin mendorong teman Anda ke arah yang tidak ia sukai?
HLGEM
3
Sebagai catatan, banyak programmer yang pernah bekerja dengan saya memiliki gelar matematika. Selain itu, mereka cukup bagus.
AngryBird
1
Saya setuju dengan @HLGEM. Saya akan benci jika seseorang mendorong saya ke arah matematika teoretis yang murni. Demikian juga, mereka yang menyukai barang-barang itu akan membencinya jika mereka didorong ke barang-barang yang membosankan.
Pekerjaan
4
Untuk meletakkan beberapa perspektif pada hal-hal - Anda 16. Anda bukan seorang programmer, Anda seorang siswa yang telah melakukan beberapa pemrograman. Teman Anda bukan ahli matematika, ia adalah siswa yang suka (dan telah belajar beberapa) matematika. Sementara saya suka jawaban dari @ perl.j, saya pikir Anda mungkin terlalu tinggi untuk yang satu ini.
Joel Etherton
2
@ perl.j: Sampai seseorang memiliki gelar yang diperlukan untuk menunjukkan "bidang studi utama" yang diperlukan sebagai bukti ia bukan ahli matematika. Bahkan seseorang di universitas yang jurusan matematika belum menjadi ahli matematika.
Joel Etherton

Jawaban:

60

Logo Matematika

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.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

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!

Dinamis
sumber
2
Saya seorang jurusan matematika, dan saya dapat merekomendasikan Haskell sebagai luar biasa dari perspektif matematika. Saya juga suka membaca beberapa hal teoretis yang menyertainya, lebih dari kebanyakan bahasa.
Theo Belaire
2
Jika dia mempelajari Haskell, dia kemudian dapat pindah ke Agda , bahasa yang diketik secara dependen yang cocok untuk melakukan pembuktian.
Peter C
4
@ SK-logic Bagaimana Anda bisa mengatakan itu? Matematika adalah tentang mempelajari sistem logis baru dan menalarinya (jangan lupa bahwa ahli matematika menemukan mesin Turing). Anda dengan jujur ​​berpikir bahwa seseorang yang dapat menangani matematika tidak dapat menangani gagasan tentang mutasi variabel? Dan poin saya adalah, untuk melakukan sesuatu yang sederhana seperti mutasi variabel di Haskell membutuhkan toko monad! Mengatakan itu lebih mudah daripada x = x + 1hanya menggelikan.
JeremyKun
2
@Bean, itu sebenarnya reaksi pertama saya sendiri terhadap pernyataan tugas (dan saya tidak tahu apa-apa selain persamaan linear primitif dari matematika waktu itu). Sejak saat itu saya melihat reaksi yang sama berulang kali. Saya sengaja mencoba memperkenalkan konsep pemrograman fungsional kepada mereka yang tidak memiliki pengalaman pemrograman sebelumnya, secara bertahap pindah ke hal-hal penting. Itu selalu mudah dulu, dan semua itu "WTF?!?" Penampilan selalu dimulai hanya dengan pengenalan konsep imperatif dan OOP.
SK-logic
18

Pemrograman fungsional dan bahasa dalam keluarga ML atau Haskell cenderung cocok dengan pikiran para matematikawan.

Pemrogram
sumber
Sangat benar! Daftar tanpa batas dan semua yang bagus untuk pikiran matematika.
14

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.

aceinthehole
sumber
1
Anda juga dapat mencoba menyelinap Python ke dalam pikirannya dengan Sage ( sagemath.org ).
Anton Barkovsky
Berikut ini adalah bahasa matematika tingkat tinggi lainnya yang lebih tinggi: math.uiuc.edu/Macaulay2
RyanTM
Saya sarankan Anda biarkan dia menemukan pemrograman. Ketika dia terkena itu, dan dia pasti akan diminta untuk melakukan sesuatu yang mengharuskan dia untuk melakukan sesuatu dalam bahasa spesifik matematika, dia akan menyukainya atau membencinya. Jika dia suka ketika ini terjadi, dia akan dapat memilih bahasa yang paling cocok dengannya. Bukannya Anda tidak boleh membantu teman Anda, jika tidak menunjukkan minat, maka Anda harus membatalkannya.
Ramhound
12

Ajari dia Haskell. Ini adalah bahasa di mana Anda dapat berpikir seperti dalam matematika:

  • Fungsi adalah sesuatu yang memetakan input ke output
  • Barang dievaluasi sesuai kebutuhan
  • Ketik inferensi dan sistem tipe gila
  • Sintaks yang mudah
  • Komunitas hebat (misalnya di StackOverflow )
  • Monad

Saya sarankan Anda untuk menunjukkan kepadanya http://learnyouahaskell.com , salah satu tutorial terbaik untuk Haskell.

FUZxxl
sumber
11

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?

Project Euler adalah serangkaian masalah pemrograman matematika / komputer yang menantang yang akan membutuhkan lebih dari sekadar wawasan matematika untuk dipecahkan. Meskipun matematika akan membantu Anda mencapai metode yang elegan dan efisien, penggunaan komputer dan keterampilan pemrograman akan diperlukan untuk menyelesaikan sebagian besar masalah.

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.

bnjmn
sumber
+2 untuk Project Euler, akan ditambahkan sebagai komentar pada pertanyaan utama sampai saya melihat jawaban Anda. OP dan temannya pasti harus membahas ini bersama.
cobaltduck
10
  • 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.

BOSS SHOUBHIK
sumber
10

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.

Insinyur Dunia
sumber
5

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.

JeremyKun
sumber
3

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.

Bill Michell
sumber
Prolog sangat dekat dengan logika tingkat pertama, tetapi benar-benar tidak kompatibel, karena tidak memiliki cara untuk membedakan "tidak terbukti" dan "salah". Dalam beberapa hal, bahasa ini rapi, tetapi saya tidak akan memaksakannya pada ahli matematika dan menyebutnya logika pemrograman.
David Thornley
Bisakah Anda tidak hanya menguji negasi?
Bill Michell
2

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:

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.

Programmer
sumber
1

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.

dsmith
sumber
1

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.

Danny Varod
sumber
0

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.

Rachel
sumber
0

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.

Bill K
sumber
0

Saya pikir Anda harus menunjukkan kepada teman Anda beberapa varian yang berbeda, seperti:

  • C
  • LISP / Skema
  • DASAR
  • bourne-shell
  • Prolog

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".

MattBianco
sumber
Saya harus tidak setuju. Mengapa seorang anak kecil, yang tertarik dalam matematika, akan tertarik pada kode Mesin? Dan mengapa C? Majelis menganggap terlalu banyak pengetahuan tentang prosesor. C juga membuat banyak persyaratan yang sebaiknya diserahkan kepada seseorang yang ingin belajar pemrograman serius: pointer, register, pelingkupan, tipe. Untuk pengantar pertama tentang pemrograman untuk orang seperti itu, sesuatu yang berfokus pada algoritma atau aplikasi ide-ide matematika (probabilitas, keacakan, simulasi), jauh lebih baik. Python, Lisp / Forth, Basic even. Bourne-shell ?? Mengapa? ...
Assad Ebrahim
0

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.

David Weinraub
sumber
-2

Haskell dan Mathematica adalah cara untuk pergi, menurut saya. Sebagian besar bahasa fungsional juga baik untuk matematika. Python juga bagus, lihat dokumentasi matematika .

Modul ini selalu tersedia. Ini menyediakan akses ke fungsi matematika yang didefinisikan oleh standar C.

Fungsi-fungsi ini tidak dapat digunakan dengan bilangan kompleks; gunakan fungsi dengan nama yang sama dari modul cmath jika Anda memerlukan dukungan untuk bilangan kompleks. Perbedaan antara fungsi yang mendukung bilangan kompleks dan yang tidak dibuat karena sebagian besar pengguna tidak ingin belajar matematika sebanyak yang diperlukan untuk memahami bilangan kompleks. Menerima pengecualian alih-alih hasil yang kompleks memungkinkan deteksi awal dari angka kompleks tak terduga yang digunakan sebagai parameter, sehingga pemrogram dapat menentukan bagaimana dan mengapa itu dihasilkan di tempat pertama.

Fungsi-fungsi berikut disediakan oleh modul ini ...

Billjk
sumber