Yazılımcı kimdir, nasıl yazılımcı olunur?

Bu makalemizde, yazılımcı kimdir sorusuna cevap vermeye çalışacağım. Herkesin gıpta ile baktığı, birçok ülkede iş bulma olanağına sahip, bilgisayar mühendisi, yazılım mühendisi, programcı, geliştirici ünvanı her ne olursa olsun; sonuçta bir programlama dilinde ileri seviye uzman bilgisine sahip, verilen bir problemi kurduğu algoritmalarla zaman ve yer karmaşıklığını hesaba katarak çözen, insanların işlerini, hayatlarını kolaylaştıran programlar ortaya koyan kişidir.

 
Her meslekte olduğu gibi bu mesleğe de gönül vermek birinci şarttır. Günde 2 saat çalışmayla ile bir programlama dilinin %20-30'unu bilerek yazılımcı olunmaz. İsterseniz 4 yıllık bir bölümünden mezun olun, programlama derslerinde sadece size derste anlatılanları öğrenmişseniz, ek çaba sarf etmemişseniz, kısacası isteyerek o işi yapmıyorsanız o meslekte ileri seviyelere gelmeniz oldukça zordur.
 
Öncelikle sabırlı ve yılmayan bir kişiliğe sahiptir. Yazılımdaki hataları (bug) teker teker sabırla ayıklayıp, bir problemle karşılaştığında yılmadan çözüm arayan kişidir. Gelişmiş derleyiciler ile yazılımdaki hataları bulmak kolaylaşsa da bazı Çalışma zamanı ve Mantık hatalarının çözümü saatler alabilir.
 
Hazırcı kişiliğe sahip olanlardan yazılımcı olmaz. Bazı insanlar doğası gereği iş yapmaya meyilli değillerdir, tembel ve uyuşuk kişilikler; "Parası neyse verip alalım" düşüncesindedirler. Yazılımcı tabi ki başkalarının kodlarını inceler, ufkunu geliştirir ama genelde kendi yöntemi ile problemi daha kısa sürede ve daha az kaynak harcayarak çözme peşindedir. Maliyetleri (cost) en aza indirmenin yolunu da arar.
 
Sürekli okuyan, araştıran ve yenilikçi bir özelliğe sahip olmalıdır. Çünkü programlama dilleri zamanla değişime uğrarlar ve teknolojik olarak zengin özellikler kazanırlar. Örneğin Java, C#, PHP gibi diller, ortalama 2-3 yıl içerisinde değişime uğrarlar ve bazen kodlar tamamen değişir. Bazen öğrenilen diller tamamen literatürden kalkar, örneğin Dbase, Fortran, Pascal gibi. Genelde mantık olarak yazılım dilleri arasında benzerlikler de vardır. Örneğin C++ bilen bir kişi bir-iki hafta içinde Java öğrenebilir, ya da Java bilen bir kişi kısa sürede C# programlama dili ile program yazabilir. Fakat bir programlama dilini öğrenmek, algoritma kurma mantığını anlamak için bol örnek yapmak ve farklı kod yaklaşımlarını incelemek gereklidir, bu nedenle biraz zaman alması doğaldır. 
 
Algoritma kurma yeteneği önemlidir, örneğin günlük hayatta bile işleri planlama, sıraya dizme yeteneği iyi olmalıdır. Genelde matematiksel düşünce gücü iyi olanlar, problemi parçalara bölerek aşama aşama çözenlerden iyi yazılımcı olur. İşe diğer açıdan bakacak olursak, aslında bir programlama dili öğrenmek, insanların hayatlarını kolaylaştırır, çünkü işlerini planlayarak aşama aşama yapmayı öğrenirler. Bu nedenle belki Apple kurucusu Steve Jobs aşağıdaki lafı etmiştir.

 
Vaktini çok iyi değerlendirmelidir. Yazılımcıların devlet memuru gibi sabah 8, akşam 17 arası çalışmaları mümkün değildir. Yazılımlardaki problemlerin çözülmesi, tıkanılan noktaların aşılması, güvenlik açıklarının kapatılması, güncellemeler, bakım ve destek gibi konular yazılımcının çalışma saatlerini uzatır. Dolayısı ile yazılımcının maaşının, yaptığı işe ve geliştirdiği uygulamaya göre yüksek olması normaldir.
 
Yazılımcının İngilizcesi iyi olmalıdır. Birçok meslekte İngilizce gereklidir, ama teknoloji dili İngilizce olduğundan yabancı kitapları, videoları, forumları takip etmek için konuşma çok gerekmese de İngilizce metinleri okuma gereklidir. Bu nedenle üniversite okurken İngilizce işini çözmeniz gerekir. Yazılımla ilgili bir mesleğe başladığınızda zaman sıkıntısı çekeceğinizden öğrenciyken İngilizce problemini çözmelisiniz. Bazı yabancı sertifika sınavları(Oracle, Microsoft, Cisco vb.) da tamamen İngilizcedir. Dolayısı ile İngilizce bilen ve bilmeyen yazılımcı arasındaki bilgi farklı zamanla açılır.
 
Yazılımcı, uykuyu çok sevmez, zaten fazla uyumaya zamanı da olmaz. Metrobüste, otobüste giderken uykusuzluktan sızabilir, ineceği durağı kaçırabilir :) Bir mahallede, genelde sabaha kadar ışıkları açık olan yazılımcının evidir, dolayısıyla evine hırsız girme ihtimali düşüktür :)  Yazılımcı az uyku uyuduğundan dalgın ve unutkan olabilir. Telefonu, cüzdanı evde unutabilir, arabayı dalgınlıkla çarpabilir. Bu durumları yaşıyorsanız, uykuya biraz zaman ayırmalısınız.
 
Yazılımda hiç bir iş tam zamanında yetişmez, bu nedenle yazılımcı hemen işe vakit kaybetmeden başlamalıdır. Genelde yazılımcılar; 1 hafta sürecek işe "15 günde biter" demelidirler. Çünkü yazılım bittikten sonra iyice test edilmezse, problemler katlanarak çoğalır. Dolayısıyla yazılan bir uygulama için en önemli adım TEST'dir.  Bilgisayar donanımına göre test,  farklı İşletim sistemine göre test, farklı verilere göre test vs. gibi her konu düşünülmelidir. Örneğin Windows 7'de çalışan bir uygulama Windows 10'da çalışmayabilir, test ederek ancak anlarsınız, kullanıcılardan size feedback(geri dönüşüm) gelmesini beklemeyin, kimse sizi aramaz, başka programa geçerler. 
 
Yazılımda arayüz(user interface) oldukça önemlidir, çünkü yazılımı kullananlar aradıklarını bulamazlarsa sürekli yazılımcıyı arar ve meşgul ederler. Bazı kullanıcılar da hiç aramaz, direkt vazgeçerler. Bu nedenle yazılımcı biraz sanatçı kişiliğe de sahip olmalı, arayüzleri iyi tasarlamalı, en kolay kullanıma göre yazılımları hazırlamalıdır. Renklerin ve ikonların seçimi bile son kullanıcının yazılıma olan ilgisini değiştirebilir. Kısacası, arayüz tasarımı (user interface design) da yazılımın içinde olan bir alandır.
 
Oğuzhan TAŞ
Güncelleme: Mart 2016
 
BAZI KELİMELER
bug: hata
debug: hata çözme
developer: geliştirici
user interface: yazılımı kullanacakların gördüğün arayüz
software developer: yazılım geliştirici
trace: iz, izleme noktaları
run-time: Çalışma zamanı
compiler: Derleyici
tasarım: design
user-interface: kullanıcı arayüzü
cost: maliyet
space complexity: yazılımın çalışırken harcadığı bellek miktarını ölçmek için kullanılır.
time complexity: yazılımın çalırken harcadığı zamanı ölçmek için kullanılır.
 
Bookmark and Share