Hoşgeldin, Ziyaretçi:

l Üye Ol
Tarih: 23-10-2019, Saat: 13:03
  • Tekno Destek Team'e Hoşgeldiniz
  • Teknoloji, Mobil, Oyun, İnternet, Haber Platforumu
  • Tekno Destek Team ( TDT )
Tekno Destek Team - Teknoloji, Mobil, Oyun, İnternet, Haber Platforumu > Programlama > Java > Yazılımcı Olmak İsteyenlere Sektörden Bilgiler >

 Yorum: 0    Görüntülenme: 392
Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
 Yazılımcı Olmak İsteyenlere Sektörden Bilgiler
21-08-2018, Saat: 11:28,
Çevrimdışı
Süper Moderatör
Süper Moderatör Grubu
Üyelik Tarihi: 02-01-2016
Mesajlar : 456
Konular:
Rep Puanı: 1
#1
Yazılımcı Olmak İsteyenlere Sektörden Bilgiler

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



"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 ?

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 deskop uygulama mı yapı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.


Ö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.


Gİt öğ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


Ek Dosyalar Ekran Görüntüleri
   


kara_kutu nickli üyenin imzası
VvXn7P.jpg
21-08-2018, Saat: 11:28
Cevapla



« Önceki Konu | Sonraki Konu »
Konuyu Okuyanlar: 1 Ziyaretçi



Hızlı Menü:

Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB
© 2002-2019 MyBB Group.
Tasarım Tekno Destek Team © 2019