Archive for the ‘Programlama’ Tag
Günün Sözü
Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
-Martin Fowler.
–
Her aptal bir bilgisayarın anlayabileceği kod yazabilir.
İyi programcılar insanların anlayabileceği kod yazar.
-Martin Fowler.
codefoundry
Bu blogda linklemiş olduğum ve daha sonra linkleyeceğim her türlü ufak tefek programa direkt ulaşılabilmesi için codefoundry adında ufak bir web sayfası hazırladım.
Linux, C++ ve Unicode
Daha önceki yazımda bahsettiğim unicode karakter problemi ile uğraşırken Linux’un bu karakterler ile nasıl baş ettiğini ilginç bir şekilde buldum. Sorun, dosyayı okumak ve işlemek için yazdığım kütüphanenin metni ekrana doğru yazması ama Türkçe karakterleri tanımaması (işlememesi) ile baş göstermişti. Ben de karakterlerin nasıl kodlandığını incelemek için, karakterlerin tamsayı değerlerini ve kendilerini ekrana basan ufak bir C++ programı yazıp derledim…
Programı deneyince sorun daha da karmaşıklaştı. Türkçe karakterlerin tamsayı değerleri hem sıfırdan küçük çıkıyor hem de girdiğiniz karakter ekranda doğru görünmüyor. Peki o zaman, benim kütüphanem dosyayı nasıl ekrana yazabiliyor?
Tatil ve C++

Öncelikle tatilden hepinize merhaba. İnternet bağlantım olmadığı için (iyi ki de yok) yazılarımı yazıp biriktiriyorum. Bugün tatilin 8. günü ve şimdiden kendimi oldukça dinlenmiş hissediyorum. Burada bol bol uyuyor, yüzüyor, kitap okuyor ve az da olsa bilgisayar ile ilgileniyorum…
Tatilin en güzel yanı, internet bağlantımın olmayışı ve beni kimsenin beni rahatsız etmemesinin yanında uzun zamandır ertelediğim projelerime de sonunda zaman ayırabiliyor olmam. Hiç televizyon seyretmediğim için yemekten sonra ve sabahtan az da olsa kendime biraz vakit yaratıyor ve bu ufak aralıklarda ne zamandır yazmak istediğim T-Storm ile ilgileniyorum.
Uzun zamandır C++ ve program yazmadığım için oldukça paslanmışım açıkçası. Masaüstlerimin birinde eclipse açıkken diğerinden Stroustrup’un C++ kitabının PDF’i eksik olmuyor
. Şu anda düşe kalka ilerleme aşamalarındayım. C++ eski bir dil olduğu ve esasen ASCII ile çalışması için yazıldığı için unicode dosyalarla uğraşmakta biraz zorlanıyorum. Elimde bir iki alternatif olmasına rağmen hala kesin bir çözüm bulamadım. Sanırım çözüm hikayesi daha sonraki bir girdiye kalacak.
Python
Her şey birden oldu… Ne olduğunu anlamadan akşam kendimi geçen yaz ısmarladığım python kitabını karıştırırken buldum… Amacım basit ama çok tekrarı olan bir işi programa yaptırmak ve ortaya çıkan veriyi yararlı bilgiye çevirmekti. Kısaca tam anlamıyla bir sistem yönetimi problemi çözmem gerekiyordu ve önümde 3 seçeneğim vardı:
- Bash.
- Perl.
- Python.
Üretime Geçiş
Son zamanlarda tatile gittiğim ve gelince bir sürü işle uğraştığım için, buraya pek zaman ayıramadım doğrusu. Peki son zamanlarda ne oldu? Merak edenleriniz varsa okumaya devam etsin.
Bilgisayarlar Hızlanırken Yavaşlayan Programlar
Bu yazıyı uzun zamandır yazmak istememe rağmen, giriş kısmını bir türlü beceremediğimden dolayı uzun zamandır aklımın bir köşesinde yatıyordu fakat; son zamanlarda okuduğum bir test, bu sorunu da ortadan kaldırdı.
İnternette dolanırken (günde 8 saatini bilgisayar başında geçiren birinden başka bir yerde dolanmasını bekleyemezsiniz zaten) ilginç bir test buldum. Canı sıkılan bazı insanlar (ki ilginç şeylerin bir kısmı sıkılan yaratıcı insanlardan çıkar zaten) ellerindeki eski bilgisayarla yeni bilgisayarın ofis uygulamalarındaki performansını merak etmişler. Karşılaştırılan bilgisayarlar ise şöyle: Apple-][ ve AMD Athlon X2 4800+ işlemcili bir bilgisayar. Sonuç ise şaşırtıcı: Temel ofis uygulamalarında ve işlemlerinde iki bilgisayar neredeyse eşit. Hatta bazı şeylerde Apple-][ önde!
Bu testin elbette Apple-][ ile doom III ya da unreal tournament 2004 oynayabileceğiniz (hiç dikkat ettiniz mi? Bilgisayar delileri genelde FPS oynarlar) anlamına gelmediği ya da çift çekirdekli bir AMD'nin bir Apple-][ kadar yavaş olduğunu söylemediği açıkta. Peki ne söylüyor, ona bakmakta fayda var:
Python’un Adı, C++’ın Tadı…
Hep merak etmişimdir. Neden bazı programcılar kullandıkları dilleri sadece dünya üzerinde o varmışçasına kullanır, savunur ve bunu yaparken sizin kullandığınız dile hakaret eder?
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…
Gerçek programlama editörleri ve programcılığa katkıları
Bir şekilde elime geçen gif dosyasını izledikten sonra düşündüm… Acaba programcıyı programcı yapan editör mü, yoksa editörü editör yapan programcı, kullanıcı mı diye… Linux üzerinde düzenli program yazan biri olarak iyi bir programlama editörü gerçekten ihtiyaç duyduğum bir aparat.
Açıkçası vi ve emacs’i çok severim. ufak conf dosyalarını C vb. dosyalarımı editler, eklemeler yaparım. görünüşleri de güzeldir bu editörlerin. Bana nerelerden geldiğimizi, terminalin gücünü görünüşün her şey olmadığını hatırlatır ama; bence bu toollar ile kişisel bile olsa çok dosyalı projeleri yönetmek zor bence. Ayrıca proje üzerinde bir genel bakış kurup, iki adım geri çekilip, “hmm evet dur şurasıydı işte” diyip dalmak biraz zor. Ben şahsen eclipse kullanıyorum. Windows’da çalışabilmek için flash diskimde win32 kopyasını taşıyorum. makinamda ise linux versiyonu kurulu ve çok da iyi anlaşıyoruz kendisiyle ama; bu editörü kullanmam beni ne “gerçek programcı” ya da “kolpa programcı” yapıyor…
Acaba programcıyı programcı yapan editör müdür, yoksa editörü editör yapan programcı mıdır?
Pekala, gerçek programcı “kimdir, nedir?”. Bana göre gerçek programcı O.S. ve editör bağımsız bir insandır (yani windowscular gerçek programcı olamaz diye bir şey yok ama gerçek programcı bütün osları öttürecek diye de bir şey yok) . Bir kere amacına uygun ve gerçek (bu benim platfom bağımsız (cross platform ya da portable) diller için kullandığım bir tabir. bana göre her platformda yazılıp derlenemeyen bir dil “gerçek” bir dil değildir, siz ne kadar katılırsınız bilemem) bir dil kullanması gerekir. kullandığı dilin nasıl çalıştığını (semantics) bilmesi gerekir. Programı yazdığı O.S. i tanıması ve onun altında yatan donanımın avantaj ve dezavantajlarını bilmesi gerekir. Eğer bunlara göre program yazabiliyor, bunları düşünebiliyor ve kodunu buna göre tasarlayıp, ona göre yazabliyor, yazdığı kodun nasıl çalışacağını bilip optimizasyon yapabiliyorsa gerçek programcı bence odur. Yani eğer, yazdığı programla sisteme istediği gibi hükmedip sistemi en verimli şekilde dize getiriyorsa gerçek programcı odur…
Sistemi nasıl dize getirdiği de kendi yoğurt yemesi ile alakalı bir konudur, stilidir, tekniğidir. vi kullanır, gedit kullanır, emacs kullanır, eclipse kullanır, notepad ++ kullanır…
Bu yüzden bence “cool programcılar emacs kullanır, üşengeçler gedit” diyebilirsiniz ama eclipse kullanan bizden değildir diyemezsiniz.
Zaten eclipse olmadığı zaman hepmiz vi kullanmıyor muyuz? (şahsen ben zevkle kullanıyorum)
İyi geceler…
Not: bu post’a ilham kaynağı olan arkadaşa da özellikle teşekkür etmek istiyorum. Programcılığı editörlere endekslemeyi başarabildiği için.
Yorum Yapın
Yorum Yapın
Yorum Yapın
RSS - Posts