Programlama için matematik şart mı?

Programlama için matematik kısmen gerekiyor. Örneğin bazı yazılımları geliştirirken formüller gerekebilir ama genel olarak 4 işlem gibi basit şeyler yeterli oluyor. Sana ek bir bilgi de vereyim. Ben sözel bölümden bilgisayar programcılığına geçtim.
 
Piyasada yaygın kullanılan programlama ile matematiğin doğrudan bir ilgisi yok. Çoğu program satır satır çalışıyor örneğin.

X = 5
X = X+10

Bu matematiksel olarak tam bir saçmalık ama geleneksel programlamada çok yaygın hatta en temel şeylerden biri. Değişken tanımlama, değişkene değer atama işlemi yapıyor. Bu matematikte olan bir şey değil. Bir denklemde bir şeyin değeri neyse odur. Diğer denklerim de ilk denklem ile tutarlı olması beklenir. Bu şekilde farklı denklemlerin eşitlenmeye çalışılması ile çözüm aranır.

Matematiğe yakın programlama da var. Onlarda direkt matematiksel denklemlere yakın kod yazarak iş yapıyorsunuz. Bu aslında çok daha kaliteli bakımı kolay kod yazmayı sağlıyor fakat yapılması gereken işi çok zorlaştırdığı için piyasada sınırlı alanlar dışında kabul görmüş değil. Haskell, F# gibi diller fonksiyonel programlamanın en yaygın olduğu diller. Bunlarda çalışabilmek matematik mantığına çok daha yakın. O nedenle faydası olacaktır fakat örneğin PHP yazan biri için matematiğin hiçbir önemi yok.

Özetle fonksiyonel programlama yapmayacaksanız matematik en fazla genel kültür olur çözüm üretme, analitik düşünme yeteneklerinizi geliştirir. Doğrudan programlamada kullanabileceğiniz bir disiplin sağlamaz.

Tabii şu da var C# ile de fonksiyonel programlama prensiplerine uygun bakımı kolay kaliteli kod yazabilirsiniz. JavaScript ile de yazabilirsiniz ama yaygın disiplin bu değil.
 
Son düzenleyen: Moderatör:
piyasada yaygın kullanılan programlama ile matematiğin doğrudan bir ilgisi yok. çoğu program satır satır çalışıyor örneğin

x = 5
x = x+10

bu matematiksel olarak tam bir saçmalık ama geleneksel programlamada çok yaygın hatta en temel şeylerden biri. matematiğe yakın programlama da var. onlarda direkt matematiksel denklemlere yakın kod yazarak iş yapıyorsunuz. bu aslında çok daha kaliteli bakımı kolay kod yazmayı sağlıyor fakat yapılması gereken işi çok zorlaştırdığı için piyasada sınırlı alanlar dışında kabul görmüş değil. Haskell, F# gibi diller fonksiyonel programlamanın en yaygın olduğu diller. bunlarda çalışabilmek matematik mantığına çok yakın. o nedenle faydası olacaktır fakat örneğin php yazan biri için matematiğin hiçbir önemi yok.
Kısmen doğru düşünüyorsun. PHP yazılımını kullanırken örneğin bir ekonomi sistemi geliştiriyoruz diyelim. En azından kişi 4 işlemi yapabilmeli, yüzde hesaplamasını bilmeli.
 
Şu an C# öğreniyorum. Matematiği normalde severim. Ama bu yıl pek bir şey öğrendiğim söylenemez. Dersler sırasında kafam hep başka yerlerde. Öğrendikten sonra projeler yapmak istiyorum mesela küçük bir oyun diyebiliriz ama bunun için iyi matematik bilmemiz lazım diyorlar. Ve şöyle diyeyim sadece 4 işlem biliyorum. Gerçekten lazım mı? Lazımsa çalışacağım.
Hayır gerek yoktur. Ama lise düzeyi matematik şart mı evet. Çünkü her şeyin temeli matematikten türediği için az da olsa matematiksel beceri ve düşünce gerekiyor.
 
Son düzenleyen: Moderatör:
Bence gerek. Her ne kadar öğreneceğin dilde gerekmese de bununla ilgili bir kariyer yapmak istiyorsan gerek. Çünkü mülakatta ne kadar iyi bilirsen bil, işveren kişi seçimini matematiği iyi olandan yapacaktır. Cevap, ne yapmak istediğine göre değişir aslında.
 
Yani kısaca öğrenmem iyi olur değil mi? Daha liseye geçmedim kendimi nasıl geliştirebilirim?
 
Yani kısaca öğrenmem iyi olur değil mi? Daha liseye geçmedim kendimi nasıl geliştirebilirim?
Eğer geliştireceğin yazılımda bol bol matematiksel işlemler ve formüller kullanacaksan öğrenmen yararına olur ama internetten araştırarak veya kendin çözerek formülü çözmek istersen işin biraz daha uzar fakat yapabilirsin.
 
Daha önce aynı sorunun sorulduğu başka bir konuda yazdığım cevabı aşağıya ekliyorum:

Soruyu sadece yazılımla değil, bilgisayarın tüm alanıyla ilgili olarak cevaplamak istiyorum. Öncelikle yazılım alanında matematik bilirsek program yazarken istediğimiz algoritmayı daha efektif bir yoldan halletmiş oluruz. Bu demek değildir ki matematiği iyi bilmeyen birisi iyi kod yazamaz. Yazar, fakat arka planda matematikte bilmediği bir şeyi aslında kendisi bulmuş olur ya da uzun yoldan yapar. Mesela bunları şöyle açıklayayım:

1) Matematiği bilmeyen biri 5x5 boyutundaki bir resmi nasıl yan yatırır?

1.png


Yazılımcının düşüncesi: “Resmi sola yatırmam demek resmin üst yatay tarafını sol tarafta yukarıdan aşağıya (dikey) indirmem demektir:”

2.png


|=====>

3.png


Yani aslında bu kişi matematik bilmese bile bu işin algoritmasını kurdu ve güç bir yoldan yaptı ama matematik bilen birisi bunu çok rahat anlayacak ki buna matematikte “Matrisin Devriği (Transpose of Matrix)” deniyor Bu da matematikte matris konusunu bilen yazılımcının algoritmik düşüncesi:

4.png

Görüldüğü üzere matematik bilmeyen bir yazılımcı bu işi mantığını kullanarak aslında matematikteki matrisin transpozunu bilmeden yaptı.

2) Matematiği bilmeyen bir yazılımcı A’dan B’ye kadar olan sayıları nasıl toplar?
A = 83
ve B = 1887 diyelim.

Yazılımcının düşüncesi: “Bir tamsayı değişkeni belirleyip ilk değer olarak 83’ü atayayım: int t = 83. Daha sonra da 1887´ye kadar sayan bir döngü kurup t değişkenine bu döngüdeki sayı değerini atayayım:”

5.png


Mesela burada yazılımcı matematik konularından mahrum olmanın cezası olarak zaman alan bir döngüyle işi halletmeye çalıştı. Sıkıntı şu; A’dan B’ye kadar olan sayılar ne kadar çoksa döngü de o kadar kez çalışıyor, bu da performans kaybı demektir. Halbuki Gauss yöntemini bilen bir yazılımcı bunu çok basit ve kısa zamanda sonucu bulacak şekilde tasarlayabilirdi. İlk sayı a, b ise son sayı):

6.png


Görüldüğü gibi formül asla sayının ne kadar büyük olduğuna bakmadan hemen sonucu veriyor: 1777925

Daha fazla uzatmak istemiyorum. Bunun yerine kabaca şöyle diyebilirim:

  • Görüntü işleme konusuyla ilgileneceksen matrisleri ve doğrusal cebiri (+ trigonometri de lazım olur) bilmelisin.
  • Algoritma performans analizi yapmak için köklü sayılar, üslü sayılar ve logaritma bilmeni öneririm.
  • Oyun motoru veya oyun programcılığı için trigonometri ve doğrusal cebir bilmelisin.
  • Üçgenlerin ve yuvarlakların olduğu her yerde trigonometri bilmek önemli. Mesela herhangi bir grafik kütüphanesi kullanmadan şekiller çizmen lazım ya da sıfırdan bir grafik kütüphanesi yapıyorsun ve haliyle bu şekilleri oluşturan fonksiyonları trigonometri kullanarak kendin yazacaksın.
  • Bilgisayar organizasyonu gibi bir konuyu devreler konusuyla birleştirip işin içine devreleri sokarsan boolean cebiri (hoş bu ayrık matematik altında bulunan ve normal matematikte olmayan bir konu – yani bilgisayarcılar-elektronikçiler için bir konu aslında) bilmen faydalı olur.
Uzatılabilir.

Kısaca tekrar etmem gerekirse matematik bilmeden çok iyi programlar yazabilirsin ama bazı konularda matematikte ilgili konuyu bilmediğin için o işi yapamayabilirsin. Yani Android Studio’da bir mobil uygulama yapmak için matematiği iyi bilmene gerek yok ama işin temeline inip daha iyi algoritmalar tasarlayabilmek için ve diğer başka matematik gerekli olan işler için matematikte ilgili konuları iyi bilmelisin.

Sana şunu söyleyeyim: Matematik okullarımızda anlatıldığı gibi, ne idiği belirsiz olan, oradan oraya akan anlam veremediğimiz sayılar ve ezbere yapılan bir alan değildir. Ben okulda matematiği hiç anlamayan biriydim. Bu yüzden canım çalışmak da istemezdi. Ne zaman çalışmaya kalksam okullar ve sınavlar için yazılmış, matematiğin aslına uymayan kitaplardan matematik öğrenemediğim için matematiğe ısınamamıştım. Lakin matematikteki bu konuların sırf eğlence olsun diye değil, gerçek hayattaki bazı sorunları çözmek için keşfedildiğini düşünürdüm ve bu yüzden de öğrenme isteği oluşurdu. Daha sonra Amazon sitesinden İngilizce olarak yazılmış matematik konularının her biri ayrı kitap olarak yazılmış olanları bulup okumaya başladım ve hala daha okuyorum ve öğreniyorum. Sana da tavsiyem okul için ezbere formüllerle anlatan ve konunun neye hizmet ettiğini anlatmayan okul/sınav kitaplarından uzak dur ve okuldan/sınavdan bağımsız olarak yazılmış (ki benim bildiklerim İngilizce) matematik kitaplarından konuyu öğrenmek için çaba göster. Daha sonra göreceksin ki matematikte olan konuların hiçbirisi öğrencilerin derslerden geçip geçemeyeceğini ölçmek için keşfedilmemiş, gerçek hayattaki sorunları ölçmek için ya da basitleştirmek için keşfedilmiş. Bilgisayarları ve yazılımları da gerçek hayattan ve mantıktan ilham alarak tasarladığımız için matematik işimize yarıyor.

Eğer amacın şu an için programlama dili öğrenmek ise çok fazla veya karmaşık matematik ağırlıklı örnekler çözmene gerek yok. Daha iyi programlamayı anlatan kitaplar var. Matematik konularını şimdiden programlama ile beraber öğrenmeye çalış. Daha sonra veri yapıları ve algoritmaları öğrenmeye çalış. Eğer matematik öğrenmeye daha başlamadıysan işte bu noktada matematik konularını da bu konuyla beraber öğrenmeye çalış. Çünkü veri yapıları ve algoritma analizi içerisinde matematik konularını barındırırlar. Şunu unutma bilgisayar ve yazılım asla programlama dili bilmek değildir. Dil sadece araç olarak kullanılır. Asıl önemli olan gerekli iş için en uygun algoritmayı tasarlayabilmek ve bilgisayarda uğraştığın alanı iyi bilmektir.
 
Sistemlerin arkaplanda nasıl çalıştığını öğrenmek istiyorsanız matematik gerekli ama resim ve grafik işlemlerini artık matematik bilmeden de hazır kütüphaneler ile geliştirebilirsiniz. Oyun geliştirme ile ilgileniyorum. İlk oyunlarımı Adobe Flash ile yapıyordum. Onun için de fizik motoru yoktu. Newton fiziğini basitçe ActionScript ile modellemek gerekiyordu. Fakat günümüzde her oyun motorunun fizik motoru var. Önemli olan bunları etkili şekilde kullanabilmeyi öğrenmek. Çok orjinal bir oyun yapmayacaksanız kendi fizik motorunuzu yazmanıza gerek yok.

Grafik işlemlerinde de böyle. Resmi yan yatırmak için matematik bilmenize gerek yok. Genel şeyler için çok yaygın kullanılan kütüphaneler var. Fakat özel bir şey yapmak istiyorsanız tabi ki hem iyi derecede programlama hem de iyi derece lineer cebir bilmeniz gerekecek.

Matematiğin etkisi tabi ki sıfır diyemeyiz. Örneğin oyunda XP ile level atlama sistemi yazacaksınız diyelim. İlerleyen levellerde level atlamanın daha da zorlaşması gerekecek. Bunu matematik bilmeden kurgulamanız çok zor. Binlerce levele tek tek if yazmak istemiyorsanız basit de olsa bir matematiksel denklem yazıp hangi XP hangi levele denk geliyor bu şekilde hesaplatmak gerekir. Ama bunun için çok da üst seviye bir matematik bilgisi gerekmiyor. İkinci dereceden denklemler bile yeterli. Tabi temel matematik de yoksa burada da zorlanabilirsiniz.
 

Geri
Yukarı