Pertama: Saya seorang ahli matematika - seorang profesional (karena saya dibayar untuk mengerjakan matematika). Saya bukan seorang programmer. Saya memang melakukan beberapa pemrograman, tetapi sangat pasti dari varietas Cargo Cult (lihat komentar pertama untuk https://tex.stackexchange.com/q/451/86 dan tanggapan saya) dan tidak ada hal seperti itu yang biasanya membawa saya ke ini situs (memang, saya mendaftar di sini untuk mengirim jawaban ini setelah melihat tautannya di ruang obrolan TeX).
Ringkasan jawaban saya adalah: Matematika adalah Pemrograman .
Saya baru-baru ini harus mengajar kursus matematika untuk sekelompok siswa non-matematika. Mereka adalah bagian pemrograman. Saya pikir ini fantastis! Akhirnya, saya akan bisa mengajar matematika kepada orang-orang yang sudah memahami ide-ide dasar dan yang sudah memiliki perangkat dasar untuk melakukan matematika. Saya sangat kecewa ketika saya bertanya berapa banyak dari mereka yang benar-benar menulis sebuah program dan mendapat jawaban antara 0 dan 1.
Sebelum saya melanjutkan, saya harus mengklarifikasi beberapa hal. Ada bidang matematika yang berkaitan langsung dengan pemrograman dan berkaitan dengan mengevaluasi algoritma dan mengklasifikasikan bahasa dan sejenisnya. Saya tidak berbicara tentang itu. Ada juga program yang mencoba menerjemahkan semua matematika ke dalam bahasa formal yang dapat dievaluasi oleh komputer. Ini sedikit lebih dekat dengan apa yang saya bicarakan, tetapi meskipun demikian untuk fokus pada hal itu akan kehilangan bagian utama dari apa yang saya coba katakan. Matematika yang saya lakukan dan pemrograman yang saya lakukan hampir tidak ada hubungannya dengan topik. Koneksi di antara mereka ada pada level yang berbeda.
Di mana saya ingin memulai adalah dengan mengomentari pertanyaan utama:
Jika itu melakukan matematika, maka semua aktivitas manusia adalah bentuk matematika. Jika demikian, maka kata matematika tidak memiliki arti yang bermanfaat, karena kata itu tidak dapat digunakan untuk membedakan satu aktivitas dari aktivitas lainnya.
Ya, itu mengerjakan matematika. Tetapi "matematika" masih merupakan kata yang berguna karena, seperti lagu itu mengatakan, "Itu bukan apa yang Anda lakukan, itu adalah cara Anda melakukannya.". Saya akan mengatakan bahwa saya melakukan matematika ketika saya mendekati sesuatu secara matematis . Kadang-kadang, itu adalah "hard core" matematika: merumuskan definisi, membuktikan teorema. Terkadang tidak. Terkadang, ia menulis program kecil yang konyol sehingga anak-anak saya dapat mempelajari kata-kata ejaan mereka.
Inilah yang matematika bantu ketika saya memprogram:
Abstraksi Ini mungkin yang keterampilan dipindahtangankan yang paling penting dari matematika. Maksud saya, ini adalah kemampuan untuk menghilangkan semua hal yang tidak perlu dan fokus pada properti penting.
Perspektif Jika saya hanya dapat memilih satu hal yang harus dipelajari oleh semua siswa saya, ini adalah itu: Kemampuan untuk mengubah sudut pandang yang sesuai dengan masalah. Kami biasanya memperlakukan ini dalam aljabar linier dengan formula perubahan-basis (yang mengarah ke matriks yang mengerikan dan komplikasi yang mengerikan), tetapi jauh lebih berlaku dari itu. Pada intinya, itu adalah gagasan bahwa hanya karena sesuatu telah disajikan kepada Anda dalam satu cara, itu tidak harus menjadi cara Anda bekerja dengannya. Ini memisahkan pandangan orang tentang hal itu sendiri dari cara itu telah disajikan. Ini bisa sangat praktis: ini semua tentang membuat sesuatu yang bermanfaat atau efisien. Jika saya memiliki daftar vektor dan lebih efisien untuk menyimpannya sebagai daftar koordinat-x dan daftar koordinat-y, biarlah .
Bentuk versus Fungsi Memimpin dari atas; jika hal dapat disajikan dalam berbagai cara yang berbeda maka tidak lagi adil untuk mengatakan bahwa satu presentasi tertentu yang hal. Untuk salah mengutip lagu itu lagi: "Bukan apa yang Anda lakukan , apa yang Anda lakukan " yang penting.
Saya bisa terus, tetapi mereka adalah orang-orang yang muncul dalam pikiran.
Sekarang, mungkin ada banyak reaksi (negatif) terhadap apa yang saya tulis sejauh ini. Satu akan menjadi "Itu bukan matematika, itu hanya akal sehat." (atau akal sehat) yang saya maksud dengan komentar saya di atas setuju dengan sentimen bahwa "semua aktivitas manusia adalah bentuk matematika". Yang lain adalah "Itu bukan jenis matematika yang dimaksud dalam pertanyaan.". Ini hampir pasti benar dan di sini saya sebenarnya memiliki simpati lebih banyak dengan orang yang mengatakan "Setidaknya saya belum menyentuh matematika selama 10 tahun,". Dia salah, tentu saja, mereka telah melakukan matematika selama 10 tahun karena setiap kali mereka menulis sebuah program mereka melakukan matematika . Mereka hanya tidak menyadarinya.
Saya benar-benar menggunakan beberapa "matematika nyata" dalam program saya. Baru-baru ini saya membuat kode penjelajah bentuk 3D yang menyenangkan yang melibatkan penggunaan beberapa matematika untuk mengetahui proyeksi dan transformasi lain yang harus saya terapkan pada data saya. Saya sedikit geli mendapati diri saya benar-benar mengkode angka empat! Tapi tentu saja, matematika yang terlibat itu sepele dibandingkan dengan matematika yang saya lakukan ketika saya sedang bekerja. Itu barang "belakang amplop". Jenis matematika seperti itu, maka saya setuju dengan sentimen yang Anda ambil ketika Anda membutuhkannya, dan jika Anda memerlukan sesuatu yang lebih rumit daripada yang dapat Anda temukan di Wikipedia maka Anda menemukan ahli matematika sungguhan untuk melakukannya untuk Anda. Namun, agar Anda dapat mengambilnya saat Anda membutuhkannya, maka Anda harus mempelajari sesuatu. Benda itu mungkin bukan apa pun yang pernah Anda gunakan, tetapi setelah mengetahui bahwa sesuatu membuatnya lebih mudah untuk mengambil apa yang sebenarnya Anda gunakan di kemudian hari. Jadi ini adalah di mana saya tidak setuju dengan Coder: Anda perlu belajar beberapa matematika jika Anda pernah akan menggunakan setiap matematika dan Anda perlu belajar itu dari sisi matematika (yang tidak berarti membuktikan teorema, by the way).
Dan akhirnya ke "Matematika Pemrograman". Anda dapat mempelajari semua hal ini dari menjadi programmer yang baik. Dan jika Anda telah mempelajari hal-hal ini, Anda akan menemukan matematika jauh lebih mudah karena Anda akan mengerti bahwa ketika kita berbicara tentang vektor dalam ruang vektor maka itu hanya sebuah instance dari kelas Vector
yang berarti bahwa kita dapat melakukan semua hal yang Vector
dilakukan untuk contoh itu: tambahkan, kurangi, skala, dan sebagainya. Itu sebabnya saya ingin mengajar matematika kepada programmer. Tapi, berbicara sebagai ahli matematika, saya akan mengatakan itu duluini, "Abstraksi", lebih mudah dipelajari dalam matematika daripada dalam pemrograman karena matematika adalah pengejaran abstraksi. Setiap kali kita melihat beberapa perilaku, pelatihan kita selalu bertanya "Ada apa dengan hal itu yang membuatnya berperilaku seperti itu? Bagaimana jika saya mengambil hal lain yang serupa, akankah ia berperilaku dengan cara yang sama? Berapa banyak hal itu? Apakah aku harus kalah agar berhenti berperilaku seperti itu? " (Membawa ini ke ekstrem mengarah ke "matematika kelabang" - mencari istilah). Tetapi kita tidak melakukan ini dengan (hanya) objek "dunia nyata" (apa pun itu), kita melakukan ini dengan hal-hal yang telah diabstraksikan.
Ini sudah cukup lama, jadi izinkan saya menutup dengan salah satu lelucon matematika klasik:
Seorang ahli matematika dan fisikawan menghadiri seminar tentang beberapa model baru yang melibatkan ruang 24 dimensi. Setelah itu, mereka mendiskusikannya dan fisikawan itu berkata: "Itu sangat sulit. Maksud saya, bagaimana orang memvisualisasikan ruang 24 dimensi?" di mana ahli matematika menjawab: "Oh, itu mudah. Hanya memvisualisasikan ruang n-dimensi dan kemudian mengatur n = 24.".
Ditambahkan 2012-03-2
Ada beberapa komentar tentang jawaban ini yang mengekspresikan berbagai pandangan. Ini sekarang telah dihapus oleh moderator dengan pengertian bahwa saya akan mencoba memasukkannya (atau meresponsnya) dalam jawaban saya.
Namun, saya tidak yakin bisa. Membaca komentar-komentar itu dan apa yang ada di halaman ini, saya hanya bisa sampai pada kesimpulan bahwa ada kesalahpahaman besar tentang apa sebenarnya matematika itu. Selain itu, saya tidak merasa cukup kompeten untuk menjelaskannya. Untungnya, seseorang telah terhubung dengan Ratapan Lockhart, jadi saya akan menunda penjelasannya. Sementara saya mungkin meletakkannya secara berbeda (ketika saya tumbuh di lingkungan ilmiah, saya akan lebih menekankan pada sifat eksperimental matematika), saya tidak berpikir saya bisa membuatnya lebih baik .
Saya masih berpikir saya bisa menambahkan sesuatu. Selain kesalahpahaman tentang apa matematika itu , ada juga kesalahpahaman tentang apa artinya "mengerjakan matematika". Saya melihat dua sikap yang hampir saling bertolak belakang:
Matematika adalah tentang persamaan dan rumus. Jadi tidak perlu mempelajarinya karena Wikipedia ada (ini hampir merupakan kebalikan dari tantangan apokrif Euler untuk Diderot ).
Matematika adalah tentang teorema dan definisi. Jadi tidak perlu mempelajarinya karena program tidak pernah membuktikan apa-apa (yaitu tentang kekeliruan selengkap ... masukkan kekeliruan favorit di sini).
Sementara dua sikap saling bertentangan, mereka berakhir di tempat yang sama: tidak ada gunanya seorang programmer belajar matematika - dan yang paling pasti bukan dari ahli matematika! Lagipula, apa yang mereka ketahui tentang sesuatu? Apa pun yang benar-benar perlu diketahui oleh seorang programmer dapat ditemukan di Wikipedia, atau dipangkas orang lain.
Di atas, saya menggambarkan diri saya sebagai Programer Cargo Cult. Saya yakin sebagian besar dari Anda memiliki tawa pribadi untuk diri sendiri dan berpikir, "Ah ya, saya yakin saya tahu seperti apa program Anda saat itu.". Anda mungkin merasa sedikit sombong dan superior (meskipun saya yakin Anda merasa buruk tentang merasa sombong dan superior).
Apa yang saya jelaskan di atas adalah Cargo Cult Mathematics.
Jadi ketika saya mengatakan bahwa Anda harus belajar sedikit matematika untuk memahami cara kerja matematika, saya mengatakannya untuk alasan yang persis sama seperti yang Anda mungkin jika Anda melihat sedikit kode yang saya tulis: "Betapa jauh lebih mudah hidup Anda akan terjadi jika Anda menghentikan kode cut-and-paste dari StackOverflow dan belajar sedikit tentang bagaimana melakukannya dengan benar. "
Namun, hal yang paling penting adalah Anda harus mempelajarinya dari ahli matematika. Kenapa begitu? Inilah analogi. Bahasa yang paling saya kuasai adalah TeX. (Mengatakan itu semua, sungguh!). Sekarang, misalkan saya ingin belajar lebih banyak tentang TeX dan kebetulan Don Knuth ada di kota dan telah menawarkan untuk memberikan beberapa tutorial tentang TeX. Atau saya bisa membacanya di Wikipedia. Atau mungkin itu Perl dan Larry Wall, atau C # (apakah itu yang benar?) Dan Jon Skeet. Mungkin saja orang-orang ini bukan guru terbaik , tetapi mereka yakin menebusnya dalam jumlah yang mereka tahu!
Dan itulah ahli matematika . Kami adalah orang-orang yang menulis bahasa sebenarnya, yang kemudian menulis perpustakaan yang Anda gunakan. Tentu saja, Anda tidak perlu tahu cara membuktikan teorema - Anda tidak akan menulis perpustakaan! Tetapi jika Anda tahu sedikit tentang bagaimana kami berpikir, maka itu mungkin membantu Anda memahami mengapa kami menulis perpustakaan seperti yang kami lakukan, dan jika Anda mengerti bahwa itu mungkin membantu Anda memanfaatkannya dengan lebih baik.
Ada jalan tengah antara mencari persamaan di Wikipedia dan membuktikan dugaan Poincaré, sama seperti - untuk merujuk pada ratapan Lockhart - ada jalan tengah antara "Saya tidak benar-benar tahu banyak tentang seni, tetapi saya tahu apa yang saya sukai" dan menjadi Monet, dan di antara "Di mana kunci 'APA SAJA'?" dan menjadi Don Knuth. Jika Anda masih di universitas maka Anda memiliki kesempatan luar biasa untuk belajar dari orang-orang yang ahli di bidang mereka dan yang - karena alasan tertentu - bersedia meluangkan waktu untuk menjelaskannya kepada Anda.
Poin lain yang ingin saya kembangkan sedikit adalah mengapa sebagai seorang programmer Anda tidak perlu takut belajar sedikit lebih banyak matematika. Ini bukan Koneksi mendalam, atau kegunaannya. Itu kemampuan Anda untuk memprogram komputer dapat secara langsung membantu Anda belajar matematika. Saya hanya ingin menyebutkan beberapa.
Memahami variabel. Begitu banyak orang menjadi bingung oleh pernyataan sederhana seperti "Biarkan n menjadi bilangan alami ...". Atau "Biarkan epsilon> 0". Ada tempat-tempat dalam matematika di mana penting untuk mengingat ruang lingkup variabel. Ini semua adalah hal biasa dalam pemrograman. Belajarlah menerjemahkan pernyataan matematika ke dalam suatu program dan Anda akan lebih mudah melacak apa yang terjadi.
Sifat pembuktian. Jika Anda pernah menulis ujian, atau menulis program untuk digunakan oleh orang lain, maka Anda memahami inti dari bukti. Ketika Anda melakukan itu, Anda harus tahu bahwa apa pun yang dimasukkan pengguna, Anda dapat mengatasinya (masukkan referensi xkcd wajib di sini). Itu semua buktinya! Sebuah demonstrasi bahwa apa pun yang dimasukkan "pengguna / alam semesta", pernyataan akan berlaku. Eksperimentalis akan bersandar pada "Jika itu bekerja dalam keadaan normal, itu benar" tetapi programmer tahu bahwa selalu ada anak itu yang akan mencoba Alt + G + Shift + ÅØÆ hanya untuk melihat apa yang terjadi.
KERING. Maaf untuk memecahkan ini untuk Anda, tetapi kami menciptakannya, bukan Anda. Kita sudah "tidak mengulangi diri kita sendiri" selama ribuan tahun. Itu sebabnya saya memiliki salinan elemen Euclid di rak saya dan itu masih berguna .
Dan masih ada lagi. Jika saya tahu lebih banyak tentang pemrograman, saya akan menulis sebuah buku berjudul "Matematika untuk Pemrogram" di mana tujuannya bukan untuk mengajarkan "Matematika yang harus diketahui pemrogram" tetapi "matematika yang harus diketahui semua orang, tetapi dioptimalkan untuk pemrogram" . Tapi saya mungkin tidak akan pernah cukup tahu tentang pemrograman untuk menulisnya - kecuali seseorang menawarkan untuk berkolaborasi dengan saya!
Saya akan meninggalkannya di sana. Mungkin jika saya berpikir lebih, saya akan mengubah apa yang saya tulis; semoga saya akan menjelaskannya dengan lebih baik. Dalam waktu beberapa bulan saya bahkan mungkin tidak setuju dengan bagian-bagiannya. Jika ada yang ingin berdebat lebih lanjut, atau berkomentar sebaliknya, mungkin lebih baik tidak melakukannya di komentar di sini. Anda tahu di mana menemukan saya .