Kapat
Algoritma 92 0

Yazılım Geliştirmeye Yeni Başlayanlar İçin

Yazılım geliştirmeye nereden başlayayım?, Hangi programlama dilini öğrenmeliyim?, Hanig kitabları okumalıyım?, Kendimi nasıl geliştiririm? gibi sorular yeni başlayanların aklını kurcalıyor. Bu yazımızda yeni başlayanlara çeşitli tavsiyeler yer alacak.

Yazılıma yeni başlayanlar için Tavsiyeler

  • Bu işe başladığınızda bu işten keyif almaya özen gösterin. Yazılım bir sanat gibidir. Bana göre de bir resim yapmaktan bir heykel yontmaktan farkı yoktur. Çünkü yazılımcılar insanların hayatlarını kolaylaştıracak çözümler ortaya sunar ve bu doğrultuda yeni yazılımlar geliştirirler. Dolayısı ile bu işi yapanlar aşk ve şevkle yapmalıdır. Zaten keyif almadan bu işi icra etmenin imkanı yok. Keyif almayanda bu işi zaten doğru düzgün yapamaz.
  • Yeni başlayanlar hata yapmaktan korkmayın çünkü hangi iş olursa olsun mutlaka en başında kişi belli başlı hatalar yapar. Ama unutmayın çırak olmadan usta olunmaz. Yani yaptığınız hatalardan korkmayın ya da yılmayın. Mutlaka hata yapacaksınız. Ama hata yapa yapa artık hata yapmamayı öğreneceksiniz.
  • Araştırın arkadaşlar araştırın. bir programlama dili öğrenirken bir işe yeni başlarken mutlaka araştırın araştırmak gerekir. Çünkü araştırmadan öğrenilmez. Kodları araştırın, Başkalarının yazdığı kodları okuyun. onları deneyin değiştirin. Pes etmeyin asla pes etmeyin dediğim gibi hata yapmaktan korkmayın.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.).
  • 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 🙂
  • 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).
  • 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.
  • 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.
  • 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 Büşra Uzun’un Türkçe notlarına buradan ulaşabilirsiniz.
  • İ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.
  • 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.
  • 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).
  • İ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
  • 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.
  • 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 🙂
  • 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 🙂
  • 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.
  • İç 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.
  • İ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.
  • 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.
  • 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.
  • 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.
  • 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.

Berat Emre Demir {Berat Emre Demir}