Öncelikle: Ben bir matematikçiyim - profesyonel biriyim (bunun için matematik dersi alırım). Ben değil bir programcı. Bazı programlama yapıyorum ama kesinlikle Cargo Cult çeşidinden ( https://tex.stackexchange.com/q/451/86 ve benim cevabımla ilgili ilk yoruma bakınız ) ve beni normalde buna getirecek türden hiçbir şey yapmadım. site (gerçekten, buraya TeX sohbet odasında bir link gördükten sonra bu cevabı göndermek için buraya kaydoldum).
Cevabımın özeti şudur: Matematik Programlamadır .
Geçenlerde matematik dersini matematiksel olmayan bir öğrenciye verdim. Programlama bölümü onlardı. Bunun muhteşem olduğunu düşündüm! Sonunda , temel fikirleri çoktan anlayan ve matematik yapmak için ilkel bir araç setine sahip olan insanlara matematik öğretebilecektim . Kaç tanesinin bir program yazdığını ve 0 ile 1 arasında bir yerde bir cevap aldıklarını sorduğumda inanılmaz derecede hayal kırıklığına uğradım.
Devam etmeden önce birkaç şeyi açıklığa kavuşturmalıyım. Doğrudan programlama ile ilgilenen ve algoritmaları değerlendirmek ve dilleri ve benzerlerini sınıflandırmakla ilgili olan matematik alanları vardır. Ben onlardan bahsetmiyorum. Ayrıca tüm matematiği bilgisayar tarafından değerlendirilebilecek biçimsel bir dile çevirmeye çalışan bir program var. Bu, bahsettiğim şeye biraz daha yakın, ama buna odaklanmak bile söylemeye çalıştığım şeyin ana bölümünü özleyecektir. Yaptığım matematik ve yaptığım programlama konu ile neredeyse tamamen alakasız. Aralarındaki bağlantı farklı bir seviyede.
Başlamak istediğim yer ana soruya yapılan yorum:
Eğer bu matematik yapıyorsa, o zaman tüm insan aktivitesi bir matematik şeklidir. Eğer durum buysa, matematik kelimesinin bir anlamı yoktur, çünkü bir aktiviteyi diğerinden ayırmak için kullanılamaz.
Evet, bu matematik yapıyor. Ama "matematik" hala yararlı bir kelime çünkü şarkıların söylediği gibi, "Yapacağın şey değil, yapman gereken bu.". Matematiksel olarak bir şeye yaklaşırken matematik yaptığımı söyleyebilirim . Bazen, bu "zor çekirdek" matematiğidir: tanımları formüle etmek, teoremleri kanıtlamak. Bazen değil. Bazen aptalca küçük programlar yazıyor, böylece çocuklarım heceleme sözcüklerini öğrenebiliyorlar.
Bu, programladığımda matematiğin bana yardımcı olduğu şeydir:
Soyutlama Bu muhtemelen matematik en önemli transfer beceri. Bununla, tüm gereksiz şeyleri ortadan kaldırma ve önemli özelliklere odaklanma kabiliyetini kastediyorum.
Perspektif Tüm öğrencilerimin öğrenecekleri yalnızca bir şeyi seçebilseydim, bu şöyle olurdu: Bir bakış açısını soruna uyacak şekilde değiştirme yeteneği. Bunu genellikle lineer cebirde temel değişim formülleriyle (korkunç matrislere ve korkunç komplikasyonlara neden olan) tedavi ediyoruz, ancak bundan çok daha uygulanabilir. Kalbinde, bir şeyin size tek bir şekilde sunulmasından dolayı, onunla çalışma şekliniz olması gerekmiyor. Bu, kişinin görüşünü sunum şeklinden ayırır. Bu son derece pratik olabilir: hepsi faydalı ya da verimli bir şeyler yapmakla ilgilidir.. Eğer bir vektör listem varsa ve onları x koordinatlarının ve y koordinatlarının bir listesi olarak saklamak daha verimli ise, öyle olsun .
Forma göre fonksiyonlara karşı form ; Bir şey çok farklı şekillerde sunulabilir eğer o zaman belirli bir sunum olduğunu söylemek artık adil şey. Yine o şarkıyı misquote için: "Bu değil senin ne öyle ne yapmak konularda olduğu".
Devam edebilirdim ama bunlar akla ilk gelenler.
Şimdi, muhtemelen şu ana kadar yazdıklarımın pek çok (olumsuz) tepkisi var. Biri "Bu matematik değil, sadece iyi bir anlamdır" olacak. (ya da kötü anlamda) yukarıdaki sözüme atıfta bulunduğumda, "tüm insan faaliyetlerinin bir matematik biçimi olduğu" fikrini kabul ederek. Bir diğeri, "Bu, soruda ifade edilen matematik türü değil" olacaktır. Bu neredeyse kesinlikle doğru ve burada “En azından 10 yıldır matematiğe dokunmadım” diyen kişiyle gerçekten daha fazla sempati duyuyorum. Elbette yanılıyor, elbette, 10 yıldır matematik yapıyorlar çünkü bir program yazdıklarında matematik yapıyorlardı . Sadece farketmediler.
Aslında programlarımda bazı "gerçek matematikler" kullanıyorum. Geçenlerde, verilerime uygulamak zorunda olduğum tahminleri ve diğer dönüşümleri bulmak için bazı matematiğin kullanılmasını içeren eğlenceli bir 3D şekil gezginini kodladım. Kuaternleri kodlayan kendimi bulmak için çok eğlenmiştim! Ama elbette, dahil olan matematik, çalışırken çalışırken yaptığım matematikle karşılaştırıldığında önemsizdi. "Zarfın arkası" malzemesiydi. Bu tür matematik, daha sonra ihtiyaç duyduğunuzda topladığınız hissine katılıyorum ve Wikipedia'da bulabileceğinizden daha karmaşık bir şeye ihtiyacınız olursa, o zaman sizin için yapacak gerçek bir matematikçi bulursunuz. Ancak, sırayla o olabilir size öğrenmiş gerek daha sonra ihtiyacınız olduğunda onu almak şey. Bu şey gerçekte kullandığınız hiçbir şey olmayabilir, ancak bir şeyin bir şey olduğunu, yaşamda daha sonra kullandığınız şeyi almayı kolaylaştıracağını öğrendim. İşte bu noktada Kodlayıcı ile aynı fikirde değilim: herhangi bir matematiği kullanacaksanız bazı matematik öğrenmeye ihtiyacınız var ve bunu matematiksel taraftan öğrenmeniz gerekiyor (bu da teoremleri ispatlamak anlamına gelmiyor).
Ve nihayet "Matematik Programlama" dır. Tüm bunları iyi bir programcı olmaktan öğrenebilirsiniz. Bunları öğrendiğim eğer, sen bir vektör uzayında bir vektör bahsederken o zaman sınıfın sadece bir örneği olduğunu anlayacaktır çünkü çok daha kolay matematik bulacaksınız Vector
ait her şeyi yapabileceği anlamına gelir Vector
yapar etmek bu örnek: topla, çıkart, ölçeklendir, vb. Bu yüzden matematiği programcılara öğretmeyi çok isterim. Ancak, bir matematikçi olarak konuşursak, ilk söyleyeceğimBunlardan, "Soyutlama", matematikten öğrenmek, programlamaktan daha kolaydır çünkü matematik, soyutlama arayışıdır. Ne zaman bir davranış görsek, eğitimimiz her zaman "Bu şekilde davranmasını sağlayan şeyle ilgili nedir? Benzer olan başka bir şeyi aldıysam, aynı şekilde davranır mıydı?" böyle davranmayı bırakması için kaybetmem gerekecek mi? " (Bunu uç noktalara götürmek "kırkayak matematiğe" yol açar - terimi arayın). Fakat bunu (sadece) “gerçek dünya” nesnelerle (her ne olursa olsun) yapmayız, bunu zaten soyutlanmış olan şeylerle yaparız.
Bu yeterince uzun sürdü, o yüzden klasik matematikçi şakalarından birine yaklaşmama izin verin:
Hem matematikçi hem de fizikçi, 24 boyutlu uzayı içeren bazı yeni model seminerlerine katıldı. Daha sonra tartışıyorlardı ve fizikçi şöyle dedi: "Bu gerçekten zordu. Yani, 24 boyutlu uzayı nasıl görselleştirir?" matematikçi cevap verdi: "Ah, kolay. Sadece n boyutlu uzayı görselleştirin ve sonra n = 24 ayarlayın."
2012-03-2 Eklendi
Bu cevap hakkında çeşitli görüşler ifade eden çok az yorum vardı. Bunlar, bir moderatör tarafından cevabımda onları dahil etmeye (veya onlara cevap vermeye) çalıştığım anlayışı üzerine silindi.
Ancak yapabileceğimden emin değilim. Bu yorumları ve bu sayfadakileri okuyarak, matematiğin gerçekte ne olduğu konusunda büyük bir yanlış anlama olduğu sonucuna varabilirim. Dahası, açıklamak için yeterince yetenekli hissetmiyorum. Neyse ki, birisi zaten Lockhart's Lament ile bağlantı kurdu, bu yüzden bunun açıklamasını erteleyeceğim. Bunu farklı bir şekilde koymuş olsam da (bilimsel bir ortamda büyüdüğümde matematiğin deneysel doğasına daha fazla vurgu yapardım), daha iyisini koyabileceğimi sanmıyorum .
Hala bir şeyler ekleyebileceğimi düşünüyorum. Matematiğin ne olduğu ile ilgili yanlış anlamaların yanı sıra, "matematiği yapmanın" ne anlama geldiği konusunda da yanlış anlamalar vardır. Neredeyse çelişkili iki duruş görüyorum:
Matematik denklemler ve formüllerle ilgilidir. Bu yüzden, onu incelemeye gerek yok, çünkü Wikipedia var (bu neredeyse Euler'ın Diderot'a olan kıyamet mücadelesinin karşıtı ).
Matematik teoremler ve tanımlar ile ilgilidir. Dolayısıyla, programların hiçbir şey kanıtlamadığı için çalışmaya gerek yoktur (ki bu, burada en çok ... yanlış yanılgı eklemek kadar yanlış bir şeydir).
İki duruş birbiriyle çelişse de aynı yerde kalırlar: Herhangi bir matematiği öğrenen bir programcının anlamı yoktur - ve en iyisi bir matematikçiden değil! Sonuçta, hangi do onlar herhangi bir şey hakkında bilmek? Bir programcının gerçekten bilmesi gereken her şey Vikipedi'de bulunabilir veya başka bir kişiyle sınırlandırılabilir.
Yukarıda kendimi bir Kargo Kültü Programcısı olarak tanımladım. İddiaya girerim çoğunuz kendinize özel bir kıkırdama vardı ve “Ah evet, bahse girerim programlarınızın neye benzediğini biliyorum” demiştir. Muhtemelen biraz kendini beğenmiş ve üstün hissettin (yine de kendini beğenmiş ve üstün hissetme konusunda kötü hissettiğinden eminim ).
Yukarıda tarif ettiğim şey, Kargo Kültü Matematiği.
Öyleyse, matematiğin nasıl çalıştığını anlamak için biraz matematik öğrenmeniz gerektiğini söylediğimde, yazdığım kodun bir kısmını görürseniz, aynı sebeple söylüyorum: "Hayatınız ne kadar kolay Kes ve yapıştır kodunu StackOverflow uygulamasından durdurursanız ve düzgün bir şekilde nasıl yapacağınızı biraz öğrendiyseniz, "
En önemlisi, yine de, bunu matematikçilerden öğrenmeniz gerektiğidir. Neden öyle? İşte bir benzetme. En usta olduğum dil TeX. (Gerçekten her şeyi söylüyor!). Şimdi, TeX hakkında biraz daha fazla şey öğrenmek istediğimi varsayalım ve Don Knuth kasabada ve TeX hakkında bazı dersler vermeyi teklif etti. Ya da sadece Wikipedia'da okuyabilirim. Ya da belki Perl ve Larry Wall, ya da C # (doğru olan bu mu?) Ve Jon Skeet. Bu insanlar en iyi öğretmenler olmayabilir , ama bildikleri miktarda telafi ediyorlar!
İşte matematikçiler budur . Gerçek dili yazan ve kullandığınız kütüphaneleri yazan kişi biziz. Tabii ki, yok olması bir teoremi ispatlamak için bilmek - Eğer bir kütüphane yazmak için gitmiyoruz! Ancak, nasıl düşündüğümüz hakkında biraz şey biliyorsanız, o zaman kütüphaneyi neden yaptığımız gibi yazdığımızı anlamanıza yardımcı olabilir ve eğer bunu daha iyi kullanmanıza yardımcı olabileceğini anlarsanız.
Vikipedi'deki denklemlere bakmak ve Poincaré varsayımını kanıtlamak arasında bir orta yol var, tıpkı - Lockhart'ın ağrısına atıfta bulunmak gibi - "Gerçekten sanat hakkında pek bir şey bilmiyorum ama neyi sevdiğimi biliyorum" arasında bir orta yol var. ve Monet olmak, ve "'HERHANGİ' anahtar nerede?" ve Don Knuth olmak. Eğer hala üniversitedeyseniz, kendi alanlarında uzman olan ve bir sebepten dolayı zamanınızı size açıklamak için zaman harcamak isteyen insanlardan öğrenme fırsatı bulursunuz.
Biraz genişletmek istediğim bir diğer nokta, bir programcı olarak neden biraz daha fazla matematik öğrenmekten korkmamanız gerektiğiydi. Derin Bağlantılar ya da fayda değil. Bir bilgisayarı programlama yeteneğiniz doğrudan matematik öğrenmenize yardımcı olabilir. Sadece birkaçından bahsetmek istiyorum.
Değişkenleri anlamak. Pek çok insan "doğal bir sayı olsun ..." gibi basit ifadelerle şaşırıyor. Veya "epsilon> 0" yazsın. Matematikte bir değişkenin kapsamını hatırlamanın önemli olduğu yerler vardır . Bunların hepsi programlamada yaygındır. Bir matematiksel ifadeyi bir programa çevirmeyi öğrenin ve neyin ne olduğunu takip etmeyi çok daha kolay bulacaksınız.
İspatın niteliği. Daha önce bir test veya başka biri tarafından kullanılacak bir program yazdıysanız, ispatların özünü anlarsınız. Bunu yaptığınızda , kullanıcının ne koyduğunu bilmek zorundasınız , onunla başa çıkabileceğinizi bilmelisiniz (buraya zorunlu xkcd referansını ekleyin). Hepsi bir kanıtı! Bu bir gösteri ne olursa olsun "kullanıcı / evren" koyar, deyim düzenleyecek. Deneyciler “Normal şartlarda işe yararsa doğru, doğru” ya da programcılara yaslanacaklar;
KURU. Bunu kırdığım için üzgünüm, ama biz değil, biz icat ettik. Binlerce yıldır "kendimizi tekrar etmiyoruz" demiştik. Bu yüzden Euclid’in elementlerinin bir kopyasını raflarımda bulunduruyorum ve yine de kullanışlıdır .
Ve dahası var. Programlama hakkında biraz daha fazla şey bilseydim, “Programcılar İçin Matematik” adında, “Programcıların bilmesi gereken matematik”, “herkesin bilmesi gereken, ancak programcılar için optimize edilmiş matematik” dersi vermek olan bir kitap yazardım. . Ama muhtemelen yazmak için programlama konusunda asla yeterince bilgim olmayacak - biri benimle işbirliği yapmayı teklif etmedikçe!
Onu orada bırakacağım. Muhtemelen daha fazla düşünürsem, yazdıklarımı değiştirirdim; umarım daha iyi açıklardım. Bir ay sonra bile onun parçalarına katılmıyorum. Herhangi biri daha fazla tartışmak veya başka bir yorumda bulunmak isterse, buradaki yorumlarda bunu yapmamak en iyisidir. Beni nerede bulacağını biliyorsun .