Enlightenmentware - Beni Uyandıran Yazılımlar
(mmapped.blog)- UNIX, Git, Emacs, Boost.Graph, Bazel
- Bir programcı olarak her gün yazılım araçlarıyla etkileşim kuruyorum; ancak araçların çoğu yalnızca işi zar zor halletmek için kullanılıyor
- Bazen basit faydanın ötesine geçen, hayal gücünü tetikleyen, yeni olasılıkların kapısını açan ve sistem tasarlama biçimini etkileyen yazılımlarla karşılaşıyorum
- Bu tür yazılımlara ‘aydınlanma yazılımı’ (Enlightenmentware) diyorum
- Programcılar için en yaygın aydınlanma kaynağı, kullandıkları programlama dilidir. Hobi olarak öğrenilen diller de buna dahil
- MASM, C, Prolog, Idris gibi programlama dilleriyle uğraşırken çok sayıda aydınlanma yaşadım
- Dil öğrenmenin düşünme kapasitesini genişletmedeki etkisi uzun zamandır bilindiği için bu yazıda dillere odaklanmak yerine yalnızca aydınlatıcı yazılımlara odaklanacağım
UNIX
Unix kullanıcı dostudur—sadece arkadaşlarını seçer.
Anonim, "Art of Unix Programming" by Eric S. Raymond
- 2008'de üniversitede okurken ilk programlama işimi aramaya başladım.
- İş ilanlarının çoğu UNIX ve socket bilgisi istiyordu.
- Üniversite müfredatında Unix ya da işletim sistemleri dersi olmadığı için kendi kendime öğrenmeye karar verdim.
- Andrey Robachevsky ve diğerlerinin "The Unix Operating System" kitabıyla Unix dünyasına adım attım.
- Mandriva Linux kurarak Unix ortamını keşfetmeye başladım.
- O zamandan beri Unix hayatımın her aşamasında benimle oldu.
- Yazılımların büyük bölümü Unix ortamında çalışıyor ve hâlâ "Advanced Programming in the Unix Environment" kitabına başvuruyorum.
Git
Git ile ayağına sıkmak kolaydır, ama sonra bir önceki ayağa geri dönüp bunu mevcut bacakla birleştirmek de kolaydır.
Jack William Bell
- 2009'un başında, Rational ClearCase kullanarak sürüm kontrol sistemleriyle ilk kez tanıştım.
- ClearCase son derece kafa karıştırıcıydı ve ancak en asgari gereksinimleri karşılıyordu.
- Sonrasında Subversion kullanmaya başladım ve "Version Control with Subversion" kitabıyla öğrendim.
- Subversion anlaşılması ve kullanılması kolaydı, ama kişisel projeler için elverişsizdi.
- Ardından Git'i keşfettim.
- Git'in öğrenme eğrisi dikti ve kafa karıştırıcıydı; ama bu, ClearCase'ten farklı bir tür kafa karışıklığıydı.
- Git, sürüm kontrolü kullanmanın getirdiği sürtünmeyi ortadan kaldırarak değerli olan her şeyi sürüm kontrolüne koymayı mümkün kıldı.
- Git'in tasarımı, dağıtık sistemler, döngüsüz grafikler ve içerik adreslemeli depolamanın zarif bir birleşimi olduğu için etkileyiciydi.
- Git'in iç yapısını öğrenmek eğlenceliydi; bu da başka sürüm kontrol sistemlerine ilgi duymama yol açtı.
- Git'in başlıca dezavantajı, anlık görüntü odaklı yaklaşımının birleştirmeyi anlamayı zorlaştırmasıdır.
Emacs
Her metin düzenleyici dosya kaydedebilir, ama yalnızca Emacs ruhu kurtarabilir.
Per Abrahamsen
- İlk programlarımı Turbo Pascal 7.0'ın tanıdık mavi penceresinde düzenledim.
- Üniversitede Pascal ile programlama öğrendim; sonrasında C++ ve Java kullandım.
- İlk programlama işimde NEdit kullanıyordum, ama Vim ve Emacs'a ilgi duymaya başladım.
- Vim, bir müzik aleti çalmak gibi hem zorlayıcı hem de keyifliydi.
- Emacs, metin düzenleme ve pencere yönetimi yetenekleri sunan bir Lisp makinesidir.
- Emacs'ın iç yapısı temiz, iyi organize edilmiş ve iyi belgelenmiştir.
- Emacs Lisp ile genişletmek, diğer düzenleyicilere göre çok daha kolaydır.
Boost.Graph
Yeniden kullanılabilir kod modasına karşı güçlü bir önyargım var. "Yeniden düzenlenebilir kod"un kara kutulardan ya da araç takımlarından çok daha iyi olduğunu düşünüyorum.
Donald Knuth, Andrew Binstock ile röportaj
- 2013 yılbaşı gecesinde Boost Graph Library'yi okudum.
- Çoğu algoritma kütüphanesi belirli veri gösterimlerine bağımlıdır; bu da onları mevcut projelere entegre etmeyi zorlaştırır.
- Boost.Graph kütüphanesi bu sorunu jenerik programlama kullanarak çözüyor.
- Kütüphaneyi fiilen hiç kullanmadım, ama tasarımı STL tasarımı ve jenerik programlama anlayışımı derinleştirdi.
Bazel
makebeklediğiniz gibi çalışmıyorsa, büyük olasılıklaMakefileyanlıştır.Adam de Boor, "PMake—A Tutorial"
- 2009'da bir araştırma projesi için ilk
Makefiledosyamı yazdım. makein karmaşıklığı yüzünden daha iyi bir araca özlem duymaya başladım.- Çeşitli build sistemlerini denedim, ama hiçbiri tatmin edici değildi.
- 2016'da Google'a katıldım ve
blazekullanmaya başladım. - Bazel, build sistemi konusundaki son eksik parçaydı.
- Bazel hızlı, doğru, kullanımı kolay ve dilden bağımsızdır.
Sonuç
- İyi bir enlightenmentware'in ortak özellikleri:
- Derin problemleri çözer ve günlük olarak karşılaşılan sorunlara odaklanır.
- Küçük bir yüzey alanına büyük bir hacim sığdırır.
- İçini keşfetmeye davet eder ve bunu teşvik eder.
GN⁺'ın görüşü
- UNIX'in önemi: UNIX, birçok programlama ortamında temel işletim sistemi olarak kullanılır ve sistem programlamasının temellerini anlamak için vazgeçilmezdir.
- Git'in öğrenme eğrisi: Git başlangıçta zor olsa da, sürüm kontrolü için güçlü ve vazgeçilmez bir araçtır. Özellikle dağıtık sistemlerde ve iş birliği ortamlarında faydalıdır.
- Emacs'ın esnekliği: Emacs, bir metin düzenleyiciden fazlasını sunar; özellikle Lisp programlamasına ilgi duyanlara önerilebilir.
- Boost.Graph ve jenerik programlama: Boost.Graph, jenerik programlamanın güçlü bir örneğidir ve karmaşık algoritmaların verimli biçimde nasıl uygulanabileceğini öğrenmeye yardımcı olur.
- Bazel'in verimliliği: Bazel, özellikle Google gibi büyük şirketlerde, büyük ölçekli projelerde build sistemi verimliliğini en üst düzeye çıkarabilen bir araçtır.
5 yorum
Windows'ta ise herhalde
everythingdeğil :)Magit ne kadar iyi ki bu kadar başyapıt yazılım arasına adını yazdırabiliyor? Emacs kullanmadığım için bilemiyorum.
Nvim tarafında Neogit'in Magit'ten etkilendiği söyleniyor; bari onu mu denesem...
lazygitde öneririm hahaTeşekkürler.
Hafta sonu
superfilevelazygitkurup biraz incelemem gerekecek.Hacker News görüşü
Hacker News yorumları derleme özeti
Compiler Explorer:
llvm-mcaveuiCAgibi araçlar da faydalı.Windows kullanımına dair görüşler:
Docker:
Spring Framework:
Nix:
Emacs:
'Round' kavramı:
Magit:
SVN ve Git karşılaştırması:
Linux, Emacs, Bazel, Magit kullanım deneyimi: