Programlama Öğrenmek İsteyip de İşe Nereden Başlayacağını Bilmeyenler İçin Detaylı Tavsiyeler

Programcı olmak isteyenler için sektörden biri olan Sözlük yazarı "alvagen", nelere dikkat edilmesi, neler yapılması gerektiğini bir bir anlamış.
Programlama Öğrenmek İsteyip de İşe Nereden Başlayacağını Bilmeyenler İçin Detaylı Tavsiyeler
iStock


1. önce programcı olmayınız. bunu ilerleyen süreçte size anlatacağım. 

2. araştı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. şimdi sebepleriyle yukarıdaki maddeleri açıklayacak olursak:

programcı olmayınız

türkiye şartlarında programcı yazılımcı olmanın size getireceği dezavantajları sıralamak gerekirse "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ısını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 programcı 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 öğrenilebilinen 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ı, programcı 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üstri 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 istatistiki olarak da bizim sektöre olan güveni ortadan kaldıran en önemli hususlardan biri...

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 mahkum 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 çokça 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 çıkarttılar ama artırdığınızda hiçbir sonucu tam olarak alamıyordunuz. bu sebepten bizde o zamanlarda "asp connetction" şeklinde arar 10'larca sayfanın içinde aradığımızı bulmamız 1 saatimizi alırdık. halbuki 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ğlanabiliriz.
recordset.open sql,connection
bundan sonrası 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. sayfada bir yerde bulabilirdim...

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 seo'ya 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 yarayan 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 filtrelerle 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 monotonlaşıyor ki işin içinden çıkılamaz hale gelebiliyorsunuz. bu durumda "ulan buna benzer başka bir site var mı?" acaba dediğinizde google sizin imdadınıza geliyor.

`related:http://stackoverflow.com/ `

bu komut ile stackverflow'a benzeyen siteleri size çıkartıp araştırmanızı başka bir boyuta çıkartabilirsiniz.

bir de en önemlisi okumaktan asla ama asla vazgeç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 davranabiliriz.

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österecektir size...

analitik 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ığı ya da çö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ılıklar gösteren olgu. illa "çelik" sektörünü bilmenize gerek yok. sadece 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ınız.

ö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. muhtemelen babalarının bir işi yok ise okudukları üniversite üzerinden 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 istatistikçi ya da işletmeci, endüstri mühendisi ile iyi geçinin. unutmayın bütün bilmediğiniz terimleri onlar size doğu aktaracak ki siz de 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 tirilyon tane app

- android için eclipse 

-php için xampp 

-apache

-mysql

bunlar en basit anlamda bir programcını vazgeçemediği programlar. yeri geliyor 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 sadece 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 sadece 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ıştır. .net çi bünyemde tarifi mümkün olmayan cılara sebep vermiştir ki öğrendiğim 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 uğraşmış olsam da bir türlü sevemedim. öğrenmek isteyenlere tavsiyem öğrenmeye bulaş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#: ++++ plustan 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ştirdiğ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, joom'la 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. tabii 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ğiniz cevaptan sonra sanırım hangi dil ile başlayacağınızı anlayacaksınız.