İPUCU

Java Object Oriented Programming temeline dayanan, çok işlevli, step by step işleyen dilin dökümanlarının paylaşım alanı.

Seçenekler

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

20-08-2018 22:47
#1
ihan3t - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
02/2012
Mesajlar:
5.005
Teşekkür (Etti):
291
Teşekkür (Aldı):
1824
Konular:
255
Ticaret:
(0) %
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...

Kullanıcı İmzası
Computer Engineer.

Senior Software Engineer.
Konu ihan3t tarafından (21-08-2018 14:24 Saat 14:24 ) değiştirilmiştir.

20-08-2018 22:48
#2
Phemis - ait Kullanıcı Resmi (Avatar)
Hunter
Üyelik tarihi:
12/2017
Mesajlar:
2.296
Teşekkür (Etti):
920
Teşekkür (Aldı):
640
Konular:
154
Ticaret:
(0) %
Ellerinize Sağlık.
20-08-2018 23:03
#3
Üyelik tarihi:
06/2015
Mesajlar:
1.782
Teşekkür (Etti):
1313
Teşekkür (Aldı):
586
Konular:
225
Ticaret:
(0) %
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ı?
Kullanıcı İmzası
Ben Ezelden Beridir Hür Yaşadım Hür Yaşarım
Hangi Çılgın Bana Zincir Vuracakmış Şaşarım
20-08-2018 23:16
#4
Konce - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2018
Nereden:
Edirne
Mesajlar:
182
Teşekkür (Etti):
71
Teşekkür (Aldı):
17
Konular:
20
Ticaret:
(0) %
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 ?
Kullanıcı İmzası
NE MUTLU TÜRKÜM DİYENE!

20-08-2018 23:29
#5
erman147 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
11/2013
Nereden:
YALNIZLIK
Mesajlar:
666
Teşekkür (Etti):
45
Teşekkür (Aldı):
70
Konular:
97
Ticaret:
(0) %
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.
Kullanıcı İmzası
Kimi insan için GÜN erken başlar, Kimi insan içinse GECE geç biter. Benim için sabahların olmadığı bir geceden herkeze GÜNAYDIN..

%70 C#
%50 SQL
%70 Access
%60 HTML
%80 Sosyal Mühendislik
%70 Photoshop
20-08-2018 23:36
#6
Theakoles - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Mesajlar:
54
Teşekkür (Etti):
12
Teşekkür (Aldı):
1
Konular:
14
Ticaret:
(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
20-08-2018 23:38
#7
Bykurabiye - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
09/2016
Nereden:
Tanrı Dağı
Yaş:
15
Mesajlar:
2.506
Teşekkür (Etti):
343
Teşekkür (Aldı):
259
Konular:
153
Ticaret:
(0) %
Eline sağlık.
21-08-2018 00:03
#8
ihan3t - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
02/2012
Mesajlar:
5.005
Teşekkür (Etti):
291
Teşekkür (Aldı):
1824
Konular:
255
Ticaret:
(0) %
Alıntı:
1071malazgirt´isimli üyeden Alıntı Mesajı göster
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.


Alıntı:
Konce´isimli üyeden Alıntı Mesajı göster
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.

Alıntı:
erman147´isimli üyeden Alıntı Mesajı göster
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.

Alıntı:
Theakoles´isimli üyeden Alıntı Mesajı göster
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.
Kullanıcı İmzası
Computer Engineer.

Senior Software Engineer.
1071malazgirt Teşekkür etti.
21-08-2018 09:22
#9
Üyelik tarihi:
06/2015
Mesajlar:
1.782
Teşekkür (Etti):
1313
Teşekkür (Aldı):
586
Konular:
225
Ticaret:
(0) %
Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster

Bence cebinde c# veya java ikilisinden birisi mutlaka olsun. Fakat ağırlığını tek yere yönelt.
Teşekkürler o zaman öğrenmeye devam bilginin sonu yok
Kullanıcı İmzası
Ben Ezelden Beridir Hür Yaşadım Hür Yaşarım
Hangi Çılgın Bana Zincir Vuracakmış Şaşarım
Konu 1071malazgirt tarafından (21-08-2018 09:44 Saat 09:44 ) değiştirilmiştir.
21-08-2018 10:34
#10
D3facerx - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2018
Mesajlar:
81
Teşekkür (Etti):
47
Teşekkür (Aldı):
8
Konular:
19
Ticaret:
(0) %
Hocam elinize sağlık benim sorum var:
Yazılımı internnetten öğrenirsem daha iyi yoksa kursa gitsem?
siberdrone15 Teşekkür etti.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı