16 puan yazan GN⁺ 2024-05-21 | 5 yorum | WhatsApp'ta paylaş
  • 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

make beklediğiniz gibi çalışmıyorsa, büyük olasılıkla Makefile yanlıştır.

Adam de Boor, "PMake—A Tutorial"

  • 2009'da bir araştırma projesi için ilk Makefile dosyamı 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 blaze kullanmaya 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

 
zihado 2024-05-23

Windows'ta ise herhalde everything değil :)

 
bus710 2024-05-23

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...

 
bbulbum 2024-05-23

lazygit de öneririm haha

 
bus710 2024-05-23

Teşekkürler.
Hafta sonu superfile ve lazygit kurup biraz incelemem gerekecek.

 
GN⁺ 2024-05-21
Hacker News görüşü

Hacker News yorumları derleme özeti

  • Compiler Explorer:

    • Compiler Explorer, derleyiciler ve performans optimizasyonu hakkındaki tartışmaları büyük ölçüde değiştirdi.
    • Forumlardaki tartışma kalitesi üzerinde olumlu bir etkisi oldu.
    • Cesur iddialar bağlantılar üzerinden hızlıca doğrulanabiliyor.
    • llvm-mca ve uiCA gibi araçlar da faydalı.
  • Windows kullanımına dair görüşler:

    • Windows hakkında dengeli bir bakış açısı sunuluyor.
    • NT tabanlı Windows harika bir işletim sistemi.
    • Oyun için Windows kurulu tutuluyor.
  • Docker:

    • Docker, danışmanlık kariyeri boyunca çok zaman kazandırdı.
    • Eski projelerin hızlıca çalıştırılmasını sağladı.
    • Birden fazla veritabanı sunucusu kurma ihtiyacını ortadan kaldırdı.
    • Python ortamlarının yeniden üretilebilir ve paralel şekilde çalıştırılmasını sağladı.
  • Spring Framework:

    • Spring Framework, bağımlılık enjeksiyonu kavramını anlamayı zorlaştırıyor.
    • Birçok Java geliştiricisinin karmaşık framework'lerin gerekli olduğunu düşünmesine yol açıyor.
    • Spring'in kendisi faydalı olsa da, yazılımı daha karmaşık ve daha az taşınabilir hale getirebiliyor.
  • Nix:

    • Nix ve Nixpkgs ile birçok karmaşık iş yapılabiliyor.
    • Rust binary'lerinin statik build edilmesi gibi işler kolayca yapılabiliyor.
    • Çeşitli build seçenekleri ve cache özellikleri sunuyor.
    • Nix çok faydalı, ancak NixOS'a temkinli yaklaşmak gerekiyor.
  • Emacs:

    • Emacs, bug düzeltme işlerini teknik alıştırmaya dönüştürüyor.
    • Sıkıcı işleri eğlenceli hale getiriyor.
  • 'Round' kavramı:

    • 'Round' kavramı, asgari çekirdek hacimle mümkün olan en geniş arayüz alanını sunuyor.
    • Emacs ve Git'in çekirdeği küçük, basit ama güçlü.
  • Magit:

    • Magit, sadelik, etkililik ve keşfedilebilirlik açısından ders kitabı niteliğinde bir örnek.
    • Git'in yeteneklerini daha iyi görünür kılıyor.
    • Kendi terminolojisini ve iş akışını dayatmıyor.
  • SVN ve Git karşılaştırması:

    • SVN kullanma deneyimi son derece olumsuzdu.
    • Git çok daha sezgisel ve anlaşılması kolaydı.
    • Git kullanıldığında iş akışı daha iyi hale geldi.
  • Linux, Emacs, Bazel, Magit kullanım deneyimi:

    • Linux üzerinde Emacs ve Bazel kullanılarak çalışılıyor.
    • Bloglar inceleniyor, Emacs'te çalışma kaydediliyor ve Magit ile commit mesajı yazılıyor.
    • Git deposuna push ediliyor.