Yazılım öğrenmek için ne kadar matematik gerekir?

Benim şahsi fikrim eskiden az çok program yazdım . Bir programcı vardır kodu 40 satırda bitirir. Bir programcı vardır 20 satırda bitirir. Haliyle 20 satırda biten program daha az yer tutar ve daha performanslı çalışır işte bu noktada bile mantık yönü gelişmiş olması gerekiyor. Aslında matematikten öte mantığı kuvvetli insanlar daha iyi program yapar. Sonuçta 4 işlem bilen de program yazabilir ama ne derece verimli olur siz karar verin. Tabii ki lisans eğitimi almış kişilere mutlaka bilme zorunluluğu koymuşlardır ama heves için yazılacaksa program bilmeye gerek yok :)
 
Bir örnek verebilir misiniz acaba(bir ilkokul öğrencisine anlatırmış gibi)?
Mesela Minecraft gibi bir oyun dusunun, mantiken birisi alta indiginde farkli seylerle karsilasmali. Terrain toprak veya tasla kapli olmali, bunu dongu icerisinde (toprak alani = 4 katman) olarak hesaplamali. Dongu bittiginde alt katmanin dongusu baslamali ve alt kisimda tas, toprak, maden gibi seyleri uretmeli. Bunlarin hepsini matematiksel islem ve donguler ile yapiyorlar. @334155
 
Mesela Minecraft gibi bir oyun dusunun, mantiken birisi alta indiginde farkli seylerle karsilasmali. Terrain toprak veya tasla kapli olmali, bunu dongu icerisinde (toprak alani = 4 katman) olarak hesaplamali. Dongu bittiginde alt katmanin dongusu baslamali ve alt kisimda tas, toprak, maden gibi seyleri uretmeli. Bunlarin hepsini matematiksel islem ve donguler ile yapiyorlar. @334155
Başka bir örnek olarak ise Flappy Bird'de engellerin karışık olarak gelmesi diyebilir miyiz?
 
Başka bir örnek olarak ise Flappy Bird'de engellerin karışık olarak gelmesi diyebilir miyiz?
Eger programlama biliyorsaniz bu videoya goz atmanizi oneririm. Matematigin neden ve nasil kullanildigini bu videoda ciplak gozlerinizle goruyorsunuz. Orneginiz dogru bu arada.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
 
@yusufyardimci

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 kodlamada 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 lakin 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şken 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 (a ilk sayı, b 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 birçok kod yazabilirsin ama bazı birçok konuda da 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ını yokeden 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 birtakım 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 C dilini 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) İşte bu noktada matematik konularını da bu konuyla beraber öğrenmeye çalış. Çünkü veri yapıları ve algoritmalar içerisinde matematik barındırır. Ş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.
 
Son düzenleme:
Başlangıçta öyle her matematik konusunu bilmen gerekmez ama matematik gibi şeylerden hoşlanman lazım çünkü aynı mantıkta gidiyor. Örneğin sigma ile dizi hesaplayacaksın normalde kağıdı alıp fonksiyona sırayla değerleri toplarsın. Kod yazarken ise tabii oraya Sigma işareti falan yazmayacaksın for döngüsü yapacaksın döngüyü ona göre ayarlayacaksın yazım farklı mantık aynı. Matematiği sevmek yeterli ilk başta ama akademide ilerledikçe bilgi de gerekli olacaktır.
 
@yusufyardimci

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 kodlamada 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?

Eki Görüntüle 724106

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

Eki Görüntüle 724107

=====>

Eki Görüntüle 724108

Yani aslında bu kişi matematik bilmese bile bu işin algoritmasını kurdu lakin 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):

Eki Görüntüle 724109

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şken belirleyip ilk değer olarak 83’ü atayayım: İnt 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:”

Eki Görüntüle 724112

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 (a ilk sayı, b son sayı):

Eki Görüntüle 724113

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 birçok kod yazabilirsin ama bazı birçok konuda da 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ını yokeden 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 birtakım 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 C dilini 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 algoritmalar içerisinde matematik barındırır. Ş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.

Hocam mükemmel anlatmışsınız ama zormuş ya ama yapmaya gayret göstereceğim çok sağ olun yardımlarınız için.
 
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.
Hocam önereceğiniz bir kitap var mıdır başlangıç için?
 

Geri
Yukarı