Rehber Yazılıma nereden başlanır?

Arkadaşlar herkese merhabalar,

Ben Fatih AKTÜRK, Yazılım Mühendisiyim, Siber Güvenlik, Görüntü İşleme ve Yapay Zeka alanlarında ortak bir çalışma yürüten Yüksek Lisans eğitimindeyim.

Forumda ve diğer platformlarda sıklıkla karşılaştığım bu sorunun cevabını, naçizane cevaplamak için bir rehber hazırlamak istedim.

Sevgili arkadaşlar,

Yazılım ülkemizde hemen herkesi iştahlandıran bir sektör haline geldi. Bu alana gerek maddi kazanç gerekse ilgi yönünden çok fazla yoğunlaşan insan var.
Konuya başlamadan önce, kendimizi tanımamız gerekiyor. Bu alana neden yöneliyoruz? Para kazanmak mı? İlginiz var ve keyfî öğrenmek için mi? Yoksa her ikisi de mi?

Bu sorunun cevabını verebildiğiniz takdirde, yolun büyük bir kısmını geçmiş oluyorsunuz.

Alana yönelim nedenimizi ele aldıktan sonra alana hakimiyet konusunu ele alalım;

Günümüzde yazılımcılar ya alaylı ya da kolejli olarak kendini ayırmaktadır.

Bunlar;
ALAYLI: Bu alan ile alakalı herhangi bir okul okumadan kendisini geliştiren ve yazılımcı olarak geliştiren/çalışan kişilerdir.

KOLEJLİ: Bu alan ise yazılım ile alakalı üniversite okuyan kişilerdir. Bu kısımda ikiye ayrılır, kolejliler ya Bilgisayar Programcılığı, Web Tasarım Kodlama gibi iki yıllık bölüm okuyanlar ile Yönetim Bilişim Sistemleri gibi 4 yıllık bölüm okuyanlar ve Bilgisayar, Yazılım vb. Mühendislik okuyanlar olarak bilinir.

Bu tanımlar genel ekseriyetle böyledir.

Bazı alaylılar gerçekten ciddi manada bir çok kolejliyi cebinden çıkartabilir iken bu çok nadir görülen bir durumdur.

Şahsi önerim mühendislik eğitimini muhakkak almalısınız. Okumayın diyenlere asla kulak asmayın. Okulda size kodlama öğretmezler, bakış açısı öğretirler. ŞAHSİ FİKRİMDİR.

Ben bu metnin üzerinde kalan ve altta yazacağım her şeyi, hem alaylı, hem 2 yıllık hem 4 yıllık mühendislik bitirmiş bir kolejli olarak kendi yorum ve gözlemlerime yaptım ve yapacağım.


Herkes mühendis olamayabiliyor. Alaylı bir yazılımcı olduğunuzu kabul edeceksek, kesinlikle ama kesinlikle mühendis gibi düşünmeyi öğrenmeniz gerekmektedir. Bunun bir eğitimi yoktur, tecrübe, ilgi ve bakış açısı ile alakalıdır. Gerçekleştikçe kendiniz fark edeceksiniz.

Gelelim sorumuzun asıl cevabına;
Yukarıda belirtilen durumlara göre kendimizi bir yere koydu isek devam edelim.

Yazılım bir ağaç gibidir. Temelde birbiri ile bağlantılı konular birbirinden ayrılarak ilerler. Bunlara mobil uygulama, web uygulaması, masaüstü uygulama, oyun ve benzeri gibi örnekler verebiliriz.

İlgili olarak bu alana yöneldiğinizi farz edersek, eğer bir oyuncu iseniz oyun yazmak istersiniz, eğer bir öğretmenseniz ders programınızı gösteren bir mobil uygulama yazmak isteyebilirsiniz. Bu örnekler çoğaltılabilir. Tamamen keyfiniz ve zevkinize kalmış şeylerdir ve çok keyiflidir.

Burada sizin çözmeniz gereken işte budur. Ben ne yapmak istiyorum? Bunun cevabını verdikten sonra ciddi bir gelişim göstereceksiniz.

Eğer para kazanmak isterseniz, günümüz için bazı önerilerde bulunacağım. Günümüzde her firma, kurum vb. hem mobil hem web uygulaması yazmaktadır. Dolayısı ile iki alana da yönelmeniz faydanıza olacaktır. Bu alanlar "Front End" ve "Backend" olarak ikiye ayrılır, adı üzerinde front uygulamaların tasarım kısmını oluşturan bölümler iken back kısmı ise arka planda, kullanıcıların birebir şahit olmadığı, uygulamanın planlandığı yerdir.

Araba gibi düşünürsek front, aracın rengi, tipi vb. iken back ise aracın motoru, yağı, suyu vb.'dir.

Backend komplike bir alandır ve ciddi mühendislik (eğitim olarak değil bakış açısı olarak) ister.

Buraya kadar geldiysek dil öğrenme kısmı burada devreye girecektir. Genel olarak her dil ile her şeyi yapabiliriz. Ancak buna şöyle örnek vereyim, daha iyi anlaşılsın. Normal bir araç ile ana yollarda gezebilirken dağ, tepe vb. gibi çıkması zor yerlerde SUV bir araç ile bunu çok rahat yapabilirsiniz. İkisini de istediğiniz yerde kullanabilirsiniz. Ancak konfor farkı olacaktır. Diller ve amaçlarını genel olarak böyle tanımlarım ben. Ama yazım açısından hemen hepsinin mantığı aynıdır.

Arkadaşlar, yazılımcı bilgisayarla konuşan kişidir. Siz bir çocuk gibi programınızı, bilgisayarınızı eğitirsiniz ve ondan istediği şeyleri yapmasını sağlarsınız.

Bu bakış açısını kazanırsanız eğer kendinizi daha iyi konumlandırırsınız.

Hangi dili öğrenmeliyim konusuna gelecek olursanız;

Yukarıda kendinizi bir yere koyduysanız eğer burayı okumanızı tavsiye ederim.
  • Yazılım ve bilgisayar temelleri için: Assembly, C
  • Web uygulamaları: Java, C#
  • Oyun: C#, C++
  • Mobil: C#, Java, Dart
  • Veri çekme ve işleme: Python
  • Temel yapay zeka: Python
Bu yazdıklarımın dışında bir çok dil bulunmaktadır ancak genel olarak aklıma gelenler ve en kolay kaynağa erişim olanları yazdım. Zaten yazılıma nereden başlamalıyım sorusunun cevabı bence asla bir dili öğrenmek değildir. 😊

Ayrıca soru olarak yazarsanız buradan cevaplarım.

Umuyorum ki faydalı olmuştur, sürç-i lisanım oldu ise affola,

Sorunuz, öneriniz varsa muhakkak dinlemek isterim,

Özel ise özelden de yazabilirsiniz, seve seve cevaplarım.

Saygı ve sevgilerimle, başarılar.
 
Öncelikle emeğinize sağlık hocam, ben de bu tarz konulara belki binlerce kez aynı cevabı vermişimdir, kesinlikle ve kesinlikle alaylı olmayın ve mühendislik fakültesini okuyun, çok yetenekli alaylı yazılımcılar var fakat bu gerçekten nadir, mühendis düşünce yani analitik düşünme becerisi olmadığı için zaten hangi dili öğrenmeliyim tarzı konular sürekli açılıyor, ben mühendislik bitiren ya da mühendislik okuyan kişilerin de bu soruyu yönelttiğini pek görmedim, en azından 3. Ve 4. Sınıflar açısından. Alaylı olmanın kesinlikle bir diğer eksisi de sektör artık o kadar rekabetçi bir noktaya geldi ki İK’ler diplomasız kişilere bakmıyor bile çoğu zaman. Üstüne yazılıp çizilecek daha çok satır var aslında fakat kurslar konusunda da bir eleştiri yapıp mesajımı bitireyim, Udemy tarzı platformlarda her dil için eğitim var fakat asla Mühendis gibi düşünme: mühendislik disiplini veyahut temel mühendislikle alakalı bir eğitim yok, alaylı olarak bu işi yapmak isteyenlerin en büyük eksiği ve aradığı şeylerin bu olduğunu söyleyebilirim, umarım bu eğitimleri de görmeye başlarız çünkü yabancılarda bu tarz eğitimler İnternette mevcut iken İngilizce bilmeyen kişiler bunlardan faydalanamıyor.
 
Öncelikle emeğinize sağlık hocam, ben de bu tarz konulara belki binlerce kez aynı cevabı vermişimdir, kesinlikle ve kesinlikle alaylı olmayın ve mühendislik fakültesini okuyun, çok yetenekli alaylı yazılımcılar var fakat bu gerçekten nadir, mühendis düşünce yani analitik düşünme becerisi olmadığı için zaten hangi dili öğrenmeliyim tarzı konular sürekli açılıyor, ben mühendislik bitiren ya da mühendislik okuyan kişilerin de bu soruyu yönelttiğini pek görmedim, en azından 3. Ve 4. Sınıflar açısından. Alaylı olmanın kesinlikle bir diğer eksisi de sektör artık o kadar rekabetçi bir noktaya geldi ki İK’ler diplomasız kişilere bakmıyor bile çoğu zaman. Üstüne yazılıp çizilecek daha çok satır var aslında fakat kurslar konusunda da bir eleştiri yapıp mesajımı bitireyim, Udemy tarzı platformlarda her dil için eğitim var fakat asla Mühendis gibi düşünme: mühendislik disiplini veyahut temel mühendislikle alakalı bir eğitim yok, alaylı olarak bu işi yapmak isteyenlerin en büyük eksiği ve aradığı şeylerin bu olduğunu söyleyebilirim, umarım bu eğitimleri de görmeye başlarız çünkü yabancılarda bu tarz eğitimler İnternette mevcut iken İngilizce bilmeyen kişiler bunlardan faydalanamıyor.
Merhabalar, gerçekten sizin gibi düşünen çok az kişi ile karşılaştım. Dediklerinize yüzde yüz katılıyorum. Ben her ortamda, arkadaşlara, gençlere bundan bahsediyorum. Bu dediklerimizin bakış açısı olarak kazandırılması gerekiyor hatta kendim Türkçe olarak birkaç içerik çekmeyi de düşünüyorum.

Zaten sektör yığılmış durumda, inanılmaz bir yönelim var. Dediğiniz gibi bakış açısının yanında iş bulma konusu içinde mühendislik okunmak zorunda çünkü devlet artık mühendisleri işe alımı teşvik edecek, ki ediyor diye de biliyorum.

Elbette işini çok iyi yapanlar vardır ancak yeni başlayanlar çok zorlanacaklardır.
 
Araba gibi düşünürsek front, aracın rengi, tipi vb. iken back ise aracın motoru, yağı, suyu vb.'dir.
Modern WEB'de bu doğru değil. Günümüzde front-end; server-side ve client-side olmak üzere ikiye ayrılıyor:
  • Client-side: Modern cihazlar çok geliştiği için eskiden back-end'de yapılacak işler artık burada yapılabiliyor. Burada ana hesap server'ın yükünü nasıl hafifletiriz oluyor.
  • Server-side: İse tam tersine client yükünü azaltıp bazı işleri server'da yapmaya ilgili çalışmaları kapsıyor. Ve her ikisi ile de front-end ilgileniyor.

Backend komplike bir alandır ve ciddi mühendislik (eğitim olarak değil bakış açısı olarak) ister.
Bir full-stack developer olarak kesinlikle katılmıyorum. "ciddi mühendislik" isteyen çok kurumsal backend projeleri var elbette ancak günümüzde çoğu backend projesi CRUD işlemlerinden ibaret. Asıl zorluk pattern ve mimariler girince başlıyor. Bir CQRS yada DDD ile proje geliştirmek elbette önemli bir öğrenim eğrisi getiriyor ancak Türkiye'de kaç projede bunlar kullanılıyor emin değilim.
 
Modern WEB'de bu doğru değil. Günümüzde front-end; server-side ve client-side olmak üzere ikiye ayrılıyor:
  • Client-side: Modern cihazlar çok geliştiği için eskiden back-end'de yapılacak işler artık burada yapılabiliyor. Burada ana hesap server'ın yükünü nasıl hafifletiriz oluyor.
  • Server-side: İse tam tersine client yükünü azaltıp bazı işleri server'da yapmaya ilgili çalışmaları kapsıyor. Ve her ikisi ile de front-end ilgileniyor.


Bir full-stack developer olarak kesinlikle katılmıyorum. "ciddi mühendislik" isteyen çok kurumsal backend projeleri var elbette ancak günümüzde çoğu backend projesi CRUD işlemlerinden ibaret. Asıl zorluk pattern ve mimariler girince başlıyor. Bir CQRS yada DDD ile proje geliştirmek elbette önemli bir öğrenim eğrisi getiriyor ancak Türkiye'de kaç projede bunlar kullanılıyor emin değilim.
Son mesajınızla alakalı bir şey demek isterim izninizle. Şu an yazılım öğrenmek isteyenlerin bir çoğunun hedefi yurtdışında çalışmak diye düşünüyorum. Ben kesinlikle mühendislik eğitiminin hem işe giriş sürecinde hem de bundan sonraki meslek hayatında çok işe yarayacağını biliyorum ve tahmin ediyorum. İşe giriş tarafında diploma avantajı olmuş olacak, iş hayatında da kendisi veya şirket hedefleri doğrultusunda alan değiştirmek istediğinde mantığı kavradığı için çok daha hızlı öğrenebilecek. Ben genç arkadaşları Üniversite eğitimi alabilecek imkanları varken bu imkanı kullanmamalarını istemem.
 
Son mesajınızla alakalı bir şey demek isterim izninizle. Şu an yazılım öğrenmek isteyenlerin bir çoğunun hedefi yurtdışında çalışmak diye düşünüyorum. Ben kesinlikle mühendislik eğitiminin hem işe giriş sürecinde hem de bundan sonraki meslek hayatında çok işe yarayacağını biliyorum ve tahmin ediyorum. İşe giriş tarafında diploma avantajı olmuş olacak, iş hayatında da kendisi veya şirket hedefleri doğrultusunda alan değiştirmek istediğinde mantığı kavradığı için çok daha hızlı öğrenebilecek. Ben genç arkadaşları Üniversite eğitimi alabilecek imkanları varken bu imkanı kullanmamalarını istemem.
Üniversite'nin kattığı en önemli şey İngilizce. Dersleri İngilizce dinlemek ve anlamaya çalışmak çok şey katıyor insana. Geri kalan her şey rahatlıkla halledilir.
 
Üniversite'nin kattığı en önemli şey İngilizce. Dersleri İngilizce dinlemek ve anlamaya çalışmak çok şey katıyor insana. Geri kalan her şey rahatlıkla halledilir.
Yanlış düşünüyorsunuz bence, mühendislik disiplini, temel mühendislik ve öğrenmeyi öğrenme kavramlarını nereden öğreneceksiniz? Bir mühendise lazım olan Lineer cebir vesaire? İngilizceyi zaten yazılıma başlayacak birinin kendi öğrenmesi elzem onun için Üniversite eğitimine bakmaya gerek var mı bilmiyorum. Kusura bakmayın ama mühendislik eğitimi almayan birinin Avrupa veyahut Amerika’da işe girmesinin ve yapay zeka gibi alanlarda çalışmasının da zor olduğunu düşünüyorum.
 
Modern WEB'de bu doğru değil. Günümüzde front-end; server-side ve client-side olmak üzere ikiye ayrılıyor:
  • Client-side: Modern cihazlar çok geliştiği için eskiden back-end'de yapılacak işler artık burada yapılabiliyor. Burada ana hesap server'ın yükünü nasıl hafifletiriz oluyor.
  • Server-side: İse tam tersine client yükünü azaltıp bazı işleri server'da yapmaya ilgili çalışmaları kapsıyor. Ve her ikisi ile de front-end ilgileniyor.


Senin anlatmaya calistigin sey "thin" vs "fat" client. ( Rich client - Wikipedia )

Client-side ve server-side sadece kod blogunun nerede calistigini anlatir, aldigi sorumluluk hakkinda bilgi icermez.
 
Alaylı > Mühendis.

Ama okul okumak şart, çünkü vizyon katıyor gerçekten.

Benim patron bilgisayar programcılığı okumuş mesela. :D Ben sağlam bir üniversiteden yazılım mühendisliği mezunuyum.

Okulda sadece girişi öğrendim, gerisini hep kendim araştırarak. Hocalar kitaptan HTML ile form yapmayı 3 derste öğretiyor. İnternette 1 dakikada öğrenebiliyorsun.
 

Yeni konular

Geri
Yukarı