Programcı, Developer, Architect (Mimar), Bilgisayar Mühendisi ve Yazılım Mühendisi – I

Kavram kargaşası, hem kafa karışıklığının bir göstergesi hem de sağlıklı iletişimin önündeki en büyük engellerden. Her toplumda olduğu gibi bizim toplumumuzda da kavram kargaşası mevcut. En çok dikkatimi çekenlerden birisiyse sektörümüzdeki roller ve bunlara verdiğimiz isimlerle ilgili. Daha önce burada “analist”, “iş analisti”, “ihtiyaç analisti” ayrımlarına yönelik yazılar (burada ve burada örneğin) yayınlamıştım. Bence benzer şey “programcı”, “developer”, “architect” ya da “mimar”, “bilgisayar mühendisi” ve “yazılım mühendisi” rolleri için de geçerli. Bu yazıda bu dört farklı rolün içeriği, benzerlikleri ve ayırımları hakkında yazmak istiyorum.

Benim gördüğüm, genelde “programcı”, “developer” ve “yazılım muhendisi” kavramlarını içerikleri arasındaki farklılıkları göz önüne almadan birbiri yerine geçecek şekilde kullandığımızdır. Çok sıklıkla okuldan yeni mezun ya da sadece PHP ve ilgili teknolojilerle, esnaf düzeyinde web geliştirmesi yapan gençlerin emaillerindeki imzalarında “Yazılım Mühendisi” ya da “Architect” gibi ünvanlar görüyorum.

Bu ülkede ünvan, yapılan işten daima daha önemli. Yaptığımızı iyi yapmaya odaklanmak yerine etiketler ve ünvanlarla uğraşmak çok hoşumuza gidiyor nedense. Halbuki yaptıkları işler, sorumlulukları, sahip olmaları gereken yetkinlikler ve eğitimleri açısından bu ünvanların aralarında ciddi farklılıklar var.

Programcı ya da orijinal ismiyle programmer, bir programlama dilinde gerekli programlama faaliyetlerini yapacak yetkinliklere sahip olan kişiye denir. En az bir dili iyi bilir, algoritmik düşünce kabiliyetlerine sahiptir, kendisine verilen programlama görevlerini en basit ve anlaşılır şekilde yerine getirir. İyi programcı, iyi kod yazar, kullandığı dili detayıyla, iyi bilir, gerekli kod dokümantasyonunu ve birim, smoke testlerini de yapar. Dolayısıyla programcı dar bir kapsamda çalışır, odaklıdır.

Malesef programcılık, ülkemizde harc-ı alem olarak görünen bir meslek. Programcılık, biraz kıvrak zekaya sahip kişilerin PHP, JavaScript vb. değişik web programlama dilleri kullanarak becerebildiği bir alan olarak görülüyor. Zaten bilgisayar, teknolojileri ve ilgili terimler ehlinin dilinden çıktığında, sade vatandaşın zihninde çok ciddi bir karmaşıklık, akıl ermezlik vs. gibi duygular uyandırıyor. “Şimdi Zeki Müren de bizi görüyor mu?” gibi bir durum yani 🙂 Dolayısıyla programcılık, akıllı bir lise mezununun rahatlıkla yapacağı bir uğraş alanı olarak görülüyor ülkemizde. (Acaba bundan dolayı mı Bilgisayar Mühendisliğini pek çok zeki lise mezunu kendine tabi bir gelecek olarak görüyor. Burada bu konuya deyinmiştim bir nebze.)

Halbuki programcılık yüksek “computer science” yetkinlikleri gerektiriyor. İşletim sistemlerinden networkinge, algoritmalardan karmaşıklığa, veri tabanlarından yapay zekaya kadar pek çok matematiksel ve bilgisayar altyapısı bilgisine ihtiyaç duyuyor. Ötesinde programcılık çok ciddi sabır, detaylı çalışma ve aşırı odaklanma gerektiren ve asosyal bir iş. Programcılık asap bozucu bir iş açıkçası 🙂

Durum böyleyken ben bu ülkede aldığı İşletim Sistemi dersine girmeyip, “bizim okulda Linux öğretilmiyor” diye şikayette bulunan Bilgisayar Mühendisliği ögrencileri görüyorum. Halbuki İşletim Sistemi dersinde Linux kerneli örneğinde bir işletim sisteminin ilgili tonla detayı ve mekanizması anlatılıyor. Bu konuda nefis ders kitapları var. Ama tüm bu dehşetengiz yapılardan habersiz olan gencimiz, Linux komutlarını açıklayan 10 sayfalık bir yazıdan medet umuyor. Bir kullanıcı olarak Linux’u öğrenmek ne kadar zor olabilir ki? Linux’u yönetim seviyesinde öğrenmek isteyen kursuna gider, bunun yeri de üniversitedeki dersler değildir, bir bilgisayar mühendisinden de beklenmez. Ama üniversitede, işletim sistemlerinin sistemdeki nesneleri nasıl kilitlediği, burada ne gibi soyutlamaların ve mekanizlamaların kullanıldığını öğretmeleri ve öğrencilerin de öğrenmeleri gerekir. (Bu gerçege pek çok kişinin itiraz edip, üniversitelerin, derslerin ve özellikle de hocaların tutumlarını sebep göstereceklerini çok iyi biliyorum, çünkü ben de o sıralardan geçtim.) Bunları iyi bir şekilde özümsemiş bir yeni mezun Linux’u istediği detayda hızlıca öğrenebilir. Neyse, konuyu dağıtmadan ilerleyelim.

Developer ise sahip olduğu sorumluluk ve yaptığı iş açısından programcıdan daha fazlasıdır. Evet programlamada programcı developerdan iyi olabilir ama developer kapsam olarak bir programcıdan daha geniş bir alanda iş yapar. Bu anlamda örneğin web tarafını düşünerek “JavaScript” programcısı ve “Web Developer” dediğimizde, bu iki rol arasında ciddi farklar vardır. İlki belli ki JavaScrip’i çok iyi bilir, her türlü detayıyla işinde kullanır. Ama web developer, JavaScript dahil web yapılarını, CSS, HTML vb. teknolojileri, bir işi baştan sona bitirecek şekilde kurgulayabilecek yetkinlikle bir kişidir. Bu anlamda aslında her developer bir programcıdır ama tersi doğru değildir.

Yukarıda belirttiğim gibi, programcı daha derin ve daha odaklıdır. Developer ise zamanının ciddi bir kısmında programlama yapar ama muhtemelen birden fazla programcıyla çalışır ve onların işlerinin daha büyük bir ölçekte birbirleriyle uyumlu olmalarını sağlar, muhtemelen bu amaçla bir miktar tasarım çalışmasında bulunur ve farklı programcıların ürettiklerinin, bir şeyi geliştirecek şekilde uyumlu olduğundan emin olur. Yani pek çok program parçasının bir araya gelerek bir yazılım sistemi haline gelmesi için developera ihtiyaç vardır. Developer bu şekilde programlamanın önü ve arkası hakkında da bilgi sahibidir. Bu anlamda yazılım geliştirme projelerinde programcı sayısı developerdan daha fazla olur.

Her programcı, zamanla developer olmak zorunda değildir. Programcılığı çok seviyordur, odaklı çalışmaya daha yatkındır, daha dar çerçevede çalışmayı tercih ediyordur ve bu yüzden pek çok farklı teknoloji ve problemle uğraşmaktan kaçınıyordur. Bu gibi sebeplerden dolayı developer olmak yerine programcı kalmayı tercih ediyordur.

Yukarıda bahsettiklerimize göre bu ülkede programcı azdır, developer çok daha fazladır diyebiliriz. Çünkü öncelikle bu ülkede odaklı çalışmak çok az görülen şeylerden. Son derece savruk çalışan bir milletiz biz. İkincisi bilgi ve tecrübenin ne olduğu konusunda aklımız karışık. Son derece odaklı çalışarak  5-10 senede öğrenilebilecek şeyleri üniversiteden mezun olurken bildiğimizi sanıyoruz. 50 yaşına gelmiş, yaklaşık 30 senedir 2-3 farklı dilde ve farklı iş konularında programcılık yapmış, işini son derece iyi bilen ve etkin yapan bir kişiye bu ülkede değer verildiğini görmek çok zor. Tam kitap yazıp, bilgi ve tecrübesini paylaşacak çağa gelmiş kişilerin aslında biraz kendi biraz da toplumsal tutumlarımız yüzünden, geride kalmış, atıl, yeni gelişmeleri çoktan kaçırmış, dinazorlaşmış olarak görülmeleri çok yaygın bir durum. Bunun en temel sebebi sağlıklı bir programlama kültürüne sahip olmayışımızdır. Halbuki ben doktora sahibi, 20 küsür senelik programlama geçmişi olan, kitap yazmış, gerçek “senior” programcılarla çalıştım ABD’de. Gerek yaptıkları iş, gerek kurumdaki yerleri son derece saygındı. Çünkü programlama zor iş, derinleşme gerektiren bir saha.

Örneğin eski mainfarme sistemlerde COBOL, RPG vb. dillerde çalışan insanlar, ya da büyük projelerde sadece C, Java vb. dillerle programlama yapanlar hep tipik programcı örnekleridir. Hatta mesela Java’nın bir bileşeninde uzmanlaşmış kişidir programcı. EJB programcısı ya da JPA programcısı gibi. Ama yukarıda dediğim gibi bu ülkedeki iş yapış şekilleri, bir kişinin odaklanması ve iş bölümü üzerine kurgulanmış değildir. Aksine herkes olabildiğince farklı ve çok şey yapsın düşüncesi BT dünyamızda çok yaygındır. Projeler ufaldıkça bu düşünce çok daha haklı bir seviyede kendini temsil eder. Bu yüzden programcı desek bile aslında çoğunlukla developerı kastederiz. Hatta network kurmadan veri tabanı yönetmeye kadar “her işi yapan” bir mühendistir istediğimiz. Bundan dolayı uzmanlaşma az görülür, insanlar teknolojiden teknolojiye atlar. Bu da bu ülkede ciddi miktarda ve derin bilgi birikimini malesef önler.

Projelerde hem programcılara hem de developerlara ihtiyaç vardır. Konuya bir sonraki yazıda devam edelim.

 

Toplam görüntülenme sayısı: 5394