DevOps: Kime Lazım, Neden Lazım?

DevOps, “development” ve “operations” kelimelerinin bir araya getirilmesinden oluşmuş bir kelime. Yani, “geliştirme” ve “operasyon”. Burada “geliştirme” dediğimiz zaman, yazılım geliştirilmesinden bahsediyoruz. Operasyon derken de, bu yazılımın çalıştırılması ve kullanımından bahsediyoruz…

Geliştirme, yazılımcılar tarafından yapılır. Yazılımcılar genellikle, kendi “güvenli alan”larından, yani kod yazma alanından dışarıya çıkmak istemezler. Kod hangi makinada çalışacak, oralara nasıl kopyalanacak, çalışma sırasında ne problemler çıkacak gibi sorunlara ilgi göstermek istemezler. Gösterirlerse de, bundan çok hoşlanmazlar.

İşin operasyon tarafına bakarsak, burada da “klasik” anlamıyla, kullanıcılar (ki genel olarak teknik olmayan insanlardan oluşurlar) ve sistem yöneticileri vardır. Sistem yöneticileri, yazılımları kurup kaldırırlar, sistemleri genel olarak çalışır halde tutarlar. Ancak yaptıkları bundan öteye gitmez.

Bir problem çıktığında nasıl çözümleneceği, belli başlı problemlerle nasıl baş edileceği de çok net değildir. Yazılımcı “ben yazacağımı yazdım”, sistemci de “ben bana geleni çalıştırdım” fikrindedir…

İşte DevOps, bu arada oluşan boşluğun cevabıdır. İçinde hem geliştirmenin operasyonunu, hem de operasyonun geliştirmesini içerir.

Read more

Yazılım Neden Olmaz? Müşteri ve Yazılımcı…

Yazının başlığı bile tartışma konusu oldu.

Yazılım, “olmuyor” değil çünkü. Bir şekilde, işler yapılıyor, oluyor, paralar veriliyor-alınıyor. Belli sürelerde de, bazı şeyler üretiliyor. Ancak, yazılımı yapan da, yaptıran da şikayetçi pek çok yerde. İğneyi de, çuvaldızı da her iki tarafa batırmak lazım. Yazılımın müşterisi ne istediğini ya da ne beklemesi gerektiğini bilmediği gibi, yazılımcı da eldeki iş için gerekli sonuçları nasıl elde edeceğini bilmiyor.

Sonuçta, başlığı böyle attım. Yazılım aslında “olmuyor”, yani “adam gibi” olmuyor. Yarım yamalak olan, iki tarafta da tam bir memnuniyet yaratmayan işleri “olmamış” diye tanımlarsak, yazılım basbayağı olmuyor işte.

Tabii, olayı subjektif bir “adam gibilik” tanımıyla bırakırsak, üzerinde tartışmak yada düşünce üretmek çok zor.

Read more

Hata Raporlama: Nasıl Yapılır, Nasıl Yapılmaz

Bugüne kadar, çok tane yazılım projesinde bulundum. Projelerin doğumunu, büyümesini, olgunlaşmasını ve hatta maalesef ölümünü gördüm…

Konumuz, proje üretime (ya da en azından teste) girdikten sonra, hata raporlama (“bug report”) olarak bilinen şey.

Neredeyse her projede, bir veya bir kaç acemi hata bildirmeye çalışan insan bulunur. Bunlardan epey bir tane eğittim. Ama eğitmekle bitecek gibi değil, hata raporlama okulda öğretilmiyor ki!

Yazıdan, “hangi sistemi kullanalım” tarzı bir bilgi çıkmayacak. Dediğim, kullanılacak hata takip sisteminden bağımsız, hatta kullanılacak sistemden daha önemli… Olabilecek en kötü çözüm olan e-posta yoluyla hata raporluyor bile olsanız, şu diyeceklerime uygun davranırsanız, işleriniz yürür.

Read more

Yöneticilik ve Liderlik Üzerine

Bunların üzerine yazıp çizen çok… Bir ukalalık da ben edeyim, bir şeyler de ben söyleyeyim dedim. Haddim midir? Bilmiyorum. Olay teknik olmayınca, insanın haddi mi, değil mi karar vermesi de çok kolay olmuyor. Öte yandan, risk olmazsa, kazanç da olmaz. Dolayısıyla, buyrun uyduruyorum…
Kelime anlamlarından yola çıkmayı severim. Kavram kargaşasını biraz önlemeye yaradığını düşünürüm çünkü. Yöneticilik ve liderlik… Aynı cümlelerde, bilemediniz aynı paragraflarda hayatlarını geçiren kelimeler bunlar. Köklerine bakıp biraz yorum yapalım:
Yöneticilik: En kökünde, “yön” var. Gidilecek doğrultu falan anlamında. Yönetmek ise, başkasına yön vermek anlamında olsa gerek. Yönetici, başkalarına yön veren, yöneticilik ise bu işin adı…
Liderlik: Burada bir tek “lik” eki Türkçe maalesef. Lider olma işi haline getiriyor kelimeyi. Lider ise yabancı kelime, TDK’ya inanırsak, Fransızca “leader”dan geçmiş Türkçe’ye. Türkçesi olarak “önder, şef” veriyor yine TDK büyük sözlük. Önder sanırım anlam olarak daha yakın. Kelmenin yabancısında da, yerlisinde de (önder) bir önden gitme durumu var. Yani, lider dediğimiz, başkalarının önünden giden ya da onları peşinden götüren demek… Liderlik de bu “iş”in adı. (Bu bir iş tanımı olabilir mi, o ayrı bir mesele.)
“Yönetici” ve “lider”, zihnimde farklı imajlar yaratıyor. Yönetici deyince, ona buna komut yağdıran biri geliyor aklıma. Lider deyince ise, insanların peşinden gittiği biri geliyor. Yöneticinin yüzü insanlara bakarken, insanların yüzü lidere, liderin yüzü ise ileriye bakıyor, yine kafamdaki görüntülerde…

Read more

Objective C: Back to the Future!

Apple patladı, patlattı, gidiyor.
iPod dedi, iPhone dedi, MacBook dedi, iPad dedi, dedi de dedi.
Kullanıcı deneyimi olarak dövebilen, yenebilen yok adamları. Yapıyor ve güzel yapıyor “adamlar”.
Öte yandan, son kullanıcı için sağladıkları konforu, maalesef programcı tayfasına sağlamıyorlar.
iPhone/iPad uygulaması yazmaya kalkanlar, ne dediğimi biliyorlar.
XCode, bu işin IDE’si. XCode 4 daha kabul edilebilir oldu ama, daha geçen sene XCode 3 vardı henüz. Onunla ilgili yorumum, “insan bunu insana yapmamalı” şeklindeydi.
iOS için seçtikleri programlama dili de bizi yirmi sene geri götürdü. Objective C! Kapağını açınca naftalin kokuyor. Objective C dediğin, preprocessor kullanarak C diline Smalltalk’dan feature taşımak için ITT’de icad edilmiş bir dil. Sene 1981. Apple’ın neden seçtiği belli, az RAM’li yerlerde overhead minimum olacak şekilde çalışıyor programlar. Fakat programcıya yazık değil mi ağalar?
Aynı durum ile karşı karşıya olan Google (tamam taraflıyım burada) Java seçerek daha doğru bir seçimde bulunudu. Dalvik JVM de pek ağır siklet değil, dünya da batmadı.
Objective C’de kıl olduğum durumlar:

Arkaik notasyon. Köşeli parantez ile metod çağırma, ya da mesaj gönderme.
İlk maddede de belli olan kavram kakafonisi. Class’a interface, interface’e protocol, protokole Mahmut dememiz gerekiyor.
Kategori diye bir şey var, adı ile kendisi alakasız.
Yeniden manuel memory management’a döndük. Birinci seviye memory leak yine mümkün. Yaşasın!
Ayrı header dosyası, ayrı kod dosyası yaz. Sene 1994 sanki.
Compiler ayrı, linker ayrı arıza çıkartsın. Yine sene 1994.

Tabi esas rezillik, mobil cihazların da kapasiteleri tavanı aştığı zaman olacak. Objective C’nin orijinal seçilme nedeni olan kısıtlı donanımda çalışma gereği ortadan kalkınca, tamamen sebepsiz yere 2011 yerine 1994′te kod yazıyor olacağız programcılar olarak.
Yahu şu Apple’ın bize ettiğini yedi düvel bir araya gelse edemez…
Ha bir de şu mesele var: “Alışınca güzel valla” diyenler falan var. Bu arkadaşlar, çatala karşı Çin çubuğunu, otomatik vitese karşı manuel vitesi savunanlarla aynı kamptan. Maksada göre değişir. Otantik deneyim istiyorsanız, Çin çubuğu kullanabilirsiniz. Ancak çatal daha iyi teknolojidir. Araba yarış cihazı ise, manuel vites sevebilirsiniz (hoş son gelişmelerden sonra bu da yalan oldu; F1 araçlarında tiptronik dedikleri otomatik vites var). Ama otomatik vites gereksiz arkaikliği kaldıran bir teknolojidir. Yani genel olarak, insanı eğitmek yerine makinayı eğitmek, düzeltmek doğru olan opsiyondur. Böylece dikkatinizi ve eforunuzu daha yüksek seviyeden işlere aktarabilirsiniz.
Üç gün compiler’ı mutlu etmek için uğraştım… Neyse ki eski C’cilerden kim kaldı diye sorulunca elini yükseğe kaldıran tayfadanım.
Şimdi kod yazmaya devam…

Source: safkan.org/blog/  

Internet Devrimi…

Wikipedia
Devrim falan, öyle laf çok sevmem ben. Fazla iddialıdır çünkü. Hem neyi devireceksin Internet ile?
Ama tut ki attık başlığı öyle. Demek ki iddialı bir iddiada bulunulacak.
Internet, ilk yıllarında fazla şişirildi. “Dot com” balonunu ve patlamasını hep beraber gördük. Zannedildi ki, işleri sanal ortamda yapınca, tüm iş kuralları değişecek. Herkes bir koyup üç alacak. Pek öyle olmadı. Balonun patlaması hemen bir “ince ayar” yaptı ortama. Daha temkinli yaklaşılır oldu balonlara.
Internet, tabi aslında bir haberleşme protokolü. Ama Internet deyip büyük harfle yazınca, herkesi birbirine bağlayan ağdan bahsediyoruz, tekil olduğu için de büyük harfle yazıyoruz.
Internet’in başlangıçtaki amacı askeri… Word Wide Web dediğimiz şeyin ise başlangıç amacı daha çok bilimsel, verilerin paylaşımı için. Yani, düşünülen hep belli grupları birbirine bağlamak.
Ama, pek çok zaman, insanlar kendilerinden büyük şeyler yaratırlar. Sonra o “şey” kendi kaderini kendi belirler…
Internet de öyle oldu. Elbette, “dünyayı değiştireceği”ni söyleyen çoktu, ama bu şekilde mi?
Ne oldu da şimdi adına devrim demeye cesaret ettim? Internet ohoo, çok senedir var.
Internet artık hızlı. Yani, yazıların yüklenmesi artık anında. Birkaç MB sorun değil. Film indiriyoruz artık, hem de filmi seyretme süresinden kısa sürede.
Internet artık hep var. “Bağlan” demeye gerek yok. Desktop’lar zaten bağlı, laptop’larda wireless’ı olmayan kalmadı. Bağlantı yoksa cep telefonu şebekesinden bağlanılıyor.
Diyeceksiniz herkes mi? Hayır. Ama yayılıyor. Cep telefonu da üç beş kişide vardı, şimdi basbayağı herkeste var. Herkeste mobil Internet olacağı zamanlar pek uzak değil.
Eee? Yani?
Yanisi şu… Elektrik kadar hayatımıza girdi, daha da girecek. Oyunun kurallarını değiştiren bir şey bu.
Mesela, bilgi çöplüğü artık para etmiyor. Yani, “adam sinema konusunda ummandır, yönetmenleri, filmlerini ezbere bilir” artık bir şey ifade etmiyor. Açtım mı IMDB’yi ben de onun kadar bilgiliyim anında. Her yerden de ulaşabiliyorsam…
Ansiklopedi denen kavram da yalan oldu. Wikipedia ile önce dalga geçenler vardı. Ama, önemli miktarda insanın bir konuda derinlemesine bilgisi vardır… Onları bir araya koyunca ansiklopedi oldu. Evdeki Memo Larousse’u, son temizlikte gönderdim… Orada olup da Wikipedia’da olmayan bir şey yok çünkü.
Bu daha da beter hale gelecek. Bilgiye sahip olmak, ya da ulaşmayı bilmek çok bir şey ifade etmeyecek. Herkesin yapabildiği bir şey olacak.
Kıymet nerede olacak peki? Bilgiyi işlemekte, yorumlamakta, ondan sonuçlara varabilmekte olacak. Elbette bir de bilgiyi üretmekte…
Bunun tam devrim olması için, bilgilerin daha yoğun, daha serbest paylaşılması lazım. “Bir sonraki seviye”ye çıkabilmek için…
Bu kadar…
Yarım mı oldu? Bağlayamadık mı bir yere?
Internet de öyle. Henüz bir yere bağlanmadı. Ama ip hazır, kazıklar var… Bağlanacak sıkıca.
Ama nereye?
Source: safkan.org/blog/  

Programlama Dilleri – Hangisi Daha İyi?


Sürüp giden bir tartışmadır bu. Hangi programlama dili daha iyi?
İnsanlara tek tek sorarsanız, genel olarak alacağınız cevap, tek bir dil olacaktır. Her biri de bu seçimini hiddet ve şiddetle şu andan sonsuza kadar savunacaktır. Neden mi? Çünkü her biri kendi problemi için doğru olan programlama dilini seçmiştir. Bunu seçerken bir-iki başka dil de denemiştir, onların işe yaramadığını da görmüştür. Yani, söylediği doğrudur. Kendi problemi için.
Şöyle bir laf var: Eğer elinizdeki tek alet çekiç ise, her şey gözünüze çivi gibi görünmeye başlar…
Ama her şey çivi değildir… Vida vardır, cıvata vardır, perçin vardır…
Peki, hangi dili öğrenmeli, hangisini kullanmalı? C var, C++ var, Java var, C# var, Perl var, Python var, Javascript var…
Şöyle bir üzerinden geçelim durumların, bakalım bir yere varabiliyor muyuz…
C:
Hey baba torikler… C, yaşça benden büyüktür, 1970 doğumlu olarak kırk yaşına yakındır. Seviye olarak, assembly seviyesine çok yakındır. Programcıya maksimum esnekliği sağlar — inanılmaz yanlış şeyler yapmak dahil, her şeye izin verir; genel olarak “programcının ne yaptığını bildiğini” varsayar. Bir CPU’dan olabilecek en yüksek performansı çıkartmak için ideal dildir — ancak çok kısıtlı durumlarda (gerçekten çok kısıtlı) C yerine assembly diline dönme gereği duyulur. Mesela, device driver veya “number crunching” (yani sırf matematiksel hesaplama) işi yapacaksanız, ideal programala dilir, pek eline su dökecek dil de bulamazsınız. Ancak öte yandan, hafıza yönetimi tamamen programcıya bırakılmıştır. Thread desteği kütüphane aracılığıyla vardır. Network desteği de keza. Bol miktarda “boilerplate” kod gerektirir. (Boilerplate kod dediğimiz şey, yani aslında iş yapmayan, ancak o dilin yazım kurallarına uymak için yazılması gereken kod kısımları…) Dolayısyla, web programcılığı, database işleme veya daha genel olarak bilgi sistemleri işleri için pek uygun bir seçim olmayacaktır. Yazmaya yazılır da, uzun zaman alır ve zor olur. Özetle, “RAD” denilen, “rapid development” işi için çok iyi bir seçim değildir. C’yi severiz, saygımız vardır.
C++:
İşte size çıfıt çarşısı misali bir dil. İçinde o kadar çok şeyi barındırır ki, ne idüğü belirsizdir aslında. Yani içinde o kadar çok çeşit programlama şekli içerir ve o kadar hiç birini zorlamaz ki, neredeyse “amorf” bir programlama dilidir. Dili icad eden Stroustroup (adını doğru yazmışızdır umarım) dilin popüler olması için, herkesin her istediğini dile koymuştur. Object-oriented programlamayı destekler, yani “class” meselesi. Template programlama vardır. İsteyen düz C gibi de kullanabilir. Function ve operator overloading’e müsaade eder ki, bunlar beter şeylere dönüşebilir. Çok iyi kod yazmak (iyi = anlaşılır) mümkün olduğu gibi, iğrenç kod yazmak da mümkündür. C’de eksik olan şeyler bunda da eksiktir öte yandan. Hafıza yönetimi yine programcının eline kalır. Rapid development veya web development için çok güzel bir seçim değildir. Performans olarak C’ye yakın performans verse de, bir takım overhead’ler dolayısıyla, performansta C kudretine erişemez. (Vırtual tables vs. gibi. Limit olarak C’ye yaklaşır, ancak prensipte geçemez diyelim. Aman kör nokta bulup gelmeyin bana.) Öte yandan, object-oriented yazılacak, performans gerektiren büyük çaplı uygulama projelerinde, güzel bir seçenektir. Yalnız, dilin afedersiniz her bokunu bir arada kullanmaya kalkışmamak gerekir. Anlaşılır kod yazmak için kaçınılması gereken yerler vardır. (Operator overload etmeyin, exception kullanmayın, dayak istemeyin falan gibi.) Ha, bu arada, söylemeden geçmeyelim, Google’daki üç “resmi” dilden biridir; ortamın ağır topudur.
Java:
Nispeten genç bir dil. 1995′de icad edildi. Sun tarafından. (Sene 1999′da “on yıl tecrübeli Java programcısı” arayan adamlar vardı, onu da söylemeden geçmeyelim.) İlk önce browser’ın içine applet yazmak için bir dil olarak çıktı ortaya. Zaman içinde applet’ler gözden düştü, bunlar doğru dürüst çalışmadı çünkü. Server-side Java başta pek hesapta yokken, sonradan işin “esas” tarafı haline geldi. İcad eden onlar değildir muhtemelen ama, yarı-derlenme olayını ilk popüler yapan dil Java’dır. Yani, derleme, Java’yı “bytecode” denen şeye çevirir. Bu daha sonra çalışma esnasında JVM denen “Java Virtual Machine” tarafından interpret edilerek çalışır. İlk zamanlarda, Java’nın yavaşlığı meşhurdu, pek çok derdi vardı. Ama zaman geçtikçe pişti Java. Başlarda 1:10 olan hız oranı (Java C’ye karşı mesela) tamamen nümerik olan uygulamalar hariç, 1:2 falan civarına geldi. Arada JIT compilation denen şey icad edildi ki, “Just In Time Compilation” demek, çalışma anında Java bytecode’dan makina koduna derlenir oldu. Java’nın avantajları, C++’daki problemli şeylerin çoğunu atması, “garbage collected” hafıza modeliyle birinci seviye hafıza yönetmini programcının elinden alması, “pointer aritmetiği” kullandırmaması, “multiple inheritance”a izin vermemesi, “operator overloading” yaptırmaması oldu. Bunlara ek olarak, Java network ve database programlama için gerekli şeyleri, programlama için gerekli veri yapılarını standart kütüphanelerinde barındıran bir dil olarak, bunlarda daha hızlı development’a imkan tanıdı. Dil, yapısı itibariyle, alabildiğine büyük projeler gelişirmeye uygun bir dildir. Information systems şeklindeki sistemler için de idealdir. Bu şekliyle, server-side web programlamanın kuvvetli silahıdır. Ama, “number crunching” işinde nihai olarak C veya C++ ile yarışamaz. Ha, yine kaçırmayalım, Java Google’daki üç resmi dilden ikincisidir.
Python:
Python. Java’dan yaşlı, ama popüler olması Java’dan sonra bir dil. Script dili. Performans olarak yukarıdakilerin hiç biriyle cirit atamaz. Object oriented programlama destekler. En büyük kuvveti şu: Acayip hızlı kod yazılır. Neredeyse sıfır “boilerplate” kod içerir. Direkt konuya girersiniz. Development time, Python ile yukarıdakilerin hepsinden hızlı olur. Bu da önce bytecode’a derlenir, ama ondan öte geçmez. Perfomansın dert olmadığı durumlarda, ya da hızlı prototip üretmek gerektiğinde, çok şahanedir. Tüm kütüphaneleri Java kadar olgun olmasa da, oldukça geniştir. Standart kütüphanelerini kullanmak çok kolaydır. Pek çok durumda, diğer programları çalıştırmak ve aralarında köprü görevi görmek için de idealdir. Hafif bir silahtır, bıçak gibidir, çok fazla hasar vermek gerekince işe yaramaz, ama kullanması çok hızlıdır. Diğer dillerde daha “çı” diyemeden Python’da kod yazılmış bitmiş olur. Bu da Google’daki resmi dillerin üçüncüsü.
Javascript:
Yine bir script dili. Java’yla isim dışında ve biraz format dışında zerre kadar alakası yoktur. Biraz object-oriented’a benzetilmeye çalışılmışsa da, aslında bir “prototype” dilidir. Browserlar üzerindeki mecburi, de facto programlama dilidir. AJAX onsuz olmaz. Genel olarak büyük projelere soyunmaya kalkışılacak bir dil değildir. Server side Javascript kısa bir müddetten sonra tedavülden kalkmıştır zaten. Gerçekten anlayanı pek azdır, genelde oradan buradan afırma program parçalarıyla kullanır onu herkes. Aslında bir grup “kötü” yönü çıkartılırsa, fena bir dil değildir.
Şimdi diyeceksiniz ki hoca, gerisi ne oldu? Annem bana, bilmediğin konularda fazla atıp tutma dedi, o oldu. C# Java sülalesinden, Perl ve PHP Python sülalesinden (PHP daha garip bir arkadaş ya neyse). Bunların arasında hangisi daha iyi derdi beni aşar.
Şimdi esas mesele şu: Hangisini kullanalım? Hangisini öğrenelim?
Cevap basit değil. Hepsini öğrenin, doğru sırayla. İlgili iş için doğru olanı kullanın. Doğru sıra, size en çok lazım olanı ilk öğrenmektir. Yani alet çantanıza ilk neye ihtiyacınız varsa onu koyun. Ama bir tek çekiçle kalmayın. Tornavida, pense, alyen anahatarı (bunun da İngilizcesi Allen key imiş, Allen icad eden adamın adı iyi mi) hepsi olsun. Yani, performans çıkartacak, bilgi sistemini büyük çaplı programlayacak ve hızlı programlama yapılabilecek dillerden birer tane bilmek, programcının şanındandır. Duruma göre aleti çıkartır kullanırsınız.
Proje yaparken de, maliyetleri iyi hesaplamak gerekir. Mesela, Python başlangıçta düşük performansıyla saçmalık gibi durabilir. Ama kod geliştirme süresini hesaba katarsanız, öyle olmadığı ortaya çıkar, Bir server’ın aylık kirası, bir programcının aylık giderinin üçte veya dörtte biri kadardır. Kodun her yerinin aynı dilde olması da gerekmez. Performans gerektiren yerleri C++ ile, bilgi işleyen yerleri Java ile yazarsınız, araları da Python ile doldurursunuz, şahane hayatınız olur. Örnek mi? Bkz: Google… Keza Facebook’da da ön taraf PHP, ancak arkada Java ve C++ da koşuyor gereken yerde rivayete göre.
Vidalara çekiçle vurmayın yani… Tornavidada çekiç kuvveti yoktur ama, vidanın o incecik oluğuna tam oturur, gerekli olan yerde gerekli olan kuvveti uygular. Programlamada tek bir problem olmadığı gibi, tek bir çözüm de yoktur, aramayın, bulamazsınız.
Source: safkan.org/blog/  

İLETİŞİM