Saya baru saja memulai diploma dalam pengembangan perangkat lunak. Saat ini kami sedang memulai dengan Java dasar dan semacamnya (jadi langsung dari bawah Anda mungkin berkata) - yang baik-baik saja, saya tidak memiliki pengalaman pemrograman selain mengetahui bagaimana melakukan "Hello World" di Jawa.
Saya terus mendengar bahwa matematika berkaitan dengan pengkodean, tetapi bagaimana bisa demikian? Contoh umum apa yang akan menunjukkan bagaimana matematika dan pemrograman berjalan bersama, atau saling bergantung?
Saya minta maaf atas pertanyaan saya tidak jelas, saya baru mulai mendapatkan gambaran kasar tentang dunia yang saya tuju sebagai siswa kode monyet ...
Jawaban:
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:
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 yangVector
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:
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 .
sumber
Mereka tidak yang terkait erat. Untuk pemrograman, penting untuk mengetahui tentang matematika - terutama cabang-cabang yang berkaitan dengan, misalnya, kinerja algoritma, tetapi fakta sederhana adalah bahwa tidak ada cabang matematika yang akan memberi tahu Anda bahwa Singletons adalah ide yang sangat buruk, misalnya, atau kapan akan lebih memilih pewarisan daripada komposisi, atau apakah Anda benar-benar akan membutuhkan fleksibilitas itu, dan tidak mengulangi diri Anda sendiri, dan puluhan kebutuhan pemrograman inti lainnya.
Matematika mungkin dapat mengekspresikan apa yang program Anda lakukan, tetapi tentu saja tidak bisa memberi tahu Anda cara yang paling dapat dikelola, dapat dibaca manusia, dan layak untuk melakukannya.
sumber
Matematika dan pemrograman terkait dalam dua cara.
Salah satunya adalah matematika dapat digunakan untuk alasan tentang program komputer. Ini dapat membantu menjawab pertanyaan seperti "Bagaimana waktu menjalankan program saya akan berubah ketika data input berubah?", "Apakah program saya dijamin untuk menemukan jawaban untuk masalah saya?", "Apakah program saya seefisien mungkin? "," Bagaimana saya harus mengatur ulang program saya untuk membuatnya lebih cepat atau menggunakan lebih sedikit memori? ". Anda biasanya membahas topik-topik seperti ini di kursus divisi atas tentang teori perhitungan, desain algoritma, dan desain bahasa komputer.
Cara kedua matematika dan program terkait adalah bahwa pemrograman digunakan untuk memecahkan masalah matematika. Ini penting karena banyak masalah "kehidupan biasa" sebenarnya dapat disusun kembali sebagai masalah matematika dan kemudian diselesaikan (mungkin kira-kira) pada komputer. Topik-topik semacam ini akan muncul sampai batas tertentu di hampir semua program studi Anda, tetapi khususnya dalam kursus matematika diskrit dan pemodelan matematika.
sumber
Dua contoh spesifik di mana pendidikan matematika penting bagi ilmu komputer adalah:
1) Database relasional tempat kalkulus relasional digunakan.
Area berikutnya adalah kecerdasan buatan (AI) dan pembelajaran mesin .
Untuk contoh tentang bagaimana ini digunakan, lihatlah kelas udacity CS 373: MEMPROGRAMAN MOBIL ROBOTIK .
Deskripsi: Kelas ini, yang diajarkan oleh salah satu pakar AI terkemuka, akan mengajarkan Anda metode dasar dalam Kecerdasan Buatan, termasuk: inferensi probabilistik, visi komputer, pembelajaran mesin, dan perencanaan, semua dengan fokus pada robot. Contoh dan tugas pemrograman yang luas akan menerapkan metode ini dalam konteks membangun mobil yang dapat dikendarai sendiri. Anda akan mendapatkan kesempatan untuk mengunjungi, melalui video, laboratorium penelitian terkemuka di lapangan, dan bertemu dengan para ilmuwan dan insinyur yang sedang membangun mobil self-driving di Stanford dan Google.
Prasyarat: Instruktur akan mengasumsikan pengetahuan pemrograman yang solid, semua pemrograman akan menggunakan Python. Pengetahuan tentang probabilitas dan aljabar linier akan sangat membantu.
sumber
Untuk pengembangan aplikasi ilmiah, pemrograman Game, sistem waktu-nyata, sistem simulasi, dan aplikasi semacam itu, Matematika memang diperlukan. Lagipula, pemrograman menggunakan matematika dan sains untuk memecahkan masalah. Di sisi lain, untuk memprogram aplikasi yang menangkap informasi pengguna untuk mendaftarkan mereka di database Anda, tidak memerlukan matematika tingkat tinggi. Namun demikian, semua programmer akan mendapat manfaat dari Teori Angka Dasar, Aljabar, Teori Set Dasar dan Analisis Numerik Dasar.
Dari sisi praktisi matematika, berbagai topik dalam Matematika (serta banyak cabang sains lainnya) dapat mengambil manfaat secara signifikan dari pemrograman.
sumber
Saya pikir lebih dari apa pun, kesamaan proses berpikir yang digunakan membuat keduanya tampak sangat mirip.
Sebagai contoh, keduanya sangat logis. Jika Anda mengikuti serangkaian langkah atau rumus yang sama, Anda akan selalu menemukan hasil yang sama. Misalnya,
1+1
akan selalu sama dengan2
, danset a = 1
berartia
akan selalu menjadi 1 (sampai Anda mengaturnya ke hal lain)Contoh lain adalah kebutuhan untuk berpikir secara spasial. Dalam matematika, saya menemukan saya sering harus memegang angka di kepala saya dan memvisualisasikan apa yang saya lakukan. Sebagai contoh yang sangat sederhana, saya akan memecahkan masalah matematika sehingga sesuatu seperti
13x13
menjadi13x10 + 13x3
, yang jauh lebih mudah bagi otak saya untuk bekerja dengannya, dan saya perlu melacaknya13x10=130 + 13x3=39
, jadi130+39 = 169
. Kemampuan yang sama untuk memvisualisasikan sesuatu yang tidak terlihat, atau memecah masalah menjadi masalah yang lebih kecil sering diterapkan pada pemrograman.Jadi saya merasa bahwa meskipun Anda tidak perlu memiliki latar belakang matematika untuk program, di mana matematika didefinisikan sebagai melakukan perhitungan dengan angka, Anda perlu memiliki proses pemikiran dan pemahaman yang sama seperti apa yang akan Anda gunakan ketika menyelesaikan masalah matematika.
sumber
Saya kira, sampai saat ini, Anda telah diajarkan unsur-unsur kalkulus dan beberapa trigonometri . Dan Anda menyebut bahwa Matematika. Itu seperti menyebut sepasang kaki "manusia."
Kalkulus tidak ada hubungannya dengan pemrograman, dan lebih erat terkait dengan fisika dan teknik. Anda membutuhkan fisika untuk mesin game dan kalkulus untuk analisis statistik . (Analisis statistik mendorong lebih banyak pekerjaan yang nyaman untuk diakui)
Bagi kami, kalkulus lebih berkaitan dengan pemrograman yang berhubungan dengan dunia nyata. Kalkulus komputasi adalah cabang yang mempelajari seberapa buruk hubungan itu berlangsung sejauh ini. (spoiler: ini akan sangat buruk, tapi kita bisa tetap memeriksanya tanpa batas )
Trigonometri adalah jack gila di kotak yang keluar saat Anda tidak mengharapkannya dan kemudian analisis sinyal , generasi audio , dan banyak hal lain bergantung padanya.
Pergilah ke Aljabar 101 dan Logika 101 , pelajari sejarah Pascal, Leibniz, (ya dia hampir menemukan kalkulus, salah mengerti, berdebat dengan Newton sampai semuanya mulai masuk akal - dan masih memikirkan hal kode biner) dan Babbage dan banyak keraguan Anda akan berkurang. (Definisi Anda tentang Matematika akan selamanya berubah)
sumber
Pemrograman melewati banyak disiplin akademis tradisional.
Matematika, terutama matematika terapan , penting untuk pemrograman karena banyak dari apa yang kita minta komputer lakukan adalah angka-angka. Memahami metode numerik dan cara menerapkan komputasi secara efisien dan tepat adalah salah satu hal yang dilakukan oleh banyak programmer setiap hari.
sumber
Di sini saya akan memberi tahu Anda hal-hal praktis yang pernah saya temui Matematika dalam memecahkan beberapa Masalah Komputer (khususnya dalam domain Internet):
sumber
Masalah dengan pertanyaan Anda adalah bahwa "matematika" dan "pemrograman" adalah subjek yang sangat luas dan mendalam tentang yang ada lebih banyak tahu daripada yang bisa dikuasai siapa pun seumur hidup (tidak berlebihan). Saya pribadi memegang gelar MA dalam matematika. Selama berada di universitas, sepertinya semakin banyak yang saya pelajari, semakin sedikit yang saya ketahui dibandingkan dengan rekan-rekan saya; rasanya jika aku menjadi kurang pintar selama bertahun-tahun. Ketika saya mempresentasikan tesis master saya kepada sekelompok profesor, bahkan sebagian besar dari mereka tampaknya tidak terbiasa dengan apa yang saya pelajari.
Demikian juga, saya sekarang adalah pengembang aplikasi web berbasis database. Jika Anda membandingkan saya dengan seseorang yang melakukan pemrograman bahasa assembler, Anda mungkin menganggap kami sebagai dua profesional yang sangat berbakat, tetapi kami akan memiliki keahlian yang sangat berbeda walaupun kami berdua adalah "programmer".
Ketika Anda maju dalam studi Anda tentang matematika yang lebih tinggi (di luar kalkulus mahasiswa baru), Anda akan menemukan bahwa matematika menanamkan disiplin untuk penalaran abstrak yang akan membantu Anda dengan baik ketika Anda memprogram. Saya pikir disiplin ini sangat penting karena Anda akan berurusan dengan masalah abstrak saat Anda memprogram.
Tentu, dalam pemrograman mahasiswa baru, Anda mungkin akan belajar tentang aritmatika pointer. Anda akan menulis program singkat untuk mengilustrasikan konsep ini dan pemahaman Anda tentang bagaimana ia menggerakkan komputer Anda menuruti kehendak Anda. Namun, mempelajari tentang cara kerja aritmatika pointer dalam abstrak tidak akan membuat Anda pandai menggunakan pointer dalam program nyata. Ketika tiba saatnya untuk mengambil kekacauan 10K baris kode dan membuat beberapa perubahan pada aritmatika pointer, Anda harus dapat bernalar pada tingkat yang sangat abstrak, membuat keputusan strategis untuk menyeimbangkan berbagai kekhawatiran tentang bagaimana perubahan Anda akan mempengaruhi Kode.
Sebagai seorang programmer, Anda harus menyeimbangkan "keterbacaan" kode Anda, kinerja kode Anda, kemudahan penggunaan program yang dihasilkan, di antara banyak masalah lainnya. Anda harus dapat membuat perbandingan yang sangat abstrak untuk menyeimbangkan kekhawatiran ini satu sama lain. Anda akan membuat banyak perbandingan ini setiap hari. Saya bahkan belum memulai tentang manajemen waktu. Anda akan secara abstrak beralasan tentang kemungkinan bahwa sesuatu yang Anda lakukan akan memengaruhi kemampuan Anda untuk melakukan tugas tepat waktu, dan sekali lagi, Anda akan membuat banyak keputusan setiap hari yang akan memengaruhi pekerjaan Anda.
Akhirnya, Anda harus mempertahankan disiplin filosofis Anda untuk dapat mengasimilasi ide-ide dan konsep-konsep baru agar dapat terus berlanjut ketika metodologi dan praktik lama tidak digunakan lagi. Sekali lagi, Anda harus dapat mengevaluasi ide-ide yang datang dan membuat perbandingan abstrak dengan apa yang sudah Anda ketahui.
Singkatnya, pemrograman, seperti yang kita ketahui, tidak banyak berhubungan dengan matematika, seperti yang kita ketahui; tetapi ketika Anda melihatnya pada tingkat abstrak, mereka memiliki banyak kesamaan.
sumber
Matematika menggambarkan (katakanlah) persamaan kubik.
Algoritma menjelaskan bagaimana menyelesaikan persamaan kubik itu.
Membangun itu (atau apa saja) algoritma dengan cara yang dapat dieksekusi oleh mesin pemrograman .
Ilmu komputer adalah analisis algoritme - efisiensi waktu / ruang teoretis, batas kesalahan, dll. Ini banyak dapat dianggap sebagai cabang matematika. Namun perlu dicatat bahwa ilmu komputer dan pemrograman sebenarnya tidak sama. Sangat penting untuk memiliki dasar dalam ilmu komputer jika Anda ingin menjadi programmer yang baik, karena membantu Anda untuk merancang dan alasan yang lebih baik tentang algoritma yang Anda kembangkan. Tapi itu bukan keharusan.
Seorang programmer yang baik mungkin tidak (pada kenyataannya, seringkali tidak) seorang ahli matematika yang baik, dan sebaliknya. Mereka adalah keterampilan yang dapat diidentifikasi secara terpisah.
sumber
Saya telah melihat banyak pertanyaan pada jenis forum ini selama bertahun-tahun di mana masalah sebenarnya terletak pada pemahaman matematika poster yang buruk. Misalnya, siapa pun yang memiliki dasar yang bagus dalam aljabar memahami bahwa Anda tidak dapat membaginya dengan nol. Tetapi saya telah melihat banyak pertanyaan di mana poster itu tidak memahaminya dan kemudian tidak mengerti pesan kesalahan yang pada dasarnya mengatakan "Anda tidak dapat membagi dengan nol." Saya telah melihat banyak pertanyaan di mana jelas poster itu tidak mengerti logika dasar. Saya sudah melihat terlalu banyak pertanyaan di mana konsep aljabar boolean di mana jelas tidak dipahami.
Hanya karena Anda tidak menulis bukti matematika atau langsung menyelesaikan persamaan seperti di buku teks matematika tidak berarti Anda tidak perlu memahami konsep di baliknya. Kebetulan, dalam pengalaman kerja bertahun-tahun, saya tidak pernah bertemu dengan programmer yang buruk yang memiliki pemahaman yang kuat tentang matematika.
Di beberapa bidang Anda menggunakan banyak matematika secara langsung, seperti pemrograman game, pemrograman statistik, pemrograman keuangan, beberapa sistem tertanam. Dalam beberapa contoh ini Anda diberi persamaan yang Anda butuhkan dalam persyaratan dan kadang-kadang tidak. Namun, bahkan ketika Anda diberi persamaan, menerjemahkan persamaan-persamaan tersebut dengan benar ke dalam kode pemrograman mengharuskan Anda untuk memahami persamaan tersebut.
Meskipun Anda dapat bertahan dengan sedikit lebih dari sekedar aljabar dasar dalam aplikasi CRUD dasar Anda, sebagian besar masalah yang lebih menarik dan pekerjaan yang lebih maju melibatkan pemahaman matematika. Jadi mengapa Anda ingin membatasi diri Anda dari awal dengan tidak belajar matematika secara mendalam?
sumber
Dua contoh yang langsung muncul di pikiran adalah:
fungsi - Gagasan menerapkan transformasi ke variabel input untuk menghasilkan variabel output berakar kuat dalam matematika. Gagasan melewati fungsi sebagai parameter ke fungsi lain bahkan lebih. Secara umum, gagasan pemikiran abstrak yang terkait dengan pemrograman paralel dengan matematika cukup erat.
bitMasks - Pendekatan pemrograman umum ini untuk menyelesaikan masalah membutuhkan setidaknya pemahaman dasar aljabar boolean untuk memahami konsep tersebut.
sumber
Dari perspektif pemrogram: Matematika adalah bagian dari pemrograman.
Matematika diterapkan dalam pemrograman:
Ketika bekerja dengan koleksi (array, daftar, peta, dll) dalam pemrograman, maka Anda berurusan dengan implementasi dunia nyata dari abstraksi matematika.
Pemrograman tanpa matematika:
Jika Anda melakukannya
println("Hello World")
, maka fakta bahwa beberapa matematika digunakan untuk menghitung posisi di layar, panjang string, dll, sebagian besar benar-benar tidak relevan.Menggunakan pemrograman untuk matematika:
Menerapkan matematika dan fisika dalam bahasa pemrograman memungkinkan hal-hal seperti desain berbantuan komputer menjadi mungkin.
sumber
Pemrograman biasanya didasarkan pada Model yang biasanya adalah model matematika.
Mari kita ambil contoh untuk membuat Kalkulator Hipotek. Untuk ini, Anda perlu tahu minat apa, interst majemuk, dan sebagainya. Jika Anda tidak memiliki pemahaman tentang matematika yang mendasarinya maka orang lain harus memberikan informasi itu kepada Anda. Biasanya itu adalah tugas programmer untuk melakukan segalanya. Anda selalu dapat mencari bantuan, jika diperlukan.
Ada konsep sederhana dalam matematika yang digunakan secara luas dalam pemrograman. Misalnya ekspresi, persamaan, variabel, mereka sangat digunakan dalam pemrograman. Jika Anda tidak mendapatkannya di Matematika, Anda mungkin bukan programmer terbaik.
Memiliki matematika yang kuat, memberi Anda lebih banyak barang untuk memodelkan pekerjaan Anda. Itu akhirnya membuat Anda seorang programmer yang lebih baik. Misalnya Anda mungkin ingin menggambar persamaan kuadrat di salah satu proyek Anda, dengan cara ini Anda belajar lebih banyak hal hanya karena Anda kuat dalam matematika. Atau Anda menulis program untuk menemukan area lingkaran, memberi Anda lebih banyak pengalaman.
Dalam karier mengajar singkat saya, saya menemukan bahwa jika siswa tidak memiliki latar belakang matematika, mereka hampir hilang ketika melakukan masalah keuangan. Jika mereka kehilangan model, belajar bahasa itu sendiri menjadi lebih sulit dan jujur sangat membuat frustrasi.
sumber
Fondasi teoretis Ilmu Komputer (yang lebih dari sekadar pemrograman) bersifat matematika. Semuanya, mulai dari definisi komputabilitas hingga analisis dan ekspresi algoritme hingga spesifikasi bahasa pemrograman semuanya didasarkan pada berbagai macam matematika. Lihat halaman Wikipedia ini untuk mengetahui jenis matematika yang terlibat.
Sebagian besar yang tidak benar-benar perlu diketahui jika semua yang ingin Anda lakukan adalah sling code. Sejauh matematika terapan berjalan, kecuali Anda pergi ke bidang yang membutuhkan keterampilan angka-angka serius (simulasi fisik rinci, analisis sinyal, analisis keuangan dan prediksi, dll.) Anda mungkin tidak akan menggunakan apa pun yang lebih terlibat daripada aljabar dasar setiap hari.
sumber
Jujur tergantung pada jenis pemrograman yang Anda lakukan.
Jika Anda membuat aplikasi web ringan dengan beberapa logika, Anda mungkin tidak perlu kelas matematika lebih maju yang membutuhkan banyak derajat. Jika Anda bekerja dengan hal-hal yang sedikit lebih berat prosesor, daripada Anda akan membutuhkan lebih banyak matematika. Jika Anda melakukan pekerjaan dengan segala jenis bidang ilmiah, Anda benar-benar ingin menyimpan referensi calc Anda.
Tempat lain di mana Anda akan membutuhkan matematika adalah jika Anda ingin menulis permainan. Saat Anda ingin bergerak secara diagonal, Anda harus mulai melakukan perhitungan yang cermat agar Anda tidak berakhir dengan karakter yang dipercepat jika pindah ke blok ke NE.
Karena itu, Anda tidak perlu belajar matematika, lalu belajar pemrograman. Ini benar-benar valid untuk mempelajari pemrograman, lalu mengambil beberapa matematika tingkat lanjut. Saya mulai coding sebelum saya menginjakkan kaki di dalam kelas Calc atau Trig dan tidak apa-apa. Ketika saya mulai belajar matematika tingkat lanjut, saya menemukan bahwa pengkodean benar-benar membantu saya, karena saya dapat menjelajahi topik lebih banyak dengan mengubah variabel dalam skrip cepat daripada saya bisa dengan pena dan kertas.
sumber
Saya sama sekali tidak ahli dalam matematika! Saya melakukannya dengan baik di HS Geometry, yang semuanya masuk akal bagi saya. Saya menemukan pemrograman dan geometri sangat mirip. Logika Boolean sangat baik dalam benak saya pada bukti geometris.
Lalu ada hal-hal kecil seperti mengetahui bahwa Anda dapat mengontrol berapa banyak kolom dalam satu baris menggunakan operator modulus.
Saya sangat mendukung gagasan untuk menjadi programmer yang baik yang memiliki teman (atau kolega / konsultan) yang merupakan ahli matematika yang baik.
Tentunya jika Anda diberkati memiliki kedua skillset, jalankan dengan itu!
sumber
Jawaban sederhana; Matematika membuatmu cepat . Tentu, Anda dapat google / se / wikipedia masalah koding Anda pergi, tetapi cukup menyelesaikan matematika dan Anda tidak perlu melakukannya . Percaya atau tidak, otak manusia yang terlatih lebih cepat dari google . Selain itu, semakin banyak matematika yang Anda tahu, semakin cepat Anda dapat memahami hasil yang diberikan google / se / wiki kepada Anda, dan semakin sedikit Anda harus menelusuri untuk memahami apa yang orang katakan kepada Anda. Dalam proses menyelesaikan masalah pemrograman Anda, Anda tetap akan belajar matematika, tetapi jika Anda fokus pada matematika, itu akan menjadi proses yang jauh lebih efisien.
Pertanyaan Anda seperti musisi rock yang bertanya mengapa mereka membutuhkan pelatihan musik formal. Apakah mungkin untuk berhasil tanpanya? Tentu. Apakah itu membuat Anda lebih dari seorang badass jika Anda melakukannya? Benar.
Jawaban yang sedikit lebih rumit - Ketika matematikawan dan pemrogram menggunakan kata "solusi" (untuk masalah, yaitu, bukan persamaan - yaitu bukan "akar") - artinya sangat mirip. Belajar memecahkan masalah matematika membantu Anda belajar memecahkan masalah pemrograman.
BTW - dan tidak ada pelanggaran yang ditujukan kepada siapa pun - siapa pun yang mengatakan dia adalah programmer yang baik tetapi dia benci matematika adalah Pembohong Besar yang Gemuk. Apa yang terjadi adalah, mereka dimatikan oleh matematika formal oleh instruktur yang buruk atau perguruan tinggi dan sejak itu mereka merasa "tidak pandai matematika". Siapa pun yang tidak memiliki ketidakmampuan belajar (yaitu siapa pun yang mampu mempelajari bahasa OO) mampu melakukan semuanya hingga dan termasuk Sophomore Calculus.
sumber
Tindakan melakukan Matematika dan 99% Pemrograman memiliki sangat sedikit kesamaan. Matematika tidak harus menjadi programmer yang hebat. Saya telah mengambil beberapa mata kuliah tingkat perguruan tinggi dalam matematika, termasuk tetapi tidak terbatas pada elemen Kalkulus I, II, III aljabar linier, dan beberapa lainnya.
Saya telah menjadi insinyur perangkat lunak selama lebih dari 10 tahun dan jarang diperlukan untuk menggunakan apa pun selain matematika dasar. Ada beberapa pengecualian di mana matematika dibutuhkan: seperti grafik dan bidang lainnya. Tetapi 99% dari pemrograman dan rekayasa perangkat lunak tidak membutuhkan Matematika. Ini membutuhkan pemikiran logis, algoritma, OOP, fungsi, masalah penguraian, dll.
sumber
1) Ketika Anda belajar pemrograman, Anda akan menemukan jargon teknis (yaitu, algoritma). Untuk menganalisis algoritma, kita harus memiliki gagasan tentang sifat fungsi polinomial, logaritmik, dan eksponensial.
2) Berdasarkan aplikasi ilmu komputer, kita harus memiliki ide tentang matematika diskrit dan matematika kontinu untuk menulis solusi yang bermakna. Seseorang dapat lebih memahami tentang ini dengan melalui kursus seperti-
---> Matematika untuk Ilmu Komputer
---> Coding the Matrix: Aljabar Linier melalui Aplikasi Ilmu Komputer .
Untuk pemula, saya merasa bahasa yang diketik dinamis seperti
python
/scheme
adalah bahasa terbaik pertama untuk pemrograman. Bahasa yang diketik statis sepertiJava
/C++
bukan yang terbaik untuk memulai. Opencourseware yang diterbitkan dari "MIT / UOC-Berkeley / Stanford" dapat memandu Anda lebih baik daripada kurikulum perguruan tinggi biasa. Saya yakin Anda!!!sumber
Saya pribadi akan mengatakan, itu tergantung pada tingkat pemrograman yang terlibat. Model data dan korelasi antara mereka, algoritma pemrograman yang terlibat. Sebagai contoh: untuk menulis program yang menghasilkan "Hello World", saya melihat tidak ada persyaratan untuk membiasakan seseorang dengan Matematika Tinggi. Tingkat keterlibatan Matematika akan tergantung pada tingkat kerumitan masalah yang perlu dipecahkan secara sistematis.
sumber
Hanya pengalaman saya, tidak ada lagi:
Saya bukan ahli matematika. Saya bukan jenius, hanya autodidak.
... dan setelah bertahun-tahun, saya sadar daripada saya bekerja dengan intuisi
Pertama saya belajar Pilih (sistem mati) dari awal (sendirian dengan dokumentasi kertas dan sampel),
... setelah C, C ++ untuk bersenang-senang, dan Java untuk bekerja.
Seperti yang Anda katakan tentang itu, saya dapat mengatakan bahwa belajar bahasa ini bukan masalah matematika (bahkan jika aljabar dasar / minimalis membantu Anda,) tetapi yang logis .
Sekarang banyak alat (seperti Eclipse) membantu dan memperbaiki Anda: Anda harus fokus pada apa yang ingin Anda lakukan , dengan hanya 52 kata yang dilindungi undang-undang ... dan banyak perpustakaan yang tidak berfungsi untuk Anda.
Jadi, jika Anda menyukai bahasa, pilih proyek Java, pelajari Pola Desain, UML, pahami JVM dan bagaimana menggunakannya dengan Bigloo dan Scala, pahami berulang kali selama 10.000 jam.
Pengalaman di Jawa memberi Anda pekerjaan bergaji tinggi, dan untuk waktu yang lama dalam proyek-proyek industri besar, dan Anda akan dapat beralih ke lingkungan lain karena Anda dapat berbicara informatika , bukan matematika .
Jika memahami bahasa (kata-kata, makna, konsep dan ilmu-ilmu logis lainnya yang disembunyikan seperti semantik, ontologi, ..) adalah tujuan yang baik untuk pribadi manusia Anda, untuk seumur hidup Anda, Anda bisa mulai sekarang .
Kalau tidak, coba cara lain.
Salam,
Claude
sumber
Seseorang hampir mengenai kuku di kepala di atas. Pemrograman adalah matematika. Lebih khusus lagi, pemrograman adalah cabang dari logika matematika yang disebut teori komputabilitas atau teori rekursi.
Cabang matematika lainnya terlibat secara langsung, khususnya bahasa formal dan teori automata. Ini membantu menggambarkan ekspresi reguler, digunakan dalam pencocokan pola, dan tata bahasa formal, yang digunakan untuk menggambarkan dan menguraikan bahasa pemrograman.
Siapa pun yang mengatakan bahwa pemrograman bukan matematika juga tidak tahu apa yang mereka bicarakan, atau memiliki motif tersembunyi, seperti maksimalis "Kekayaan Intelektual", yang berharap mendapat untung dengan mendapatkan paten pada suatu algoritma atau matematika dasar lainnya fakta atau penemuan.
Beberapa referensi untuk pemrograman sebagai matematika, dan akibatnya tidak tahu apa yang Anda bicarakan:
Program adalah Bukti: Logika Abad 19 dan Komputasi Abad 21
Program adalah Bukti: Model dan Jenis dalam Kalkulus Lambda
Artikel Korespondensi Curry-Howard Wikipedia
Tentang Efektivitas Logika yang Tidak Biasa dalam Ilmu Komputer
Efektivitas Logika yang Tidak Masuk Akal
Ya, itu berat pada bagian "logika" dari logika matematika, tetapi matematika secara umum diakui sebagai beberapa aksioma, dan konsekuensi logikanya seperti yang dikembangkan melalui logika orde pertama.
Sejauh mengatakan sebaliknya dan menjadi "IP" maksimal untuk uang:
Cara mematenkan algoritma di AS . Algoritma tidak dapat dipatenkan, tetapi paten diberikan pada algoritma dengan tidak menyebutnya sebagai algoritma. Tidak sulit menemukan banyak materi di web yang menunjukkan, atau mencoba menjelaskan, kontradiksi itu.
sumber
Matematika adalah segalanya yang berkaitan dengan pemrograman. Misalnya, dalam pemrograman game Anda perlu menggunakan matyhs untuk fisika dan melakukan lebih sedikit semuanya. Untuk memindahkan posisi x pemain di Jawa, Anda akan melakukannya
int x = x + speed * deltaTime
atauint x = x - speed * deltaTime
Tetapi Anda mungkin mengatakan bahwa itu adalah matematika dasar, jadi mari kita beralih ke hal-hal yang lebih maju. Ada algoritma untuk pemain catur peringkat yang disebut Algoritma Elo.Jika Anda masih berpikir bahwa ini dasar maka coba ini. Bagaimana Anda menghitung usia seseorang ketika Anda diberikan hari kelahiran, bulan, dan tahun. Kurangi tahun lahir dari tahun ini dan kemudian periksa apakah bulan kurang dari bulan ini dan jika tidak kurangi 1.
Ini bukan sihir, ini adalah kerja keras dan matematika yang bagus.
sumber
Ok, saya mungkin akan mendapatkan banyak suara untuk ini, tetapi pemrograman dan matematika adalah dua hal yang sama sekali tidak berhubungan. Seseorang bisa menjadi pengembang yang luar biasa hanya dengan mengetahui dasar-dasar seperti penambahan, perkalian dan operasi logis dasar.
Sebagian besar pengembang tidak akan menyelesaikan persamaan tunggal selama karir profesional mereka, dan hal-hal seperti notasi O besar dapat dipahami dengan cara non matematis juga. Anda hanya berpikir tentang barang-barang itu, bayangkan potongan-potongan terlintas di kepala Anda, dan voila, Anda bisa tahu seperti apa besarnya barang-barang itu, jika seseorang menjelaskan kayu dan kekuatan itu.
Terkadang matematika dapat membuatnya sederhana, atau bisa membuat Anda merasa bangga bahwa Anda telah membuktikan sesuatu, karena Anda dapat memperluas arti pemrograman ke domain matematika melalui penamaan matematika diskrit dan semacamnya, tetapi mempelajari banyak persamaan diferensial dan integral, dan bagaimana membuktikannya, apakah IMHO bukan ide terbaik apa yang harus dilakukan jika Anda ingin sukses sebagai seorang programmer.
Setidaknya saya belum menyentuh matematika selama 10 tahun, saya bertengkar dengan profesor matematika saya sepanjang waktu, dan ketika saya membutuhkan matematika untuk rendering realtime, saya belajar semuanya dari sudut pandang programmer, tanpa membuktikan teorema apa pun, dan bagi saya itu sederhana dan mudah dipahami dibandingkan dengan semua profesor matematika di mana menempatkan di kepala kita dengan komentar "Anda tidak bisa menjadi programmer yang baik jika Anda tidak tahu matematika". Tentu Anda bisa, mudah!
Saya sekarang tahu hal-hal matematika, sehingga saya bisa berbicara dengan programmer latar belakang matematika dengan semua diferensial dan hal-hal log, tetapi hanya untuk alasan sehingga mereka tidak akan pingsan. Karena hal itu tidak berguna 99,9% dari waktu, dan ketika itu, dapat dipelajari 1000x lebih efektif dari sudut pandang programmer.
Heck, programmer membutuhkan setidaknya 5 tahun untuk menguasai bahasa pemrograman + kerangka kerja + praktik terbaik. Mengapa mereka harus belajar bagaimana membuktikan teorema? Siswa matematika mengerjakan soal-soal matematika, programmer menjalankannya, begitulah seharusnya bekerja.
sumber