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!
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.
#DesignPrinciples
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 #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.
Hadi Başlıyoruz!
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.
#DesignPrinciples
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 #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.

