2 puan yazan GN⁺ 2024-07-11 | 1 yorum | WhatsApp'ta paylaş
  • Brian Kernighan, Rob Pike ile birlikte yazdığı The Practice of Programmingi, internetin, Python’ın, Perl’ün ve Java’nın hızla yayıldığı 1999 döneminde “profesyonelce iyi program yazma”yı ele almayı amaçlayan bir kitap olarak değerlendiriyor
  • Örneklerin bir kısmı zamanla eskimiş olsa da stil, hata ayıklama ve yazma yaklaşımı gibi ilkelerin diller ve ortamlar değişse bile aktarılabilir olduğunu düşünüyor
  • CSV ayrıştırma hâlâ dağınık ve belirtimi de tamamen net değil; pandas güçlü olsa da ağır ve soyutlama seviyesi yüksek olduğundan bazı durumlarda basit Python kodu daha iyi olabiliyor
  • Bell Labs; uzun vadeli düşünme, üstün nitelikli çalışma arkadaşları ve düşük ürün/gelir baskısı sayesinde Unix, yacc ve belge hazırlama araçları gibi işlerin mümkün olduğu bir araştırma ortamıydı
  • Büyük dil modelleri, Kasım 2022’den sonra birden büyük etki yaratan bir teknoloji; Claude’un spaCy ile ilgili Python kodunu neredeyse doğru üretmesi deneyimi, programcıların çalışma biçiminin değişeceğinin işareti

1999’daki programlama ortamı ve kitabın hedefi

  • The Practice of Programming, Kernighan ve Rob Pike’ın daha önce birlikte yazdığı The Unix Programming Environmentdan yaklaşık 15 yıl sonra çıkan bir kitaptır
  • Kitabın hedefi, “programlar pratikte nasıl yazılır” ve “etkili ve profesyonel biçimde nasıl yazılır” konularını ele almaktı
  • 1999 civarındaki bilişim ortamı bugünden oldukça farklıydı
    • İnternet, genel kamu için 1995-1996 civarında ortaya çıkmış, görece yeni bir varlıktı
    • Python görece yeni bir dildi; Perl hâlâ güçlüydü ve Java da popülerdi
  • Somut örnekler günümüz okuru için daha az doğrudan olabilir, ancak genel ilkelerin başka ortamlara taşınabileceği düşünülüyor
  • Sunucular, stil rehberi ve hata ayıklama bölümlerinin özellikle hâlâ geçerli olduğunu düşündü; “bug” sözcüğünün Grace Hopper’ın Mark bilgisayarı anekdotundan önce Thomas Edison ve phonograph bağlamında da kullanılmış olmasını etkileyici buldu

CSV, pandas, bellek ve soyutlama

  • Kernighan, kitaptaki CSV ayrıştırıcı örneği hakkında bugün bile iyi bir CSV ayrıştırıcı olmadığını söylüyor
    • Geçen yaz awk’a CSV özelliği eklemek için “düzgün bir CSV ayrıştırıcı” yazmaya birkaç haftadan yaklaşık bir aya kadar zaman harcadı
    • CSV belirtiminin tamamen net olmadığını ve bir anlamda standartlaşmış sayılmadığını düşünüyor
  • pandas güçlü ama ağır bir araç olarak değerlendiriliyor
    • Çoğu durumda pandas tarzı örtük yineleme ve seçim mekanizmalarını anlamaktansa doğrudan Python yazmanın daha basit olduğunu söylüyor
    • Sunucu, makine öğrenmesi ve veri bilimi çalışmalarında pandas’ın sıkça seçildiğini, ancak kritik yürütme performansı gerektiğinde daha basit bir yaklaşımı düşündüğünü söylüyor
  • Bellek yönetimi, günümüzde birçok programlama işinde neredeyse hiç düşünülmesi gerekmeyen bir alan hâline geldi
    • C’de belleği doğrudan yönetmek gerekir ve bu çok zordur
    • C++’ta da mümkündür, ancak bunu doğru yapma tekniklerini öğrenmenin zor olduğu söyleniyor
    • Python’da ise çoğunlukla “sihirli şekilde” çalıştığı ifade ediliyor
  • Büyük soyutlamalar sorunları her zaman tamamen gizlemez
    • spaCy ile bir kitap büyüklüğünde metni işlerken varsayılan görev kotasının 1GB olması nedeniyle bellek yetersizliği mesajı alındı; ayar iki katına çıkarılarak sorun çözüldü
    • Kernighan’ın büyüdüğü dönemde kilobayt bile büyük bir bellek miktarıydı
  • Gömülü sistemler topluluğunda bellek ve performans hâlâ çok önemli görülüyor; bu bağlamda C’nin yanı sıra Rust veya Zig gibi diller de anılıyor

Go, Plan 9, Bell Labs’in araştırma ortamı

  • Sunucu, The Practice of Programming’in sorunlara bakışının Go dilinin tasarımına zemin hazırlamış gibi hissettirdiğini söylüyor
  • Kernighan, Rob Pike’ın Go’yu yaratan üç kişiden biri olduğunu ve kitapta ele alınan rahatsızlıkların daha sonra yeni bir dil düşünülürken arka planda yer almış olmasının “tamamen inandırıcı” olduğunu düşünüyor
    • Ancak Pike’ın o dönemde “yeni bir dille dünyayı iyileştireceğim” diye düşündüğüne dair somut bir anısı olmadığını söylüyor
    • 1990’ların sonlarındaki Plan 9 çalışmaları ile Limbo ve Alef gibi dillerin Go’ya uzanan çizginin bir parçası olduğunu düşünüyor
  • Bell Labs deneyimi Kernighan için ideale yakın bir ortamdı
    • Princeton’da lisansüstü öğrencisiyken 1960’larda iki kez yaz stajyeri olarak Bell Labs’te Multics ile ilgili bir grupla çalıştı
    • Bu deneyimi beğendiği için geri dönme teklifi alınca başka hiçbir yerde görüşmeye gitmediğini söylüyor
    • 1969’un başından 2000 civarına kadar Bell Labs’te bulundu
  • O dönemde Bell Labs’te uzun vadeli düşünmek mümkündü; çeyrek dönem sonuçları ya da hemen ürün/gelir üretme baskısı azdı
    • İnsanlar ilginç ve önemli gördükleri işleri görece bağımsız şekilde yapabiliyordu
    • AT&T’nin ABD’nin büyük bölümüne telefon hizmeti sağladığı dönem olduğundan “bol sorunlu bir ortam” vardı ve telefon sistemine yararlı olabilecek çok iş bulunuyordu
  • Claude Shannon ile doğrudan karşılaşması olmadı
    • Shannon’ın, Kernighan Bell Labs’e gelmeden birkaç yıl önce MIT’ye gittiğini hatırlıyor
    • Kernighan, Shannon ile bir dönem aynı ofisi paylaşmış olan Richard Hamming ile ise yakın olduğunu söylüyor

Öğrenme, kitap yazma ve programlama odaklı düşünme

  • Kernighan’ın ilk öğrenme süreci, Bell Labs’te iyi insanlarla, araçlarla ve ilginç problemlerle karşılaşmasıyla gerçekleşti
  • yacc, yeni programlama dilleri oluşturmayı kolaylaştıran bir araçtı; Kernighan bunu geleneksel dil üretiminin yanı sıra belge hazırlama ve bildirimsel diller gibi alanlarda da kullandı
    • Bu süreçte dil tasarımı ve uygulama hakkında çok şey öğrendi
  • Belge hazırlama araçlarına da uzun süre ilgi duydu
    • MIT’nin erken dönem etkileşimli metin hazırlama programı runoff’tan etkilendi
    • Princeton’da kendi tezini hazırlamak için Fortran ile benzer bir belge hazırlama programı yazdı
    • Bell Labs’te kitapları fiziksel olarak daha kolay üretmek ve yayın sürecinde program örneklerinin bozulmasını önlemek için araçlar geliştirdi
  • Üniversiteye geçtikten sonra, zaten bildiği konuları alan dışı öğrencilere anlatma süreci önemli bir öğrenme hâline geldi
    • Edebiyat ya da müzikte güçlü bir öğrenciye ikili sayı sisteminin nasıl çalıştığını açıklaması gerekiyordu
    • Leibniz’in 1600’lerin sonlarında ikili sayı sisteminin fiilî mucidi olduğunu ve harfler yerine notalar kullanarak onaltılık gösterime benzer bir şey yaptığını da bu süreçte öğrendiğini söylüyor
  • Kitap yazma motivasyonunun, “söylemeye değer bir şey” ve “bunu birlikte söylemek istediğiniz bir ortak yazar” olduğunda ortaya çıktığını söylüyor
    • Kernighan’ın kitaplarının çoğu ortak yazarlı
    • Ortak çalışmanın, tarafların birbirinin içeriğini tamamlayıp düzeltebilmesi sayesinde tek başına yazmaktan çok daha kolay olduğunu düşünüyor

Büyük dil modelleri, eğitim ve önerilen kitaplar

  • Kernighan, kariyerindeki önemli gelişmeler olarak zaman paylaşımlı sistemleri, Unix’i, programlama dillerinin evrimini, Moore yasasıyla kaynakların artmasını ve PC’leri sayıyor
    • Zaman paylaşımı, fiziksel olarak bilgisayarın başında bulunmak ya da operatör işlemesini beklemek zorunda kalmadan kendi takvimine göre çalışabilmeyi sağlayan büyük bir değişimdi
    • Bulut bilişimi, hesaplamanın merkezileşmesi ve kullanıcının uzaktaki sistemlerle iletişim kuran gelişmiş çevre birimlerine sahip olması açısından yeniden zaman paylaşımına yakın bir biçim olarak görüyor
  • Bugün en ilginç teknoloji olarak büyük dil modellerini gösteriyor
    • Kasım 2022 civarında birden ortaya çıkıp kısa sürede büyük etki yaratmış olmasını sıra dışı buluyor
    • Claude’dan spaCy ile ilgili bir işi iki üç cümleyle istediğinde yaklaşık %99,9 doğru Python kodu ürettiğini ve Python kullanım seviyesinin kendisinden daha sofistike olduğunu söylüyor
    • Programcıların ortadan kalkmayacağını, ancak çalışma biçimlerinin değişme olasılığı olduğunu düşünüyor
  • LLM’ler öğrencilere yeni yaklaşımlar açıyor
    • Bir öğrenci, antik Greek çeviri iyileştirmede LLM’lerden yararlanılabileceğini düşünüyor
    • 1700’lerden kalma eski basılı belgelerin OCR sonuçlarının, dil modelinin sahip olduğu dil bilgisi kullanılarak iyileştirilebileceği söyleniyor
  • Alan dışı kişilere yönelik derslerde, bilgisayarların nasıl çalıştığını dünyada yaşanan teknoloji meseleleriyle ilişkilendirmeye çalışıyor
    • Öğrencilerin çoğu beşerî bilimler ve sosyal bilimler alanından geliyor; dersi çoğunlukla nicel akıl yürütme gereksinimini karşılamak için alıyorlar
    • Donanım, yazılım, iletişim, net neutrality, privacy, security, Google antitrust gibi konuları teknik temelle birlikte ele alıyor
    • Büyük işleri küçük işlere bölmek ve aşamalı düşünmek şeklindeki programlama odaklı düşünmenin, makale yazımı veya hukuki sorun analizi gibi başka alanlara da aktarılabileceğini düşünüyor
  • Yeni başlayanlar için önemli olan, kendi yapmak istedikleri bir şey bulmalarıdır
    • Oyun yapmak, kişisel finansı iyileştirmek, metin analizi gibi ilgi duyulan problemlerden başlamak psikolojik eşiği düşürebilir
    • Alan dışı kişilere yönelik derste, NLTK ile Pride and Prejudice analiz edildikten sonra öğrencinin istediği başka bir kitabı seçip aynı şekilde keşfetmesini isteyen bir ödev kullanılıyor
  • Önerilen/anılan kitaplar ve okuma zevkleri çeşitlilik gösteriyor
    • Teknik kitaplar arasında The Mythical Man-Montha ara sıra yeniden bakıyor; bazı kısımların iyi eskidiğini, ancak bazı dil ifadelerinin bugünkü ölçütlere göre çok cinsiyetçi göründüğünü söylüyor
    • Jennifer Pahlka’nın Recoding Americası, devlet yazılımlarının neden beklendiği kadar iyi çalışmadığını ve sistemin iyileştirmeyi neden zorlaştırdığını ele alan ilginç bir kitap olarak anılıyor
    • Teknik dışı okuma olarak tarih, askerî tarih, dedektif romanları, Dick Francis’in at yarışı temalı romanları ve yarı iletkenleri ele alan Chip Wardan söz ediyor

1 yorum

 
GN⁺ 2024-07-11
Hacker News yorumları
  • Bu kitap temel niteliğinde bir kitap; bu yüzden tüm programcılar, özellikle de yeni başlayanlar okumalı
    Kernighan kitaplarından bekleneceği gibi cümleleri sade, kısa ve öz, isabetli; 200 sayfayı biraz aşan hacimde, gereksiz hiçbir şey olmadan yalnızca özü içeriyor. Örneklerden ilkeleri anladıktan sonra bunları kendi bağlamınıza uygulamanız yeterli
    K&P kitaplarının güçlü yanı, okuru teoriyle ezmeden teknolojinin pratikte nasıl uygulandığını göstermesi ve ardından teori çalışmasını daha erişilebilir hâle getirmesi
    Örneğin, ağ programlama ve protokol uygulama deneyimim varken bu kitabı okumuştum; "Notations" bölümünde paket yerleşimini printf/scanf tarzı biçim dizgileriyle belirten ağ mesajı pack/unpack rutinlerini göstermesi benim için ufuk açıcıydı. Uygun gösterimin ve küçük dillerin gücünü öğrendim; sanal makine, code threading ve JIT derleme fikirlerini gösteren kod parçaları da var
    Kernighan ve Pike’ın daha eski kitabı "The Unix Programming Environment" da birlikte okunmaya değer. "Program Development" bölümü, derleyici geliştirme araçlarını kullanarak küçük bir hesap makinesi dili için derleyici oluşturma sürecinin tamamını yaklaşık 50 sayfada anlatıyor; bildiğim kadarıyla derleyici yazmayı en küçük ve en basit şekilde açıklayan metin bu
    Sonuç olarak Kernighan’ın tüm kitapları satın alıp çalışmaya değer

    • Gerçek Gang of Four’u sipariş ettim: "The C Programming Language", "The UNIX Programming Environment", "The Practice of Programming", "The Elements of Programming Style"
      C kitabını eskiden okumuştum ve yazımının harika olduğunu hatırlıyorum. Programlama bilgeliği açısından çok şey kazanacağım kesin ama teknik yazım açısından da Kernighan kitaplarının neden bu kadar iyi olduğunu analiz etmeyi planlıyorum
      Kernighan’ın yazı yazma üzerine çok çalışmış ya da en azından yazma hakkında ilk ilkelerden düşünmeye epey zaman ayırmış olduğunu düşünüyorum. "The Elements of Programming Style" başlığı da Strunk ve White’ın ünlü yazı kitabı "The Elements of Style"a bir gönderme
    • Kernighan ve Pike’ın kitabını henüz okumadım ama çok küçük bir derleyici anlatımı olarak Wirth’ün "Algorithms + Data Structures = Programs" kitabındaki PL/0 da iyiydi
      Bugünün ölçütleriyle biraz eski kalsa da hâlâ okuması kolay bir kitap
    • 10 yıldır programlamayı meslek olarak yapan biri olarak, bu kitabı okuyunca ne kazanabileceğimi merak ediyorum
      Alay etmiyorum; kariyerinde rahatça yol alan biri için bile neden mutlaka okunması gereken bir kitap olduğunu bilmek istiyorum
  • "The Practice of Programming"i gerçekten seviyorum
    Şimdiye kadar okuduğum programlama kitapları arasında, dersleri bende en güçlü kalan kitap bu. Yıllardır yeniden okumadım ama günlük pratiğimi etkilediğini hissediyorum

    • İlk kez okudum; 25 yıllık bir kitap olmasına rağmen hâlâ doğru olan çok fazla şey içermesine şaşırdım
      Somut programlama örneklerinden bazıları epey eski kalmış olsa da genel fikirler hâlâ sağlam
  • Kernighan’ı seviyorum. Gerçekten mütevazı biri
    YouTube’daki videolarından birinde, doktora tezinde zor bir problemi çözdüğünü, bunun da sonradan teori oturmadan önceki bir NP-tam problem olduğunun anlaşıldığını anlatmıştı
    Tezini istemek için e-posta gönderdim; oldukça hızlı yanıt aldım ve okuyunca gerçekten ilginç buldum

    • Bu kadar zeki olup da bu kadar mütevazı olan insan nadir. Sektörümüz için gerçekten büyük bir nimet
    • Kusursuz bir örnek var. Röportajın başlangıcından 3-4 dakika sonra, kitabı yazma motivasyonunun "biraz iddialı(kind of pretentious)" olduğunu söylüyor
      Benim ve birçok kişi için onun programlamaya dair düşünceleri en ilginç ve faydalı olanlar arasında; bunun önemli bir kısmı da onları çok net biçimde aktarabilmesinden kaynaklanıyor
    • Diğer kitaplarını buradaki publications bölümünde daha fazla görebilirsiniz: https://en.m.wikipedia.org/wiki/Brian_Kernighan
  • Keşke günümüzde mülakatlar LeetCode yerine bu kitaptaki kavram anlayışını ölçmeye daha yakın olsaydı
    Bu saçma yeni dünyada Brian Kernighan bile LeetCode hard mülakatını geçemeyebilir

    • Son iş değişikliği mülakatlarımda Stripe, Square, Shopify gibi büyük şirketlerle görüştüm; LeetCode tarzı soru hiç olmaması güzeldi
      Hepsi oldukça pratik programlama problemleriydi. Stripe’ta Jackson Java kütüphanesini fork’layıp içine bir bug yerleştirmişlerdi; mülakatta onu bulup düzeltmem istenmişti. Epey sıra dışıydı ama gerçek programlama işine çok daha yakındı
    • Bu, Peter Higgs’in bugün olsa akademide iş bulamayacağını söylemesine benziyor
      mRNA ile Nobel alan Katalin Karikó’nun araştırma fonu çekemediği gerekçesiyle UPenn’de rütbesinin düşürülmesi de akla geliyor
  • Kernighan ve kitaplarıyla aynı üstün kategoriye giren bir başka yazar da Jon Bentley; onun Programming Pearls ve More Programming Pearls kitapları var
    https://en.m.wikipedia.org/wiki/Jon_Bentley_(computer_scient...

    • Daha eski, ince bir kitabı da var: "Writing Efficient Programs"
      Bu kitap verimliliği, algoritmalar ve dillere odaklanarak tepeden düşünmeyi öğrettiği için tüm programcılara yararlı
      Agner Fog, Fedor Pikus gibi yazarların modern verimlilik kitapları çoğunlukla derleyici/işletim sistemi/işlemci düzeyi performans tekniklerini ele alıyor; birlikte okununca büyük resim oturuyor
    • Okuma listeme ekledim. İzleyici kitlesi büyüdükçe YouTube’da okuma listesini canlı olarak düzenlemeyi ve dinleyenlerin ne okumamız gerektiği konusunda görüş bildirmesini sağlamayı tartışıyorduk
  • arkadaşlar, g sessiz
    Rob Pike’ı konuk etmek iyi olurdu. Muhtemelen telaffuzu düzeltme meselesinin üzerinden özellikle geçerdi. Sesini şimdiden duyar gibiyim

    • YouTube’da da biri aynı şeye dikkat çekti. Ah. Keşke Brian bizi düzeltseydi
      Rob Pike’ı da kesinlikle ağırlamak isteriz. Şu anda üzerinde çalışıyoruz ama ona ulaşmak biraz daha zor
  • Videonun yaklaşık üçte birini izledim ama sunucuların içgörülü sorular sormakta oldukça iyi oldukları görülüyordu

    • Hacker News Top 20’ye girdiğini az önce öğrendim. İnanılmaz.
      Videonun sunucularından biri olan Carter benim. Keyifle izlediğinize sevindim. Brian Kernighan ile konuşabilmek gerçekten büyük bir onurdu
  • Bu format kitapları ele aldığı için, açıklama kısmında ya da yorumların bir bölümünde işlenen kitapları ve mümkünse medya listesini derlemek iyi olabilir
    "The Bit Player"ı (Claude Shannon hakkında 2018 yapımı belgesel) izleme listeme ekledim; "Recoding America", "Chip War" ve "Endurance: Shackleton's Incredible Voyage"ı da okuma listeme aldım

    • Tam olarak neyi kastettiğinizi merak ediyorum. Gelecekte ele alınacak tüm kitapların listesi gibi bir şey mi? Merak ediyorsanız web sitemiz www.bookoverflow.io’da görebilirsiniz
  • Podcast’te ele alınacak kitaplar listesine Kernighan’ın Software Tools in Pascal kitabını da eklemek iyi olur
    O kitap bende var ve iyi olduğunu düşünüyorum

    • O konudan beklenenden çok daha fazla hikâye çıkabilir
      Kernighan ve Plaugher önce "Software Tools"u RATFOR ile yazdı, ardından "Software Tools in Pascal"ı yazdılar. Bu deneyime doğrudan bir tepki olarak da Kernighan "Why Pascal Is Not My Favorite Programming Language" adlı makaleyi yazdı
      Pascal ile yazmak RATFOR ile yazmaktan çok daha kolay olmalıydı, ama olmadı; Kernighan da bunun neden böyle olduğunu düşünmüş
      Hâlâ ilginç bir yazı; örneğin burada görülebilir: https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas...
      Ancak bu yazı aslında standart Pascal’ı hedef alıyor. Turbo Pascal gibi genişletmeler birçok sorunu düzeltti. Yine de onun dediği gibi, genişletmeler arasında taşınabilirlik yoktu. Buna rağmen Turbo Pascal’ın fiilî "standart" genişletme hâline gelmesiyle bu bir ölçüde çözülmüş oldu
    • Pascal çalıştıracak bir bilgisayarımın bile olmadığı dönemde, mahalledeki alışveriş merkezinin kitapçısında Software Tools in Pascalı keşfetmem kariyerim için bir hile kodu gibi oldu
      Fikirlere ve yazıma hayran kaldım; bu da sonrasında Kernighan’ın diğer başlıca eserlerini bulup okumama zemin hazırladı
  • Kernighan, en azından ilk baskı itibarıyla The Go Programming Language kitabının ortak yazarı da

    • Go’nun seçenek tanımayıp K&R süslü parantez stilini zorunlu kılmasının nedeni bu mu?