2 puan yazan GN⁺ 2024-08-06 | 1 yorum | WhatsApp'ta paylaş
  • Uzun süre kullanılabilecek programlar seçme ve güvenilir altyapı kurma yöntemlerinden söz ettiğini, ancak hâlâ bunu iyi yapamadığını kabul ediyor
  • Son 2 yıldır kullandığı programın çekirdeğini bir ay boyunca yeniden yazdı ve bu süreçte hayatı boyunca programlama anlayışındaki değişimi geriye dönüp değerlendirdi

2015

  • Soyutlamadan şüphe duyuyor, testlere ve sürüm kontrolüne önem veriyor
  • Sorunların nedeninin soyutlamanın aşırı kullanımı ile test/sürüm kontrolü eksikliği olduğunu düşünüyor
  • Testleri ve katmanları temel kısıtlar olarak alan Mu1 platformunu tasarlıyor

2017

  • Mu1'i bugünkü Mu'ya dönüştürmek için yeniden çalışma başlatıyor
  • Başlangıçta yeni test ve katman fikirlerinin tamamını kullandı, ancak zamanla bunları kullanmayı bıraktı
  • Mu'da çok sayıda test var, ancak bunlar geleneksel türde; katman altyapısını ise taşımadı

2022

  • Freewheeling Apps üzerinde çalışmaya başlıyor
  • İlk başta testsiz başladı, sonra metin düzenleyicinin çekirdek bölümleri için kapsamlı testler yazdı
  • Geri kalan kısımlar test etmesi zordu, ama iyi çalıştı

2024

  • Bir ay önce tüm testleri sildi
  • Diğer Freewheeling Apps ile birleştirme çakışmalarından kaygı duyduğu biçimde, metin düzenleyiciyi radikal şekilde yeniden çalıştı
  • Artık sürüm kontrolü hakkında düşünmez oldu
  • Testleri ve sürümleri bırakarak çok daha iyi bir program ortaya çıkardı

Sürdürülebilir programlamaya dair bugünkü bütünleşik görüş

  1. Çok sayıda insan için sürdürülebilir biçimde inşa etmek fazla zordur; bu yüzden buna hiç kalkışmayın
  2. Çoğu yazılım, kısa vadede çok sayıda insana hizmet etme teşvikinin etkisi altındadır. Daha az logolu, yapımı kolay, daha az bağımlılığı olan ve otomatik güncelleme yapmayan yazılımlara odaklanın
  3. Bağlamdaki küçük bir değişim, bir programın bağlama ne kadar iyi uyduğunu temelden değiştirebilir
  4. Yeni bir program, bir şekilde bilinmeyene doğru ilerler. Çoğu zaman hangi yönde olursa olsun tam olarak ne yaptığınızı bilmezsiniz
  5. Türler, soyutlamalar, testler, sürümler, durum makineleri, değişmezlik, biçimsel analiz vb.; aşina olunmayan bir arazide kullanılabilecek araçlardır
  6. Kaçınılmaz olarak bu araçların bir kısmını aşırı kullanırsınız. İdeal kullanım miktarı düşündüğümüzden çok daha küçüktür. Aşırı kullanım teknik borçtur
  7. Bağlama dair anlayışınız istikrara kavuştuğunda, programın önemli bir bölümünü atıp en baştan yapmak değerlidir
  8. Yeniden yazmaya başlamadan önce, programdan istediğiniz her şeyi ve programın ele alması gereken tüm senaryoları aynı anda zihninizde tutmalısınız
  9. Her şeyi bir kerede inşa edin
  • Testler ve sürüm kontrolü, bu evrimin son aşamasına ulaşmayı engeller
  • Testler kaygıları unutmanıza yol açar, sürüm kontrolü ise geçmişe takılı kalmanıza neden olur

GN⁺ görüşü

  • Program fazla karmaşık hâle geldiğinde, 8. adımda her şeyi akılda tutmak imkânsız olabilir. Bu, çoğu yazılım için, özellikle de birden fazla kişinin yazdığı yazılımlar için geçerlidir
  • Her yazılımın mutlaka 9. adıma ulaşması gerekmez. Birçok Freewheeling App, ilk tasarım tercihleri ne olursa olsun, yalnızca birkaç kişi kullansa bile hatasız bir duruma oturacak kadar yeterince basit ve yavaş evrilir
    1. adıma ulaşmada veri odaklı tasarımın açıkça yararlı olduğu görülüyor. Körü körüne uygulanabilecek bir araç değil; immediate data structure choices ötesine geçip programın veriye erişme biçiminin büyük resmine bakan bir düşünme biçimidir
  • Bu adımlar tamamen doğru olmayabilir. Daha az deneyim sahibi olduğu araçları olduğundan düşük değerlendiriyor olabilir
  • Bu adımların ötesinde nasıl bir aşama olabileceğini merak ediyor

1 yorum

 
GN⁺ 2024-08-06
Hacker News görüşleri
  • Test yoksa, sorunu göremezsiniz ve sorun ortadan kalkmış gibi görünür

    • Test yapıldığında her zaman bug bulundu
    • Testleri silmek, insanın kendini kandırmasıdır
    • Yazıyı okuduktan sonra, varyant/konfigürasyon yönetiminden yorulmuş olduğu izlenimi veriyor
    • Para kazanmak için çok sayıda kullanıcı gerekir
  • Testlerden ve sürümlerden vazgeçince daha iyi bir program elde edildi

    • 2024'te kaynak kod yönetimi kullanmamak anlaşılır değil
    • Birden fazla cihazda çalışmak, geçmişi görmek, geri almak ve branch oluşturmak çok faydalı
  • Başta yazarın haksız olduğunu düşündüm ama iyi içgörüler var

    • Bu iş akışı yazara çok iyi uyuyor
    • Git'in ya da otomatik testlerin üretkenliği düşürdüğü deneyimler yaşamış olmalı
    • Daha basit alternatifler de var (örn. Dropbox, FTP)
    • Yazar küçük programlar yapmayı seviyor
    • Otomatik testler yararlı ama yazarın durumunda değeri ortaya çıkmayabilir
  • Sürüm kontrolü ve otomatik testler gerçek problemleri çözüyor

    • Bugün bir projeye sürüm kontrolü olmadan başlamak delilik
    • Otomatik testler en iyi uygulamalardan biridir
    • Yazarın özel kullanım senaryosunda makul olabilir
  • Büyük programlar yazarken/refactor ederken yazıp atmak ve yeniden yazmak önemlidir

  • Bu makale kafa karıştırıcı

    • Neden ilk sırada upvote aldığını merak ediyorum
  • Küçük değişiklikler bir programın uygunluğunu büyük ölçüde değiştirebilir

    • K9 Mail örneği var
    • K9 Mail alışılmadık bir UI ile başladı
    • Birçok kullanıcı yeni UI'dan memnun kalmadı
    • Küçük değişiklikler uygulamanın uygunluğunu bozdu
    • Hâlâ eski sürümü kullanıyorum
  • Tek başına yazılım yapmakla ekip içinde yapmak tamamen farklı

    • Test bir amaç değil, araçtır
    • Kişi kendine güvendiğinde daha az test yapıyor
    • Önemli kısımlara entegrasyon testleri ekleniyor
    • Yeni API tasarımında unit testler faydalı
  • 2022'de Freewheeling Apps üzerinde çalışmaya başladı

    • Test olmadığı için hayal kırıklığı yaşadı
    • Test paketi, sistemi geliştirme konusunda güven veriyor
    • Özellik karmaşıklığı arttıkça test etmek zorlaşıyor
    • 2024'te tüm testleri sildi
    • Bu felsefe yalnızca tek bir kişi için geçerli
  • Küçük değişikliklerin bir programın uygunluğunu büyük ölçüde değiştirebileceği fikrine katılmıyorum

    • Kısa vadecilik, küçük değişikliklere uyum sağlamak içindir
  • Yazarı seviyorum ve Mu projesini seviyorum

    • Modern bir Lisp makinesi
  • Yazılım mühendisliğinin karmaşıklığı karşısında bunalmış

    • Her fikri reddetmek çözüm değil
    • Test yazmak, VCS kullanmak ve soyutlamaları kullanmak gerekir
    • Neden kullandığınızı bilmeli, bir neden yoksa yeniden değerlendirmelisiniz