28 Eylül 2006

Son kullanıcı neden program yazmayı bıraktı?

Son ama hatırlamadığım zamanda slashdot'ta bir haber okudum: "Why Johnny can't code?" Son kullanıcı ve çocukların neden program yazmadığını, yazamadığını ve neden yazmak istemediğini araştıran bir gazete haberine gidiyordu link. Hatırladığım kadarı ile konu oyunlara, tüketim toplumuna bağlanmıştı. Bu konu üzerine ben de bir şeyler yazmak istedim.

Program yazmak, üretmek bilgisayarı öğrenmenin en kolay ve güzel yoludur bana göre. Bir otomatik saatin işleyişini görmek gibidir. Neyin neyi tetiklediğini seyredebilir, x'e 5 vermenin 4 vermekle farkını anlayabilirsiniz. Hatta bu bir birimlik değişikliğin cennet ile cehennem arasındaki çizgiyle haşır neşir edebileceğini de...

Peki, neden eskiden çocuklar, büyükler program yazarken artık bu işlerle pek ilgilenmiyorlar. Bunun esasında bir çok nedeni var ama; bunlar arasındaki bir nedenin yeri bunlardan fazla. Bu yazıda bu noktalara değinmeye çalışacağım.

1- Toplumun tüketime kayması: Bilgisayarlarda program yazılmamasının en yüzeysel sebeplerinden biri budur. Toplumda üreten bir hizmet sektörü vardır. Size programlar, aparatlar, işletim sistemleri, hizmetler üretir / sunar; sizi rahat ettirirler. Bir tanıdığımın ettiği bir laf vardı: "Eğer bir şeye ihtiyacın varsa ve bu şey yeterince primitif ise mutlaka biri senden önce yazmıştır." Bu düşünce yapısına sahip bir toplum oluştuğu zaman zaten otomatik olarak programcıların sayısının düşmesi kaçınılmaz bir hal alıyor, zaten almış vaziyette. Böyle düşünen bir toplumun bir kısmı üretmeyi sevmediği için (evet, bu da bir haktır, sadece tüketmek) ya da üretimin verdiği hazzı henüz tatmadığı için hazır paketlere yönelirler ve poşet çay programlarına bile para verebilirler (ya da bedava alternatifleri kullanırlar).

2- Oyunlar, sosyal hayatın ve trendlerin değişmesi: Eski zamanlarda çocuklar ve gençler arasında popüler olan şey program yazmak, demo yazmak gibi hobilerdi. Oyun oynamak bu kadar popüler olmasa bile yine vardı. İnternet, MMORPG, MSN Messenger gibi şeyler icad edilmemiş olduğundan dolayı, insanlar bilgisayarın başına çoğul olarak oturur; oyun oynar ya da yazdıkları programları yarıştırırlardı. Eskiden "demoscene" denilen şeyler prestij ifade ederdi, yer altı gruplar olarak anılmazlardı. Teknolojinin primitif olmasının da yan etkisi olan bu durum; bu teknolojiyi kullanmak isteyen herkese onu iyi bilmeyi şart koşardı. Bu nedenlerden dolayı BBS lerden Hüseyin Uslu'nun telefon rehberlerini başka birinin yazdığı telnet prprogramını çeker, kullanırken heyecanlanır, içine bakıp; adam yapmış derdik. Herkes az çok neyin ne anlama geldiğini bilirdi.

Bugüne geldiğimizde ise o zamanlarda hayal edemediğimiz hızların alınabilir fiyatlarda (kota ve ucuzluğu karıştırmayın, yarama basmayın) olduğunu, laptopların cep telefonları gibi satıldığını, insanların sabahtan akşama kadar World of Warcraft oynadığını hatta orada evlendiğini, akradaş çevresi edindiğini, sözlükten tanışıp komün olduklarını görüyoruz. HP bile reklamlarını yapıyor. "Computer is personal again". Bugünlerde topluluklar internet üzerinden kuruluyor, dersler evden yapılıyor, programlar intenetten servis olarak kullanılıyor ve bu bilgi denizinde insanlar herşeyi bulabildiği için şunu yapsak nasıl olur pek demiyorlar.

3- Programlanabilirliğin bir özellik olmaktan çıkışı: Bu yazıyı okuyan sizin hala çalışan bir Amiga'sı, Commodore'u var mı? Ya da onlarla hiç tanıştınız mı? Datasette kullanıp kafa ayarı yaptınız mı? Ferhat'tan ya da Mikromedya'dan disket, kaset çektirdiniz mi? Hala pinball fantasies oyununu özlüyor musunuz? Bu terimlere aşina olan okuyucular o zaman bilgisayarların "programlanabilir kişisel bilgisayar" ve "kendi programlarınızı da yazabileceğiniz oyun, eğlence ve iş makineleri" olarak lanse edildiğini hatırlayacaklardır. Commodore kitabındaki ilk bölümün basic'e giriş olmasını da...

Bilgisayarın emekleme dönemlerini yaşadığı o zamanlarda insanların bilgisayarlarına program yazabilir olması büyük bir gelişmeydi ve bu insanlara pazarlanıyordu. O zamanlar bir bilgisayarın hızından ve özelliklerinden öte; desteklediği / kullandığı programlama dili dahi piyasa payını belirleyebilmekteydi. PC'nin gelişi ve DOS bunu çok değiştirmemiş olsa bile; Windows'un gelmesi ile bu özellik yavaş yavaş kaybolmaya başlamıştı ama; PC demoscene daha henüz yeni doğuyordu.

4- İşletim sistemlerinin karmaşıklaşması ve programlanabilirliğin saklanması: ve sonunda olan olmuştu. Microsoft'un her eve bir bilgisayar vizyonu çerçevesinde kolay kullanılabilir, insanların kafasını karıştırmayan işletim sistemleri üretilmeye başlandı. Önceleri bazı işlerin daha kolay hale getirilmesi için yazılmış olan windows shell, zamanla bilgisayarın ana kabuğu olmaya başlamış, MacOS'u tarihe gömmek için her sene çıkartılmak için uğraşılmış olan her cici windows DOS ve DOS prompt'u daha gerilere atmıştı. Windows 2000 ile Microsoft zafer ilan etti. Windows artık DOS tabanlı bir işletim sistemi değildir. Böylece DOS tarihe gömülmüş, kara ekran sadece emüle edilen ve "öcü" bir yer ilan edilmişti. Böylece basit programların çalışabileceği alan lanetlenmiş ve programlama öğrenmek isteyenlere başka yollar görünmüştü.

Windows üzerinde yazdığınız programın görünebilmesi için bir pencereye sahip olması şart hale gelmişti artık. Peki bunu nasıl yapacaktık? Fortran, Pascal ile bu imkansızdı fakat; C++ ve win32 API ile bu gayet mümkündü. İşin kötüsü ise bu durumun göründüğü kadar iç açıcı olmadığı idi. Win32API; güç ve kullanılabilirlik dengesini kaçırmış, anlamsız derecede zorlaştırılmış bir yapı olup çıkmıştı. Bunun iki sebebinden biri çok büyük bir hızla geliştirilip hiç ama hiç son kullanıcının düşünülmemiş olmasıydı. Diğeri ise son kullanıcıyı kuvvetli dillerden soğutup iş ortaklarına para kazandırmaktı. Çünkü Windows aynı zamanda ticari bir platformdu ve iki tarafa da para kazandırmalıydı. Microsoft ayrıca herkesi kendi platformuna bağlayabilmek için visual dil ailesini çıkardı ve böylece tüketicilerin yazdığı programların kendi platformuna bağımlı olmasını sağladı.

Sonuç olarak, daha önceleri bir özellik olarak lanse edilen ve sonra diğerlerine "güzel" para kazandırdığı için kullanıcıdan soyutlanan programlanabilme özelliği nedeni ile son kullanıcı program yazmayı bırakmak yerine, program yazmayı unuttu. Bunu unutmayan, merak eden insanlar için ise genel geçer dillerin işletim sistemi ile olan interface'leri son derece zorlaştırılarak daha basit ve high level diller üretildi (VC++, C#, J# vb. Microsoft dilleri). Daha önceki zamanlarda Sun ise tamamen farklı bir felsefe ile (Bir kere yaz her yerde kullan) Java'nın temelini attı. (.NET ailesi aynı zamanda Microsoft'un java'ya açtığı ve başka bir sürü amaç içeren , ki bunlar başka yazıların konularıdır). Sonuç olarak son kullanıcı high-level ve yavaş programlama dillerinde kendi egolarını tatmin ediyorlar. (Biliyorum, java ve .NET çok gelişmiş sistemler, yapılar vs. ama; ben aynı kodu da C++ ve WxWidgets ile yazabilir bu programları toza boğabilirim). Bu ekolün karşısında ise şu anda yavaş ama kararlı şekilde kök salan GNU/Linux durmakta ve bilgisayar meraklısı bir çok insan bu işletim sistemini windows'un yanına ikinci ya da birinci işletim sistemi olarak kurmakta, kullanmakta ve isteyenler çok rahat şekilde büyük / küçük programlar yazabilmekte. Şimdi sorun, daha sonraki nesillere bu işletim sistemlerini ve üretmenin zevkini tattırabilmekte...