Bir yazılımcının bilmesi gerekenler konulu Twitter’daki paylaştığım bir flood’u rica üzerine bloguma da ekliyorum. İyi okumalar…
Bir yazılım geliştiricinin bilmesi gerekenlerle ilgili 15 maddelik flood geliyor.. Mümkün olduğunca fazla keywordü bir araya toplamaya çalıştım.
Hadi Başlıyoruz!
#Developer #Software #Java #code #kod #yazılım #development #computer #bilgisayar #tool #PC #IT #web #tech #data
1. Temel veri yapıları (linkedList, map, tree vb) ve temel algoritmalar (sıralama, arama vb)
Sıfırdan kodlama ihtiyacınız büyük ihtimalle hiç olmayacak. Ancak ihtiyaç anında doğru yerde doğrusunu seçebilmek için o veri yapısının veya algoritmanın nasıl çalıştığını bilmeniz şart
2. Network Temelleri
OSI Modelini ve 7 katmanı; temel protokolleri(#TCP-IP, TCP-UDP, #HTTP, #FTP), güvenlik protokollerini(#HTTPS, #SFTP, #SSL), monitoring protokolleri(#SNMP, ICMP) bilmekte fayda var. Ayrıca ağ ekipmanlarının görevlerini tanımak ve 7Layer yerlerini bilmek lazım
3. Source Control Toolları
Birçok farklı tool var; #Clearcase, #SVN, #Git, #CVS… En azından 1 tanesine hakimiyet yüksek olmalı. Yeteneklerine ve trendlere bakılırsa bu tartışmasız #Git olmalı
4. SQL ve RDBMS
Veri saklamak için çok alternatif var. Ancak RDBMS’ler halen en yoğun kullanılanılanları. Bu nedenle #OLAP, #OLTP; tasarım prensiperi(#Normalization, #BCNF); SQL ve bir #ORM toolunu bilmekte fayda var. Sonrasında #NoSQL dünyasına yelken açılmalı
5. Algorithm Complexity Analysis
Big-o notation’ı bilmek lazım. Böylece kurguladığımız algoritmanın bize dönüşünü bilebiliriz. Hatta sadece #CPU optimizasyonu da değil; #memory, disk, CPU ihtiyaçlarına göre aynı problemin farklı çözümleri üzerine düşünmeye alışmak da önemli.
6. Gof Design Patterns
Bu madde herkesten duymaya alıştığınız bir madde olduğundan yazıp yazmamak arasında gidip kaldım. Ancak eksik bırakmaya gönlüm el vermedi. #OOP‘yi zaten bildiğinizi varsayıp bunu Gang of Four Design Patterns ile taçlandırmanızı şiddetle öneriyorum.
7. Software Design Principles
En az design patterns kadar önemli ama bir o kadar atlanılan kavramlar. #SOLID, #KISS, #DRY, #YAGNI ve #TDD‘yi hayat tarzı yapmak lazım.
8. Database Design Principles
#ACID ve #BASE en temelleri. Bunları anlamlandırabilmek için #CAP teoremini bilmek lazım. #Mikroservis mimari için #EventSourcing problemine çözüm #CQRS de öğrenilebilir
9. Static Code Analysis Tools
#CodeReview başlığını da bu maddeye yedirelim. Yazdığınız kodun kalitesini, security risklerini bu toollarla ölçümleyip kodunuza review yapmanız önemli. Java için birkaç örnek; #PMD, #FindBugs, #FindSecurityBugs, #SonarQube…
10. Unit & Integration Testing
Testin kodlanması şart, özellikle de mikroservis mimarilere adım atıyorsanız. #TDD bu yüzden çok iyi bir seçim. Bunu uygulayamasanız bile en azından birim ve entegrasyon testlerini yazmalısınız. #JUnit #DBUnit #Selenium #Mockito #AssertJ #Jmeter
11. Unix - Linux
#SSH terminalini karşınıza aldığınızda şaşırıp kalmamalısınız. Bağlandığınız sunucuda #fileSystem #textEdit #fileTransfer işlemlerinizi rahatça halledebilmelisiniz. Temel işlemlerinizi halledebilecek kadar #shellScripting yapabilmelisiniz.
12. Scripting Language
Ana bir #HighLevelLanguage (java, c# gibi) yanında bir betik dilini bilmek birçok ihtiyacınızı çok daha hızlı çözebilmenizi sağlar. İkinci bir dil bilmenin ufkunuzu nasıl genişleteceğinden bahsetmiyorum bile. #FunctionalPrograming öğrenmek de güzel olur
13. Tools
Bütün bunları yaparken toollara ihtiyacımız olacak. Kendinizi en iyi hissettiğiniz toollardan bir toolkit yaratın ve uzmanlaşın. Örn: #Postman #Notepad++ #Excel #powerpoint #ditto #mtail #sysinternals #DumpAnalyzer vb…
14. Takip Listesi
Gündemi sürekli takip edebilmek ve güncel kalmak için sizinle benzer kulvardaki profesyonelleri bulun, #blog‘larını, sosyal medyalarını takip edin. Siz de vefa borcunuzu ödemek ve kendinizden sonrakilere fayda yaratabilmek için yavaştan paylaşımlara başlayın
15. OpenSource Contribution
Başkalarının kodlarını okumak sizi çok hızlı geliştirir. Bu sebeple open source community projelerine contributor olun. Ekmekte tuzunuz olsun.