Daha Fazla "İşe Yaramaz" Yazılım Yazın
(ntietz.com)- İşe yaramaz yazılım, pratik çıktı üretme baskısından uzaklaşıp bilişimin keyfini yeniden kazanmaya yönelik bir oyun alanıdır; Hurl da bir “şaka” olarak başlayan bir deneydi
- Teknik çalışanlar, faydalı sonuçlar üretmeleri beklenen ortamlarda uzun süre kalmaya eğilimlidir; bu da programlamaya başlamalarına neden olan eğlence kıvılcımını zayıflatabilir
- Eğlence amaçlı projelerde testleri, issue tracker'ı ve tamamlanma ölçütlerini kendiniz belirlersiniz; yeterince öğrendiğinizde ya da eğlence kalmadığında istediğiniz an durabilirsiniz
- Satranç motoru, Redis API'sinin bir kısmını uygulayan bir anahtar-değer deposu, Wake-on-LAN yardımcı aracı, satranç görselleştirmesi ve satranç veritabanı; GUI, sistem, ağ ve veritabanı iç yapıları öğrenmek için yapılmış deneylerdi
- Bilgisayarları daha az ciddiye almak ve “işe yaramaz gibi görünen” şeyler yapmak, öğrenmeyi ve eğlenmeyi birlikte sağlayan gerçekçi bir yöntemdir
“İşe yaramazlık”ın sağladığı özgürlük
- Hurl hakkında “Neden yaptın?” diye soruldu ve kısa cevap şaka yapmak için oldu
- Daha uzun cevap ise, işe yaramaz yazılımın bilişimin keyfini ve keşif duygusunu yaşatmasıdır
- Teknik çalışanlar genelde faydalı şeyler üretmeye bağlıdır
- Yazılım mühendisleri gerçek sorunları çözen kod yazar
- Bilgisayar bilimcileri yeni ve pratik sonuçlar üretmek için problemleri araştırır
- Teknik yazarlar gerçek teknoloji ve dokümantasyonla uğraşır
- Programlamaya başlayan birçok kişi, bir şekilde bu işten keyif aldı ve kariyer seçimlerinde de bu duygunun payı olmuş olabilir
- Bütün gün faydalı işler yapmak zorunda kalınca ilginin zayıflaması kolaydır
- Yapılması gereken işlere yükümlülük ve baskı eşlik eder
- Tüm faaliyetler doğrudan işe bağlanır
- Bu süreçte önemli olan oyun unsuru kolayca kaybolur
- İşe yaramaz yazılım, bu tür yükümlülüklerden uzaklaşmanın bir yoludur
- Bir projeden ne elde etmek istediğinize kendiniz karar verebilirsiniz
- İstediğiniz anda durabilirsiniz
- Test yazmak istemiyorsanız atlayabilirsiniz
- Issue tracker kullanmak istemiyorsanız bırakabilirsiniz
- Öğrenmek istediğinizi öğrendiyseniz ve artık eğlenceli gelmiyorsa projeyi bitirebilirsiniz
Oyun olarak yapılan projeler
- Berbat bir satranç motoru ve UI çok sayıda hataya sahipti ama GUI programlama, oyun programlama ve satranç motorlarının nasıl çalıştığını daha derin anlamak için bir fırsat oldu
- Anahtar-değer deposu, Redis API'sinin bir kısmını uygularken sistem programlama ve daha verimli kod yazmayı öğrenmek için kullanıldı
- Wake-on-LAN yardımcı aracı, WOL'un nasıl çalıştığını ve Rust ile ağ programlamayı öğrenmek için yapılmış bir projeydi
- Satranç oyunu görselleştirmesi, kodla sanat üretmeyi ve sevilen bir oyunu görselleştirmenin yollarını denemeyi sağladı
- Satranç veritabanı ile bitmap ve veritabanı iç yapıları hakkında çok şey öğrenildi
- Komutların ne yaptığını “mansplain” eden LLM tabanlı bir araç da yapıldı
- Sunucu tarafı POP3 protokol uygulaması tamamlanmamış olsa da, protokolü öğrenmek ve POP3 tabanlı bir uygulamanın nasıl görünebileceğini hayal etmek eğlenceliydi
- “Crafting Interpreters” Rust ile yeniden uygulanırken yorumlayıcılar ve derleyiciler hakkında çok şey öğrenildi; amaç bitirmek değil, süreçten keyif almaktı
- “Mazes for Programmers” Rust ile yaklaşık yarısına kadar ilerledi ama işe dönüşünce bırakıldı; daha fazla devam etme isteği de olmadı
- Küçük script'ler de fikirler ve kavramlarla oynamak, deney yapmak için yazıldı
- Hurl da bu oyunun bir başka biçimi; faydalı olmasa bile bir şeyler öğrenip üretme sürecinde eğlence bulunabilir
1 yorum
Hacker News yorumları
İşe yaramaz yazılımlar yapmayı seviyorum. Sadece bu yıl yaptıklarım arasında https://lines.potato.horse adresindeki uncolouring book, https://meat-gpt.sonnet.io adresindeki MeatGPT, https://tidings.potato.horse adresindeki Medieval Content Farm, https://butter.sonnet.io adresindeki You deserve butter, https://mrr.sonnet.io adresindeki Mrr, https://mrrr.sonnet.io adresindeki fiziksel olarak doğru Mrr var.
Bunların bazıları aslında özenle hazırlanmış blog yazılarına daha yakın; gerçek sorunları çözmektense kodla oynayarak kendimi ifade etmek daha kolay geldiği için fazla abartılmış şeyler. Daha uzun liste https://sonnet.io./projects adresinde.
8 yaşındaki çocuğum her gün Scratch yapıyor ve soruları olunca sık sık yardım ediyorum; sadece eğlencesine, gereksiz animasyonlar bile eklenmiş saçma bir proje yapmak epey keyifliydi. Bu sayede evde artık “Hurry to love! Hurry to love!” bir slogan oldu.
Aslında bunların epey çoğunu unutmuşum.
Tamamen katılıyorum. Yakın zamanda palyaço okuluna gittim ve projeleri “doğru” ya da “iyi” yapmaya fazlasıyla takılıp kaldığımı fark ettim.
Hayat yaşanmak için var; yazılımı fazla “doğru” yapmaya çalışınca eğlencesini sıkıp çıkarıyorsunuz. Bu yüzden son zamanlarda kod yazmayı daha eğlenceli hale getirmeye çalışıyorum; böyle olunca çok daha fazla kod yazmaya başladım ve her şey daha kolay akıyor. Yakın zamanda şema evrimi fikirlerini denemek için protobuf tarzı bir ikili serileştirme kütüphanesi yaptım, şimdi de CRDT tabanlı local-first bir veritabanı yapıyorum. Dün ilk veri senkronizasyonu çalıştı ve gerçekten heyecan vericiydi. Yıllardır Serious Problems çözmek için de çok kod yazdım, dürtüsel olarak yaptığım çok kod da oldu; ama ironik biçimde en gurur duyduğum kodlar eğlencesine yaptıklarımdı. Eğlenceli projelere dönüp bakım yapmaya ve iyileştirmeye devam ediyorsunuz; ciddi projeler ise ben ayrılınca çoğu zaman solup ölüyor.
Oyunlarda akışa kapılıp sürece güvenmek yerine insanlar en güçlü karakteri oluşturma rehberlerini okumaya, özellikleri maksimuma çıkarmaya ve %100 tamamlama hedeflemeye başlıyor. Sonunda oyunu güzel yapan keşif ve tesadüfi karşılaşma keyfi kayboluyor; zaman, rastgele zar atışı gibi istatistikleri maksimize etmeye harcanıyor. Diğer etkinlikler de benzer: ister servet ister kod kalitesi olsun, bir şeyi maksimize etmeye çalışırken hayret duygusu ve “sadece deneyip görme” hali kayboluyor.
https://www.asc.ohio-state.edu/kilcup.1/262/feynman.html
Sonra optimizasyona kapılınca oyun bir anda tek doğru cevabı olan bir şeye dönüştü ve eğlencenin tamamı bir gecede uçup gitti. Kibir ve hevesle berbat şeyler yaptığınızda çoğu zaman daha çok öğreniyorsunuz. “Ne kadar zor olabilir ki?” düşüncesi beni defalarca baş edemeyeceğim derinliklere sürükledi ama oradan çıkma sürecinde her zaman çok şey öğrendim ve eğlence de buldum.
Her zanaatin (craft) sezgiye aykırı bir yanı var. Sadece daha fazla yaparsanız genelde sonunda daha iyi olursunuz. Berbat kısa öyküler yazın, çirkin seramikler yapın, yamuk manzara resimleri çizin.
Bunun bir pratik etkisi elbette var; ama kafamızda bekleyebileceğimiz bir bitmiş ürün tamamen canlanmıyorsa fikirden kendi kendimize vazgeçme eğilimimiz de büyük. Özellikle analitik insanlar için bu, boşa harcanacak zamanı azaltan akıllıca bir karar gibi gelir; ama aynı zamanda hiçbir şey üretmemenin de kesin yoludur. “İşe yaramaz” yazılım projelerinden işe yaramaz kalmaya devam eden çok oldu, ama yapım sürecinde daha büyük bir fayda bulunanlar da vardı. Sonuçta “atmadığın şutların %100’ünü kaçırırsın” gibi klişe bir söze bağlanıyor, ama ne demek istediğimi anlarsınız.
Bu, yalnızca “işe yaramaz” yazılım yazmayı önermekle kalmıyor; küçük projelerde sözde en iyi uygulamalardan kaçınmayı da savunuyor
Bir ürün kataloğu için statik site oluşturucu yaptım; katalog basit ve sık değişmiyor. Hangi veritabanını kullanacağımı düşünürken sonunda her şeyi kod tabanındaki statik bir diziye koymaya karar verdim. Düşünmem gereken bir bağımlılık azaldı ve benim amacım için kusursuz biçimde uydu
Gerçekten öyle değiştirildi mi bilmiyorum ama sonrasında “veritabanı gerekiyor” denince her zaman ilk sorduğum soru bu oldu
Zaten graf algoritmalarını çalıştırmak için tüm veriyi belleğe alıyorum; salt okunur veriyi veritabanında saklamanın neredeyse hiç anlamı olmadığını fark ettim. Bellman-Ford’u SQL ile uygulamayı hiç düşünmüyorum
Kötü bir kodlayıcı olduğunu düşündüğüm bir arkadaşla kod yazarken bunu öğrendim
Aramız iyiydi, birlikte çok eğlenceli projeler yaptık; ama gerçekten ne yaptığını bilmiyor gibi görünüyordu. Her yere kopyala/yapıştır, mimari yok, tasarım yok, kötü isimlendirme, zamanın yarısında kodun gerçekten ne yaptığından kendisi de emin değil. Ama çalışıyordu. Sonunda onun benden daha çok şey başardığını fark ettim. Önemsiz ayrıntılara takılmıyor, çok daha fazla iş çıkarıyordu. Birim testi yazmıyordu ama çıkan ürünle çocuk gibi oynayıp sürekli elle test ediyordu. Sonunda bu fikri benimsedim. İstediğim işi yapan bir kişi yönetimi yazılımı yoktu, kendim yapmak istedim; şık bir UI yapmaya çalışmak yerine django-admin kullandım ve bıraktım. O berbat form yığınını 10 yıldır kullanıyorum ve işimi görüyor. TOTP için CLI olmadığı zamanlarda Python’la bir tane yaptım ve seed’leri düz metin TOML’a dump ettim. Şifreleme eklemem 5 yıl sürdü; dosyayı bir Veracrypt container’ından sembolik linklemek yeterliydi ve daha az işti. İki ay önce, egzersiz yaptıkça zaman bütçesi dolan ve video oyunu oynadıkça azalan bir timer istedim, yaptım (https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_...). ChatGPT’nin kusar gibi ürettiği Tailwind yığınını HTMX ile kontrol edip yapıştırdım; yeterli oldu. Arkadaşlarıma gösterdim, 4 kişi hesap istedi; biri de bağımlılık programı için doktorlara yönelik deneme kullanımı talep etti. Kayıt formu bile yoktu, hardcode ettim. Genç halime, işleri doğru yapmaya ya da yalnızca önemli problemlerle uğraşmaya takıntılı olmayı bırakmasını söylemek isterdim. Zaten hayatım boyunca “doğruluğa” ulaşmış da değilim
Projenin ilginç olduğunu kanıtlayana kadar IDE’nin verdiği adı olduğu gibi bırakmaya başladıktan sonra başarı oranım artmış gibi. Aynı temel ilkeyle ilgili görünüyor
Özellikle başkasının kodunu toparlarken tuhaf bir mantık var. Küfredip “Aklından ne geçiyordu acaba?” diyorsun ama aynı zamanda o kişinin işi bir şekilde başlattığı gerçeği de var
Ama ücretlerin düşük olduğu bir ülkede saatte 100 dolar kazanıyordu. Domain ve içerik satın alıyor, yazılımı yeniden yapıyor, arama motoru optimizasyonu gibi şeyler yaptıktan sonra 3 ay içinde aldığı fiyatın 10 katına satıyordu. 3 aylık çalışmayla yaklaşık 7000 dolar kâr fena değil; muhtemelen tam zamanlı işi de değildi
Ama sonucum şuydu: Birincisi, başarı kadar başarısızlık da sık oluyor ve hangisi olacağını öngörmek imkânsız; sonradan düzeltmek, baştan öyle yapmamaktan daha zor olduğu için beklenen değeri negatif bir kumar gibi görünüyor. İkincisi, kişisel olarak bu şekilde çalışmaktan hoşlanmıyorum. Üçüncüsü, bu yüzden böyle bir yaklaşımın makul biçimde işe yarayabileceği işlere zaman harcamak istemiyorum. Bu deneyim, küçük ve önemsiz işlerin ardışık dizisi yerine daha derin ve büyük projeler aramama yol açtı. Buna karşılık artık başkalarının benden farklı tercihlere sahip olabileceğini çok daha rahat kabul ediyorum. Yazılım yapmanın doğru yolundan çok, bana uyan yolu düşünüyorum
Yine de çalışıyor. Yorucu ama üretken; bu süreçte çok şey öğreniyorum. Sonradan toparlayıp parlatmayı, bakım ve genişletmeye uygun hale getirmeyi biliyorum; bunu gerçekten çalışan bir şey ortaya çıktıktan sonra yapacağım. Özellikle yeni bir şey denerken bu yaklaşım geçmişte de oldukça üretken olduğu için bunu kesinlikle destekliyorum
Apple geçmişte uygulamamı işe yaramaz olduğu gerekçesiyle reddetmişti. Uygulama inceleme ekibi bizzat arayıp bu uygulamanın işe yaramaz olduğunu ve Mac App Store’a kabul edilmeyeceğini söyledi.
Yaklaşık 12 yıl sonra, o küçük ve işe yaramaz uygulama KeyboardCleanTool’u binlerce kişi kullanıyordu. Klavye ve Touch Bar girişlerinin tamamını engelleyen, çok küçük ve ücretsiz bir uygulama; insanlar onu akla hayale gelmeyecek şekillerde kullandı. Küçük çocukların klavyeye istedikleri gibi vurmasına izin vermek ya da kedinin dizüstü bilgisayarın üstünde uyumasına göz yummak gibi. Neyin faydalı olduğu gerçekten çok öznel.
Yaklaşık on arama daha yaptıktan sonra, klavyeyi temizlemenin iyi bir yolunu anlatan bir yazıda klavyeyi kilitleyebildiği için o uygulamanın önerildiğini görünce ancak anladım. Sonunda indirdim ve “işe yaramaz” bir uygulamaya göre epey faydalıydı.
Çocukken annem temizlik yaparken Mac IIsi’mizi yanlışlıkla açmıştı; ben de bunu bahane edip After Dark ekran koruyucusuna ihtiyacımız olduğuna onu ikna etmeyi başarmıştım. Kısa süre sonra ekranda uçan ekmek kızartma makineleri belirdi. Nostaljik.
Temizlik yaparken çiziklere yol açabilecek tozu görebilmek için MacBook ekranının ve monitörlerin tamamen siyah olması, trackpad’in de devre dışı kalması gerekiyordu. Temizlik modunu kapatan tuş kombinasyonunun yanlışlıkla basılması zor ama hatırlaması kolay olmasını istedim; bu yüzden Command tuşuna en az 8 kez peş peşe basma yöntemini seçtim. Apple’ın uygulama inceleme uygulamaları her zaman sinir bozucu. Kullanıcılar adına neyin faydalı olduğuna neden karar vermeye çalıştıklarını anlamıyorum. App Store’da incelemeden geçmiş dolandırıcılık uygulamalarının aylarca hayatta kalmasından bahsetmiyorum bile.
İfade gücü olan ve keyif veren yazılımlar kullanmayı seviyorum. Öğrenmek ve keşfetmek için; beni programlamaya çeken ve orada tutan da buydu.
Ne yazık ki ihtiyaç araya giriyor. Aç kalma tehdidi altında üretken olmak zorundasınız. Birlikte ürettiğim insanları önemsiyorum ve üretemeyince suçluluk hissediyorum. Bu, kişisel zamandaki motivasyonu bile emip alıyor. Kendini ifade edebilecek istikrara ve özgürlüğe sahip bu kadar çok insan olması şaşırtıcı. Recurse Center’a gidebilenlere, çok sayıda kişisel proje ve macera hikâyesi içeren sayısız blog yazısı olan insanlara imreniyorum ama onlar adına seviniyorum da. Çoğu muhtemelen böyle bir hayat kurabilecek konuma gelmek için çok çalışmıştır. Ben de öyle yapmak istiyorum. Ama bunu yapmak için hayatın daha fazlasını üretkenlik uğruna yakmak gerekiyormuş gibi görünüyor. Yeterince yılı fedakârlıkla yakarsam, belki şans bana hayatın tadını çıkarma hakkını verir. Komik bir durum. Sonra işe yaramaz yazılımlardan daha çok keyif alacağım.
Eskiden faydalı yazılım yapmanın yetkin bir yazılım geliştiricinin göstergesi olduğunu düşünürdüm ve kolayca açıklanabilir biçimde açıkça faydalı olmayan işlere zaman ayırmazdım.
Bu, yazılımı angaryaya dönüştürmenin çok iyi bir yolu. Artık işe yaramaz şeyler yaparken rahatım ve eğleniyorum. Mevcut fikirleri yeni yollarla yeniden yapıyorum; bunu daha önce kimin yaptığı umurumda değil. Sırf eğlence içinse, başkasının şarkısını cover’lamak gibi aynı şekilde yapmak da olur. Öğreniyorsunuz, keyif alıyorsunuz ve bu başlı başına değerli. Bazen iyileştirmenin bir yolunu da buluyorsunuz. Bunu firmware yazmaya başlayınca öğrendim. Her zaman faydalı olma baskısı çok büyüktü; gururumu indirip kenara çekilmem gerekti. Aptalca şeyler yapan derme çatma kod yazmanın inanılmaz eğlenceli olduğunu fark ettim; düşük baskı altında fikirleri öğrenmenin ve deneyimlemenin harika bir yolu oldu. Üstelik işe yaramaz şeyler şaşırtıcı derecede faydalı hale de gelebiliyor. Son birkaç yılda yaptığım işe yaramaz şeylerin hepsi beklenmedik şekilde faydalı kodlara, içgörülere ya da bilgiye yol açtı.
Uzun zaman önce Houston Recreational Computer Programming Group adında bir buluşma grubu yürütüyordum. Neredeyse tamamen işe yaramaz ve eğlenceli yazılım projelerini göstermeye yönelik bir gruptu; çok keyifliydi.
Şimdi taşındım; şu an yaşadığım şehrin böyle bir grup kuracak kadar büyük olup olmadığını da, benim yeniden yürütmeye enerjim olup olmadığını da bilmiyorum. Benim için kişisel olarak iyi olan tarafı, ayda bir kez, kimse bir şey getirmezse gösterebilmek için küçük bir proje yapmak zorunda kalmamdı. Yaklaşık 2 yıl içinde bu yalnızca birkaç kez oldu ama onlardan biri[1] oldukça güzel çıktı ve onunla gurur duyuyorum. Tamamen işe yaramaz da değil. [1] https://github.com/smcameron/gaseous-giganticus
Az önce, birkaç dakika önce işe yaramaz bir yazılımı tamamladım; bu yazı tam zamanında geldi.
CFR Brackets: https://susam.net/cfr.html
Demo: https://susam.net/cfr.html#3
Source: https://github.com/susam/cfr
C(renk değiştirme), F(ileri gitme), R(döndürme), [(blok başlangıcı), ](blok tekrarı) olmak üzere yalnızca 5 komutu destekleyen çok küçük bir çizim dili. Komutlar Logo programlama dilinden biraz esinlendi; minimalizm ise P′′den ilham aldı. Ancak ikisinden farklı olarak Turing-complete değil. Pratik kullanım amaçlanmadı; eğlence için yaptım. Girdi kodunu olabildiğince küçük tutarken ilginç şekiller çizmeyi deneyerek biraz daha oynamayı düşünüyorum. “Bilgisayar biliminde hesaplamanın eğlencesini korumanın son derece önemli olduğunu düşünüyorum.” — Alan J. Perlis