Yazılım Geliştirmeye ve Programlamaya Yeni Başlayanlar için Tavsiyeler! - SiberMega - Basit Yazılım ve Tasarım Eğitimleri

Popüler Yazılar

Post Top Ad

Responsive Ads Here

Post Top Ad

Responsive Ads Here

06/04/2023

Yazılım Geliştirmeye ve Programlamaya Yeni Başlayanlar için Tavsiyeler!

 

Photo by Carl Heyerdahl on Unsplash
  1. Sosyal Tavsiyeler
  2. Genel Teknik Tavsiyeler
  3. Kodlama Tavsiyeleri

Sosyal Tavsiyeler

  1. Yaptığınız işten keyif almaya bakın. Yazılım ve kodlama bir çeşit sanatsal üretim işidir. Aşkla ve şevkle yapılmalıdır. Bana göre bir resim yapmaktan veya bir piyano çalmaktan farksızdır. Keyif almadan bu işi icra etmenize imkan yok. Kişilik olarak bu işe uygunsanız zaten keyif almamanız da imkansız. Eğer bu yazıyı okurken ne dediğimi anlıyor ama ne yapsanız da olmuyorsa, kodlar havada uçuşuyorsa, birisi sizin keyif alma düğmenize tam basamamış demektir. Çözülecek emin olun.
  2. Elinizi korkak alıştırmayın. Yanlış yapmaktan korkmayın. Yanlış yapa yapa doğruyu bulacaksınız. Yanlış yapmaktan korkarsanız hem öğrenme süreciniz çok yavaşlar hem de deneme-yanılma yöntemine başvuramayacağınız için sürekli soru sorarak etrafınızdakileri rahatsız etme riskiniz artar.
  3. Sürekli tırmalayın ve kazıyın. Gece gündüz demeden araştırın, okuyun, kodlayın ve deneyin. Bir problemi çözemediğinizde ya da bir projeyi bitiremediğinizde uykularınız kaçsın. Problemi çözemeyince hemen pes etmeyin. Stackoverflow ve Quora kullanmaktan çekinmeyin. On binlerce yazılımcı ile aynı yoldan geçiyorsunuz merak etmeyin.
  4. Konsantrasyonunuzu en üst seviyede tutun: Kodlama yapmak konsantrasyon gerektiren bir iştir. Odaklanmalısınız, odağınızı dağıtacak ve sizi bölecek her şeyden kaçının. Kodlama aşamasında iletişiminizi olabildiğince kapatın (Telefon, e-posta vb.). Yazılımcı konsantrasyonu ile ilgili yazıyı okumanızı tavsiye ederim.
  5. Hayatınızı algoritmik yaşayın. Aslında sabah kalktığımız andan itibaren karşımıza çıkan her probleme karşı algoritmalar üreterek çözüm buluyoruz. Örneğin sabah kalktığımızda ne giyeceğiz. Mevsim, hava sıcaklığını yağmur yağıp yağmadığı, toplantı olup olmadığı vb. girdileri değerlendiren algoritmayı kafamızda işletir ve ona göre karar veririz. Önemli olan bunun bilincinde olarak hareket etmemiz.
  6. Gittiğiniz yerlerde kullanılan programlara dikkat edin. Örneğin bir restorana veya eczaneye gittiğinizde kullandıkları programa göz atın. Kullanıcıya “Nasıl memnun musunuz?”, “Hızlı mı?”, “En beğendiğiniz özelliği nedir?” gibi sorular sorun. Ekran tasarımlarını inceleyin, beğendiniz kısımları not edin.
  7. 1–2 ay önce yazdığınız kodu beğenmeyin. Beğeniyorsanız bir sakatlık vardır aman dikkat... Ya kendinizi geliştirmeyi (okumayı, araştırmayı, eğitimlere katılmayı) durdurdunuz ya da yazılım geliştirme işinden sıkıldınız demektir.
  8. Başkasının yazdığı kod üzerinde iş yaparken sürekli ve yersiz eleştiri yapmaktan kaçının. Aynı hataları siz de zaman zaman yaptınız. Eleştiri yapmanız gereken ilgili kişiye ulaşarak doğru bir iletişim yöntemi ile kod hakkında tartışabilmeniz çok önemli.
  9. Sorgulayan, araştıran bir yapınız olmasa bile yazılım işi sürekli sorgulama ister. Kendinize bu yeteneği kazandırmanız ve gerekli cesareti bulmanız gerekiyor. Sessiz kalırsanız verilen işi yapan durumuna düşebilirsiniz.
  10. Türkçe dilini hem söz dizimi hem de anlamsal altyapısı ile düzgün kullanmaya gayret edin. -ki -de/da -nokta/virgülden sonra boşluk bırakmak vb. Yazılı olmayan bu kural, arka planda hayatınızda bilmediğiniz/tahmin etmediğiniz etkilere neden olur.
  11. Kendinize ait düzgün isimlendirilmiş, temiz, sade, “içi yeterince dolu” sosyal medya hesaplarınız (Linkedin, Medium, Twitter) ve bir adet e-posta adresiniz olsun. E-posta işi gerçekten kritik, düzgün bir adrese ek olarak, yazışma adabını da öğrenmeniz gerekiyor (konu, yeterince detay verme, kendinizi tanıtma vb.).
  12. Grup/ekip olarak yaptığınız yazılım geliştirme projelerinde sürekli çaycı veya yancı olmayın. Kodu yazan kişinin yanına oturup, anlıyormuş gibi yapmak çok yorucudur. Unutmayın bir yere kadar bu durum idare edilir, ve sizin zaaflarınızı perdeler.
  13. Mesleğinizle ilgili teknik ve sosyal etkinliklere (meetup, hackathon, X-Night) katılmaya çalışın. Motivasyon garantili bu eğitimler hem kişisel gelişiminiz (tecrübe aktarımı) hem de sosyal bir çevre edinmeniz için de oldukça önemli.
  14. İngilizce dilini öğrenmekten başka bir şansınız yok. Şahsi fikrim kurslara katılmak faydalı gibi görünse de sürdürülebilir değil. Temel İngilizce dil bilgisini öğrendikten sonra alt yazılı video izleyerek, çeviri yaparak, kitap okuyarak ve yazmaya çalışarak İngilizce öğrenmek bana daha sağlıklı geliyor.
  15. Hiçbir zaman OLDUM demeyin. Daha yolun başındasınız. Yazılım ve programlama işinde en büyük risklerden biri her şeyi öğrendiğinizi zannedip, duraklamaya hatta gerilemeye başlamanızdır. Unutmayın hepimiz hayat boyu öğrenciyiz :)
  1. Kod yazarken mouse (fare) kullanmamaya özen gösterin. Kullandığınız kodlama editörünün kısa yollarını iyice öğrenin. Kısa yolları kullanmak kod yazma etkinliğinizi ve kodlama hızınızı arttıracaktır. En önemlisi “sizi havaya sokacaktır ”. Bırakın da kod yazarken klavyenizin tuşuna basışınıza hasta olsunlar :)
  2. Kağıt kalem kullanarak analiz etmeyi ve problem çözmeyi öğrenin. Bazen bir problemi çözemediğinizde dakikalarca ekrana bakar ve kod yazamazsınız. Ekrana bakmayı bırakın ve bir kalem kağıt alarak kodunuzu kağıtta yazmaya çalışın (ister şekillerle ister düz yazı ile).
  3. Not tutmayı alışkanlık haline getirin. Gencim güzelim unutmam diye düşünmeyin. Not tutmak karşınızdaki kişiyi veya işi ciddiye aldığınızın önemli bir göstergesidir. Ayrıca yapılacaklar (ToDo) ve yapılmayacaklar (Not ToDo) iş listeleriniz olsun. Genlerimizde olsa da kervanı yolda düzmeyin.
  4. Direk kodlamaya dalmayın. Özellikle kodlama işi yeni yeni kapmaya başladığınızda içiniz kıpır kıpır olacak hemen kod yazmak isteyeceksiniz, arka planda veritabanı tasarlayacaksınız. Tam da bu noktada dikkatli davranmanız lazım. Önce problemi anlayın, analiz edin, doğru anlayıp anlamadığınız ile ilgili el sıkışma yöntemi bulun. Daha sonra tasarıma ve kodlamaya geçin.
  5. Yazılım ve programlama üzerine bol bol kitap, dergi ve makale okuyun. Örneğin Clean Code (Temiz Kod) kitabı mutlaka okumanız gereken bir kitap ve size nasıl iyi kod yazabileceğinizi, kötü yazılmış bir kodu iyi bir koda nasıl dönüştürebileceğinizi öğretecek. Kitapla ilgili 
    ’un Türkçe notlarına buradan ulaşabilirsiniz.
  6. İyi derecede debug (hata ayıklama) etmeyi öğrenin. Bundan sonraki hayatınız iyi kod yazmaya çalışmakla ama yazamamakla (örneğin: zaman baskısı nedeniyle) ve iyi niyetle yazılmaya çalışıldığı halde kötü yazılan kodları debug etmekle geçebilir.
  7. Mutlaka en az 2 tane programlama dilinde uzman olacak şekilde kendinizi yetiştirin (Şahsi fikrim Python ve C# olması yönünde). Bunları öğrendikten sonra her 2 senede bir yeni bir programlama dili öğrenmeye çalışın (Uzman olmanıza gerek yok). Ancak aynı anda 2 dili öğrenmeye çalışmayın. Aslında en güzel programlama dilinin temel tasarımını ve yapısını öğrenmeniz ancak hepimiz bu şansı elde edemeyebiliriz.
  8. En ince ayrıntısına kadar Nesne Yönelimli Programlama (Object Oriented Programming) yaklaşımını/paradigmasını özümseyin ve içselleştirin. Temel kavramlar şöyle: sınıf (class), nesne (object), soyutlama (abstraction), kalıtım (inheritance), kapsülleme (encapsulation), bilgi saklama (information hiding), çok biçimlilik (polymorphism).
  9. Yazılım geliştirme yaşam döngülerinin / çevrim modellerinin (SDLC = Software Development Life Cycles) ne olduğunu ve temel aşamalarını mutlaka öğrenin. “Çağlayan modelden çevik modele geçtik iyi oldu” diyenlerin ne demek istediğini anlayın. Hatta bir gün, çevik yazılım geliştirme gerçekten iyi mi diye soran ustalar olursa onlara da kulak verin.
  10. Kod yapılandırmasının (refactoring) ne olduğunu, sürecini ve nasıl yapıldığını öğrenin. İlk başta size ve ekibinize riskli bir iş gibi görünebilir. Mevcut durumun problemlerini/kaybını sayılarla ortaya koyarsanız ve bu problemleri çözdüğünüzde kaç para kazandırabileceğinizi doğru anlatırsanız (hele bir de yeni teknoloji vs. de işin içinde varsa) mutlaka destek alacaksınız…
  11. Kodunuzu çöpe atmaktan çekinmeyin. Gerçekten içinize sinmiyorsa o kod çöpe gitmeli ve baştan yazmalısınız. Baktınız kod yapılandırması süreci de işe yaramıyor, bu kararı bir şekilde vermelisiniz. Merak etmeyin er ya da geç bu durum gerçekleşecek. Ne kadar hızlı yaparsanız sizin için o kadar iyi olacaktır.
  12. Yazılım geliştirme işinin en önemli çıktısı yazılım ürünüdür. Yazılım ürünü çıkarabilmek için bir yazılım projesinin ne olduğunu bilmek gerekir. Bir projenin başı, sonu, gereksinimleri, tasarım kısıtları, dili, teknolojisi vs. belli olmalıdır. Özellikle işe yeni başlayan arkadaşlar o kadar fazla konu/dil/teknoloji ile aynı anda uğraşırlar ki hiç bir proje ortaya çıkmaz ve günün sonunda motivasyon düşer. Basit bir hesap makinesi, sayı tahmin oyunu, kütüphane uygulaması veya mobil bir görev hatırlatıcısı çok güzel birer proje olabilir, konunun detayı tamamen size kalmış. Yok bana yetmez diyorsanız ve aldığınız ödevler de sizi kesmiyorsa, 
     arkadaşımızın hasta olduğum ve öğrencilerimle paylaştığım proje listesinin linkini şuraya bırakıyorum.
  13. Geliştirdiğimiz projeleri sergileyebileceğimiz, paylaşabileceğimiz ve ortak proje geliştirme süreci yürüterek, aynı zamanda kaynak kod kontrolü yapabileceğimiz GitHub ortamında mutlaka düzgün bir hesabımızın olması gerekiyor. Bırakın CV’niz yerine GitHub hesabınızdaki projeleriniz sizi anlatsın.
  14. Veri yapıları, algoritma analizi, işletim sistemleri konuları/dersleri ne işime yarayacak? bunları bırak da bize programlama öğret diyen zihniyetin esiri olmayın. İşimizi -mış gibi yapmakla doğru yapmak arasındaki farkın detayları bu derslerde yer alıyor.
  1. İyi kod, okunabilirliği ve bakımı kolay olan basit koddur. Basit kodlar yazmaya çalışın. Bu noktada hayatınızı kolaylaştıracak araçlar/yöntemler nesne yönelimli programlama yaklaşımını öğrenmeniz ve SOLID yazılım geliştirme prensiplerini kullanmanız olacaktır. Single Responsibility, Open-Close , Liskov Substitution, Interface Segregation , Dependency Inversion. Bana sorarsanız iyice öğrenmeniz gereken en temel iki prensip coupling (düşük olsun) ve cohesion (yükseği makbul). Diğer prensiplerin kayda değer bir kısmı bunların etrafında dönüyor sanki :)
  2. Kendinize ait kodlama isimlendirme standardınız olsun veya bu konu ile ilgili mutlaka ne yapmanız gerektiğini öğrenin. Örneğin değişkenleri nasıl isimlendireceksiniz (Pascal, Camel isimlendirme stilleri vb.). değişkenlerinizin, sabitlerinizin, fonksiyonlarınızın, sınıflarınızın, nesnelerinizin vb. tüm programlama elemanlarının isimleri anlaşılır olmalı. Bu isimler ne çok uzun ne de çok kısa olmalı. O kadar çok isimlendirme yapıyoruz ki bu konuyu gerçekten kafamıza takmamız lazım.
  3. Kod girintileriniz muntazam olsun (Code indentation). Günümüz modern IDE’leri girintileri bozmanıza izin vermese de bunu becerebilen arkadaşlar ve kod parçaları gördüm :)
  4. Aritmetik operatörler ve atama operatörlerinden önce ve sonra mutlaka birer boşluk karakteri kullanın. Ne olur alıştırın kendinizi, sizden sonra kodu okuyanları üzmeyin :)
  5. Gerektiği kadar yorum satırı kullanın (code comments). Eskiden yorum satırı kullanımına karşı değildim ancak zaman içerisinde yorum satırlarının aslında kötü tasarımlarımı örtmek için kullandığımı fark ettim. Bırakın kod satırları kendi kendilerini anlatsın, sizin onları ayrıca anlatmanıza gerek kalmasın.
  6. İç içe “if deyimi” (gereksiz koşullar) kullanımlarından kaçının. İç içe 2 veya 3 tane if deyimi kullandıysanız veya bu durum herhangi bir programda karşınıza çıkarsa mutlaka kodunuzu değiştirin veya baştan yazın. Örneğin fonksiyonlarda erken çıkış (early return)tekniğini kullanarak ya da daha ince nesne yönelimli programlama teknikleri kullanarak bu işin üstesinden gelebilirsiniz.
  7. İleride kullanırım belki diye kod parçaları eklemeyin. Ya kullanmazsanız ne olacak? Hele bir de isimlendirme standartlarınız yoksa, temiz kod yazmayı bilmiyorsanız, projeniz ne işe yaradığını bilmediğiniz kod çöplüğüne dönmeye başlayacak.
  8. Metotlarınızın ve fonksiyonlarınızın içerikleri uzun olmasın. Sadece bir işi yapan fonksiyonlarınız olsun ve sadece (ama sadece) o işi yapsın. Aslında yazılım tasarım prensiplerindeki tek sorumluluk (single responsibility) prensibi içselleştirilmesi gereken önemli bir konu.
  9. Tekrar eden kod parçası yazmaktan, kopyalayıp yapıştırmaktan kaçının. Tekrar eden kodları avantajınıza yani tekrar kullanılabilir koda dönüştürmeniz mümkün. Bunun için onlarca yöntem bulabilirsiniz. Programlama dili zorunluluğuna göre yordamsal ya da nesne yönelimli programlama ile rahatça çözebileceğiniz bir anti-pattern.
  10. Anti-pattern demişken buradan yürüyelim :) Yazılım geliştirme sürecinde mükemmeli nasıl yakalarım diye düşünmeden önce belki de uzak durmanız gereken yaklaşımları öğrenmek, süreci sindirmenizi sağlayabilir. Örneğin, altın çekiç (golden hammer) anti-pattern’i der ki “Elinde sadece çekiç olan birisine tüm problemler çivi gibi görünür”. Maalesef her yazılımcı bu anti-pattern’i yaşamında bir dönem tecrübe eder. Bunun dışında god object, spaghetti kodlama ve lasagna kodlama gibi farklı anti-pattern’ler de mevcuttur.
  11. Benim yazdığım kodda hata çıkmaz demeyin, kodu yazdıktan sonra tekrar tekrar farklı parametrelerle test etmeye çalışın. Hata yapmak için kod yazmadığınızdan dolayı kendi hatanızı bulmak elbette kolay olmayacaktır :) Yazılımcı olarak uygulayabileceğimiz en etkili yöntemlerden birisi yazdığınız kodlar için birim testi (unit test) kodları geliştirmek olacaktır. Ayrıca test ekipleri tarafından gerçekleştirilen ve beyaz kutu (white box) test tekniği ile tasarlanan kod kapsama (code coverage) testleri de bu noktada hayat kurtarıcıdır.

Hiç yorum yok:

Yorum Gönder

Post Top Ad

Responsive Ads Here