Matematik programlama için gerekli midir? [kapalı]


117

Üniversite günlerinde bir arkadaşımla herhangi bir kıdemli programcı için ileri matematik gerekli olup olmadığını tartıştım. Buna karşı şiddetle tartışırdı. O, programcıların sadece lise veya yeni yıl üniversite matematiğinden temel matematik bilgisine ihtiyaç duyduklarını, daha az değil, ve neredeyse tüm programlama görevlerinin ileri matematiğe bile ihtiyaç duymadan gerçekleştirilebileceğini söyledi. Bununla birlikte, algoritmaların temel olduğunu ve programcılar için sahip olması gereken varlık olduğunu savundu.

Benim duruşum, tüm bilgisayar bilimindeki ilerlemelerin neredeyse yalnızca matematikteki ilerlemelere bağlı olduğuydu ve bu nedenle matematikte kapsamlı bir bilgi, programcılara gerçek dünyadaki zorlu problemlerle çalışırken büyük ölçüde yardımcı olacaktır.

Hala argümanların hangi tarafının doğru olduğuna karar veremiyorum. Kendi deneyimlerinizden bize duruşunuzu anlatır mısınız?


7
On yıl sonra matematik öğretmenimi aradım, kariyerim boyunca ileri matematik kullanmadığımı söyledim. Biliyorum, sik hareket ediyor, ama harika bir soru! Artı bir.
Chris McCall


Lütfen bu soruya verilen en yüksek oyu alan cevaba bakınız .
Boris Stitnicky

Ziyade. Kapat, bu programcılara taşınmalıdır.
Chris Cudmore

Yanıtlar:


111

Sorunuzu sorulduğu gibi cevaplamak için "Hayır, matematik programlama için gerekli değildir" demem gerekir. Ancak, diğer insanların bu başlıkta öne sürdüğü gibi, matematiği anlamak ile "algoritmik düşünmek" arasında bir bağlantı olduğuna inanıyorum. Yani nicelik, süreçler, ilişkiler ve ispat hakkında soyut düşünebilmek.

Programlamaya yaklaşık 9 yaşındayken başladım ve bu aşamada çok matematik öğrendiğimi söylemek biraz zor olurdu. Bununla birlikte, biraz çabayla değişkenleri, döngüleri, goto ifadelerini (affet beni, Vic 20 BASIC idim ve henüz herhangi bir Dijkstra okumamıştım) ve ekrana grafik koymak için temel koordinat geometrisini anlayabildim .

Sonunda Bilgisayar Bilimleri bölümünden bir yan dal ile Saf Matematik alanında bir onur derecesi almaya devam ettim. Esas olarak analize odaklanmış olmama rağmen, biraz ayrık matematik, sayı teorisi, mantık ve hesaplanabilirlik teorisi üzerinde de çalıştım. İstatistik, olasılık teorisi, vektör analizi ve doğrusal cebirden programlamaya birkaç fikri uygulayabilmenin yanı sıra, lisans derecem sırasında programlamama ve daha sonra yaptığım ticari ve araştırma programlamasına doğrudan uygulanabilecek çalıştığım çok az matematik vardı.

Bununla birlikte, matematiğin gerektirdiği biçimsel düşünme yöntemlerinin - dikkatli akıl yürütme, karşı örnekler arama, aksiyomatik temeller oluşturma, kavramlar arasındaki bağlantıları saptama - büyük ve karmaşık programlama projelerini ele aldığımda çok yardımcı olduğuna şiddetle inanıyorum.

Sporcuların sporları için nasıl çalıştıklarını düşünün. Örneğin, futbolcular hiç şüphesiz antrenman zamanlarının çoğunu temel futbol becerilerine harcıyorlar. Bununla birlikte, genel zindeliklerini geliştirmek için spor salonunda bisiklet veya kürek makineleri üzerinde, ağırlıklarla vb. Zaman geçirebilirler.

Matematik çalışmak, programlama için zihinsel gücünüzü ve dayanıklılığınızı geliştirmek için ağırlık antrenmanına veya çapraz antrenmana benzetilebilir. Temel programlama becerilerinizi uygulamanız kesinlikle çok önemlidir, ancak matematik çalışmak, temel analitik yeteneğinizi geliştiren inanılmaz bir zihinsel çalışmadır.


6
Matematiğin sadece zihinsel gücünüz için ağırlık çalışması olmadığını , aynı zamanda yeni problemlere ve çözümlere kapı açtığını da eklemek isterim . Örneğin, görüntü işleme stajım sırasında, PDE'leri tam olarak anlamadan gürültü giderme algoritmalarımızı uygulayabilmemin hiçbir yolu yok. Ortaya çıkan kod basitti, ancak çok kesindi. Ve matematik bizi oraya götüren şey. Daha da şaşırtıcı olan bu formüllerin güzelliğidir. Küçük bir PDE ifadesi, birkaç sayfalık koda çevrilebilir. İlk formül olmadan, onunla nasıl sonuçlanacağınızı görmek zor.
Joe

Matematik değildir gerekli programlama, çünkü programlama için ise matematik. İyi matematik veya kötü matematik olabilir (orangutan'ın uzun çağrısının Ook diline çevrilmesi gibi ), ancak bir programcı bir nesne modeli tasarladığında, ze (genellikle farkında olmadan) bir matematik eylemi gerçekleştiriyordur. Öyleyse, yine, kişinin programlamak için matematik kitaplarını okumasına gerek yoktur, ancak bu, programlamanın matematik olduğu ve (Öklid'in dediği gibi), ona kraliyet yolu olmadığı gerçeğinde hiçbir şeyi değiştirmez.
Boris Stitnicky

56

Programlama için ileri matematik gerekli olmayabilir (ileri matematik becerisini programlamıyorsanız), programlama ve matematiğin düşünce süreci çok benzerdir. Bilinen şeylerin (aksiyomlar, daha önce kanıtlanmış teoriler) temeliyle başlarsınız ve yeni bir yere gitmeye çalışırsınız. Adımları atlayamazsınız. Adımları atlarsanız, boşlukları doldurmanız gerekir. Bu, ikisini inanılmaz derecede benzer kılan eleştirel bir düşünce sürecidir.

Ayrıca, matematikçiler ve programcılar soyut olarak eleştirel düşünürler. Gerçek dünyadaki şeyler, nesneler ve değişkenlerle temsil edilir. Somuttan soyuta çeviri yeteneği de iki alanı birbirine bağlar.

Birinde iyiyseniz, diğerinde muhtemelen iyi olma şansınız çok yüksektir.


Ve böylece çok fazla bulmaca çözen veya Scrabble oynayan birinin, programlama konusunda iyi olmayan birine göre daha iyi olduğunu söyleyebilirsin. İlişki, katı bir bağımlılıktan çok olasılıkla ilgili görünüyor.
Liam

Matematikte bir problemi çözmenin titizliği ve disiplini programlamaya dönüşür. Bir problemi çözme ve ona önce bariz yönden sonra da her iki disiplinde de daha yaratıcı yönlerden yaklaşma yeteneğine sahip olmanız gerekir.
Bramha Ghosh

4
Hayranlık duyduğum iki harika programcı Bilgisayar Bilimi okumadılar, bunun yerine matematikçi olarak eğitildiler ve kariyer yollarını değiştirdiler: Miguel de Icaza ve Alexander Stepanov. Bu arada, Stepanov bir kez matematik üzerinde çalışırken ": Eğer aksiyomları ile başlamayın belirtti sona aksiyomları ile yukarı". : D
Joe Pineda

@Liam - Kısa vadede hafızada kalıp eşleştirme ve hokkabazlık yapmakla ilgili. Her iki aktivite de bu becerileri gerektirir.
jcolebrand

+1 "Birinde iyiyseniz, diğerinde muhtemelen iyi olma şansınız çok yüksek."
Thorbjørn Ravn Andersen

39

bilgisayar bilimi! = programlama

Tamam, cidden, İngilizce ve Psikoloji bölümleri ve bazıları Bilgisayar Bilimleri bölümü olan iyi ve kötü programcılar tanıyorum. Geliştiriciler olarak hayran olduğum bazı ünlü adamların bilgisayar bilimleri geçmişi yoktu. Örneğin Larry Wall (Perl) bir dilbilimciydi. Öte yandan, üzerinde çalıştığınız alan hakkında bir şeyler bilmek yardımcı olur, çünkü o zaman en azından verilerinizin mantıklı olup olmadığını görebilir ve müşterilerinizin / kullanıcılarınızın gerçekten istediklerini bulmalarına yardımcı olabilirsiniz. Ve evet, hesaplama karmaşıklığı ve verimli veri yapıları ve program doğruluğu sorunu var. Bunlar Bilgisayar Bilimi'nde öğrendiğiniz şeylerdir ve neredeyse her alanda bilmek yararlıdır, ancak bu ne gerekli ne de yeterlidir.


12
Ben duyduğum en iyi alıntı olduğunu düşünüyorum (Dijkstra'nın) "Bilgisayar bilimi artık astronomi teleskoplar hakkında daha bilgisayarlar ile ilgilidir."
tloach

5
Stackoverflow.com'un temelde bu tek satırlık cevapların üstesinden gelmek için yaratıldığını düşünüyorum, ancak bu işe yaramaz cevabı en üste çıkaran benzer düşünen 15 kişi var. Sizinle kişisel hiçbir şeyim yok, ancak cevabınızı "saldırgan" olarak işaretledim. En azından benim için öyle.
simsim

2
@simsim: İnsanların bilgisayar bilimleri derecesinin bir şekilde programlama ile ilgili olduğunu düşünmelerini rahatsız edici buluyorum.
tloach

3
@simsim: Joel ve Jeff'in bu web sitesini oluştururken akıllarında ne olduğu önemli değil. Her şey programcıların birbirine yardım ettiği bir topluluk oluşturmakla ilgili. David'in kısa cevabının doğru olduğunu düşünüyorum. +1
Scottie T

@ Scottie: Eğer mesele "programcıların birbirine yardım ettiği bir topluluk oluşturmak" olsaydı, forumlar ve posta listeleri yeterli olurdu. Belki cevabımda biraz sert davrandım, ancak elbette düzenlemeden önce 15 kullanıcının tamamen saçma bir "cevap" için oy verdiğini görmek şaşırtıcıydı. :-)
simsim

29

Sana ilk söyleyen kişi olacağım sanırım yapmak gerek matematik. Diğerlerinin dediği gibi, matematiğin gelişimin belirli yönleri için o kadar önemli olmadığını söylediği gibi, ancak eleştirel düşünme ve yapılandırılmış analizin temelleri çok önemlidir.

Dahası, matematik, zamanlayıcılar, optimizasyonlar, sıralama, protokol yönetimi ve bilgisayarların diğer bazı yönleri gibi şeylere giren birçok temeli anlamada önemlidir. Bir hesaplama seviyesinde yer alan matematik karmaşık olmasa da (çoğunlukla Lise cebiri) teoriler ve uygulamalar oldukça karmaşık olabilir çünkü matematik yoluyla sağlam bir matematik anlayışı büyük fayda sağlayacaktır.

Onsuz idare edebilir misin, kesinlikle ve daha az kapsamlı matematik bilgisinin sizi engellemesine izin vermemelisiniz, ancak şansınız veya eğiliminiz olsaydı, olabildiğince çok matematik çalışırdım, matematik, sayısal teori, doğrusal cebir, kombinatorikler, pratik uygulamalar, hepsi geniş bir bilgisayar biliminde hem pratik hem de teorik uygulamalara sahiptir.

Çitin her iki tarafında da oldukça başarılı insanlar tanıyorum (matematiğe güçlü bir şekilde odaklanmayanlar ve okula fizik veya matematik için gidenler), ancak her iki grupta da sayısal problemlerden ve algoritmalar ve matematik teorisi hakkında bilgi edinmekten hoşlanıyorlardı. .


Ben ikinci oldum. Kişi onsuz idare edilebilirse de - kararından pişman olur mu? Orta derecede heyecan verici / zorlu bir işe sahip olmayı bile bekliyorsanız, edindiğiniz matematik becerileri kesinlikle size yardımcı olacaktır.
Andras Vass

Yeterince adil! GrayWizardx ve diğerleri: Kendi kendine öğrenen biri olarak, okuma materyalleri açısından ne önerirsiniz? Daha gençken matematiğin bana öğretildiği ölümcül derecede kötü yoldan büyük ölçüde etkilenmiştim. Başka bir yerde suçlamak istemiyorum ama matematik acımasızca sunuldu. Şimdi parayı kullanma zamanı. Burada özetlenen matematiği (kalkülüs, doğrusal cebir, Ayrık Matematik, vb.) Kendi başınıza öğrenmek ne kadar KOLAY? Bu yaklaşım için önerilen belirli ders kitapları var mı? Üniversite diploması artık bir seçenek değil!
Emmel

1
@Emmel, aslında "The Manga guide to Math" ve "The Manga guide to Calculus" u orada bir Barnes and Noble'da izledim ve geçen gün "Tam Aptallar Kılavuzu Doğrusal Cebir" gördüğümü biliyorum. Gerçek kaynaklara gelince, bazı harika matematik web siteleri var (öğrenciler vb. İçin) ama hala kaç tanesinin ortalıkta olduğundan emin değilim. Arada bir yaptığım bir şey, bir toplum kolejine gidip matematik derslerini "denetlemek" (başarılı / başarısız olarak al) ve sadece tazelemektir. Havent bunu 5-6 yılda başardı ama geçen sefer çok yardımcı oldu.
GrayWizardx

26

Matematik derecem var, ancak kariyerimde bir kez bu matematiğe ihtiyaç duyduğumu hatırlayamıyorum. Mantıksal düşünme için zihnimi eğitmek açısından yararlıydı, ancak akışkanlar dinamiği, kuantum teorisi veya Markov Zincirleri kullanarak herhangi bir kod yazmadım. (Sanırım sonuncusu en muhtemel olanıdır.)

Çoğu iş kolu geliştiricisi, çoğu zaman ileri matematiğe ihtiyaç duymaz. Bazen trigonometriyi bilmek yardımcı olabilir ve kesinlikle matematiksel olarak tanımlanan algoritmaları uygulamak için yeterli matematiği anlayabilmek önemli olabilir - ama bunun ötesinde? Hayır.

Çoğu programcının bilgisayar bilimini ilerletmediğini - uygulamalar geliştirdiğini unutmayın. Modern bir otomobili sürmek için ileri mühendislik bilmeme gerek yok, ancak o otomobil neredeyse kesin olarak ileri mühendislik yoluyla geliştirildi.


Söylediklerinizin çoğuna katılıyorum, ancak programlamanın birçok yönünün ortak matematik ilkelerini anlayarak belirgin şekilde daha kolay olabileceği söylenemez mi? Bazen bir şeyin formülünü programlamak, aynı değere ulaşmak için kullanılan algoritmadan çok daha kolaydır ... bu formülü bildiğiniz sürece
BenAlabaster

@balabaster: Bazen - ama bunun çok sık olmadığını söyleyebilirim. Aynı şekilde, onu kullanmak için önceden bir formül bilmenize de gerek yok. Matematikte yetkin olmak iyidir, bu yüzden formülleri gördüğünüzde anlayabilirsiniz, ancak nadiren derece düzeyinde matematiğin kendisine IMO'ya ihtiyaç duyarsınız.
Jon Skeet

11
Matematik derecesi? O zaman bunun sadece sayılar olmadığını bilirsiniz. İki matematik derecem var ve içeriği sık sık kullanıyorum: mantığı analiz etmek / basitleştirmek için boole cebri, DSL yapımı için otomata / dil teorisi, büyük-O performans analizi için cebir vb.
joel.neely

14

Gelişmiş mantık (ayrık) matematiğe sahip olmanın gerçekten yardımcı olabileceğini iddia ediyorum. Küme teorisi ile birlikte. Yaygın bilgisayar programları ile uğraşırken, bu disiplinler çok yardımcı olabilir. Ancak, üniversitede aldığım diğer matematiklerin çoğu, görebildiğim kadarıyla çok sınırlı kullanıma sahip olan kalkülüstür. Programlamanın% 90'ı (veya buna benzer bir şey) çok basit matematikle iş uygulamaları yaptığından, çoğunlukla çok az matematik bilgisiyle idare edebileceğinizi söyleyebilirim. Bununla birlikte, boole cebri, mantık, ayrık matematik ve küme teorisinin iyi bir şekilde anlaşılması sizi gerçekten bir sonraki seviyeye taşıyabilir.


14

Tahıllara karşı geleceğim ve "Evet" diyeceğim

İnşaat Mühendisliğinden programlamaya geçiyorum (Beton Berbat!). Matematik geçmişim, alışılagelmiş birinci yıl konuları, ikinci ve üçüncü yıl Hesaplamalar (Diff EQ, hacim entegrasyonları, Seriler, Fourier ve Laplace dönüşümleri) ve Sayısal Analiz dersinden oluşur.

Matematiğimin bilgisayar programlama için inanılmaz derecede eksik olduğunu görüyorum. Kaçırdığım tüm Ayrık matematik ve mantık alanları var ve yalnızca geniş bir ders kitapları kütüphanesi, Wikipedia ve Wolfram sayesinde hayatta kalıyorum. Çoğu gelişmiş algoritma ileri matematiğe dayalıdır ve kapsamlı araştırma yapmadan gelişmiş algoritmalar geliştiremiyorum (Esasen yarım kurs değerinde bir çalışmaya eşdeğerdir.) Üzerinde durulacak devlerin omuzları gibi matematiksel temellere sahip değil.


Ortalama bir programcı gerçekte kaç temel algoritma yazar? Programlama işlerinin% 80'inin temel cebirin ötesinde matematik içermediğini tahmin ediyorum.
dbkk

@dbkk: Ortalama bir programcının en yaygın görevi, bazı etki alanlarının "iş mantığı" olan nesne modelinin tasarımıdır. Ve bu tür bir süreç matematikten başka bir şey değildir, ancak görevi yerine getirenler tarafından genel olarak yansıtılmamaktadır.
Boris Stitnicky

14

Ne yaptığına bağlı. Çok fazla 3B programlama yapıyorsanız, 3B geometri bilgisi kesinlikle gereklidir, katılmıyor musunuz? ;-) JPG gibi yeni bir görüntü formatı veya MP3 gibi yeni bir ses formatı oluşturmak istiyorsanız, kosinüs veya fourier dönüşümünü anlayamıyorsanız da oldukça kaybolursunuz, çünkü bunlar en kayıplı sıkıştırmanın temel aldığı temel özelliklerdir. . Matematiğinizi oldukça iyi biliyorsanız, diğer birçok problem daha iyi çözülebilir.

Ayrıca, çok fazla matematiğe ihtiyaç duymadığını bulacağınız birçok başka programlama görevi de vardır.


13

Konuyu bunu yayınlayacak kadar büyüleyici bulursanız, devam edin ve öğrenmeye başlayın. Gerisi doğal olarak gelecek.


9

Evet, gelişmiş matematiğe gerek yok - eğer ticari program yapıyorsanız - hazır yazılım.

Ancak, aşağıdaki gibi sert şeylerle uğraşırken:

  • Bir robotu kontrol etmek için yörüngeleri hesaplama
  • Belirsizliği ve otomatik muhakemeyi desteklemek için yapay zeka benzeri uygulamalar oluşturma
  • 3 boyutlu hareket ve grafiklerle oynamak

Bazı ileri matematik bilgileri işe yarayabilir. Ve onlar "bu dünyanın dışında" sorunlar değiller.

Bir ofis için gerekli kağıt miktarını "tahmin etmeye" çalışmak için bir yazılım yaratmalıydım (ve değerleri yaklaşık olarak belirlemenin en iyi yolunu bulmak cehennemdi).

Yine de dikkatli olmalısınız, çünkü gelişmiş şeyleri kullanırken kaybolmak kolaydır - Turing'i sadece doğru şekilde görüntülemek için dinamik bir menünün durumunu saklamak için kullanan bir arkadaşım var - humm ... belki de Hayal gücünde çok ileri gitti.


Bir web sitesini bir araya getirmek yerine, dosyaları sıkıştırmak veya MP3 dosyalarını düzenlemek gibi şeyler veya bilgisayarın ne yaptığını gerçekten anlamayı gerektiren herhangi bir şey ekleyebilirsiniz.
tloach

4
Bunu yapmak için Turing'i nasıl kullandı? Ouija tahtası mı yoksa seans mı?
Jared Updike

8

Ne tür bir programlama?

Ticari deneyimime göre, ileri matematiğe ihtiyacım yoktu, ancak bu, içinde bulunduğunuz alana büyük ölçüde bağlı.

Bilgisayar grafikleri, büyük miktarda ileri matematik gerektirir. Pek çok akademik bilgisayar programlama ileri matematik gerektirir.

Yani matematikte iyi olanlarla programlamada iyi olan insanlar arasında bir ilişki olma eğilimindedir.

Umarım bu belirsiz cevap yardımcı olur.


6

Bazı alanlardaki geliştiriciler için matematiğe ihtiyaç duyulurken bazılarında neredeyse yararsızdır.

Bir oyun geliştiriciyseniz ve fizikle çok çalışmanız gerekiyorsa - matematiği anlamak çok önemlidir. Gelişmiş görsel kontrollerle çalışıyorsanız - geometri olmadan pek bir şey yapamazsınız. Bazı finansal hesaplamalar yapmayı planlıyorsanız - sağlam istatistik bilgisine sahip olmanız GERÇEKTEN yardımcı olacaktır.

Öte yandan, son 5 yılda HERHANGİ bir matematiğin gerekli olduğu sadece 2 veya 3 projem vardı. Bunlardan, bir Google araması yardımcı olmadığında yalnızca 1 kez gerçekleşti.

Günün sonunda, finansal hesaplamalar bile çoğu zaman müşterilerinizin sizin için yaptığı bir şeydir ve size uygulamanız için formüller verir.

Dolayısıyla, 'uygulamalı yazılım' işindeyseniz, matematik derecenizi asla kullanmayacaksınız. Akademik yazılımda iseniz matematik çok önemlidir.


"Oyun geliştirici" ye "simülasyon geliştiricisi" eklerdim. 93'te tüm şehri gezerken, Kuaterniyonların bana nasıl çalıştığını açıklamak için yeterince gelişmiş bir matematik kitabı bulmaya çalıştığımı hatırlıyorum, böylece ölü bir yeniden kodlama algoritmasını düzgün bir şekilde kodlayabilirdim. Bugün internet için Tanrıya şükür!
TED

6

Chris'e katılıyorum. Ben de "evet" derdim. Ancak bu, yukarıda belirtildiği gibi pazarınıza bağlıdır. Günlük çalışmanıza yardımcı olacak bazı temel "hazır" uygulamalar veya yazma araçları oluşturuyorsanız ... o zaman matematik o kadar önemli değildir.

Özel yazılım çözümleri tasarlamak, çok sayıda problem çözme ve eleştirel düşünme gerektirir. Bir matematik geçmişi mevcut olduğunda kesinlikle geliştirilmiş beceriler. Matematik alanında Bilgisayar Mühendisliği derecemle yandal oldum ve neden bugün bulunduğum yerde olduğum konusunda tüm matematik odaklı geçmişime kredi veriyorum.

Bu benim 2 sentim, yukarıdaki okumadan pek çoğunun aynı fikirde olmayacağını söyleyebilirim. Herkesi matematik altyapınız olmadan bu becerilere sahip olamayacağınızı söylemediğimi düşünmeye teşvik ediyorum, sadece becerilerin böyle bir geçmişe sahip olmanın yan etkileri olduğunu ve yazılımı olumlu yönde etkileyebileceğini söylüyorum.


6

Benim tecrübelerime göre, programlamada matematik gereklidir, bundan kaçamazsınız. Programlamanın tamamı matematiğe dayalıdır.

Konu siyah beyaz değil, daha renkli. Soru matematiğe ihtiyacınız olup olmadığı değil, ne kadar olduğu. Daha yüksek matematik seviyeleri size daha fazla araç verecek ve zihninizi farklı yollara açacaktır.

Örneğin, yalnızca toplama ve çıkarmayı biliyorsanız programlayabilirsiniz. Çarpma gerektiğinde, birçok ekleme yapmanız gerekecektir. Çarpma, tekrarlayan eklemeleri basitleştirir. Cebir, bir kişinin matematiği programlara uygulamadan önce basitleştirmesine izin verir. Doğrusal Cebir, görüntüleri dönüştürmek için araçlar sağlar. Boole Cebri, tüm bunları azaltmak için mekanik sağlarif ifadeleri .

Ve matematik, Mantık ve Felsefenin kardeşini de unutma. Mantık, caseveyaswitch ifadeleri. Felsefe, değiştirdiğiniz kodu yazan adamın düşüncesini anlamanıza yardımcı olacaktır.

Evet, program yazmak için fazla matematiğe ihtiyacınız yok. Bazı programlar diğerlerinden daha fazla matematik gerektirebilir. Daha fazla matematik bilgisi, daha az anlayışlı olanlara göre size bir avantaj sağlayacaktır. Bu zamanlarda, insanlar bu işleri elde etmek için elde edebilecekleri her avantaja ihtiyaç duyar.


6

8 yıldır profesyonel olarak programlama yapıyorum ve 12 yaşımdan beri hobi olarak.

Matematik gerekli değildir, mantıktır. Matematik korkunç derecede faydalıdır, bunun gerekli olmadığını söylemek, bir adamı öldürmek için silah gerekli değildir, bıçak kullanabilirsiniz demek gibidir. Doğru, ama bu silah işi çok daha kolaylaştırıyor.

Zaten karşılamanız gereken birkaç çıplak minimum var. Temel cebirsel ifadeleri ve gösterimi ve yaygın bilgisayar eşdeğerlerini bilmeniz gerekir. Örneğin, üstel ifadenin ne olduğunu bilmeniz gerekir (3'ün 3'ü 27'dir) ve ortak bilgisayar ifadesi 3 ^ 3'tür. Cebir için ortak gösterimler diller arasında değişir, ancak çoğu biraz birleşik bir metodoloji kullanır. Diğerleri (size bakarak LISP) istemez. Ayrıca işlem sırasını da bilmeniz gerekir.

Algoritmik düşünceyi anlamanız gerekir. Önce bu, sonra bu, bu hesaplamada kullanılan bunu üretir. Muhtemelen bunu anlıyorsunuz ya da anlamıyorsunuz ve anlamıyorsanız atlamak oldukça zor bir engel; Bunun gerçekten öğrenebileceğiniz bir şey olmadığını ve "elde ettiğiniz" bir şey olduğunu buldum. Tersine, bazı insanlar sanatı 'anlamaz'. Ressam olmamalılar. Ayrıca, Bilgisayar Bilimleri müfredatında bunun neden işe yaramadığını anlayamayan öğrenciler oldu: x = z + w; z = 3; y = 5; Eklemeyi anlamadıkları için değil, kesin ifade gerekliliğini anlamadıkları için. Anlarlarsa, bilgisayar da anlamalı, değil mi? Yukarıdaki üç satırda neyin yanlış olduğunu göremiyorsanız, o zaman programcı olmayın.

Son olarak, programlama alanınızdaki matematiğin ne olduğunu bilmeniz gerekir. Muhasebe yazılımı temel cebirde durabilir. Fiziği programlıyorsanız, 3 boyutlu geometride (Öklid) fiziği (gevşek bir şekilde) ve matematiği bilmeniz gerekir. Mimari yazılım programlıyorsanız, trigonometri bilmeniz gerekir.

Bu matematikten daha ileri gider; Hangi alan adı için programlama yapıyorsanız yapın, temelleri sağlam bir şekilde anlamanız gerekir. Dil analiz yazılımı programlıyorsanız, olasılık, istatistik, gramer teorisi (birden çok dil) vb. Bilmeniz gerekir.

Çoğu zaman, belirli alanlar ilgisiz olduğunu düşündüğünüz bilgiye ihtiyaç duyar veya bunlardan yararlanabilir. Örneğin, ses yazılımı programlıyorsanız, dalga biçimleriyle başa çıkmak için aslında trigonometri bilmeniz gerekir.

Büyüklük de işleri değiştirir. 1000 maddelik bir finansal veri kümesini sıralıyorsanız, bu büyük bir şey değildir. Ancak 10 milyon kayıt olsaydı, vektör matematiğini gerçekten bilmekten ve ikili düzeyde sıralama konusunda derin bir anlayışa sahip olmaktan büyük fayda görürdünüz (bir sistem alfabetik olarak nasıl sıralanır? 'A'nın' b'den küçük olduğunu nasıl bilir? '?)

Bunu bir programcı olarak göreceksiniz, genel bilgi tabanınız patlayacak çünkü her proje doğrudan programlama alanı dışında daha fazla öğrenmeyi gerektirecek. Kendi kendine öğrenme konusunda titiz veya tembelseniz ve haftada 10 saatten fazla temelde 'ev ödevi' yapmaktan hoşlanmıyorsanız, programcı olmayın.

Düşünce alıştırmalarını seviyorsanız, öğrenmeyi seviyorsanız, hesap makinesi olmadan matematik gibi soyut şeyler hakkında düşünebiliyorsanız veya eskiz defteri olmadan tasarım yapabiliyorsanız, yaşamda geniş zevkleriniz ve hobileriniz varsa, özeleştiri yapıyorsanız ve bir kenara atabilirseniz ' favori 'fikirler, eğer bir şeyleri mükemmelleştirmeyi seviyorsanız, o zaman bir programcı olun. Bu kararı matematiğe değil, mantıklı düşünme ve öğrenme yeteneğine dayandırın. Önemli olan bunlar; matematik sadece yan üründür.


5

Elbette bu ne tür bir programcı olmak istediğinize veya daha iyisi işverenlerinizin ne tür bir programcı olmanızı istediğine bağlıdır. Bence matematik ve cebir gerekli, istatistik ve doğrusal programlama gerçekten evrak çantanızda bulundurmak için iyi bir araçtır, belki analiz (türev, integraller, fonksiyonlar ...) olmadan da yapılabilir. Ama işlerin nasıl işlediğini bilmek istiyorsanız (örneğin elektronik, ya da bazı önemsiz algoritmalar) "ileri" matematik, hiçbir yerde olmadan gitmemeniz daha iyi bir şeydir.


5

Yaptığım programlamaların çoğu, elektromanyetizma, kuantum mekaniği ve yapısal mekanik gibi şeyler dahil olmak üzere araştırma için fizik simülasyonlarını içeriyordu. Problem alanları kendileriyle ilişkili ileri düzeyde matematik içerdiğinden, bunları ileri matematik kullanmadan çözmek için zorlanırdım.

Yani sorunuzun cevabı - ne yapmaya çalıştığınıza bağlı.


5

Yeni bir programlama dili yazacaksanız ileri matematik bilgisi çok önemlidir. Veya kendi algoritmalarınızı yazmanız gerekir.

Ancak, çoğu günlük programlama için - web sitelerinden sigorta işleme uygulamalarına kadar - sadece temel matematik gereklidir .


5

Sağlam bir matematiksel (sadece aritmetik değildir) veya mantık altyapısı olan biri, algoritmalar, değişken kullanım, koşullu akıl yürütme ve veri yapılarıyla iyi başa çıkacaktır.

  • Herkes bir kullanıcı arayüzü tasarlayamaz.
  • Herkes verimli kod yapamaz.
  • Herkes açıkça yorum yapamaz ve belgeleyemez.
  • Herkes iyi bir algoritma yapamaz

Matematik size bir noktaya kadar yardımcı olacaktır, ancak yalnızca bir noktaya kadar.


5

İleri matematik bilgisinin iyi bir programcı için bir gereklilik olduğunu düşünmüyorum, ancak kişisel deneyime dayanarak ileri matematiği daha iyi kavrayan programcıların daha iyi programcılar olduklarını düşünüyorum. Bu, basitçe daha mantıklı bir zihne veya matematik problemlerini çözme deneyimlerinden dolayı daha mantıklı bir bakış açısına bağlı olabilir.


5

Matematiğin temel kavramı, algoritmaların aşağıdaki, tasarlanması, anlaşılması, uygulanması ve kullanılmasıdır. Matematik yapamıyorsanız, bunun nedeni bunları yapamamanızdır ve bunları yapamazsanız, o zaman etkili bir programcı olamazsınız.

Ortak programlama görevleri herhangi bir özel matematik bilgisine ihtiyaç duymayabilir (örneğin, 3B grafikler veya fizik simülasyonları gibi görevleri yapmadığınız sürece muhtemelen vektör cebirine ve hesabına ihtiyacınız olmayacaktır), ancak temeldeki beceri setleri aynıdır ve yetenek eksikliği bir alandaki, diğer alandaki buna karşılık gelen bir yetenek eksikliği ile eşleşecektir.


5

Matematik, program oluşturmak için bir araç kutusudur. Cormen'in Algoritmalara Giriş'i öneriyorum. Daha "matematiksel" şeylere değiniyor.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Yüksek matematiğin iyi bir programcı olmak için bir gereklilik olduğunu sanmıyorum - her zaman olduğu gibi kodladığınız şeye bağlıdır.

Elbette, 3B grafik programlamadaysanız, matrislere ve malzemelere ihtiyacınız olacak. İşletme yazılımı yazarı olarak, muhtemelen istatistik matematiğine ihtiyacınız olacak.

Ancak neredeyse 10 yıldır (ve 10 yıl daha amatör) profesyonel bir programcı olmak, "yüksek matematik" düzenli olarak ihtiyacım olan bir şey değildi. Tüm vakaların yaklaşık% 99,8'inde, bazı akıllı kombinasyonlarda sadece artı, eksi, bölme ve çarpma - çoğu durumda bu matematikle değil, algoritmalarla ilgilidir.


4

Çoğu programcı için daha yüksek matematik öğrenmek önemlidir, çünkü beyninizi mantıklı düşünmeye, adım adım bir şeyden diğerine geçmek için büker.

Yine de çok az sayıda programlama işi, lise matematiğinin üzerinde bir şey gerektirir. Doğrusal cebiri bir kez kullandım. Asla matematik kullanmadım. Cebiri her gün kullanıyorum.


4

Matematiksel bilgi, grafik tasarım becerisi, bulmaca çözme yeteneği, iş ahlakı ve diğer birçok beceri ve özellik gibi genellikle bir programcı için yararlıdır. Çok az sayıda programcı, bir programcının muhtemelen iyi olabileceği her şeyde iyidir. " En sevdiğiniz programlama yeteneğini buraya giremezseniz}, gerçek bir programcı değilsiniz" şeklindeki herhangi bir ifadeye katılmıyorum .

Ama Matematik yapamayan bir programcıya karşı dikkatli olurdum. Çizemeyenlerden daha fazlası.


4

Sanırım gerçekten ne yapmaya çalıştığınıza bağlı, ancak IMHO, CS ve OS teorisi burada matematikten daha önemli ve gerçekten sadece içerdikleri matematiğe ihtiyacınız var.

Örneğin, modern işletim sistemlerinde birçok programlayıcının arkasında duran çok sayıda CS arka planı planlama teorisi ve optimizasyonu vardır. Bu, çok karmaşık olmasa da biraz matematik gerektiren bir şeye bir örnektir.

Ama dürüst olmak gerekirse, çoğu şey için matematiğe ihtiyacınız yok. İhtiyacınız olan şey, zihinsel olarak OR / VE yeteneği gibi 2. ve 16. temelde düşünme yeteneğini öğrenmektir. Örneğin, bir baytınız varsa ve bu baytın içinde iki adet 3 bitlik alan ve 2 boşa harcanan bit varsa, bayt değeri 11 gibi bir şey olduğunda hangi alanların hangi alanlarda etkin olduğunu bilmek, işleri kullanmak zorunda olmaktan biraz daha hızlı hale getirecektir. kalem ve kağıt.


Hiç kuyruk teorisi çalıştınız mı? Hafıza yöneticilerini ve geliştiricilerin birini diğerine tercih etmesini sağlayan istatistiksel modelleri hiç incelediniz mi? Cevabınızın sıkıntısına kesinlikle katılmıyorum, ama aşırı basitleştiriyorsunuz.
San Jacinto

@San: Aşırı basitleştirdiğimden eminim, ancak çoğu sistem geliştiricisinin bunları bu düzeyde bilmesine asla gerek olmadığını düşünüyorum. İlk iki derecemde temel düzeyde ve doktora derecemde biraz daha derin çalıştım ama asla benim gücüm olmadı, uzmanlara bırakmayı tercih ederim. Tanıdığım işletim sistemi çalışanlarının beni şaşkına çeviren matematik becerileri vardı.
Uri

bence çok geçerli. Sistem programlamasını işletim sistemi programlamasından ayırmaya ihtiyaç olduğunu düşünüyorum. Sıkı dokunmuş kavramlar, ancak yine de farklı.
San Jacinto

4

Cebir öncesi dersime girdiğimde programlamaya başladım. Bu yüzden matematiğin o kadar önemli olduğunu söyleyemem, ancak belirli programlama türlerinde, özellikle işlevselde yardımcı olabilir.

Henüz Ayrık Matematik almadım, ancak bu sınıfta öğretilen bir matematik notasyonu ile yazılmış programlama ile birçok teori malzemesi görüyorum.

Ayrıca, herhangi bir tabanda, özellikle 2, 8 ve 16 tabanındaki herhangi bir şeyi nasıl hesaplayacağınızı bildiğinizden emin olun.

Ayrıca, benim için gerçekten bazı kavramları getiren bir sınıf, bu ön programlama dersiydi. Bize sendikalar, kesişimler ve tüm bu mutlu şeyler öğretildi ve neredeyse tamamen bitsel matematikle paralellik gösteriyor. Ve boole mantığını çok yoğun bir şekilde ele aldık. En yararlı olduğunu düşündüğüm şey, karmaşık boole ifadelerinin nasıl azaltılacağını öğrendiğimiz zamandı. Bu çok kullanışlıdır:

(x|y) & (x|z) & (x|foo)

basitleştirilebilir

x | (y & z & foo)

Daha önce tam olarak anlamadım.


4

Pek çok cevap ürettiniz ve hayır hepsini okumadım. Ben bunun ortasındayım, hayır, programcı olmak için kesinlikle matematiğe ihtiyacınız yok. Linux'taki Assembler ve aygıt sürücüleri, diğerinden daha fazla veya daha az karmaşık değildir ve matematik gerektirmez.

Bunların hiçbiri için hiçbir şekilde şekil veya formda matematik dersi almanız veya geçmeniz gerekmez.

Programlama için problem çözme zihniyetinin matematik çözümlerine oldukça benzer olduğunu ve bunun sonucunda matematiğin muhtemelen kolayca geldiğini kabul edeceğim. ya da tam tersi matematik zorsa programlama zor olabilir. Bir sınıf veya bir derece veya herhangi bir kağıt parçası veya kupa gerekli değildir, dışarı çıkıp bir şeyler öğrenmek, elbette.

Şimdi, kafanızda, kağıt üzerinde veya bir hesap makinesi kullanarak onaltılıktan ikiliye ondalık sayıya hızlı bir şekilde dönüştüremiyorsanız, mücadele edeceksiniz. Çekirdek sürücülerinin genellikle yaptığı, ancak yapmak zorunda olmadığı zamanlama içeren ağ ve diğer şeylere girmek istiyorsanız. Mücadele edeceksin. Matematik dereceleri ve / veya bilgisayar bilimleri ve / veya hız hesaplamaları, saniyedeki bit sayısı, saniyedeki bayt sayısı, bir şeyler yapmak için ne kadar hafızaya ihtiyacınız olduğu vb. İle mücadele eden mühendislik derecelerine sahip çok uzun bir insan listesi biliyorum. bir dereceye kadar, bazılarının sahip olduğu ve diğerlerinin üzerinde çalışmak zorunda olduğu bir tür beceri olarak kabul edilebilir.

Sonuç olarak, irade gücüne inanıyorum, eğer bu şeyleri öğrenmek istiyorsanız, yapıp öğreneceksiniz, bu kadar basit. Bir ders almanıza veya çok para harcamanıza gerek yok, örneğin linux ve qemu sizi oldukça uzun süre meşgul edebilir, farklı asm dilleri vb. Çekirdek geliştirme için çökebilir ortamlar, gömülü vb. Bununla sınırlı değilsiniz. , ama istemiyorsan kaçıp ders alman gerektiğine inanmıyorum. Ee dersleri, cs dersleri ve matematik dersleri almak istiyorsanız ...


Bu alev yemi değil, gerçeklik. Dijital elektronik ve yazılım mühendisliği hakkında programlama perspektifinden bilmeniz gereken her şey özetlenebilir. 0, 1 ve veya değil. bu beş şey, dijital elektronik ve tüm programların çalıştığı şeydir. Büyük bir kutu hızlı nand kapısı ile her şeyi inşa edebilirsiniz.
old_timer

4

Matematiğe ihtiyacın var. Programlama matematikten başka bir şey değildir. Teorik fiziğin herhangi bir bulgusu, matematiksel çözümler ile açıklanmadıkça, pratik (uygulanabilir) bir çıkarım haline gelmez. Bilgisayarlarda ve daha spesifik olarak programlama dillerinde yorumlanamazlarsa bunların hiçbiri sayısal olarak çözülemez. Bu nedenle, belirli sorunları çözmek için farklı diller tasarlanmıştır. Ancak genel amaçlı ve java, c, c ++ gibi geniş çaplı programlama dilleri için, programlama görevlerimizin çoğu, veri tabanından, metin dosyalarından değerleri ayıklamak, pencerelere (masaüstü, web) koymak, manipüle etmek gibi aynı sorunlara tekrarlayan (sürekli) çözümler içerir. aynı değerler, bazen benzer cihazlardan bazı verilere erişilmesi (ancak farklı marka isimleri, farklı port ve bir baş ağrısı verilmiş) vb. üniter yöntemden fazlasını içermeyen,


3

IMO, muhtemelen bu alanda çok fazla bilgiye sahip olmadan matematik için bir yeteneğe ihtiyacınız var. Dolayısıyla matematikte iyi olmak için ihtiyaç duyduğunuz şeyler, programlamada iyi olmak için ihtiyaç duyduğunuz şeylere benzer.

Ancak genel olarak, günlük programlamada en son ne zaman ileri matematik kullandığımı hatırlayamıyorum, bu yüzden hayır.

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.