şükela:  tümü | bugün
  • kesinlikle kendinen baslanilmali diye cevap verebilecegim soru. kendine soracaksin ben neden bir seyi veya bir olguyu programlamak istiyorum? ne sekilde programlamak istiyorum, amacim ne veya ben yeteri kadar sabirli ve ogrenmeyi seven bir insan miyim? bunlari kesinlikle kendinden emin bir sekilde cevaplamasi gerekiyor insanin.
  • kesinlikle;

    (bkz: project euler)

    misal;

    https://projecteuler.net/problem=11

    project euler'deki sorulari cozmek, bir sirkette ogrendiklerinizden cok daha fazla programlama becerisi gelistirmenize sebep olacaktir.
  • (bkz: hello world)
  • 1: önce programcı olmayınız. bunu ilerleyen süreçte size anlatacağım.
    2: arattırmacı ve google çok iyi kullanmayı bilmek
    3: araştırmacı ve analitik düşünce gücünüz diğer insanlara göre çok üst seviyede olması
    4: unutmayın tüm sektörlere hakim olmanız gerekmiyor. gereken tek şey karşınızdaki ne istediğin bilmeyen bir müşteriden onun anlayacağı değil sizin anlayacağınız kadarını öğrenmeniz..
    5: donanım seçimi (çok önemli)
    6: dil seçimi.
    7: ingilizceye hakim olmak.
    8: matematik ve analitik geometri düşünce gücünün olması (ne alaka demeyin birazdan anlatacam. )
    9: bol bol kitap okumak
    10: uyumamak.(bunu yaparken acı çekmemek)
    11: bilişim dünyasına (network, windows, unix, linux, ) hakim olmak. "ben yazılımcıyım yeaaaa gerek yok" demeyin.
    12: iyi bilgisayar seçimi.
    13: iyi bir ofis düzeni
    14: ergen düşünce gücünün belli bir düzeyde tutmak (fluarı olmayan okumasın bu bölümü.)
    15: size gelecek projelere "kendi" işiniz gibi empati kurarak yapın.
    16: kod yazılırken dikkat edilmesi gereken hususlar.
    17: "merak etmek" gerçi
    18: zamanında proje yetiştirmek. (buraya dikkat 16 yıllık tecrübemle zamanında yetiştirmediğinizde ne olacakları yazılacak.)
    19: kapanış....

    öncelikle uzun zamandır uğraştığım bir yazı idi vakit bulup kelimelere dökemedim.
    1: programcı olmayınız.
    a:) sebepleri
    türkiye şartlarında programcı yazılımcı olmanın size getireceği dezavantajları sıralamak gerelirkes "müşteri" profili der susarım. bu alanda müşteri profili çok ; ama çok önemli olduğu için önce bu seviyeye gelmeden önce davranış bilimlerini çok önceden okumuş bilmiş olmalısnız. tamam bir sherlock holmes olun demiyorum. ama karşınızdaki müşteriyi en iyi şekilde anlamak için gereken kısa kısa bilgiler önemlilik arz ediyor.

    memik yanık kitaplarından okumuş efsanevi nesil olarak nirvanaya hakkı öcal ile çıkıp "asp" kitapçıklarını satır satır beynimize kazınmış ve bu kitaplar zamanında bize çok faydası dokunmuştur. şimdi ise durum çok farklı. google gibi bir gerçek varken kimin ihtiyacı olur kitaplara. özelikle pdf dökümanlarla çok vakit kaybetmenin bir anlamı yok. örnek yazılmış kodlar ile "şu kod ne işe yarıyordu " şu döngüyü yazarsam ne olacak gibi temel öğeleri kitapların için boğulacağıma durup bir kod indirip "o" ne işe yarıyor demek sanırım daha basit ve verimli oluyor. bu demek değildir ki kitap okunmasın. kitap sadece temeli oluşturan sebeplerden biri.

    programcı olmayın sözünden çıkartacağımız sonu ise önce insanları çok iyi tanımamızdan geçiyor. benim tavsiyem prgramcı olmadan önce şu kitapları ve yazarları ya da ideolojiyi mutlaka kafanıza yer etmesi gerekir.
    - sosyal psikoloji

    -fototropizma

    -tigmonasti

    -refleks

    -izleme yoluyla öğrenme

    -şartlanma yoluyla öğrenme

    -deneme yanılma da olabilir. ( en önemlisi)

    bunlar temelde bilinmesi gereken olgular. henüz daha yazılıma bile geçmedim. sonuçta öğrenile bilinen bir meslek türü. yani yetenek ise sadece sonrasında geliştirerek alcağınız bir level ölçüsü olabilir.

    bu özellikler sadece başlangıç düşünme olgusu iki satır html bilen adam da kendisini yazılımcıyım diye nitelendiriyor. bunlar zaten bu piyasa da itibar görmediği gibi balta ile sap bir araya gelmeden piyasadan yok olup gidiyor.

    bu sebepten yazılımcı pgoramcı olmadan önce müşteri patron triplerini mutlaka dayanabilmeli ve zamanında çalışmamız gerekiyor aksi taktirde yaptığınız ve size zevk veren bir meslek acı keder göz yaşına dönebilir. mobingin kralını görmek zorunda kalırsınız.

    he bir de şu düşünce yapısı var ki evlere şenlik" yav oğlum sen endüstir mühendisliğini seç ben seni yazın bir yazılımcının yanına veririm orada öğrenirsin bu işi." he amk he öyle 3 ayda arshimet oluyorsun... bu istatiki olarak da bizim sektöre olan güveni ortadan kaldıran en önemli hususlardan biri...

    2: araçtırmacı ve google çok iyi kullanmayı bilmek
    google olmadan önce altavista vardı ki; algoritması genelde sayfada bulunan ve aynı harf ve kelimeden 2-3 tane var ise onu ön sıraya çıkartma prensibine bağlı formulu ile aslında istediğimiz sonuca tamda alamamamızı saladığı için el mahküm seve seve kullanmak zorunda kalmıştık. ne arasak salak salak sonuçlar çıkartırdı örnek.

    "asp connection string for"
    alta vista da aradığınız muhtemelen eğer makalenin içinde çokca bu cümle kullanılmış ise tutar bunu karşınıza getirir vehiç bir sonuç elde edemezsiniz. şuraya açıklık getirmekte fayda var altavista "asp", "connection", "string","for" şeklinde çalışır. bu da bütün sitelerde aradığınızda düşüncesize "for" kelimeciği ne kadar var. sonrasında ise iki kelime ve 3 kelimeye kadar çıakrtılar ama artırdığınızda hi bir sonuçu tam olarak alamıyordunuz. bu sebeten bizde o zamanlarda "asp connetction" şeklinde arar 10 larca sayfanın içinde aradığımızı bulmamız 1 saatimizi alırdık. halbu ki aradığım şey şu kadar basit birşey.

    "
    'declara edelim. ne kullancağımızı bilelim.
    dim connection
    dim recordset
    dim sql

    'önce hangi tabloya bağlanacam.
    sql = "select * from table_name"

    set connection = server.createobject("adodb.connection")
    set recordset = server.createobject("adodb.recordset")

    'veri tabanına bağlanılım.
    connection.open "dsn=dsn_name;uid=user_name;pwd=password;database=database_name"

    've artık bağlanabiliris.
    recordset.open sql,connection
    bundan sonrasuı ise klasik veri tabanı boş ise getirme mal gibi 500 hatası verme ya da çok parametreli hata gibi saçma sapan hata verme "boş" gibi bir hata ver döngüsü yazıyorsunuz...

    buradaki arama ve araştırma özelliği ise şu bağlamda önemli. misal. aradığım cümlede geçen "asp" ve connection" kelimeler altavistada sanırım 15. sayfadfa bir yerde bulabilrdim...

    peki google ne yapıyor bu alanda. arama kriterlerini bam başka bir alana çekip sadece sayfayı aramaktan vazgeçmiyor bir de insanların aradıklarından hangisi işe yaramış ona bakıyor. şimdi bunu anlatmaya kalkarsam seoya kadar gitmek zorunda olucam. bu sebepten balık tutmayı sonra öğrenin ben size direkt balık vereyim...

    google arama terimleri.

    -tırnak ile armak.

    örnek: "java null pointer exception" *. *
    eğer bu şekilde aradığımda bize sadece kesin olan sonuçşları verecek ve en çok işe yaraya siteyi getirip bizden daha önce bu problemle karşılan insalarla buluşturacak. mükemmel sonuç...

    -akademik makale ararken gerekenler.

    misal aramak istediğim şey genellikle bir akademik makaleyi içeriyorsa(ki gerecektir) bunun için yapmam gereken.

    örnek : opencv camera site:edu
    bu aynı zamanda sadece "edu" sonu edu içeren sitelere gidip akademik makalelere bakıcak benim için yapmadığı yok "motorun"

    -dosya türü şeklinde aramak.
    bazı durumlarda sizi filitlere dertlere gark edecek hatalar alırsınız ve bir dll soyasına ihtiyaç duyarsınız. bunun ne olacağı pekte önemli değil.

    örnek: filetype:jar java android

    bu şekilde yaptığınızda arama konusunda filitrelenmiş bilgiye ulaşırsınız ki bu aynı zamanda sizi bunaltıcı bir problemden uzaklaştırıp sonuca hemen götürür. haaayy google.

    benzer sitelere ulaşa bilme durumu
    misal http://stackoverflow.com/ programcıların en çok faydalandığı site; şimdi bazı durumlarda o kadar motonlaşıyor ki işin içinden çıkılamaz hale gelebiliyorsunuz. bu durumda "ulan buna benzer başka bir sie var mı?" acaba dediinizde google sizin imdadınıza geliyor.

    `related:http://stackoverflow.com/ bu komut ilestackverflow` a benzeyen siteleri size çıkartıp araştırmanızı başka bir boyunta çıkarta bilirsiniz.

    birde en önemlisi okumaktan asla ama asla vaz geçmemek esas prensiplerden biri.

    araştırmacı ve analitik düşünce gücünüz diğer insanlara göre çok üst seviyede olması *
    önemli konulardan biri daha. öncelikle "normal" insanların araması ile sizlerin araması arasında çok büyük farklılıklar gösterir bu düşünce tarzınızı da geliştireceğini unutmayın. en çok bildiğimiz şeyler aslında hiç bilmiyormuş gibi davrana biliriz.

    normal bir kullanıcı google da sadece işine yarayacak olan terimi arayacaktır. örnek vermek gerekirsek "masa sandalye fiyatları" bu size reklamlar beraber sanırım 30.000 sonuç verebilir. ve bu sonuçların içinden sadece 10 tanesi işinize yarayabilir. ama bir yazılımcı ise bunu şu şekilde araması gerek. "oval ofis çalışma masası gri" bu şekilde aramak ile bir önceki örnekte olan arama arasındaki farkıda google zaten gösterecekir size...

    analitiik düşüncede ne la diyenlere gelsin. "problem çözme kabiliyeti." yani karşılaştığınız problemlerin tecrübesi ile doğru orantılıdır. 1 yıllıık bir programcı (4 yıllık üniversiteyi bitirip iş hayatına atılan programcıdan bahsetmekteyim.) ile 10 yıllık programcı arasında büyük farklar gözetir. 1 yıllık programcı aradığı yada çözümü 10 yıllık programcı 3 mili saniyede yapar. bunun sebebi ise o problemi defalarca ve farklı bir açıcan bakarak çözmüş olmasıdır. bu sebeple tecrübe yazılımda çok önemli olduğu aşikar.

    tüm sektörlere hakim olmak.

    bu da kendi içinde çok farklılkla gösteren olgu. illa "çelik" sektörünü bilmenize gerek yok sadce o sektörün tozunu 3 günde bilmenize ve analitik düşünce gücünüz ile anlamaya çalışmanıza gerek var. zaten sektörü bilmez iseniz ve anlamaz iseniz size ne anlatırsa anlatsınlar. o proje yerde kalacaktır. sürüncemeye geçip "test aşamasında" yalanlarına başlamalısınzı.

    örnek vermek gerekirsek.
    bir kantardan veri alıp bunları işlemek üzerine bir kantar otomasyon yazılımı üretelim eğer kantar eski bir teknolojide sadece basit bir kart ile çalışıyor ve api si yok ise hemen c++ diline yönlenip sadece veriyi alacak kadar bilgi sahibi olmamız gerekiyor. sonrasında o bilgiyi "45", "34,5" gibi rakamları veri tabanına ekleyip analiz yaptırmaya başlamalısınız. buradaki önemli husus kantarı tanımak en basitinden kantarın çalışma prensibini bilmek. eğer bunu bilmez iseniz maalesef geçmiş olsun. wordpress te joomla da site yapmaya devam edin. zaten onlarda yazılımcı ya da programcı değiller. yeni nesil kendi kendine web sitesi yapmaya başladığında ki bu 3 sene sonra, piyasadan yok olup gidecekler. muhtamelen babalarının bir işi yok ise okudukları üniversite üserinden devam edecekler...

    yazılım programlama öyle sanıldığının aksine çok değişkenleri bulunan bir sistem. mantığını çok iyi kavramamız gerek.

    şayet bir fabrikanın üretim ve planlama analiz yazılımını yapacaksınız ise, mutlaka fabrika sahibini bir kenara itip sadece projede dahil olan istatikçi ya da işletmeci, endüstiri mühendisi ile iyi geçinin. unutmayın bütün bilmediğiniz terimleri onlar size doğu aktaracak ki sizede ona göre veri tabanı, programlama, class yapısını yapacaksınız. projeye başlamadan önce mutlaka projeyi yazıya ve kararlara bağlanmalı. projede kim var ise hepsinin imzası alınıp öyle programlama geçilmeli...

    donanım seçimi (çok önemli)
    bir kamyon şöförü arabası ne kadar önemli ise, bir tamircinin alet çantası ne kadar önemli ise, bir forklifçinin kullancağı ürünler ne kadar kaliteli ise sizde o kadar değerli ve kaliteli işler çıkartacaksınız anlamına gelir.
    beim tavsiyem mac almanız yönünde. 93 yılından bu yana pc başında olan beni 2011 yılında bir adet mac alarak bütün dertlerden kurtarmış ve şu sene ye kadar hiç bir sıkıntı çökme gibi sorunlar yaşatmamıştır.

    zira unutmayınız. sizin kurduğunuz programlar öyle basit yazılımlar değil.
    basitçe bir örnek vermek gerekirse.
    - visual studio
    - sql server 2008
    - macromedia dreemveawer
    - notepad ++
    - .net çatısı için tirilyontane app
    - android için eclipse
    -php için xampp
    -apache
    -mysql

    bunlar en basit anlamda bir programcını vazgeçemediği prgramlar. yeri geiyor bunların hepsinin çalıştığı zamanlarda oluyor. bu sebeple donanım çok önemli. doğru donanım ile işinizi daha hızlı ve zahmetsiz yapabileceksiniz.

    dil seçimi.

    bu alan en önemli alanlardan biri. benim düşüncem sadece bir programlama diline tam anlamı ile hakim olmak. zaten gerçekçi baktığınızda sadce bir java ömrünüzü alabilir.i "aradan çıkartalım şu dili" diyen adamın anlını karışlarım.

    kendi tecrübelerime dayanarak ve yaptığım en büyük hataya istinaden sadce 1 dil ve yandiller (ajax, javascript, css) sahip olmanız sanırım yetecek ve kafaları karıştırmayacaktır.

    java: 12 büyük proje ve 4 farklı proje katkıda bulunan benim bünyemde ciddi hasarlara yol açmıltır. .net çi bünyemde tarifi mümkün olmayan cılara sebep vermişltir ki öğrendiğm için şimdi şükür ediyorum. şu an android de oyun yazarken en çok ihtiyaç duyduğum programlama dili....

    objective c: bildiğin çince. 1 sene öğrenmek ve mobil ortamda projeler geliştirmek için urağşmış olsamda bir türlü sevemedim öğrenmek isteyenlere tavsiyem öğrenmeye blaşmayın. bunda da 19 farklı proje geliştirsemde hala benim için gizemli bilmediğim bölümler var ki evlere şenlik.
    net c#: ++++ plus tan oluşan bu nadide dil için ne kadar övgüler düzsem az. sanırım naçizane en iyi bildiğim dil diyebilirim. keşke bunun üzerinde yürüseymişim diye çok aklımdan geçirmiş olsam da "meraktan" diğer dillere de kafayı yormak zorunda kaldım. geliştirdğim proje sayısını şimdi aklımda bile değil.

    php: sanırım en kolay c tabanlı dillerden biri. başlayacaksanız ve sadece web tarafında olucam ve bu konuda projeler geliştirecem diyorsanız hiç kıvranmaya gerek yok. en mantıklısı bu dil olacaktır... ama sonunda wordpress joomla kurarken kendinizi yakalamayınız.
    net vb : php gibi masaüstü programlamanın en kolay dillerinden biri. 2000 yılında iş başvurusu yaptığım firma benden "uzaktan kumanda ile arabayı yönetme" programı istemişti. tabi o zamanlar c# ile ihç tanışmadığımdan(!) vb ile yapmış ve işe girmiştim. yani aslında her dil ile herşeyi yapabileceğimizi unutmayalım.

    özetle hangisi size daha basit ve yalın geliyorsa onu seçmenizde fayda var. en önemlisi "ne tür bir yazılımcı" olucam sorusuna verdiğinz cevaptan sonra sanırım han dil ile başlayacağınızı anlayacaksınız.

    --spoiler--
    arkası yazar olduktan sonra...
    --spoiler--
  • umarım programlamaya başlamak isteyen herkes bu soruyu sormadan bu sorunu aşar. programlamaya nereden başladığının kale alınacak bir önemi yoktur, başladıktan sonra nasıl devam ettiğin önemli. nasıl başlarsan başla, azim, hırs ve ozveri ile devam ettiğin sürece iyi bir programcı olacaksın. ama madem bu güzel soruyu sordun, ben de naçizane fikirlerimden bahsedeyim.

    bir programlama dilinden başlamalısın. özellikle nesne yönelimli bir dil ile başlaman doğru olacaktır. (bkz: java) (bkz: c sharp) (bkz: php) (bkz: c++) interntte 'programlama dilleri' diye aratıp bütün programlama dilleri hakkında bilgi sahibi ol. hangisi hangi alanlarda kullanılıyor, ne kadar popüler, derlenir mi, yorumlanır mı, framework furyası var mı... ayrıca kendine sorman gereken iki önemli soru var: ben hangi alanda uzmanlaşmak istiyorum, ne yapmak istiyorum? bu sorulara vereceğin cevapların varsa, ne ala, yoksa çok da önemli değil. başladıktan sonra, zamanla taşlar yerine oturacaktır.

    yeni başlayan biri için nesne yönelimli programlama yaklaşımını anlamak/özümsemek çok zor gelebilir. bu gayet normal. bu durumda yordamsal bir dil seçmen gerek. örneğin; c. düşük seviyeli bir dil olduğundan zor gelebilir. ama c ile başlamak, belki de verebileceğim en iyi tavsiyelerden biridir. zira c, programlamaya yeni başlayan birine programlamanın zor bir zanaat olduğunu öğretecektir. aynı zamanda programlamanın gücünü hissettirecektir.

    bol bol okuman gerekiyor. git en kalınından bir kaynak al. mümkünse yazarı türk olmasın. yanlış anlaşılmasın, yüzeysel oldukları için söylüyorum bunu. eğer java dilini seçtiysen herbert schildt'in java se kitabını öneririm. belki de bulabileceğin en detaylı java se referansıdır. aynı zamanda türkçe baskısı da (çeviri) bulunuyor.

    ingilizce biliyorsan ne alâ, bilmiyorsan da pekâlâ, öğrenmeye çalış. faydasını ziyadesiyle göreceksin. başlangıçta veri tiplerini, veri yapılarını, genel geçer programlama terimlerini öğren. biliyorum, hemen fetetmek istiyorsun dünyayı ama, sakin ol. küçük küçük denemeler yap. kendince soyutlama teknikleri geliştir. mesela, eğer nesne yönelimli bir dil seçtiysen iki sınıf oluştur: biri 'erkek' diğeri 'bayan' olsun. ikisi de 'insan'dan türesin. ortak fonksiyonları olsun ama, farklı davranış biçimleri sergilesin. ufak tefek algoritmalar geliştir. neredeyse bütün yazılım bileşenlerinde kullanılan çeşitli algoritmaların benzerlerini yaz. örneğin; short algorithms. kod furyası github'tan açık kaynak projeleri incele, anlamaya çalış. (çok etkili bir öğrenme taktiği.)

    programlama, aslında dört işlem, bir kaç mantıksal operatör ve akıştan (algoritma) ibarettir. bunu anladığında problemleri soyutlayarak çözebilmeye başlamışsın demektir. son taş da budur zaten. gerisi şu kutsal kelimelerden ibaret: azim, hırs, özveri, vakit.

    ha, eğer nesne yönelimli bir dil seçtiysen; elini klavyede öyle bir konuşlandır ki, 'new' operatörünü makinalı tüfekten çıkan mermi gibi savursun. ama unutma cephanen kısıtlı.

    edit:
    naçizane bir algoritma örneğini aşağıda linkini verdiğim entry'de bulabilirsin.
    #59551754
  • bununla ilgili şöyle bir görsel var ki bence çok yararlı.

    http://www.webmasto.com/…im-infografik-webmasto.png
  • aslında bir kere öğrendikten sonra diğer dillere zıplanabilir diye doğru cevaplanacak bir soru. yinede yaptığın, yapacağın, yapmak istediğin şeye uygun bir dil seçmek en iyisi olacaktır. kişisel zevklerin en önemlisi. diğer taraftan yaptığında satabileceğin konulara odaklanmak ta çok önemli.

    1 - en önemli şey algoritma
    algoritma öğrenmek en kolayı bence. günlük hayatta yaşadığın bir çok şeyi algoritmaya dökmeye çalışmalısın. mesela klasiktir çay demleme, trafik ışıkları, yemek yapma falan. bunu öğrendiğinde hemen her dilde google kullanarak bir yerlere gelirsin.

    oyun oynamayı seviyorsan unity üzerinde uğraş. diğer motorlar belki daha iyi ama unity biraz daha basit

    web sitesi geliştirmek istiyorsan php, c# üzerine git

    windows pencereli program yazmak istiyorsan c# delphi java

    linux ile çalışacaksan java python mono

    yukarıda saydığım diller olmazsa olmazlar değil. en popüler olanları aklıma geldiğince saymaya çalıştım.

    ayrıca sıfır bilgisayar bilgisiyle yazmaya kalkacaksan bence kullanacağın dilin kolay kurulumu falan da önemli. örneğin
    windows bilgisayarın var ve web geliştirme yapacaksın

    php kullanmak istersen xampp var. direk geliştirme ortamını ileri ileri diye kuruyorsun. sonrasında bazı işlemler için forumlarla uğraşıyorsun. herkes apache, php.ini, mysql ayarlarını yapamayabilir

    c# kullanmak istersen visual studio kuruyorsun. sana pek bir soru sormadan kendi sunucusunu kullandırıyor. işin kolaylaşıyor. bu c# dilinin değil geliştirme ortamının artısıdır tabi

    çok uzattım evet ama bence algoritma en önemlisi. bir bat dosyası yaz önce. excel de düşey ara ve eğer fonksiyonlarını kullanarak bir şeyler geliştir. oradan python a atla. sonra java ya geç. pencerelerle uğraşacağın zaman c# a bak. algoritmadan sonra ilk öğreneceğin dilde değişken türleri, fonksiyon, class, method, döngü, koşul kısımlarını anlarsan tüm dillere rahatça geçersin.

    bunlar güzel fakat veri olmadan program da olmaz. bu yüzden en önemlisi bir sql konusuna zaman ayırman. t-sql dili standarttır. her sql server da çalışır. mysql, mssql, psql, sqlite, oracle falan hepsi t-sql standardını kullanır. araya soktukları kendi fonksiyonlar haricinde insert update gibi komutlar hep standarttır. t-sql mutlaka öğrenmelisin.