Matematiğin programlama ile ne ilgisi var? [kapalı]


89

Yazılım geliştirme alanında diplomaya yeni başladım. Şu anda temel Java ile başlıyoruz (bu yüzden söyleyeceğiniz en aşağıdan itibaren) - bu iyi, Java'da "Merhaba Dünya" nın nasıl yapılacağını bilmek dışında hiçbir programlama deneyimim yok.

Matematiğin kodlamaya uygun olduğunu duymaya devam ediyorum, ama nasıl? Hangi genel örnekler matematiğin ve programlamanın birlikte nasıl yürüdüğünü veya birbirine nasıl güvendiğini gösterir?

Sorumumun belirsiz olduğu için özür dilerim, bir kod maymunu öğrencisi olarak girdiğim dünya hakkında kaba bir fikir edinmeye başlıyorum.


49
Programlama olduğu matematiği. en.wikipedia.org/wiki/Discrete_mathematics
SK-mantık

25
@Dave, bu yüzden cevap olarak değil yorumda bir link verdim.
SK-mantık

7
@FiascoLabs, bundan daha da ötesi - dil yapısı ve mantığı, matematiğin alt alanlarıdır. Programlama matematikten başka bir şey değildir.
SK-mantık

19
İlişkili olmayan bir notta, Java ile başlamak "sağdan aşağı" değildir.
Matt H,

5
@ CharlesE.Grant, birçok matematik öğrencisi aynı şeyi yapıyor (ve yine de testlerini geçiyor).
SK-mantık

Yanıtlar:


137

Ö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:

  1. Soyutlama Bu muhtemelen matematik en önemli transfer beceri. Bununla, tüm gereksiz şeyleri ortadan kaldırma ve önemli özelliklere odaklanma kabiliyetini kastediyorum.

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

  3. 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 Vectorait her şeyi yapabileceği anlamına gelir Vectoryapar 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:

  1. 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ı ).

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

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

  2. İ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;

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


19
Bu SE'de okuduğum en iyi cevaplardan biri; BTW, orada olduğunu "Programcılar için Matematik" nin büyük bir kitap; Buna Beton Matematiği denir ve TeX'in yazarı Donald Knuth tarafından ortak yazılmıştır. Bir kopyasını aldım ve bu harika. Senin tersin gibi hissediyorum; Matematik dersinde kavramları anlamanın en iyi yolunun (benim için) benim için yapacak bir program yazmak olduğunu anladığımda programlama konusunda ciddi oldum. Tabii ki, o zaman el ile eziyet hesaplama yapmak yerine programı kullanmak istedim ve matematik öğretmenlerim beğenmedi.
Jason Lewis

Dostum, bunun için +100.
Barry Brown

2
Sadece bunu yenilemek için kayıtlı
leo

Kesinlikle. Matematiğin size öğrettiği analitik düşünce olmadan iyi programlayamazsınız.
Fiasco Labs

1
Programlamanın matematiği hakkında iyi bir kitap var mı (matematiksel olarak programlamaya bakmak)?
14'te

27

O kadar yakından ilişkili değiller . Programlama için, matematik hakkında bilmek önemlidir - özellikle de algoritma performansı ile ilgili dallar, ama basit olan şudur ki, örneğin, Singletons'ın korkunç derecede kötü bir fikir olduğunu söyleyecek bir matematik dalı yoktur. ya da ne zaman kompozisyondaki kalıtımın lehine olup olmadığına ya da gerçekten bu esnekliğe ihtiyaç duyup duymayacağınız ve kendinizi tekrar etmemeniz ve onlarca başka temel programlama gereksiniminin olup olmadığı.

Matematik olabilir programınız ne ifade edebilmek, ancak kesinlikle size bu konuda gitmek için en sürdürülebilir, insan tarafından okunabilir, uygulanabilir bir yol söyleyemem.


6
1) Kendi başına singletonlarda yanlış olan bir şey yoktur, 2) algoritmik bilgi teorisi, biçimsel diller ve terimbilimsel anlamlar, bir nedenden dolayı endişelendiğiniz basit şeylerle doğrudan ilgilidir (programlama için çok önemli değillerdir). Genel olarak).
SK-mantık

19
Deneyiminiz o zaman biraz sınırlı olmalı. Singletons bir etki alanı modelinin bir parçası olduğu sürece zorunludur ve kaçınılmazdır. Etki alanı modelinin nasıl oluşturulacağı matematiksel bir sorundur, başka bir şey değildir. Ve evet, biçimsel diller teorisinde cahil olanlar korkunç modeller ve berbat diller üretiyorlar.
SK-mantık

10
@dave: Bu yöntemdeki tehlike, ne kadar aptal olursa olsun, çılgınca farklılaşan birini belirterek sizi mantıklı, iyi niyetli bir pozisyondan uzağa eğebilir. Ortalama almak, argümanları değerlendirmek için kullanışlı bir alternatif değildir.
Michael Borgwardt

4
@ SK-mantık: Siz ikiniz "Singleton" ın tam olarak ne olduğuna dair farklı görüşler hakkında konuşmanız mümkün mü? Bana öyle geliyor ki, SK-mantığı bir sistemde belirli bir varlığın yalnızca bir örneğinin olması gibi soyut bir fikirden bahsediyor, ki bu da tam olarak gerekli olan şey. Ne yazık ki bu soyut kavram, kamu statik fabrika yöntemine sahip olmanın korkunç derecede kötü uygulama detayıyla yakından bağlantılıydı; çünkü GoF kitabı, böyle bir Singleton'a nasıl erişilebileceğinin bir örneği olarak verdi.
Michael Borgwardt

5
Lütfen daha fazla değil Kapalı Konu tartışma re Singtons
mattnz

20

Matematik ve programlama iki şekilde ilişkilidir.

Birincisi, matematik bilgisayar programları hakkında akıl yürütme için kullanılabilir. "Giriş verilerim değiştikçe programımın çalışma süresi nasıl değişecek?", "Programımın sorunuma bir cevap bulması garanti ediliyor mu?", "Programım olabileceği kadar verimli mi? "," Programımı daha hızlı yapmak veya daha az bellek kullanmak için nasıl yeniden düzenlemeliyim? " Genelde bu gibi dersleri hesaplama dersinde, algoritmaların tasarımında ve bilgisayar dili tasarımında üst bölüm derslerinde ele alıyorsunuz.

Matematik ve programla ilgili ikinci yöntem, matematik problemlerini çözmek için programlamanın kullanılmasıdır. Bu önemlidir, çünkü “sıradan yaşam” ın birçok sorunu aslında matematiksel problemler olarak yeniden ortaya çıkabilir ve daha sonra bir bilgisayarda çözülebilir (yaklaşık olarak). Bu tür konular, neredeyse tüm kurslarınızda, özellikle de ayrık matematik ve matematiksel modelleme derslerinde gösterilecektir.


Matematik, programınızın bir cevap bulacağını garanti etmenize yardımcı olamaz. Bu mümkün olmayan Halting Problemini çözüyor olacaktı.
DeadMG

6
@DeadMG İsteğe bağlı programlar için imkansız. Belirli bir programın bazı durumlarda sonlandırdığı veya sonlandırmadığı çok iyi bir şekilde kanıtlanabilir.
Luc Danton

6
@DeadMG, Halting sorununun yaygın bir yanlış anlaşılması. Durma sorunu, belirli bir programın durup durmadığını ispatlayamayacağınızı söylemez, durup durmamaya karar vermek için tüm programlara uygulanabilecek tek bir algoritma veya kanıt yoktur. Örneğin, bkz . En.wikipedia.org/wiki/Halting_problem ve programmers.stackexchange.com/questions/125882/… .
Charles E. Grant,

Aaaah. Benim hatam öyleyse. Aptalca oylama kilitlendi ... Gönderiyi düzenleyebilseydin kaldırmayı kaldırabilirim
DeadMG

4
@DeadMG, tipik programlama görevlerin çoğu bir Turing-tam dilini gerekmez bilincindeyiz hiç ? Ve davaların geri kalanı için, neredeyse her zaman özel bir durma kanıtı vardır.
SK-mantık

12

Bir matematik eğitiminin bilgisayar bilimi için önemli olduğu iki spesifik örnek şunlardır:

1) İlişkisel hesaplamanın kullanıldığı ilişkisel veritabanları .

İlişkisel hesap, veri tabanı için ilişkisel modelin bir parçası olan ve veri tabanı sorgularını belirtmek için bildirimsel bir yol sağlayan iki hesaptan oluşur; Bu, aynı zamanda ilişkisel modelin bir parçası olan ilişkisel cebirin aksine sorguları belirlemek için daha prosedürel bir yol sağlar.

İlişkisel cebir, bazı Örnek Kitaplar sağlayan kitapçıların telefon numaralarını ve adlarını almak için şu adımları önerebilir:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

İlişkisel hesap, açıklayıcı, bildirimsel bir yöntem oluşturur:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Bazı Örnek Kitaplar.

İlişkisel cebir ve ilişkisel hesap esasen mantıksal olarak eşdeğerdir: Herhangi bir cebirsel ifade için hesapta eşdeğer bir ifade vardır ve bunun tersi de geçerlidir. Bu sonuç Codd teoremi olarak bilinir.

Bir sonraki alan yapay zeka (AI) ve makine öğrenmesidir .

Bunların nasıl kullanıldığına bir örnek olarak, udacity'nin CS 373 sınıfına bir bakın: ROBOTİK BİR ARAÇ PROGRAMLAMA .

Açıklama: AI'daki en önde gelen uzmanlardan biri tarafından verilen bu sınıf, size Yapay Zeka konusunda temel yöntemleri öğretecektir, bunlara aşağıdakiler dahildir: olasılıkla ilgili çıkarsama, bilgisayarlı görü, makine öğrenmesi ve planlama, hepsi robotik odaklı. Kapsamlı programlama örnekleri ve ödevleri bu yöntemleri kendi kendini süren otomobillerin yapımı bağlamında uygulanacaktır. Alanında önde gelen araştırma laboratuvarlarını video aracılığıyla ziyaret etme şansını yakalayacak ve Stanford ve Google'da kendi kendine sürüş arabaları üreten bilim adamları ve mühendislerle tanışacaksınız.

Önkoşul: Öğretim elemanı programlama bilgisine sahip olacak, tüm programlama Python'da olacaktır. Olasılık ve doğrusal cebir bilgisi yardımcı olacaktır.

1. HAFTA:

Olasılığın temelleri Parçacık filtreli araba lokalizasyonu

HAFTA 2:

Gausslar ve sürekli olasılık Kalman filtreli diğer arabaları takip etmek

3. HAFTA:

Görüntü İşleme ve Makine Öğrenmesi Sensör verilerinde nesneleri bulma

4. HAFTA:

Planlama ve arama A * arama ile nereye gideceğinizi belirleme Dinamik programlama ile en uygun rotaları bulma

5. HAFTA:

Kontroller PID ile direksiyon kontrolü ve hız kontrolü

6. HAFTA:

Hepsini bir araya getirmek Kendi kendini süren bir arabanın programlanması

7. HAFTA:

Final Sınavı Sınavı bilginizi sınayın


Sanırım bu AI alemine giriyor ama çoğu kişi bu terim kullanıldığında gökyüzü resminde bu pastayı düşünüyor. Her neyse, gerçek dünyayı simüle eden hemen hemen her program neredeyse her zaman daha gelişmiş bir matematik formu gerektirir. Ayrıca, sensörlü herhangi bir sistem hemen hemen her zaman bir tür ileri matematik gerektirir.
Dunk

11

Bilimsel uygulama geliştirme, Oyun programlama, gerçek zamanlı sistemler, simülasyon sistemleri ve bu gibi uygulamalar için Matematik gereklidir. Sonuçta, programlama sorunları çözmek için matematik ve bilimi kullanır. Öte yandan, kullanıcıların veritabanına kaydetmeleri için kullanıcı bilgilerini toplayan bir uygulamayı programlamak, yüksek düzeyde matematik gerektirmez. Bununla birlikte, tüm programcılar Temel Sayı Teorisi, Cebir, Temel Küme Teorisi ve Temel Nümerik Analizden faydalanabileceklerdir.

Matematik pratisyeni açısından, Matematikteki farklı konular (ve diğer birçok bilim dalının yanı sıra) programlamadan önemli ölçüde yararlanabilir.


Katılıyorum. Çok fazla işletme gelişimi yapıyorum ve kesinlikle çok yardımcı olabileceğimi bilmeme rağmen, çok fazla gelişmiş matematik kullanmaya ihtiyacım olmadı. Her programcının en az Matematik 1 alması gerektiğini söyleyebilirim. Diğer programlar Fourier Dönüşümleri, istatistiksel modeller ve 3B programlama gibi şeyleri sıkça matrisler kullanarak kullanabilir.
Makotosan

@Makotosan, yorumunuz için teşekkür ederiz. Bununla birlikte, matematik, çok ilginçtir; ancak, bir programcının sahip olduğu kısa süre göz önüne alındığında, birisinin verimliliğini gerçekten artıran şey için çaba harcanır. Ekstra bilgi, parasını ödeyebilenler için lüks olur.
NoChance,

Matematiğin yalnızca programınız için ihtiyaç duyulan alan bilgisi olduğunu düşünüyorum, aynı şekilde finansmanı anlamak Excel geliştiricileri için de önemlidir.
altmış

9

Her şeyden çok düşünüyorum, bu ikisinin çok benzer görünmesini sağlayan düşünce sürecinin benzerliği .

Örneğin, her ikisi de son derece mantıklı. Aynı adımları veya aynı formülü izlerseniz, daima aynı sonucu elde edersiniz. Örneğin, 1+1her zaman eşit olacaktır 2ve set a = 1araçlar aher zaman 1 olacaktır (siz başka bir şeye ayarlayana kadar)

Diğer bir örnek, mekansal düşünmeye duyulan ihtiyaçtır. Matematikte, sık sık kafamda sayıları tutmam ve ne yaptığımı görselleştirmem gerektiğini öğrendim. Çok basit bir örnek olarak, bir şey gibi o yüzden matematik problemlerini yıkmak istiyorum 13x13olur 13x10 + 13x3beynim çalışmak için çok daha kolay olan ve bunu takip etmek gerekir 13x10=130 + 13x3=39, böylece 130+39 = 169. Bu aynı şekilde görünmeyen bir şeyi görselleştirme veya problemi daha küçük problemlere bölme genellikle programlamada uygulanır.

Bu nedenle, matematiğin sayılarla hesaplama yapmak olarak tanımlandığı program için matematiksel bir arka plana ihtiyacınız olmasa da, matematik problemlerini çözerken ne kullanacağınızla aynı düşünce sürecine ve anlayışa sahip olmanız gerektiğini hissediyorum.


Ve bazı temel matematik, bu sistematik, mantıksal problem çözme sürecini kazanmak için kullanılan olağan basamak taşıdır. Dil yapısı, artık okulda öğretilmeyen bir şey de bir başka basamak taşı. Bir derleyicinin ayrıştırıcılığına sahip olmasının bir nedeni vardır ve ayrıştırma ve kodunuzun yapısına ne kadar iyi dikkat ediyorsanız o kadar iyi programlanabilir.
Fiasco Labs,

5

Sanırım, bugüne kadar, matematik ve bazı trigonometri unsurları öğretildi . Ve diyoruz o Matematik. Bu bir çift bacağına "bir insan" demek gibi.

Analizin programlama ile ilgisi yoktur ve fizik ve mühendislikle daha sıkı ilgilidir. İstatistiksel analiz için oyun motorları için fizik ve analiz için gerekli olacaktır . (İstatistiksel analiz, kabul edilmesi daha kolay olan işleri yönlendirir)

Matematik bizim için programlamayı gerçek dünyayla ilişkilendirmekle ilgilidir. Hesaplamalı hesap , bu ilişkinin ne kadar kötü gittiğini inceleyen daldır. (spoiler: oldukça kötü gidiyor, ama süresiz kontrol altında tutabiliriz )

Trigonometri, en az beklediğiniz zaman ortaya çıkan ve sonra analiz , ses üretimi ve buna bağlı diğer birçok şeyin sinyalini verdiğinde ortaya çıkan çılgın bir jak .

Yalak git cebir 101 ve Mantık 101 , Pascal, Leibniz, tarihini incelemek (evet o neredeyse icat hesap, bu yarım yanlış anladım hepsi neredeyse mantıklı başlayana kadar Newton tartıştı - ve hala ikili kodlama şeyi tasavvur) ve Babbage ve Şüphelerin çoğu azalır. (Matematik tanımınız yine de sonsuza dek değişecek)


4

Programlama birçok geleneksel akademik disiplini aşıyor.

Matematik, özellikle uygulamalı matematik , programlama için önemlidir, çünkü bilgisayarlardan yapmamızı istediklerimizin çoğu, crunch sayılarıdır. Sayısal yöntemleri ve hesaplamayı etkin ve uygun şekilde nasıl uygulayacağınızı anlamak, birçok programcının günlük olarak yaptığı şeylerden biridir.


4

Burada, bazı Bilgi İşlem Sorunlarını çözmede matematikle karşılaştığım pratik konuları anlatacağım (özellikle İnternet alanında):

  1. Arama Motorları veri aramak için Vector Calculus kullanır.
  2. Matrix Factorization, Sentiment Analysis gibi bir çok şey için kullanılabilir.
  3. Yazdığın kodun karmaşıklığını bulmak için Matematik'i, Toplamaları bilmelisin.
  4. Olasılık, Olasılıklı Bilgi Edinme / Aram'da yoğun olarak kullanılıyor
  5. Tahmini Analitikte Naive Bayes Teoremi kullanılmıştır.
  6. Kategori Öğrenme problemlerini çözmek için yine Makine Öğrenimi'nde kullanılan SVM adlı bir kavram için hiper düzlem vb. Gibi şeyleri bilmeniz gerekir.
  7. Doğal Dil İşleme şeyler yapmak için Entropy anlamanız gerekir.
  8. Arama Motorları tarafından kullanılan Gizli Anlamsal Endeksleme / Temel Bileşen Analizi, büyük ölçüde matris cebirine dayanır. & yakında......

3

Sorunuzla ilgili bir sorun, "matematik" ve "programlama" nın, bir ömür boyu herkesin öğrenebileceğinden daha fazla bilmesi gereken çok geniş ve derin konular olmasıdır (abartı yok). Şahsen matematik alanında yüksek lisans derecesi alıyorum. Üniversitedeyken, daha çok öğrendim, akranlarıma kıyasla daha az biliyordum; Yıllar boyunca daha az akıllı olsaydım hissettim. Yüksek lisans tezimi bir grup profesöre sunduğumda, birçoğunun bile okuduğum şeye aşina olmadığı görülüyordu.

Aynı şekilde, artık veritabanı tabanlı bir web uygulaması geliştiricisiyim. Eğer beni birleştirilmiş dil programlaması yapan biriyle karşılaştırırsanız, bizi çok yetenekli iki profesyonel olarak düşünebilirsiniz, ancak ikimiz de "programcı" olsak da, çok farklı bir uzmanlığa sahip oluruz.

Daha yüksek matematik çalışmalarında (birinci sınıf hesabın ötesinde) ilerlerken, matematiğin programlanırken size iyi hizmet edecek soyut bir akıl yürütme disiplini getirdiğini göreceksiniz. Bu disiplinin çok önemli olduğunu düşünüyorum çünkü program yaparken soyut endişeleriniz olacak.

Elbette, birinci sınıf programlamada, işaretçi aritmetiği hakkında muhtemelen bilgi edineceksiniz. Bu kavramı açıklamak için kısa programlar yazacak ve bilgisayarınızın nasıl çalıştığını nasıl anladığınızı anlayacaksınız. Bununla birlikte, soyutlayıcıda işaretçi aritmetiğinin nasıl çalıştığını öğrenmek, işaretçileri gerçek bir programda kullanma konusunda size yardımcı olmayacaktır. 10K kod satırında bir karışıklık alma ve işaretçi aritmetiğinde bazı değişiklikler yapma zamanı geldiğinde, değişikliklerinizi nasıl etkileyeceğine ilişkin farklı endişeleri dengelemek için stratejik kararlar almak için çok soyut bir seviyede düşünmeniz gerekir. kod.

Bir programcı olarak, diğer birçok kaygının yanı sıra kodunuzun "okunabilirliğini", kodunuzun performansını, kullanım kolaylığını ve kullanım kolaylığını dengelemeniz gerekir. Bu endişeleri birbirleriyle dengelemek için çok soyut karşılaştırmalar yapabilmeniz gerekir. Her gün bu karşılaştırmaların çoğunu yapacaksınız. Zaman yönetimi konusunda daha başlamadım bile. Özetle, yaptığınız bir işin zamanında işlerinizi yapma yeteneğinizi etkileyeceği ihtimaline neden olacak ve işinizi etkileyecek her gün bir çok kez karar vereceksiniz.

Son olarak, eski metodolojiler ve uygulamalar kullanımdan çıktıkça devam edebilmek için yeni fikirleri ve kavramları özümsemek için felsefe disiplininizi korumalısınız. Bir kez daha, gelen fikirleri değerlendirebilecek ve bildiklerinizle soyut bir karşılaştırma yapabileceksiniz.

Kısacası, programlama, çoğumuzun bildiği gibi, çoğumuzun bildiği gibi, matematikle ilgisi yoktur; fakat soyut bir düzeye baktığınızda, ortak noktaları çoktur.


Özellikle "çoğumuzun bildiği gibi" kısmını seviyorum. Buradaki cevapların çoğunu okurken gördüğüm zorluk bu: "sol el", "sağ el" in ne yaptığını bilmiyor.
Döngü Alanı

Sanırım "sol el sağ elin ne yaptığını bilmiyor" diye özetliyor. OP, Java ile "aşağıdan başladığını" söyledi. Java programlama çeşit bu cıvata işleme aksine, nalburdan cıvata bir şey ve kereste bina ve (daha Assembler programlama gibi olurdu) kereste için canlı ağaçları verme gibi
Pirinç Unu Kurabiye

2

Matematik bir küp denklemi tanımlar (diyelim).

Bir algoritma, bu kübik denklemin nasıl çözüleceğini açıklar.

Bu (veya herhangi bir) algoritmanın bir makine tarafından çalıştırılabilecek şekilde yapılandırılması programlamadır .

Bilgisayar bilimi, algoritmanın analizidir - teorik zaman / alan verimliliği, hata sınırları vb. Bu, bir matematik dalı olarak düşünülebilir. Ancak, bilgisayar bilimi ve programlamanın aslında aynı şey olmadığını unutmayın. İyi bir programcı olmak istiyorsanız, bilgisayar bilimlerinde bir temele sahip olmanız önemlidir, çünkü geliştirdiğiniz algoritmalar hakkında daha iyi bir tasarım ve akıl yürütmenize yardımcı olur. Ancak bu bir gereklilik değildir.

İyi bir programcı (aslında, genellikle değildir) iyi bir matematikçi olmayabilir ve bunun tersi de geçerlidir. Onlar ayrı tanımlanabilir becerilerdir.


3
Etki alanınıza bağlı. Eğer sadece bir programcı olmak istiyorsanız, o zaman gerçekten matematik bilmenize gerek yoktur. İşletmenin kilit bir parçası olmak istiyorsanız (birçok alanda), etki alanı sorunlarına çözüm bulabilmek önemlidir. Çok sık olarak, bu çözümler yalnızca sağlam bir matematik altyapısına sahip olarak elde edilebilir. Herhangi bir özel matematik alanında uzman olmanız gerekmeyebilir, ancak geniş bir matematiğin nasıl uygulanacağını bilmeniz gerekir, böylece o anki probleminizi hangi matematiğin çözebileceğini anlayabilirsiniz.
Dunk

2

Asıl sorunun posterin zayıf matematiksel anlayışında yattığı yıllar boyunca bu forum türleri hakkında pek çok soru gördüm. Örneğin, cebir konusunda iyi bir temeli olan herhangi biri, sıfıra bölünemeyeceğinizi anlar. Ancak, posterin anlamadığı ve daha sonra temelde “sıfıra bölemeyeceğiniz” diyen hata mesajını anlamadığı bir soru gördüm. Posterin temel mantığı anlamadığı açık bir sürü soru gördüm. Boole cebri kavramlarının açıkça anlaşılmadığı pek çok soru gördüm.

Sadece matematiksel kanıtlar yazmadığınız veya matematik ders kitabındaki gibi denklemleri doğrudan çözmediğiniz için, onların arkasındaki kavramları anlamanıza gerek kalmaz. Bu arada, yıllarca süren iş tecrübesinde, matematik konusunda sağlam bir anlayışa sahip olan kötü bir programcıya hiç rastlamadım.

Bazı alanlarda oyun programlama, istatistiksel programlama, finansal programlama, bazı gömülü sistemler gibi doğrudan bir çok matematiği kullanıyorsunuz. Bu örneklerin bazılarında gereksinimlerinizde ihtiyaç duyduğunuz denklemler size verilir ve bazen siz değilsiniz. Bununla birlikte, size denklem verildiğinde bile, bu denklemleri programlama koduna doğru bir şekilde çevirmek, başlangıç ​​için denklemi anlamanızı gerektirir.

Temel CRUD uygulamanızdaki temel cebirden biraz daha fazlası ile başedebilseniz de, daha ilginç problemlerin ve daha ileri çalışmaların çoğu matematiksel anlayışı içerir. Öyleyse neden matematiği derinlemesine öğrenerek kendinizi en baştan sınırlamak istiyorsunuz?


2

Hemen akla gelen iki örnek:

fonksiyonlar - Bir çıktı değişkeni üretmek için girdi değişkenlerine bir dönüşüm uygulama fikri matematiğe güçlü bir şekilde dayanmaktadır. Bir fonksiyon etrafında geçen kavramı olarak daha çok başka bir işleve bir parametre. Genel olarak, programlama ile ilişkili soyut düşünme kavramı matematiği oldukça yakın paralellikler.

bitMasks - Sorunları çözme konusundaki bu yaygın programlama yaklaşımı, kavramı kavramak için en azından temel cebirsel bir anlayış gerektirir.


1

Bir programcının bakış açısından: Matematik, bir programlama alt kümesidir.

Programlamada uygulanan matematik:

Programlamada koleksiyonlarla (diziler, listeler, haritalar vb.) Çalışırken, matematiksel soyutlamaların gerçek dünyadaki uygulamalarıyla ilgileniyorsunuz.

Matematiksiz programlama:

Bunu yaparsanız println("Hello World"), ekrandaki matematiği hesaplamak için bazı matematiğin kullanılması gerçeği, ipin uzunluğu, vb.

Matematik için programlama kullanma:

Matematiği ve fiziği bir programlama dilinde uygulamak, bilgisayar destekli tasarım gibi şeyleri mümkün kılar.


Hem matematik hem de programlama ile ilgili şeylerin kesişimi var. İkisi de uygun bir altküme değildir. Daha fazla MATH bilseydin bunu bilirdin. Bir venn şeması çizelim ve her alanda bir öğe bulabilecek miyiz bakalım. Cebir matematikle ilgili ve programlama ile ilgilidir. Nesneye Dayalı Programlamanın Prensipleri kesinlikle matematikle ilgili değildir, fakat matematik bir soyutlama olduğundan soyutlamalardır. Kesikli matematik, istatistikçiler gibi, programcılar için inanılmaz derecede faydalıdır. Calculus nadiren çoğu programcı için ortaya çıktı, henüz 30 yıldır benim için henüz olmadı.
Warren P,

0

Programlama genellikle matematiksel bir model olan bir Model üzerine kuruludur.

Mortgage Hesaplayıcı oluşturma örneğini ele alalım. Bunun için neyin ilgi duyduğunu, bileşik aralığın ne olduğunu vb. Bilmeniz gerekir. Temel matematik anlayışınız yoksa , o zaman bir başkası size bu bilgiyi vermek zorundadır. Genellikle her şeyi yapmak programcı işidir. Gerektiğinde her zaman yardım isteyebilirsiniz.

Matematikte programlamada yaygın olarak kullanılan basit bir kavram vardır. Mesela, ifadeler, denklem, değişken, programlamada çok kullanılıyorlar. Math'da alamazsanız, en iyi programcı olmayabilir.

Güçlü bir matematiğe sahip olmak, üzerinde çalışmanızı modellemek için size daha fazla şey verin. Bu sonuçta daha iyi bir programcı yapar. Örneğin, projenizden birinde ikinci dereceden bir denklem çizmek isteyebilirsiniz, bu şekilde daha fazla şey öğrenirsiniz çünkü matematikte güçlüsünüzdür. Veya bir çemberin alanını bulmak için bir program yazıyorsunuz, size daha fazla deneyim veriyorsunuz.

Kısa öğretim kariyerimde, öğrencilerin matematik özgeçmişleri yoksa, finansal bir problem yaparken neredeyse kaybedildiklerini buldum. Model hakkında kaybedilirse, dilin kendisini öğrenmek daha zor ve dürüstçe çok sinir bozucu olur.


3
Birisinin finansal bir problemi çözüp çözemeyeceği, o alanda yetkin olup olmadıkları ile ilgili her şeyi programlama becerisiyle neredeyse hiçbir ilgisi yoktur. Kafamda çok fazla matematik içeren sinyal işleme yazılımı ile çalışıyorum. İşim matematiği yapmıyor, programlama uzmanlığı alanında olmayan matematikçiler ve mühendisler tarafından üretilenleri iyi bir yazılıma dönüştürüyor. Çünkü orası benim alanım .
Blrfl

Çoğu pratik alanda, ikisi ayrıdır: Birisi bir modele sahip ve birileri bunu programlamalı. Yani evet haklısın. Fakat birinin programlamayı baştan öğrenmesi için matematiği bilmesi gerekir. Aksi takdirde zor olacak. Değişken, ifadeler ve farklı matematiksel özellikler hakkında bilgi sahibi olmaları gerekir. Optimizasyon ekibiyle çalıştım. Çözücüler üzerinde çalışıyorlardı. Eğer matematik hakkında bir bilgiye sahip olmasalardı, asla üzerinde çalışmazlardı. Öğrenme bakış açısına dayanarak ve sadece programlamaya adım atan yeni bir öğrenci olduğunu bilerek cevapladım.
İsimsiz

Öğrenme açısından matematik arka planına sahip olmak zorunludur, aksi takdirde başkaları öğrenemez.
İsimsiz

Çözücüler, bir matematik alan problemidir ve bu, ilgili matematiğin anlaşılması için üzerinde çalışılması gerektiğinin bir nedenidir. Programlamaya dahil hiçbir matematiksel kavram olmadığını söylemiyorum , ancak @DeadMG'nin cevabında işaret ettiği gibi, matematiğin kesinlikle yardımda bulunmadığı sürecin birçok pratik yönü var.
Blrfl

1
@Birfl, DeadMG, biraz cahil (ve neredeyse her zaman yanlış). Matematik her zaman bu "yumuşak" alanlarda yardımcı olacaktır. Psikoloji matematiğe dayanmaktadır. Sosyoloji daha matematikseldir. Ve sistem tasarımı durumunda, anlambilimde (ayrı bir matematikten) çok iyi bir arka plan olmadan dokunmamanız iyi olur. Programlamada matematiksel olmayan yönler yoktur. GUI tasarımı ve CRUD kodlaması dahildir.
SK-mantık

0

Bilgisayar Biliminin teorik temeli (sadece programlamadan öte) doğada matematikseldir. Hesaplanabilirliğin tanımından algoritmaların analizine ve ifadesine kadar programlama dillerinin özelliklerine kadar her şey çok çeşitli matematiğe dayanır. İlgili matematik türünün lezzeti için bu Wikipedia sayfasına bakın .

Bunların çoğu tek yapmanız gereken askı kodu olup olmadığını bilmek gerçekten gerekli değil. Uygulamalı matematik devam ettiği sürece, ciddi sayı çarpma becerileri gerektiren bir alana (ayrıntılı fiziksel simülasyonlar, sinyal analizi, finansal analiz ve tahmin vb.) Girmezseniz, muhtemelen temel cebirden daha fazla bir şey kullanmayacaksınız. günlük olarak.


0

Gerçekten ne tür bir programlama yaptığınıza bağlı.

Bazı mantıklarla hafif web uygulamaları yapıyorsanız, muhtemelen birçok derece gerektiren daha gelişmiş matematik derslerine ihtiyacınız yoktur. İşlemci ağırlığındaki şeylerle çalışıyorsanız, daha fazla matematiğe ihtiyacınız olacak. Herhangi bir bilimsel alanla çalışma yapıyorsanız, calc referanslarınızı elinizde tutmak isteyeceksiniz.

Matematiğe ihtiyaç duyacağınız bir başka yer ise oyun yazmak istemeniz. Çapraz olarak hareket etmek istediğiniz an, dikkatli bir hesaplama yapmaya başlamanız gerekir, böylece NE'ye bir bloğa geçerseniz hızlanan karakterlerle bitmezsiniz.

Bununla birlikte, mutlaka matematik öğrenmeye, sonra da programlama öğrenmeye ihtiyacınız yok. Programlamayı öğrenmek ve daha sonra bazı matematik dersleri almak tamamen geçerli. Calc veya Trig sınıfının içine girmeden önce kodlamaya başladım ve gayet iyiydim. Gelişmiş matematik öğrenmeye başladığımda, kodlamayı, gerçekten hızlı bir komut dosyasında değişkenleri kalem ve kağıtla yapabileceğimden daha fazla değiştirerek keşfedebildiğim için bana gerçekten yardımcı olduğunu buldum.


Oyunlar için trig ve vektör matematik bilgilerinizi kesinlikle bilmeniz gerekir.
Alan B,

Kesinlikle. Yine de, oyun yazmanın, liseden unuttuğunuz matematiği yeniden öğrenmenin harika bir yol olabileceğini, ancak son tarihte olmadığınız sürece buldum.
kcunning

0

Hiçbir şekilde matematik uzmanı değilim! Hepsi benim için mantıklı olan HS Geometri'de iyi iş çıkardım. Programlama ve geometriyi çok benzer buluyorum. Boole mantığı aklımda çok iyi geometrik kanıtlarla bağlar.

Daha sonra, modulus operatörünü kullanarak art arda kaç tane sütun olduğunu kontrol edebileceğinizi bilmek gibi küçük şeyler var.

İyi bir matematikçi olan bir arkadaşı (veya meslektaşı / danışmanı) olan iyi bir programcı olma fikrini şiddetle tavsiye ederim.

Açıkçası her iki beceriye de sahip olmanın mutluluğunu yaşıyorsan, onunla koş!


0

Basit cevap; Matematik seni hızlı yapar . Elbette, kodlama problemlerinizi ortadan kaldırabilir / go / wikipedia 'dan gidebilirsiniz, ancak yeterli matematik işleminden yararlanın ve buna ihtiyacınız olmayacak . İster inanın ister inanmayın , doğru şekilde eğitilmiş insan beyni google’dan daha hızlı . Dahası, ne kadar fazla matematik biliyorsanız, google / se / wiki'nin size sunduğu sonuçları daha hızlı anlayabilirsiniz ve insanların size söylediklerini anlamak için daha az incelemeye ihtiyaç duyacaksınız. Programlama problemlerinizi çözme sürecinde yine de matematik öğrenmeye başlayacaksınız ancak matematiğe odaklanırsanız, çok daha verimli bir süreç olacak.

Sorunuz, neden resmi bir müzikal eğitimine ihtiyaç duyacaklarını soran bir rock müzisyeni gibi. Onsuz başarılı olmak mümkün mü? Elbette. Eğer onunla gidersen, seni daha çok iğrenç yapar mı? Kesinlikle.

Biraz daha karmaşık cevap - Matematikçiler ve programcılar "çözüm" kelimesini kullandıklarında (problemler için, yani denklemler değil - yani "kökler" değil) - hemen hemen aynı anlama geliyorlar. Matematik problemlerini çözmeyi öğrenmek, programlama problemlerini çözmeyi öğrenmenize yardımcı olur.

BTW - ve herhangi bir kimseye yönelik hiçbir suç - iyi bir programcı olduğunu söyleyen ancak matematikten nefret ettiği söylenmeyen bir Büyük Yalancıdır. Olan şuydu, kötü hs ya da kolej hocası tarafından resmi matematikten mahrum kaldılar ve o zamandan beri de "matematiğin iyi olmadığını" düşünüyorlardı. Öğrenme zorluğu olmayan herhangi biri (yani bir OO dili öğrenebilecek herhangi biri) Sophomore Calculus dahil olmak üzere her şeyi yapabilir.


0

Matematik yapma ve Programlamanın% 99'unun ortak noktaları çok azdır. Büyük bir programcı olmak için matematik gerekli değildir. Calculus I, II, III ve lineer cebirin III elementleri de dahil olmak üzere bunlarla sınırlı olmamak üzere birkaç matematik dersi aldım.

10 yıldan fazla bir süredir yazılım mühendisiyim ve sadece temel matematikten daha fazlasını kullanmak için nadiren ihtiyaç duydum. Matematiğin gerekli olduğu bazı istisnalar vardır: grafikler ve diğer alanlar gibi. Ancak, programlama ve yazılım mühendisliğinin% 99'u Matematik gerektirmez. Mantıksal düşünme, algoritmalar, OOP, fonksiyonlar, ayrıştırma problemleri vb. Gerektirir.


0

1) Programlamayı öğrenirken, teknik jargonla karşılaşacaksınız (algoritma gibi). Algoritmayı analiz etmek için insanın polinom, logaritmik ve üstel fonksiyonların doğası hakkında bir fikri olmalı.

2) Bir bilgisayar bilimi uygulamasına dayanarak, anlamlı bir çözüm yazmak için kesikli matematik ve sürekli matematik hakkında bir fikre sahip olmak gerekir. Bunun gibi kurslardan geçerek bu konuda daha fazla şey anlayabilirsiniz.

---> Bilgisayar Bilimi için Matematik

---> Matrisi Kodlamak: Bilgisayar Bilimleri Uygulamaları ile Doğrusal Cebir .

Yeni başlayanlar için, programlama için en iyi diller gibi python/ gibi dinamik yazılmış diller hissediyorum scheme. Gibi Java/ gibi statik yazılan diller C++ile başlamak en iyisi değildir. "MIT / UOC-Berkeley / Stanford" dan yayınlanan Opencourseware normal bir üniversite müfredatından daha iyi rehberlik edebilir. Seninle bahse girerim!!!


-1

Ben şahsen söyleyebilirim ki, söz konusu olan programlama seviyesine bağlı. Veri modelleri ve bunlar arasındaki korelasyon, ilgili programlama algoritmaları. Örneğin: "Merhaba Dünya" çıktısını alan bir program yazmak için, Yüksek Matematik dersine sahip birini tanımaya gerek duymuyorum. Matematiksel katılım düzeyi, programlı olarak çözülmesi gereken problemin karmaşıklık seviyesine bağlı olacaktır.


-2

Sadece benim deneyimim, daha fazla
değil : Ben matematikçi değilim. Ben bir dahiyim, sadece bir otodidakt.
... ve uzun yıllar sonra, sezgilerle çalıştığımdan anlıyorum

İlk önce Pick (ölü sistem) 'i sıfırdan (tek başına kağıt dökümantasyon ve örneklerle),
... C, C ++ ve eğlence için Java'dan sonra öğrendim .

Söylediğiniz gibi, bu dili öğrenmenin matematiksel bir sorun olmadığını (basit / minimalist cebir size yardım etse bile) diyebilirim, mantıklı olanıdır.

Artık birçok araç (Eclipse gibi) size yardımcı olur ve düzeltir: yapmak istediğiniz şeye odaklanmanız gerekir , yalnızca 52 ayrılmış sözcükle ... ve sizin için çalışacak birçok kütüphaneyle.

Bu nedenle dili seviyorsanız, bir Java projesi seçin, Pattern Design, UML'yi inceleyin, JVM'yi ve Bigloo ve Scala ile nasıl kullanıldığını anlayın, 10.000 saat boyunca tekrar tekrar anlayın.

Java'daki deneyim size iyi ücretli işler verir ve uzun süredir endüstriyel büyük projelerde çalışabilirsiniz ve matematiksel değil, bilgilendirici konuşabildiğiniz için başka bir ortama geçebileceksiniz .

Dili (kelimeler, anlam, kavram ve anlamsal, ontoloji gibi diğer gizlenmiş mantıksal bilimler) anlamak insan insanınız için iyi bir amaç ise, tüm yaşamınız için şimdi başlayabilirsiniz .

Aksi takdirde, başka bir yol deneyin.

Saygılarımla,
Claude


Yine yazıya bakınız. Matematik yapıyorsun, sadece kabul etmemeyi seçtin.
jamesson

1
Gördüm, fakat latin, felsefe, dil ... mantığından bahsettiklerinde -1 ^ n ile bir öğrencinin matematiksel ilgi konusundaki ilk sorusuna yanıt veren başka yazılar da buldum. hayat. Matematik, zihinleri o kadar sınırlı ki, herkesin denklem içinde olmadığını, etrafındaki yaşamı anlamadan ve reddettiğini unutmadan Newton'un bir elmanın verdiği bir sezgiyle başladığını unutmak mı? Belki de diğer dünyalara zihin açmak mümkün olacak. Mümkün olduğunda bu tartışmanın her iki tarafını da zenginleştirecek. Yine de yazarken dikkatli olacağım.
cl-r

-2

Birisi neredeyse yukarıdaki kafasına çiviyi vurdu. Programlama matematiktir. Daha spesifik olarak, programlama, hesaplanabilirlik teorisi veya özyineleme teorisi olarak adlandırılan matematiksel bir mantık dalıdır .

Diğer matematik dalları doğrudan, özellikle biçimsel dil ve otomat teorisi ile ilgilenmektedir. Bunlar, örüntü eşlemede kullanılan düzenli ifadeleri ve programlama dillerini tanımlamak ve ayrıştırmak için kullanılan resmi gramerleri tanımlamaya yardımcı olur.

Programlamanın matematik olmadığını söyleyen herhangi biri ya ne hakkında konuştuğunu bilmez ya da bir algoritma veya başka bir temel matematiksel üzerinde patent alarak kazanç elde etmeyi uman bir “Fikri Mülkiyet” maksimalisti gibi açık bir güdüsü vardır. gerçek ya da keşif.

Matematik olarak programlama için bazı referanslar ve sonuç olarak neden bahsettiğinizi bilmemekle birlikte:

Program Kanıtlar: 19. Yüzyıl Mantığı ve 21. Yüzyıl Bilgisayarları

Programlar Kanıtlardır: Lambda Matematikinde Modeller ve Tipler

Wikipedia'nın Curry-Howard Yazışmalar makale

Bilgisayar Biliminde Mantığın Olağandışı Etkinliği Üzerine

Mantığın Mantıksız Etkisi

Evet, bunlar matematiksel mantığın "mantık" bölümünde ağırdır, ancak matematiğin genellikle birkaç aksiyom olduğu ve onların mantıksal sonuçlarının birinci dereceden mantık ile geliştirildiği kabul edilmektedir.

Aksi söylendiği ve para için maksimalist bir "IP" olmak:

Nasıl ABD'de bir algoritma patentini almaya . Algoritmalar patentlenebilir değildir, ancak algoritmalara kendilerine algoritma olarak atıfta bulunulmadan patentler verilir. İnternette bu çelişkiyi işaret eden ya da açıklamaya çalışan birçok materyal bulmak zor değil.


6
Sonunda reklam hominem için -1.
Charles E. Grant,

@ charles ad hominem kime karşı? Orijinal poster? Bence patentlerle ilgili nokta anlayışlı (daha iyi ifade edilmiş olsa bile).
gcbenison

@gcbenison, "Programlamanın matematik olmadığını söyleyen ya da gizli bir nedeni olan herkes" klasik bir hominem saldırısıdır: Tartışmanıza cevap vermek zorunda değilim çünkü kötü bir insansınız. Tahriş edici buldum çünkü programlamanın matematiksel olduğunu düşünmüyorum ve yazılım patentlerinin bir istismar olduğunu düşünüyorum. Applied Math'da yüksek lisans diplomam var, fakat neden bahsettiğimin kesin olarak tartışmaya açık olduğunu bilmiyorum.
Charles E. Grant,

@ yorumcular: teşekkürler. Bu davranışları görmezden gelmek için kullanırım çünkü onlar başkalarına empoze edilen kendinden tahmin edilen bir mutsuzluklardır. --- Bruce Ediger'a: Şüphe işareti yansıma devam ediyor.
cl-r

@ cl-r: SCO anti-Linux kampanyası ve nature.com/news/… gibi çok özel örnekler düşünüyordum. Eğer programcılar olarak avukatların matematiği avukatın yararına tanımlamasına izin verirsek, o zaman tüm medeniyeti büyük bir kötülük yaparız .
Bruce Ediger

-2

Matematik programlama ile yapılacak her şeydir. Örneğin, oyun programlamasında fizik için matematik kullanmanız ve daha az her şeyi yapmanız gerekir. Oyuncunun x pozisyonunu Java'da taşımak için yapardınız int x = x + speed * deltaTimeya da int x = x - speed * deltaTimeAma bunun temel matematik olduğunu söyleyebilirsiniz, böylece daha ileri şeylere geçebilirsiniz. Elo Algoritması adı verilen satranç oyuncularını derecelendirmek için bir algoritma var.

Bu, Elo Algoritmasının Açıklaması

Hala bunun temel olduğunu düşünüyorsanız, o zaman bunu deneyin. Doğum günü, ay ve yıl verildiğinde birinin yaşını nasıl hesaplarsınız? Doğum yılını bu yıldan çıkarın ve daha sonra ayın bu aydan az olup olmadığını ve 1'in çıkarılmadığını kontrol edin.

Büyü değil, zor bir çalışma ve iyi bir matematik.


-4

Tamam, muhtemelen bunun için bir ton aşağı oy alacağım, ancak programlama ve matematik birbiriyle tamamen ilişkili olmayan iki şey. Birisi sadece toplama, çarpma ve basit mantıksal işlemler gibi temel bilgileri bilen harika bir geliştirici olabilir.

Geliştiricilerin çoğu, mesleki kariyeri boyunca tek bir denklemi çözmeyeceklerdir ve büyük O notasyonu gibi şeyler matematiksel olmayan yollardan da anlaşılabilir. Bir şeyler hakkında düşünürsünüz, kafanızda bir parça uç olduğunu hayal edin, ve işte, eğer birisi ne günlük ve gücün olduğunu açıklarsa, ne tür bir büyük O olduğunu anlayabilirsiniz.

Bazen matematik basitleştirebilir veya bir şeyi ispatladığın için gurur duymana neden olabilir, çünkü programlama anlamını matematiksel bir alana, ayrık matematik ve benzeri olarak isimlendirerek anlamlandırabilirsin, ama bir sürü diferansiyel denklem ve integral öğrenerek, ve Bunu kanıtlamak için, bir programcı olarak başarılı olmak istiyorsanız, ne yapılması gerektiği konusunda en iyi fikir IMHO değil.

En azından 10 yıldır matematiğe dokunmadım, matematik profesörleriyle her zaman tartışmıştım ve gerçek zamanlı görüntü oluşturma için bir matematiğe ihtiyaç duyduğumda, her şeyi teorileri kanıtlamadan programcıların bakış açısıyla öğrendim. benim için, “matematik öğrenemiyorsanız iyi bir programcı olamazsınız” yorumuyla başımıza konan matematik profesörlerine kıyasla kavramak kolay ve kolaydı. Tabii ki kolay!

Şimdi matematiksel şeyleri biliyorum, böylece matematiğin programcıları ile birlikte bütün kütlenin farklılıkları ve şeyleriyle konuşabiliyorum, ama sadece sebepsiz yere solmayacakları için. Çünkü bu şeyler zamanın% 99.9'u kadar işe yaramaz ve zaman olduğunda programcıların bakış açısından 1000 kat daha etkili bir şekilde öğrenilebilir.

Heck, programcıların bir programlama dili + çerçeveler + en iyi uygulamalar için en az 5 yıla ihtiyaçları vardır. Neden dünyadaki teoremleri ispatlayacağını öğrenmeliler? Matematik öğrencisi matematik işlerini yapar, programcılar bu şeyleri çalıştırır, işte böyle çalışması gerekir.


8
Bir çocuk, annesine, matematik büyüsüne ihtiyaç duymayacağını çünkü büyüdüğünü ve milyoner bir beyzbol oyuncusu olacağını söylüyor. Annesi ona "Milyonlarınızı saymak için matematiğe ihtiyacınız olacak" diyor.
Nav,

2
Üzgünüm, aynı fikirde değilim. Matematik okumak, mantıklı düşünmeyi öğretiyor. Mantıklı düşünemiyorsanız, yazacağınız tek şey ölçeklenmeyen bir kod dizisidir. Ben matematikte uzman olmanız, hatta matematik gibi olmanız gerektiğini söylemiyorum, ne de günlük yaşamınızda kullanmamalısınız. Fakat eğer gerçek programlama problemlerini çözmek istiyorsanız, onu incelemelisiniz.
jmort253,

2
@ jmort253: Matematik okumak seni mantıklı düşünen biri yapmaz. Ya aklınıza bağlanmış bir şey ya da değil. Okuldan beri matematikten nefret ettim ama çok mantıklı biriyim. Programlama matematik değildir, 10 + yıldır sistem programlamaya giriyorum ve bunu% 100 güvenle söyleyebilirim ve web geliştirme ya da SQL yönetimine girdiğinizde daha az matematik bekleyebilirsiniz. Göreviniz yeni matematiksel teoriler geliştirmek değil, göreviniz sınırlı kaynakları kullanarak en verimli algoritmaları ve kapları kullanarak sınırlı miktarda kaynak kullanarak çalışmayı sağlamaktır.
Kodlayıcı

2
@Nav: Temel matematik için her insan için, x ve y ile denklemlere kadar mantıklı. Ancak milyonlarınızı saymak genellikle muhasebecilerin ve avukatların yaptığı şeydir, çünkü aksi halde beyanı olan bir şeyi yapmak ve her iki şekilde de bir şeyleri kaybetmek zorunda olan bazı eyalet yasalarını özleyeceksiniz. Neler olup bittiğini anlayacak kadar akıllı olmalısınız, ancak bir kez başarılı olduktan sonra, spor salonunda formunuzu korurken, sizin için doğru, hızlı ve zamanında işleri yapacak özel hizmetleri kullanmak daha uygun maliyetlidir. Bu zor kazanılan en iyi 5 noktaya tutmak için.
Kodlayıcı

10
Matematik denklem çözme süreci değildir. Şimdiye kadar gördüğünüz tek matematik okulda öğretilen matematik ise, gerçek matematiği hiç görmediniz .
doppelgreener
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.