Yazılımcı Olmak İsteyenlere Sektörden Bilgiler - ihan3t

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Selamlar herkese, uzun süredir aktif olarak konu açmamakla beraber bu konudan sonra uzun bir süre daha da açmayı düşünmüyorum. Hiç değilse kapsamlı konular açmayacağım. Bunun sebepleri arasında yoğun iş temposu, kendime ayırdığım kişisel zamanlar vs vs sebepler mevcut.

"Yazılımcı Olmak İsteyenlere Sektöründen Bilgiler" adlı konumun sorulmuş ve sorulacak birçok sorunun cevaplarını içermesi ve yeni sorular yöneltilecek referans konu olması dileğiyle..

Peki bu konuda size ne anlatacağım? 2.5 küsür senedir sektörde edindiğim tecrübeleri, daha önce yazdıklarıma ek olarak buraya özet geçeceğim. Bunu yaparken yıllardır aldığım ve karşılaştığım soruları soru&cevap şeklinde listeleyeceğim. Bu şekilde okuyucu açısından daha etkili olduğunu düşünüyorum çünkü okuyan herkes konuda kendinden bir parça bulup konu ile bağdaşıyor.

Öncelikle sorulara geçmeden önce şunu söylemek isterim ki, sektörde "software developer", "senior software developer", "software architect" vs vs pozisyonlarda yani "developer" olarak çalışmak isteyen arkadaşlar şunu iyice akıllarına kazısınlar ki "kod yazmak"tan çok daha önemli şeyler var.

Gördüğüm kadarıyla genel algı "X dilinde Y işlemini yapmak sektörde çalışmaya yeter" kafasında. Lakin gerçek hayatta öyle bir şey yok.

1 - Peki sektör neler bekliyor?

  • Bir dil üzerinde iyi derecede hakimiyet
  • Sadece kod yazmak değil, iyi okunabilir, sürdürülebilir, genişletilebilir, test edilebilir kod yazmak
  • Sadece dilin özelliklerini bilmek değil, her dil için evrensel olan design patternleri prensipleri bilmek
  • Sadece yazılım üretmek değil, bir yazılımı baştan aşağı tüm süreçleriyle yönetebilmek
  • Yazılım test süreçlerini iyi bilmek ve uygulamak
  • Architectural konuları bilmek (microservice arch., event driven arch., restful arch. etc.)
  • Uygulamanın yayına alınması/dağıtılması (deployment), monitoringi süreçlerinin uygulanması
  • Agile (genellikle scrum) yazılım geliştirme metodolojilerinin bilinmesi
  • Docker, jenkins, kubernetes gibi toolların bilinmesi
  • ...

2 - Peki nedir bu okunabilir sürdürülebilir genişletilebilir kod?

SOLID principles diyorum, gerisini size bırakıyorum.

3 - Peki nedir bu design pattern konusu?

GOF desing patterns, araştırın öğrenin uygulayın. Design patternler belirli sorunlara çözüm olarak geliştirilmiştir ve büyüyen/büyüyecek çoğu projede kullanılacak mutlaka birçok alan bulunur. Bu patternleri bilmeden yapılan projeler yönetilemez, "makarna kod" dediğimiz hale bürünür.

keywords :
Kod:
creational patterns, behavioral patterns, structural patterns, factory pattern, adapter pattern, facade pattern

4 - Yazılım test süreçleri neler?

Bir yazılımın en temel testi unit testtir. En küçük parçalar halinde yazılımınızın logicini test edersiniz. İleriye yönelik yapılan değişikliklerde geçmişte yazmış olduğunuz kodu bozmadığınızın bir garantisidir unit test.

keywords :
Kod:
junit, mockito, nunit, moq

Bir diğer test iste entegrasyon testleridir, uygulamanızın dış ortamlar ile entegre çalışıp çalışmadığının testi. Örneğin unit testlerde veritabanı bağlantısının testini yapmazsınız (yani gerçekten veritabanına bağlanıp bağlanmadığınızı test etmezsiniz), bu entegrasyon testinin bir parçasıdır.

Bir diğer test yöntemi ise test otomasyonudur. Yazdığımız apileri her geliştirmede tekrar tekrar manuel test etmek yerine, bu apilere doğru istekleri yollayan ve karşılığını kontrol eden yazılımlar geliştiririz. Böylelikle, yapılan geliştirmenin geçmişe yönelik request&response yapılarını bozmadığını test etmiş oluruz.

keywords :
Kod:
nodejs, mocha, chai

5 - Deployment ve monitoring nedir? Bu süreçler nasıl işler?

Deployment, yazdığımız uygulamayı environmentlara (makinelere) yükleme işlemidir. Tabiki bu işi (.netçiler için) visual studio da sağ click publish diyerek yapmayız. Makinelere fiziksel olarak bağlanıp elle uygulamayı atarakta yapmayız.

Bu işi otomatize bir şekilde yapan süreçler geliştiririz. Bu süreçleri geliştirirken işimizi kolaylaştıran bazı araçları kullanırız.

keywords :
Kod:
continuous integration, continuous deployment, docker, kubernetes, jenkins, travisCI, circleCI, octopus

Monitoring ise yayına aldığımız uygulamanın loglarını, sistem kaynaklarının kullanımını, hataların izlenmesini sağladığımız süreçtir. Bu süreçte sistemden ve uygulamadan toplanan veriler görselleştirme ve raporlama araçlarıyla takip edilir.

keywords :
Kod:
prtg, grafana, prometheus, graylog, kibana, logstash


6 - Agile nedir hacı?

Agile : Scrum Nedir?


Şimdi sektöre ve kullanılan araç gereçlere metodolojilere dair bilgiler verdiğime göre sorulara sizden gelen sorulara geçebiliriz.

Sizden gelen ortak sorular :

- Hangi dil ile iş bulurum?

Şuan Türkiye piyasasında en çok eppek yediren diller Java ve C# tır. Kurumsal büyük şirketlerin tamamı bu iki dili ana dilleri olarak kullanır. Onun dışında piyasada php, python ve nodejs te hatrı sayılır bir şekilde kullanılır.

- Sektörde desktop uygulama mı yaptırıyorlar?

Hayır dostum, bu denilen hemen hemen yok gibi. Şirket için gereken birkaç uygulama dışında desktop diye bir olay yok. Projeler çoğunlukla web tabanlı, yapılan mobil uygulamaların bir backend apisi var, yapılan siteler backend apilere bağlanıyor vs vs..

- İşe girmek için neler bilmeliyim?

Başlangıç olarak bir programlama dilini derdini anlatacak ve başkalarının derdini anlayacak kadar bilmelisin. Design patternlere aşina olmalısın, tamamını kullanmamış olsan bile genel konsepti biliyor, ihtiyacın olduğunda kullanabiliyor olmalısın.
Restful nedir, nasıl rest api yazılır genel konsepte hakim olmalısın.
Veritabanı işlemleri ve özellikle bir ORM aracı kullanmış olmalısın
CI/CD süreçlerini biliyor hiç değilse jenkins gibi bir tool ile ufak bir CI süreci oluşturmuş olmalısın.
Dockera bir giriş yapıp container teknolojisi kültürünü biliyor olmalısın.

- İşe girmek için diploma şart mı?

Arkadaşlar çok net söylüyorum diploma şart. Hele ki kurumsal yerlerde çalışmak istiyorsanız, diplomanız zaten var gözüyle bakılır. Başvuru yapanlar zaten bilgisayar/yazılım mühendisidir diye varsayılır, olmayanlar ciddiye alınmaz.

Hatta artık lisans diploması herkeste var, imkanınız varsa yüksek lisansa başlayın. Diploma konusu uzatılacak veya tartışılabilecek bir konu değil. Diploma ŞART.

- Yazılımı internetten mi öğrensem yoksa kursa mı gitsem yoksa kitap mı alsam?


Arkadaşlar bir konuyu öğrenmek, sizin çalışma şeklinize, motivasyonunuza, öğrenme arzunuza bağlıdır. Kendimden örnek vermek gerekirse, üniversite hayatım boyunca 30-40 civarı kitap almışımdır. Bunlardan yaklaşık 20 adeti kütüphanemde duruyor. Birçok kitap okudum. Fakat bunun yanında binlerce makale okudum, yüzlerce tutorial izledim. Yüzbinlerce satır kod yazdım.

Ben kitapları severim, elimin altında bulunsun, hiç değilse konu başlıkları açısından referans olabilecek bir kaynağım olmuş olur. Tutoriallarda ise hands-on programming gösterildiği için izlerken pratik yaparak akılda kalıcı olması sağlanır. Makaleler ise bir konuyu farklı şekillerde ve yöntemlerle ele alarak bakış açınızı genişletir.

Ben oldum olası yazılım kurslarını sevmedim hele ki Türkiye şartlarında. Bilmem kaç kişilik kursa binlerce tl dökmek yerine, bu ücretle onlarca kitap onlarca tutorial alır tekrar tekrar üzerinde çalışabilirsiniz.

İlle kurs istiyorsanızda işi bilen birisinden özel ders veya neredeyse özel ders şeklinde eğitim alın. Ki bununda ücreti çok yüksek olur, fakat gerçekten yazılım öğretirse ve tecrübeli birisyse çok faydalı olabilir.

Ama yeni başlayan biri için benim tavsiyem şu yönde olacaktır. Direkt olarak programlama dalmadan önce bilgisayar mühendisliğinde anlatılan ve temel olarak sayılan dersleri internetten çalışın. Nedir bunlar derseniz, temel bilgisayar mimarisi, logic kapılar, bilgisayarda matematiksel işlemler, veri yapıları ve algoritmalar, programlamaya giriş...

Bu temelleri oturttuktan sonra yönelmek istediğiniz alanı belirleyip ona uygun bir programlama dili seçin ve piyasada "iyi" olarak duyduğunuz bir veya birkaç kitabı edinin. Aynı zamanda udemy/youtube gibi platformlarda memnuniyet sayısı yüksek birkaç tutorial takip edin. Medium, quora, dzone, hackernoon gibi platformları takip edin ve hergün en az 3-5 makale okuyun.

Sürekli pratik yapın, github üzerinde projeleri takip edin, gündemde hangi teknoloji var dünya neyi nasıl kullanıyor ne tarz projeler yapıyor bunları takip edin ve kendinizde örnek projeler geliştirmeye çalışın.

Benim tavsiyelerim bu yönde olacaktır.

ÖZET

Bir dili çok iyi öğrenin, dilden dile atlamayın. Dilin yanında mimari konulara önem verin, solid, design pattern, rest, microservice, event driven gibi kavramları öğrenin.
Database işlemlerinde akıcı olun, ORM yapısını iyice öğrenin, bir orm toolunu çok iyi kullanabiliyor olun.
Dockera bir bakın, size birçok kolaylığı olacak. Gerek uygulamanızı yayınlamanızda gerekse bilgisayarınıza ihtiyacınız olan bir uygulamayı kurmanızda ve geliştirme yapmanızda çok fazla kolaylıklar sağlayacaktır.
Jenkinsi bir inceleyin, eğer yayına aldığınız bir uygulamanız varsa şuan nasıl yayına alıyorsanız (ftp ile mi, ssh ile mi, copy paste ile mi vs vs) o yöntemi değiştirip jenkins üzerinden yayına almayı deneyin.

Git öğrenin, githubda open source projelere katkıda bulunmaya çalışın. Geliştirdiğiniz projelerinizi githuba atın.

Blog tutun, öğrendiklerinizi paylaşın, bunlar sizin cv niz. Artık cv ler github profil sayfaları, kişisel bloglar ve referans projelerdir.

İngilizcenizi iyi bir seviyeye getirin. Günlük hayatınızı hiç değilse internet üzerinde ingilizce yürütebilecek ve teknik makaleler okuyabilecek şekilde ingilizce bilin.

Programlama dili bilmek iyidir, fakat mutlaka dilin yanında kültürel süreçleri de öğrenin. C# mı java mı takılmayın, kolayınıza geleni seçin. Örneğin biz ekip olarak iş yerinde iki dili de aktif kullanıyoruz.

Kendinizi sürekli geliştirin, hiçbir zaman çok biliyorum gafletine kapılıp kibirli tavırlar göstermeyin. Naif bir insan olun. Çevrenizdekilere yardım edin.

Ve önemli bir dipnot: Otomatize edebildiğiniz her şeyi otomatize edin. Örneğin testler, deployment süreçleri, monitoring alert sistemleri vs vs..

özet keywords :
Kod:
design pattern, restful, docker, jenkins, continuous integration, test automation, unit test, c#, java, microservice, git, kibana, logstash, grafana, kubernetes, agile, scrum


Soruları hatırladıkça, yenileri geldikçe bu konuyu güncellemeyi düşünüyorum. Sizlerde sorularınızı konu altından sorabilir, cevaplarını herkesin görmesini sağlayabilirsiniz.

Faydalı ve aydınlatıcı bir yazı olması dileğiyle, iyi forumlar, ihan3t...

 
Son düzenleme:

1071malazgirt

Uzman üye
26 Haz 2015
1,781
8
Trafo
Ellerine sağlık her zamanki gibi bilgilendirici bir yazı olmuş. Dilden dile atlamayın diye yine vurgulamışsınız. Neden öyle dediğinizi bugün daha iyi anlıyorum. Elektronik amaçlı yaklaşık bir yıldır C üzerine yoğunlaşmıştım. Birkaç ay önce yapay zekâyı merak ettiğimden Python öğrenmeye başladım. Tabi C'yi de bırakmadım. İkisini de aynı anda öğrenmeye-geliştirmeye çalışıyorum. Sıkıntı şu ki bazen birine çalışırken diğeriyle karışıyor. Python ve C noktalama bakımından birbirine ters geliyor. Ama gün geçtikçe alıştım. İşin kötü yanı bu yıl okulda C# dersi var. Ve ne yapacağımı bilmiyorum. Aslında bir yandan yeni dil öğreneceğim diye seviniyorum ama diğerleriyle karışır diye de korkuyorum. Size soracağım soru şu:
Sizce C#'a sadece okul için mi çalışayım yoksa diğer dillerin yanında gerçek manada çalışayım mı? Bana faydası mı olur zararı mı?
 

Konce

Üye
11 Ağu 2018
233
1
Edirne
Ellerine sağlık birde birşey sorabilirmiyim ;
Türkiye'de yazılım mühendisliği için diploma şartmı ve diplomasız yurt dışında çalışabilirmiyiz bu yazılım üzerine ?
 

erman147

Katılımcı Üye
3 Kas 2013
949
0
YALNIZLIK
c# biliyorum sql ve access komutlarına aşinayım bi kere okusam direk aklıma gelir daha önceden bildiğim ve kullanmaya kullanmaya unuttuğum için bu bilgiyle biryerde işe başlıyabilirmiyim hocam tek sorum bu.
 

Theakoles

Üye
22 Ağu 2017
55
0
Bu sene özel üniversitede yazılım mühendisliği okumaya başlayacağım kısmetse üstelik %100 ingilizce olacak dersler. Tavsiyeniz nedir iş ve okul hayatimda kolaylık sağlaması için
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Ellerine sağlık her zamanki gibi bilgilendirici bir yazı olmuş. Dilden dile atlamayın diye yine vurgulamışsınız. Neden öyle dediğinizi bugün daha iyi anlıyorum. Elektronik amaçlı yaklaşık bir yıldır C üzerine yoğunlaşmıştım. Birkaç ay önce yapay zekâyı merak ettiğimden Python öğrenmeye başladım. Tabi C'yi de bırakmadım. İkisini de aynı anda öğrenmeye-geliştirmeye çalışıyorum. Sıkıntı şu ki bazen birine çalışırken diğeriyle karışıyor. Python ve C noktalama bakımından birbirine ters geliyor. Ama gün geçtikçe alıştım. İşin kötü yanı bu yıl okulda C# dersi var. Ve ne yapacağımı bilmiyorum. Aslında bir yandan yeni dil öğreneceğim diye seviniyorum ama diğerleriyle karışır diye de korkuyorum. Size soracağım soru şu:
Sizce C#'a sadece okul için mi çalışayım yoksa diğer dillerin yanında gerçek manada çalışayım mı? Bana faydası mı olur zararı mı?


Bence cebinde c# veya java ikilisinden birisi mutlaka olsun. Fakat ağırlığını tek yere yönelt.


Ellerine sağlık birde birşey sorabilirmiyim ;
Türkiye'de yazılım mühendisliği için diploma şartmı ve diplomasız yurt dışında çalışabilirmiyiz bu yazılım üzerine ?

Bununla ilgili konuyu güncelliyorum, bu soru da çok sorulanlar arasında. Özet, evet şart.

c# biliyorum sql ve access komutlarına aşinayım bi kere okusam direk aklıma gelir daha önceden bildiğim ve kullanmaya kullanmaya unuttuğum için bu bilgiyle biryerde işe başlıyabilirmiyim hocam tek sorum bu.

Access kullanılmıyor hiçbir yerde. Oledb adonet falan kalmadı. Sql ve entityframework bakın.

Bu sene özel üniversitede yazılım mühendisliği okumaya başlayacağım kısmetse üstelik %100 ingilizce olacak dersler. Tavsiyeniz nedir iş ve okul hayatimda kolaylık sağlaması için

Çalış, araştır, oku, pratik yap. Kendine 2. sınıfa gelene kadar bir alan seç onun üzerine yoğunlaş. 4 yılını dolu dolu geçir ünide.
 

D3facerx

Üye
15 Mar 2018
81
0
Hocam elinize sağlık benim sorum var:
Yazılımı internnetten öğrenirsem daha iyi yoksa kursa gitsem?
 

Spaax

Uzman üye
9 Ara 2017
1,532
0
Türkiye
Yararlı bir konu olmuş birde bi sorum olcaktı.
yazılıma merakı olan tanıdık var bununda yaşı küçük.
c#ve vb.net alanında iyi.
bu şahıs diploma alabilirmi?
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Hocam elinize sağlık benim sorum var:
Yazılımı internnetten öğrenirsem daha iyi yoksa kursa gitsem?

Bu soruyu da konuya ekliyorum, bu da çok sorulanlar arasında..

java kullanan net yıkıktır.

Bunu alibaba, amazon, apache, facebooka falan da söylesene delikanlı.

Yararlı bir konu olmuş birde bi sorum olcaktı.
yazılıma merakı olan tanıdık var bununda yaşı küçük.
c#ve vb.net alanında iyi.
bu şahıs diploma alabilirmi?

Diploma için yazılım bilgisinden ziyade alan dersleriyle arası iyi olmalı. Üni. kazanmalı, kazandıktan sonra da bölüm derslerini vermeli. Yazılım derslerini zaten arası iyiyse verir.
 

Spaax

Uzman üye
9 Ara 2017
1,532
0
Türkiye
Bu soruyu da konuya ekliyorum, bu da çok sorulanlar arasında..



Bunu alibaba, amazon, apache, facebooka falan da söylesene delikanlı.



Diploma için yazılım bilgisinden ziyade alan dersleriyle arası iyi olmalı. Üni. kazanmalı, kazandıktan sonra da bölüm derslerini vermeli. Yazılım derslerini zaten arası iyiyse verir.


peki hocam nerden alması lazım diplomayı?
 

lealperen

Üye
30 Haz 2018
73
0
Aydın
Harika bir konu olmu tebrik ederim. Özellikle sofware testing'in önemi bir çok yeni başlayan tarfından göz ardı ediliyor.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.