• 20 yaşında üniversiteye gelmiş adamın siyah ekran görüp motivasyonu düşüyorsa başlamasın o adam zaten.
  • programlama dili öğrenirken en önemli unsur ne yapmak istediğinizdir. sizler için web tabanlı uygulama geliştirebileceğiniz programlama dillerini şöyle üstün körü kategorize edeyim.

    türkiye piyasasında hemen backend(arka taraftaki mantık işlemleri) işler bulmak için:
    dil: java
    framework: springboot

    türkiye piyasasında hemen frontend(ön yüzde kullanıcının gördüğü arayüz işlemleri) işler bulmak için:
    dil: javascript
    framework: angular >reactjs > vuejs
    not: burada framework dengeleri çok hızlı değişiyor ama birini bileni diğeri için de işe alıyorlar sıkıntı yok.

    machine learning / artificial ıntelligence işlerine girmek için.
    dil: python
    framework/library: tensorflow

    mobil android geliştirici işlerine girmek için:
    dil: kotlin
    framework: android sdk

    mobil ios geliştirici işlerine girmek için:
    dil: swift
    framework: swiftui

    yenilikçi ve alemin yükselen yıldızı backend işlere girmek için:
    dil: golang
    framework: echo, beego vs.

    yenilikçi ve alemin yükselen yıldızı mobile/frontend/desktop işlere girmek için:
    dil: dart
    framework: flutter

    framework(çatı/iskelet) nedir derseniz; framework dediğimiz şey de bir programlama dilini alıp hangi alanda geliştirme yapılıyorsa o alana uygun geliştirici yazılımcıya kolaylıklar sağlayan bir çok kodu size hazır sunan yapılar. mesela tavsiyelerimin hepsi web tabanlı uygulama geliştirmeye yönelikti ve yazdığım bütün frameworkler ile web tabanlı uygulama geliştirirken bir çok yardımcı kütüphane(kodlar bütünü) de beraberinde geliyor.

    aynı şekilde golang ile oyun yazmak için başka başka oyun frameworkler de var. bu da yine yazılımcıya oyun geliştirirken tekrar amerikayı keşfetmesi yerine oturup oyununu geliştirmesine olanak sağlıyor.

    önce ne iş yapmak istediğinize karar verin. ondan sonra da hangi dili öğreneceğinize karar verin. c gibi low level dillerle zaman kaybetmeyin. hele ki akademik geçmişiniz yok ise.

    --- spoiler ---
    at gibi potansiyel var yeni nesilde. sabahtan beri mesaj kutumu bombalıyorlar. ben de bu duruma karşı boş duramadım. aşağıdaki başlıklara ilgisi merakı olan herkesi newway adlı slack hesabımıza ve create-new-project adlı kanalımıza bekliyorum. orada buluşalım. ben ve boş boş gezen bir kaç arkadaşım mentörlük yapacağız istekli olan arkadaşlara. bir heves açılmış bir şey gibi görünebilir ama aslında ben bu tarz bir girişimde 5 yıl önce de bulunmuştum. sanırım o zaman yazılım bu kadar rağbet gören bir şey değildi. şimdi herkes önemini kavramış anladığım kadarı ile. umarım yine hevesim kursağımda kalmaz. slack'te görüşürüz. başlıkları ingilizce yazmam gözünüzü korkutmasın. sadece şimdiden yazılımcı diline geçelim istedim.

    software developer
    fullstack software developer
    backend developer
    frontend developer
    mobile android developer
    mobile ios developer
    unity3d game developer
    ai/ml developer
    system and network engineer
    cyber security
    database administrator
    devops engineer
    project manager
    product owner
    ui/ux designer
    illustrator
    designer
    content writer

    yatarak para kazanma, kolay yoldan köşeyi dönme falan vadetmiyorum. para toplayıp paradan para da yapmayacağız. eğer istekli arzulu sayısında belli bir yerlere gelirsek hem yeni bir şey öğrenecek hem de tecrübeleneceğiz. bakarsınız yanlışlıkla bir ve ya birden fazla değer üretiriz hiç belli olmaz. şimdi slack'e kayıt olun. orada yeterli çoğunluğu sağlarsak ilerleriz. yoksa destroy all humans!!!

    buraya kayıt olun
    --- spoiler ---

    edit: bir kaç düzenleme yaptım. mobil eklendi. ayrıca bir kaç soru geldi onları aşağıda cevaplıyorum.

    insan gibi davranan muhendis uyarılarıyla terraform yerine tensorflow olarak değiştirildi. hep karıştırıyorum onları.*

    suser-1'in soru ve cevapları.

    1. baska bur bolumde okuyan bir kardesin olarak bu alanda is bulma olasılığım ve maas durumum ne olur?
    2. eksi sozluk tarzi site kurabilmek icin hangi yazilim dillerini bilmem gerekir?
    3. sizce farkli bolum okuyan biru bu ise emek verirse karsiligini alir mi? tesekkurler simdiden.

    1. şu anda çalıştığım ortamda bilgisayar mühendisliği mezunu bir tek benim. kimyacı, fizikçi, matematikçi, turizmci gibi pek çok alandan insanla birlikte çalışıyorum. ki projemizin yazılım müdürü bile bilgisayar mühendisi değil. yani her kes yazılımcı olabiliyor ve boş beleş bir şirket değilse sadece cv'deki tecrübene ya da yaptığın projelere bakıyor. ayrıca avrupada ve amerikada çoğu üniversite bir alanda 8 yıl* tecrüben var ise seni o alana ait lisans mezunu sayıyor. yani 8 yıl yazılımcılık tecrübesi edindiğinde dünyanın en yaşabilir ülkelerinde mühendis olmaya hak kazanıyorsun. yamulmuyorsam ssg de bu şekil microsofta girmişti. ama gönlünüz rahat olsun etikete ihtiyacınız yok bu işi yaparken. sadece bilg. müh. mezunlarının bir kaşıntısı var bu konuda. siz onlara takılmayın. hepsi armut değil gördüğünüz gibi.

    1.5. maaş durumu şu an epey iyi. 5-10 yıllık yazılımcı maaşları 2000-3000 dolar arası değişiyor kazançlar tr'de.

    2. ekşiyi yapmak çok basit aslında. html, css, javascript ile ön yüzünü yazabilirsin. java, golang, python, c# gibi diller ile de arka yüzünü yazabilirsin. postgresql, mysql gibi açık kaynak kodlu veritabanlarında da verilerini saklayabilirsin. linux bir sunucu kiralayıp yazdığın bu web tabanlı uygulamanı da bütün dünyaya açabilirsin. tabi bu işleri düzgünce yapmaya kalktığında işler birazcık daha fazla komplike olmaya başlıyor.

    3. birinci ve ikinci cevap bu soruya da cevap veriyor. mühim olan tecrübe. kimse diplomaya bakmıyor. bakanlarla da çalışmayın zaten. direk vizyonsuz bir şirket olarak bir tik atın yanına. bilg. müh. olarak hemen sorarım yazılımcıların hepsi müh. mü yoksa başka alanlardan insanlar da var mı? benim için turna sol çünkü. başka alanlardan insanlar da varsa bu şuna dalalet eder demek ki bir şeyler üretmek için bir araya gelmiş bir sürü insan var içerde. öbür türlüsü ego savaşlarının olduğu bütün gün toplantıların yapıldığı boş beleş bir kamyon insan bir arada demek. genelliyorum, tabi ki her yer böyle değil ama benim gözlemlerim bu yönde.

    suser-2'nin sorusu ve cevabı:

    soru: hocam ben html ve css genel hatlarıyla temel olarak biliyorum yani ezbere bilmesem de ne yapılması gerektiği hakkında fikir sahibiyim gerek olduğunda da netten yardımla bir şeyler yapmaya çalışıyorum. şimdi ise amacım php öğrenip dinamik web siteleri yapabilmek.

    sence php öğrenmeye devam etmeli miyim yoksa daha basit ve daha kullanışlı olan başka dillere mi yönelmeliyim senin bildiğin.

    el-cevap: işe ilk başladığım yıllarda sorsan sana şu dili öğren, şununla yap, bu uçuyor bu kaçıyor derdim. ama sonra fark ettim ki hiç bir aracın önemi yok. önemli olan şey yapılacak ürünü en hızlı ve en kaliteli şekilde piyasaya çıkarabilmek. bunun yanında da eğer zamanın varsa kendini diğer yazılımcılardan farklılaştıracak yenilikleri araya sıkıştırmak.

    - eğer tek başına bir proje üreteceksen bildiğin yoldan git. ürünü 2 aydan fazla geliştirme ortamında tutma. kör topal kullanıcıyla buluştur. çünkü hedef kitlen ile çıkardığın ürün arasındaki bağı sıcak tutmalısın ve hedef kitlene göre geliştirmelerine devam etmelisin.

    - ama ben piyasaya iş yapacağım diyorsan, sana doğru cevabı kariyer net ve linkedin ilanları verecek. iş ilanlarında senin ilgilendiğin alanla ilgili en çok hangi programlama dilleri, araçları isteniyorsa onlara yönelmelisin. tavsiyem kendi projelerini de bu ilanlarda istenilen programlama dillerine ve araçlarına göre yapman. böylelikle projen elinde patlarsa piyasaya girerken tecrüben olmuş olur.

    ille de tavsiye istersen sektörün istediği; java(springboot), angular, postgresql yerine belki kan getirecek ama golang, vuejs, couchbase ile ilerle derdim, ama sen bana kulak asma en orta yolu ile ilerle; springboot, vuejs, postgresql ile kariyerinin ilk 5 yılını kolaylıkla ve rahatlıkla atlatırsın.

    yatırım tavsiyesi değil, yazılımcı tavsiyesi: springboot, vuejs, postgresql

    suser-3'ün sorusu ve cevabı:
    soru: .net core hakkındaki piyasa durumu nedir? bir de javascript, web alanında java'yı, c#'ı, python'u falan silecek diyorlar bunun bir gerçekliği var mı?

    el-cevap: eski javacı yeni java hater olarak şunu söyleyebilirim. rab gelse java'yı zor kaldırır piyasadan. dünya java'nın omuzları üzerinde koşuyor. dünya derken dünyanın en büyük sigorta şirketleri, bankaları, elektronik firmaları, teknoloji firmaları vs. paranın döndüğü yerlerin yüzde 80'ni* java ile yazılmış durumda. (cern bile java kullanıyor lan) bu dünyanın rabbi para ise, yazılımın da rabbi javadır. on yıldır dünyanın en çok kullanılan programlama dilini bir şey gelecek ve piyasadan silecek demek için kafanın aşırı güzel olması lazım. inanma onlara. çok sağlam bir kaynak değil ama yine de fikir vermesi açısından. son 10 yıllık geçmişi javanın burada. tiobe index

    ayrıca hiç bir şey var olan bir şeyi piyasadan silemez. sadece pastadaki payını azaltır, yıllar içinde de ya değişime uğratır ya da yavaş yavaş kaybolmasına vesile olur. silmek bir an da yok etmek demek. yok öyle bir dünya. ben deneme amaçlı yazdığı koda kıyamayıp yorum satırına alan yazılımcılar tanıyorum. komple bütün projeyi kaldırıp yerine javascript koyacak baba yiğidin adresini ver de tanıyalım.

    javascript ön yüzünden, arka yüzüne hatta veri tabanına kadar tek bir dil ile bütün uygulama geliştirme süreçlerini halletmene yarayan çok güzel bir dil. ama onun da handikapları var. götünü başını typescript gibi supersetler ile yamıyorlar da insanlar biraz daha sıcak bakmaya başlıyor. frontend'e şu an alternatifi yok ama backend'i domine etmesi çok zor. hele o callback pisliğiyle kimse uğraşmak istemiyor.

    .net core güzel geliyor, ama microsoft c# çıları küstürdü benim gözlemlediğim. çünkü keskin değişimleri sevmedikleri için c#'cı bu adamlar. sen önlerine yeniden öğreneceğin bir şey koyunca adam onu öğreneceğime springboot öğrenirim hem daha fazla iş imkanı var diyor. microsoft açık kaynak koda ve linux desteği ile yine gündemde kimse görmezden gelmiyor. yine de açık kaynaktan beslenen yazılımcılara kısa vadede büyük bir kaydırma yaptırması çok zor. uzun vadede ise ön yargıların kırılabilitesine bağlı. bana sorarsan oracle, microsoft, sap vs. bu gibi şirketlerin adını duyunca bir yerden lisans parası sokacaklarmış gibi hissediyorum. o yüzden hiç yüzüne bile bakmıyorum. bu konuda daha microsoftçu arkadaşlara danışmanda fayda var.

    suser-4'ün sorusu ve cevabı:
    soru: hocam sizce yazılımda matematiğin önemi nedir?

    el-cevap: yoktur. ben bir bok anlamam matematikten. her hangi bir dünya klasiğini alıp sıkılmadan okuyan ve anlayan her bipedal homo sapiens yazılımcı olabilir. rasyonel düşünebilmesi ve bir sorunun içindeki bir den fazla koşulu göz önüne alarak cevaplaya bilme yetisine sahip olması yeterlidir.
  • doğru bir seçim değildir. hayatında mantıksal cebir görmemiş ve oynadığı oyunların hevesiyle alana merak salmış şahsa donanım seviyesinde adreslemeye dikkat etmesinin önemli olduğu bir dil ile 2017’de programlama girişi yaptırmak pedagojik olarak saçmalıktır.
    bu tarz öğretilen programlama ile de ancak 3-5 pointer çevirip c ile kod yazdığını sanar yeni yetme. üstüne gidip firmware yazdırırsanız hangi header’ı kullandığının farkında olmadan siyah şapkalılara sistemin ötesini berisini açık bırakır.

    python gibi dinamik bir dil ( vs. static-strongly typed) ile akış kontrolü, döngü, paketleme, yapısal-nesne-fonksiyon temellilik kavramları yedirildikten sonra java üzerinden hazır derleyici ile daha alt seviyeye inilip bu şekilde pişmiş bir kişiye c ve c++ gösterilmelidir.

    bu da kısa donuyla akranları sokakta top oynarken kendisi komut satırından basic ile takılan bir mühendis hezeyanı olsun.

    cuda c çöp, clang ile opencl candır. ama gelin görün ki kurumsal baskıdan hayatlar java.
  • hayatını yazılımdan kazanan biri olarak doğru bulmadığım durum.

    c, yazılımcının standart kütüphaneleri ve veri yapılarını öğrenmesi için muazzam bir dil. hatta kişisel olarak her yazılımcının c'ye "bulaşmış olması" gerektiğini düşünüyorum.

    fakat yazılım geliştirmeye başlayacak kişi önce ne yapmak istediğine karar vermeli. web yazılımı yapacak biri sırf birinden duydu diye c++ öğrenmeye çalışmamalı.

    önce bir proje bulmalı, gereksinimlerini öğrenmeli ve hedeflediği süre içerisinde temiz iş yaparak projeyi bitirmeye çalışmalıdır. emin olun son 2 adımı google'daki mühendis de facebook'taki mühendis de rutin olarak yapıyor.

    1- gereksinimleri (kullanılacak dil, geliştirme ortamı vs) öğrenmek : tecrübeyle orantılı artan birşey. 1-2 proje sonra artık daha iyi araştırma yapabildiğinizi göreceksiniz.

    2- temiz iş (temiz kod yazmak) yapmak : yaptığınız işi sevmenizle doğru orantılıdır. eğer yaptığınız şeyi seviyorsanız ve en iyisi olmasını istiyorsanız her işte olduğu gibi özen gösterirsiniz. temiz kod yazmak da böyle bir şey. her zaman en iyi şekilde kod yazmaya çalışır ve düzenli kod yazarsınız.

    3- türkiye'deki hastalık olan "abi ajfsjasfjajsf dili çoh iyi ya onu üğren hariga dil" diye gelenlere saniyenizi ayıracaksanız bu işe girmeyin. en iyi öğretmen github'tır, stackoverflow'dur. bu 2 platformdan vazgeçmeyin. sürekli kod okuyun. başkası nasıl yapmış inceleyin ve daha iyisini kendi projenizde yapmaya çalışın.
  • konu "bilgisayar mühendisliği fakülteleri" açısından irdelenmiş diye o açıdan giriyorum. yoksa kod yazmaya başlayacaklara tavsiyeler diye bir başlığımız zaten mevcut ve orda "c ile başlayın, başlamayın" tartışmasına taraf olunabilir.

    ama bilgisayar mühendisliğini programcılıktan ibaret zannetmek hem yeni neslin dünyadan bir haber olduğunun göstergesi, hem de bunu "istediği" programlama dillerine çekmek tam bir "hoca anlatmadığı chapterdan sordu" ağlaklığı.

    aslında bizim bilgisayar mühendisliği fakülteleri de ne olduklarının farkında değil. yapmaya çalıştıkları şey computer science, kendilerine verdikleri isim computer engineer, yetiştirdikleri script kiddie (meraklısına: cs ve ceng farkı şurada fena anlatılmamış).

    hadi şimdilik farkını geçelim, cs ve ceng'lerden dünyada beklenen: sistem tasarlamak, veri yapısı tasarlamak, işletim sistemi dizayn etmek, gömülü sistemler üzerinde çalışabilmek, dağıtık depolama teknolojileri programlayabilmek, ölçeklenebilir yazılım/sistemler geliştirmek, veritabanı geliştirebilmek, compiler yazabilmek, network protokolleri geliştirebilmek, encryption/cryptography çalışabilmek, artificial intelligence, machine learning çalışabilmek, filesystem yapısı tasarlayabilmek...

    yani şu yukarıdaki paragraftan birini alıp "o bilgisayar mühendisinin işi değildir" diyebilir misiniz? (belki cryptography için, o da matematikçilerin -her konuda olduğu gibi- bu konuda da milleti tokatlayabilmesinden)

    şimdi bunları beklediğin adam kalkıp "siyah ekranla insanları korkutuyorlar" diyor c için. korkan "bebe" de kazık kadar, 90 at gücünde ehliyet vermişsin sokakta sürmeye yetkin, uyuşturucu kullanması yasal mı acaba diyorsun. öbürü kalkıp "hacettepe ne güzel python'a geçmiş" diyor. c'yi övdüğümden, python'u yerdiğimden değil (bkz: python/@hooker with a penis). ama ne dediğinizin farkında değilsiniz (ayrıca o çok sevmediğiniz siyah ekranla python da yazılıyor merak etmeyin, o chapter'a gelince görürsünüz).

    kendinizi nasıl pozisyonlandırmak istiyorsanız öyle pozisyonlandırın tabii. ne çalışmak istiyor, ne yazmak istiyorsanız onu yazın. ama dünyadan bihaber olmayın. harvard'da okumuyor olabilirsiniz ama ne öneriyorlar bakabilirsiniz. stanford'da okumuyor olabilirsiniz ama "acaba onlar ruby mi öğreniyor lan?" diye bakabilirsiniz. şimdiden söyleyim, hayal kırıklığına uğrayacaksınız, çünkü dünyada işler öyle yürümüyor.

    bir ara doktora tezlerine de bakın derim. örneğin hayatını "siyah ekrandan" korkarak geçiren adam lisansta "apple"ın programlama dili çok güzel görünüyor diye onu öğrenecek, sonra doktorada ceph yazacak. yesinler ağlaklığınızı.
  • c günümüzde de yaygın olarak kullanılan neredeyse tüm dillere ilham veren bir dildir. öğrenildiği takdirde tüm c like languages için bir alt yapı sağlar. ama öğrenme eğrisi biraz daha dik olabilir ve pes edebilirsiniz bu yüzden en azından c++ ile başlamak daha doğru olabilir ki onun da öğrenme eğrisi çok diktir ama object oriented bir dil olması nedeni ile günümüz dünyasında daha kalıcı şeyler öğrenmenize de neden olabilir.

    ama kanaatim odur ki bu diller ile pratikte bir şey ortaya çıkarmanın günümüzde çok daha zor olması nedeni ile pes etmemek ve ortaya kısa sürede bişeyler çıkarıp, haz alarak eğlenerek öğrenmek için python tavsiye edilir. hem functional hem de object oriented paradigmadan esinlenen, öğrenmesi nispeten kolay bir dildir. burada temel kavramları, (algoritma, variables, if-else, conditional loops vb..) öğrendikten sonra ne tarz bir geliştirmenin size uygun olduğuna, zevk aldığınıza karar verin.

    seçenekler bol ama en yaygın olanlar ve mesleği yazılımcılık olmamasına rağmen sonradan sektöre girecekler için alanı en geniş olanlar şunlar :
    - mobil uygulama geliştirme
    - web uygulama geliştirme

    ne seçerseniz seçin %90 bir veritabanı kullanacağınız için rdbms (ilişkisel veritabanı modeli), normalizasyon, denormalizasyon, sql konularına eğilin. ardından nosql kavramını da yüzeysel de olsa araştırıp öğrenin.

    eğer mobil seçerseniz ios için swift, android için java ve/veya kotlin öğrenmeniz gerekecek.

    web seçerseniz html, css, javascript öğrenmeniz gerekecek. ayrıca html, css, javascript ile mobil, web ve desktop hatta server uygulamaları geliştirmeniz de olası.

    yani en akıllıca yöntem şu :

    1) dile takılmadan sadece temel kavramları öğrenebileceğiniz bir platform seçin (python, c++, java, c#..) yüzeysel olarak kaynakları tarayın ve basit giriş seviyesi kodları inceleyin, temel kavramları öğrenip bir kaç dilde basit hello world programı yazın. hangisi size daha sıcak gelirse onunla ilerleyin..

    2) temel seviyeyi hallettikten sonra en geçerli olan (evet çok saçma ve tuhaf ama her yerde çalışıyor ve bunca yıl en geçerli kalan dil oldu) javascript ve html, css öğrenmeye başlayın.

    3) 2. adımla paralel olarak sql olayını araştırın ve temel seviyede öğrenin ve uygulayın.

    ilk adımları atıp emeklerken detaylarda boğulmadan size çok şey katacak bir klasik programlama ödevi olan hesap makinesi yapmayı deneyebilirsiniz (bir arabirim içermesine gerek yok, komut satırından basit hesaplamalar yaptırın, ardından arabirim içeren gerçek ama yine basit bir hesap makinesi yapın). ayrıca yine basit matematiksel fonksiyonlar ve hesaplamalar, basit komut satırı tabanlı sayı tahmin oyunu vb.. geribildirimli uygulamalar yapın ardından yine bir arabirim içeren adam asmaca oyunu gibi basit bir oyun yapın.. ancak temel seviye sonrası gerçek uygulamalara örnek olacak ve kolay altından kalkabileceğiniz , mutlaka veritabanı kullanımı da gerektiren bir proje seçin ve onu yapmaya çalışarak öğrenmenize devam edin. (örneğin ilkin bir öğrenci listesi oluşturup kaydeden iki ekran tasarlayıp kodlayın, ardından bu öğrencilere ait ders notlarını gireceğiniz üçüncü bir ekran yapın.. sonra sınıf durumunu gösteren bir grafik ekleyin.. sonra uygulamanın görselliğini css yardımı ile güzelleştirmeye çalışın. ardından yeni özellikler ekleyin.. hayal edin ve yapın)

    sebatlı olun, asla pes etmeyin, internette kaynak çok ama boğulmayın, en başta yaptığınız şey asla mükemmel olmayacak. yazılım geliştirme iteratif bir süreçtir. hataya açıktır. sabır gerektirir. bol şanslar..

    ekleme : android tarafında kotlin başlangıç seviyesi için daha doğru bir seçim olabilir. (ekleme için aperfecttool a teşekkür ederim) ayrıca backend tarafında ilerlemek isterseniz de başlangıç için iyi bir dil gibi gözüküyor ama o tarafta c# dilini daha hararetle tavsiye ederim.

    son ekleme : tüm bu saydığım diller için referans bir öğrenme sitesini de şuraya bırakıyorum (bkz: https://www.w3schools.com/)
  • ekşi sözlük cehalet topluluğu sunar.
  • üniversitelerde "kodlama" c ile öğretilir ki yazdığınız şeyin tam olarak nasıl çalıştığını en alt seviyelere inebilerek öğrenin. java ile python vesaire ile böyle bir şansınız yok.
  • 20 yasindayken bir turk universitesinde, turk akademisyenden kodlama dersi alacaksin ve bu guncel, daha anlasilir bir dille olsun diyorsun. bence guzel espiri.

    c yi adam gibi bileni bulursaniz opun basiniza koyun.
hesabın var mı? giriş yap