şükela:  tümü | bugün
  • bana gelen en yaygın sorulardan biri bu. buraya yazıyorum ki tek tek yanıtlamayayım.

    ben 1986 yılında abimin arkadaşından ödünç aldığı bir sinclair zx spectrum+ üzerinde şöyle başlamıştım:

    10 print "sedat"
    20 go to 10

    bu kodun ekranı sedat'larla doldurması beni büyülemişti. bakakalmıştım. abim bilgisayarı arkadaşına geri verdiğinde giden spectrum'un ardında da bakakalmıştım. bilgisayarsız dönemimde öyle program yazma krizine girerdim ki ilkokulda bilgisayarı olan arkadaşlarıma kağıtta kod verir "bunu çalıştırıp yarın çıktısını söyler misin" derdim (bkz: atari basic/@ssg). kağıttan bilgisayarlar yapardım. ekran çıktıları yazar, sonra başka bir kağıdı üzerinde yavaş yavaş aşağı çekerek "yavaş yavaş beliren anlamsız ingilizce yazılar" simülasyonu yapardım. öyle delirmiştim. sonra 1988'de babam eve bir amstrad cpc464 alınca normal insan gibi program yazmaya başladım.

    haliyle bir insanı programlamayla ilgili en gaza getirecek onu en çok sürükleyecek ilk başlangıç noktasının bizzat program yazmak, o elmayı ısırmak olduğunu düşünüyorum. bu yüzden ne zaman sorulsa "en kolay gördüğünüz yoldan başlayın" diyorum. farklı bir yöntem bilmediğimden bunu önermek zorunda hissediyorum.

    insanlar da diyor ki "e ya o yanlış tercihse?". orada da mesele aslında programlamanın temelini bir kere kapınca dildir platformdur bunların arasındaki değişimin gayet kolay olmasıyla çözülüyor. yani diyelim ki dünyanın en saçma diliyle başladın. sonra gördün ki senin yapmak istediğin için ahmet dili daha iyi. o zaman ahmet dilini öğrenmen çok daha az vaktini alıyor. "haa bu buymuş şu da şuymuş" diyorsun.

    zaten "öğrenmek", her şeyini ezberlemek de değil. bugün elinin altında internet gibi deniz derya varken sadece ne yapmak istediğine kafa yoruyorsun. ben bugün hala oturup "şu nasıldı?" diye aramam gerekiyor. zorunda olduğumdan değil, bu lüksten, hiçbir şeyi ezberlememe rahatlığından istifade etmek istediğimden. işime geliyor.

    bunlara dair internette kaynak çok. evet çoğu ingilizce. o yüzden "programlamaya hangi dilden başlayayım?" sorusunun cevabı "ingilizce" aslında. malesef türkiye koşullarında bu bir gereklilik. gelecekte olmamasını umduğum bir gereklilik.

    temelini öğrendikten sonra "ustalaşmak" ve o konuda aşmış olmak ise sürekli tatmin edilen bir merak duygusunu yağla balla beslemekten geçiyor. sorgulamak, "bu nasıl?", "bu niye?" sorularının yanıtlarını aramaktan. bir süre sonra "veri yapıları", "algoritmalar" gibi konular "peki bu bilgi gerçek hayatta ne işime yarayacak?" demediğiniz, tam tersine "aaa bu süpermiş" diyeceğiniz konulara dönüşüyor. ondan sonra bir bakmışsınız kainatlar yaratıyorsunuz, birini yıkıp yenisini oluşturuyorsunuz. öyle güzel.

    bu kadar anlatıp "programlar sizin tarlalarınızdır. onlara neresinden başlamak istiyorsanız öyle başlayın" demek biraz garip kaçıyor ama kendim için işleyen yöntem bu idi. bende işe yaradıysa sizde de yarayabilir gibi geliyor.

    ben nerede kod yazıyorum? c#'ta. c# mükemmel mi? hayır. her şeyi çözüyor mu? hayır. işimi görüyor. gölge etmiyor. kendiniz kod diyarlarında gezerken de kafaya takmanız gereken şeyler bunlar olmalı. "yapmak istediğimi yapmayı sağlıyor mu?", "bunu yaparken olabilecek en az hammaliyeyi çıkarıyor mu?". sonrası sizin hangi kainatı yaratmak istediğinize bakıyor.
  • a beautiful mind filmindeki john nash karekteri gibi bir süre şizofrenik hal icerisine dalarak seneler sonra bu halınızden kurtulup bir, ssg olabilme ihtimali mevcut, siz hangi kainatı yaratmak istediginize bakınız, ayrıca bu zaman diliminde başari elde edene kadar hep başarisizliklar peşinizde gezecek, örnek olarak ssg nin hasta 1.0 programı başarısız bir projelerden biri, birde ne yapmalı etmeli c# "mutlaka ve mutlaka bilin" meli ögrenilmeli.
  • hangi programlama kastedildigine gore cevabi degisebilecek soru.

    sirali olarak,

    (bkz: decision variables)
    (bkz: objective function)
    (bkz: constraints)

    yani once neyi kontrol edersem bu sorunu modelleyebilirim deyip bir dusunmek lazim. buna karar verdikten sonra bu degisken(ler)e bagli olarak objective function'i yazariz. son olarak da yine degiskenlerimizi kullanarak kisitlarimizi ifade ederiz. gerisi hic belli olmaz.
  • bana bu soruyu soran kişilere bazen mantıklı, bazen anlamsız cevaplar vererek yeterli denek üzerinde yaptığım testler sonucu bizim onlara verdiğimiz cevaplardan bağımsız, tamamen kendi kişisel özelliklerine bağlı olarak başarılı olduklarını ya da şanslarını başka alanlarda denemeye karar verdiklerini gözlemledim. yani ben adama "programlamaya ortaköy'den başla" dediğimde bu arkadaş süper bir coder olma yolunda ilerleyebilirken, 3-4 sene boyunca bıkmadan usanmadan her türlü saçma sorusunu cevapladığım ve yüzbinlerce (evet yüzbinlerce!) ascii karakterini heba ettiğim bazı kişilerin bunca yıl sonunda hala "peki en doğrusu acaba şu mudur?" modunda takılıp elle tutulur hiç birşey yapamadığını da gördüm.

    özetle size soruyu soran kişiye yanlış bir yönlendirme bile yapsanız, eğer gerçekten kafaya koymuşsa doğru cevabı bir biçimde buluyor (ki ingilizce bilmeyen örneklerini de biliyorum).
  • ilginç soru. bana bir dil ver diyenler için,

    python ama ingilizce şart
  • cevabını benim de bir hayli merak ettigim soru. şüphesiz ki bir hayli faydalı olacaktır.

    hatta bununla ilgili duyuru'da iki tane konu açtım, yardım edenler oldu.
    burdan.
    ve burdan.

    (yardım etmek isteyenler, bir mesaj kadar yakınım. hem ülker link falan da istemiyorum hayırlı bir iş, hayatımı kurtaracaksınız.)

    (bkz: ssg uyuma yazarına sahip çık)
  • programcilarin siklikla karsilastigi soru. ben kendimi cok iyi bir programci olarak gormesem de edinmis oldugum alti yillik piyasa tecbubesiyle ve microsoft'ta calisiyor olmamin da bana verdigi yetkiye dayanarak su tavsiyeleri verebilirim.

    1. once en azindan intermediate seviyede ingilizce ogren.

    2. eger yasin kucukse liseyi anadolu teknik lisesi elektronik veya bilgisayar bolumlerinden birinde okumaya calis. artik katsayi sorunu falan da yok. ne kadar erken, o kadar iyi.

    3. internette teknoloji ile ilgili yenilikleri takip edebilecegin kanallar bul. hosuna gidenlere gazete takip eder gibi her gun veya iki uc gunde bir girip bir goz at.

    4. discrete mathematics kitabi al bir tane. turkce de olur ingilizce de fark etmez. bu kitap sana zor geliyorsa o zaman matematigin eksik demektir ve eksik matematikle iyi bir programci olunamaz. programci olunamaz demiyorum ama iyi bir programci olunamaz. ha tabi dogustan dahiysen iqun 180 ise orasini bilemem :) algebra kitabi al ve temel cebir ogren, daha sonra discrete girersin. dicrete mathematics ogrenirken fark edeceksin ki zaten algoritma dedikleri sey aslinda bu kitabin ta kendisi, ayrica algoritma kitabina bile eger is mulakatina falan hazirlanmiyorsan cok fazla ihtiyacin olmayacak. bu kitabi yavas yavas sindire sindire gunde 2-3 sayfa okuyarak ve ornekleri kendi kendine cevaplamaya calisarak guzelce yala yut. herseyi tamamen anlamak zorunda degilsin yuzde 60'ini cok iyi anlasan omur boyu yetecektir.

    5. matematigini ilerletirken bir yandan da ufak ufak bir dili ogrenmeye basla. java veya c# gunumuzde bolca ekmek yiyebilecegin diller. amazon.com'dan kitap bak, cok sayida iyi yorum almis kitaplardan birkac tane secip satin alabilirsin. kitaplar pahali geliyorsa para bul bir sekilde al cunku sirali ve duzenli bilgiyi internette bir arada bulman zor. sonra monkey coder olur cikarsin :)

    6. en onemli madde bu. bu ogrendiklerini hemen kullanmaya basla. kafanda birkac birbiriyle alakasiz, kendini tekrar etmeyecegin proje uret, ornegin bir adet amiral batti oyunu, bir adet fotograf paylasim sitesi ve bir adet de adres defteri uygulamasi. bunlari ogrendigin bilgilerle sadece temel anlamda calisacak sekilde yapmaya gayret et. mukkemmel olmasi icin ugrasma. mukemmel diye birsey yoktur. arada zorlanacagin cok yerler olacak. buralarda stackoverflow gibi sitelere uye olup uzmanlara sorular sorarak eksiklerini tamamlama adina fikir alabilirsin. girebiliyorsan bir yerde junior veya stajyer programci olarak is bulmaya calis. sakin hard disk sokup takma ve cay demleme, birak o isi teknisyenler ve mutfak calisanlari halletsin. zira sen artik programcisin.

    7. yenilikleri takip et zira programcilik nankor bir meslek, iki yil calismazsan ornegin yeni mezun adamdan bir farkin kalmaz. amazonda cok satanlardan kendine birkac kitabevi belirle ve bu kitabevlerinin sitelerini, yeni cikardiklari kitaplari takip et. kitaplari hizli okuma yontemi ile de okuyabilirsin. cok fazla uzerlerinde zaman harcaman gerekmiyor. burada kitap okumanin onemi nerede neyi kullanabilecegini bilmek, alternatiflerin farkinda olmak,

    8. para almadan calisma. bu kadar kendini gelistirmek icin ugrasiyorsun, emek harciyorsun. sana hak ettigini vermeyenlerle calisma, onlara soz verme. ozellikle bedavadan adam kullanmak icin stajyer alan yerlerde bunu goreceksin, o oyuna gelme. az da olsa para verenini bul. hayir kurumu degilsin bunu unutma.
  • hakkında halihazırda çok güzel tavsiyeler verilmiş konu.

    benim 'nereden başlanmayacağı' konusuna naçizane ekleyeceğim birkaç şey olacak:

    günümüzde bu işe cobol ile başlanmaması gerektiği aşikar oldu artık. buna ek olarak, fazlasıyla tarihsel evrim geçirmiş ya da teknik gerekçelerle genişletilerek bugüne ulaşmış programlama ortamları kafanı bulandırmaktan başka bir işe yaramayacaktır. ne mi demek istiyorum: javascript (ve w3c dom), x86 assembly dili, sql ve hatta c++ türevleri tamamen kafa bulandırmaya yönelik ortamlardır. ekmek parası söz konusu olmasa biz de bulaşmazdık, inan bana. benzeri şekilde, php, ruby ya da visual basic .net gibi ortamlar da var, hiç bulaşma.

    program yazma ortamı olarak eclipse ya da visual studio ile başlayabilirsin ama başlamamanı tavsiye edeceğim. dikkatin dağılmasın diye. basit görünümlü ama içi kuvvetli bir editör yeter. benzeri bir nedenle emacs kullanma diyerek editör sınırımı da çiziyorum.

    diğer bir başlanmayacak nokta ise, mekaniğini anlayabilmek için farklı bir matematiksel ve bilgisayar bilimsel altyapı gerektiren programlama araçları. örneğin, antlr ya da prolog ile birşeyler yazabilirsin ama debug için bu dediğim temel gerekiyor azıcık. an itibariyle böyle bir temeli türkiye'deki lise eğitimi vermiyor.

    bir miktar karışık veya nerd işi olsalar da, fonksiyonların birinci sınıf tip olduğu ortamlar bu işi öğrenmek için çok kral ortamlardır, zaten yukarıda bir yerlerde python denmiş; hayatının bir evresinde scheme ya da ml de görmeni tavsiye ediyorum.

    öte yandan vaktin çoksa, ve ilginç birşeyler görmek istiyorsan hayatının iki gününü postscript'in nasıl birşey olduğunu incelemek için* ayırabilirsin. printer işine girmiyorsan daha fazla ayırma, eğlen gez.
  • öncelikle sevmekten ve merak etmekten başlayın. "x'in bi' arkadaşı varmış abi bi hastane otomasyon yazmış sonra şirket filan kurmuşlar parayı kırıyormuş" diyerek girerseniz bu işe afedersiniz pek bi' sikim öğrenemezsiniz. öncelikle sevin bu işi gerisi gelir sonra.

    x dili daha iyi, y dili daha ciks, z dili çok basitmiş diye de kafa yormayın. hangisi hoşunuza gittiyse oradan başlayın. olayın mantığını çözünce hepsi kolay gelmeye başlar zaten.

    object oriented yazmalıymışım, yazarken şunlara dikkat etmeliymişim diye kafanızı yormayın. en iyi program çalışan programdır. kendinizi geliştirdikçe işin alengirli taraflarını da kavramaya başlarsınız.

    maalesef ingilizce şart. türkçe kaynaklar yetersiz. forumlarda filan sorduğunuz sorular büyük ihtimalle cevapsız kalacak ya da kendini beğenmiş sığırlar ahkam keserek sizi programlamadan soğutacaktır. o yüzden ingilizce öğrenin. üşenmeyin.

    şu kursa gideceğim, bu kursa gideceğim, işin profesörü olacağım diye de düşünmeyin. kurslar işin temelini size öğretebilir fakat gerisi sizin programlamaya ne kadar zaman ayırdığınıza bakar. evde oturun, açın favori editörünüzü oturun kod yazın. sırf zevkine. bir şeyler başarmanın verdiği hazzı tadın. dediğim gibi sevmezseniz, merak etmezseniz olmaz bu iş.