6 puan yazan GN⁺ 2023-08-10 | 1 yorum | WhatsApp'ta paylaş
  • Bilgisayarın bir programı baştan sona nasıl çalıştırdığını ele alan teknik bir açıklama; bilgisayarın açılıştan program çalıştırmaya kadar nasıl işlediğini anlamaya odaklanıyor
  • Bir program çalıştırıldığında gerçekte neler olduğu, programların doğrudan CPU üzerinde çalışıp çalışmadığı, syscalls’ın ne olduğu ve nasıl işlediği, birden fazla programın aynı anda nasıl çalıştırıldığı gibi sorulardan yola çıkıyor
  • Üniversiteye gitmeyenler için kapsamlı sistem kaynaklarının fazla olmaması; kalitesi değişen ve zaman zaman birbiriyle çelişen birçok kaynağa bakmak zorunda kalınması sorununu arka planına alıyor
  • Birkaç haftalık araştırma ve neredeyse 40 sayfalık notlara dayanarak, öğrenilenleri tek ve sağlam bir yazıda derlemeyi amaçlayan bir kaynak
  • Hızlı okumak isteyen veya konuyu zaten bildiğini düşünen okurlar için ayrıca Chapter 3: How to Run a Program bağlantısı sunuluyor

1 yorum

 
GN⁺ 2023-08-10
Hacker News yorumları
  • Merhaba! Bu yazıyı/mini kitabı yazan Lexi ben.
    “Bir web sitesi açınca ne olur?” şeklinde klasik bir soru vardır, ama ben hep “Bir program çalıştırınca ne olur?” sorusunu daha çok merak ettim. Yaklaşık 3 ay önce bu soruya cevap veremiyor olmama o kadar sinirlendim ki kendim öğrenmeye karar verdim.
    Programlamada bildiğim her şeyi kendi kendime öğrendiğim için bunun da kolay olacağını sandım ama hiç de öyle olmadı. İşletim sistemleri ve CPU’nun nasıl çalıştığına dair çevrim içi kaynakların çoğu berbattı; zaten kaynak da neredeyse yoktu. Bu yüzden öğrenirken iyi bir kaynak da kendim hazırlamam gerektiğini düşündüm; öğrendiklerimi derlerken 60 sayfalık bir Google Doc ortaya çıktı ve yazmaya buradan başladım.
    Ama yazdıkça o devasa belgenin önemli bir kısmının yanlış olduğunu fark ettim ve daha fazla araştırma yapmam gerekti. Sürekli tekrar tekrar düzeltirken internetteki kaynakların kalitesi hâlâ kötüydü ve yazıyı daha iyi hâle getirmem gerekiyordu. Görsellere ve diyagramlara da ihtiyaç vardı; çizim yapmayı bilmediğim için Figma’yı açıp denemeler yaptım, bazılarını da bir hackathon’da kazandığım Wacom tabletle çizdim.
    Aradan yaklaşık 3 ay geçti ve şimdi gerçekten gurur duyduğum bir sonuç var. Acemice illüstrasyonlarıyla birlikte Putting the "You" in CPU’nun son hâlini paylaşmaktan mutluyum. Bu çalışma, bilgisayarları seven lise öğrencilerinden oluşan Hack Club(https://hackclub.com) topluluğunun bir parçası olarak hazırlandı.
    Birkaç hafta önce henüz üzerinde çalıştığım bir sürüm tesadüfen HN’de ilgi gördü ve aldığım geri bildirimler için gerçekten minnettarım. O zamandan beri epey toparladım ve artık dünyayla bizzat paylaşacak kadar içime siniyor.
    Web sitesi statik bir HTML/CSS projesi ve tamamını sıfırdan kendim yazdım. Özellikle navigasyon bileşenini seviyorum. Umarım keyifle okursunuz ve herkesin öğrenebileceği bir kaynak olur.

    • Sadece şöyle bir göz attım ama oldukça iyi bir giriş kitabı gibi görünüyor; tarzını da beğendim.
      Yeni bir şeyi kendi kendine öğrenirken böyle bir kaynak yazmak çok iyi bir yöntem. Düşünce sürecini netleştiriyor ve başta anladığını sandığın ama hâlâ bulanık kalan kısımları bulmanı sağlıyor.
      Sondaki şu cümleyi de sevdim: “Bu yazıyı yazarken GPT-3.5 ve GPT-4 ile epey konuştum. Çok yalan söylediler ve bilgilerin çoğu işe yaramazdı, ama bazen sorunları çözme sürecinde çok yardımcı oldular. LLM’lerin sınırlarını bilir ve söyledikleri her şeyden aşırı derecede şüphe ederseniz toplam fayda pozitif olabilir. Ancak yazma konusunda berbattırlar. Yerine yazdırmayın.” Harika proje.
    • İlk birkaç sayfayı okuduktan sonra tek geri bildirimim, sevimli ifadeleri biraz azaltmanın iyi olacağı.
      Örneğin “CPU tüm hesaplamalardan sorumludur. Büyük abidir. Şazam alakablam’dır…” gibi bir bağlamda şakacı cümleyi çıkarıp “CPU tüm hesaplamalardan sorumludur. Bilgisayarı açtığınız andan itibaren komutları tek tek yürütmeye başlar” gibi yazmak çok daha akıcı okunuyor.
      Teknik olarak çok derin biri değilim, ama yazıyla para kazanan biri olarak bana böyle görünüyor. Çalışmanın kendisi harika; devam edin.
    • Kendim araştırmış değilim, ama en azından nereye bakacağını biliyorsan bilgilerin çoğunun bu kadar zor bulunur ya da yanlış olduğuna inanmak zor.
      Bu tür konular genelde lisans düzeyindeki bilgisayar mimarisi ve işletim sistemi derslerinde iyi işlenir. Gerçi günümüzde modası geçtiği için çoğu yerde seçmeli ders hâline geldi.
      Birçok üniversite ücretsiz dersler yayımladı; ayrıca bu alandaki profesörlerin yazdığı kitaplar da var. Daha güncel akımlara yakın bir şey görmek istersen ilgili teknoloji konferansı sunumları da oldukça faydalı.
      Yine de öğretmek değeri azımsanan bir sanat; bilgiyi daha erişilebilir kılmak ya da daha eğlenceli ve etkileşimli hâle getirmek kesinlikle çok değerli.
    • LWN(https://lwn.net/)’nin uzun süredir berbat olmayan işletim sistemi bilgisi üretmeye kendini adadığını özellikle belirtmek isterim. Bir göz atın, mümkünse aramıza katılın :)
    • Yazıya şimdilik kabaca göz attım ama harika görünüyor. Tebrikler, böyle işlere devam edin.
      Eskiden araştırma mühendisi olarak çalıştım; benim durumumda bir üniversite laboratuvarında bilgisayar güvenliği araştırmaları yapan yazılım mühendisiydim. İşletim sistemi derslerinin seçmeli olduğundan bahseden diğer yorumda olduğu gibi, lisansüstü öğrenciler arasında bile bu düzeyde işletim sistemi anlayışına sahip olmayanlar var.
      İyi bilgi bulmak zor, ama kesinlikle mevcut. Bulması zor bilgileri bir araya getirip daha iyi bir biçime dönüştürmüş olmanız bunun kanıtı. Diplomam matematik alanında, ama bilişim bilgimi kendi kendime edindim. Bu şekilde öğrenme becerisi ve son derece teknik bilgileri erişilebilir biçimde aktarabilme yeteneği gerçekten önemli; hafife alınmamalı.
      Sadece iki bağlantı paylaşacağım; yoksa sonu gelmeyebilir. İlki https://git.lain.faith/sys64738/airs-notes.git ve bağlayıcı bölümünün içindekiler sayfası https://lwn.net/Articles/276782/. ELF ve linking konusunun sadece yüzeyini kazıdıysanız, Ian Lance Taylor’ın 20 bölümlük blog serisi ve ek başlıklar, ELF hakkında bilmek isteyebileceğiniz her şeyi; ayrıca komutların aslında nasıl çalıştığından şüphe etmenize yol açacak ayrıntıları içeriyor. C++ exception’ı her oluştuğunda kullanılan bir sanal makine de olan ELF’in yoldaşı DWARF’a da kısaca değiniliyor.
      İkincisi, https://0xax.gitbooks.io/linux-insides/content/ da harika bir proje. Linux çekirdeğinin çeşitli işleri nasıl yaptığını insanın okuyabileceği bir biçimde takip ediyor. HN’de daha önce paylaşılmış olduğundan neredeyse eminim.
  • Çok iyi yazılmış; bu konuyu derinlemesine kurcaladığın için tebrikler
    Günümüzde 17 yaşındaki biri, anlamadığı şeyleri birbirine yapıştırarak “programlama” yaptığında bir yere kadar idare edebilir ama sonunda bir sınıra çarpacağını düşünüyorum. Bu yüzden şu anda yaptığın iş yalnızca senin için değil, bu materyalden öğrenecek herkes için gerçekten çok değerli
    Tebrikler :) Henüz yapmadıysan şimdi bir emülatör dene. Aşırı eğlenceli

    • “Günümüzde 17 yaşındaki biri anlamadığı şeyleri birbirine yapıştırarak programlama yapabilir” sözü benim için de geçerli. 26 yıldır böyle yapıyorum
      “Bir gün bir sınıra çarpacaksa”, yakında olup olmayacağını merak ediyorum
    • 17 ile 21 yaş civarı, programlama hayatımda aslında en az yapıştır-kullan yaptığım dönemdi
      Sıfırdan bir MVC framework’ü yaptım, yorumlayıcılar ve derleyiciler yazdım, yanlışlıkla makine öğrenimini ve doğal dil işlemeyi de sıfırdan yeniden icat etmeye kalktım. Her türden havalı ve keyifli şey yaptım
      Sonra parayı ve mevcut teknolojileri keşfettim. Başkalarının “sadece bunu kullan” diye gösterdiği şeyi kabul edince çok daha hızlı geliştirebildiğimi gördüm. Framework’ler de dahil. jQuery’nin hayatı bu kadar kolaylaştırması şaşırtıcıydı
      Aradan birkaç yıl geçmişken, eskiden “sadece yapıştırıp kullanmak” gibi görünen şeyler artık “çok düşük seviyeli ileri düzey işler” sayılıyor. Çünkü o soyutlamaların üstüne yeni soyutlamalar daha koyduk
      Bugün yeni başlayanların “bir şekilde kotarabildiği” şeyler, sonraki nesil için düşük seviyeli, dikkatli olunması gereken tehlikeli bölge olacak. Programlama bu açıdan harika
    • Kesinlikle katılmıyorum. Çok dar bir alanda belirli teknik işleri yapan bir pozisyon hedeflemiyorsanız, eninde sonunda dokümantasyon okuyup bulut servislerini ve JavaScript kütüphanelerini birbirine bağlayabilme becerisi gerçekten önemli hale geliyor
      Hatta programlamaya akademik açıdan yaklaşmış biri, çeşitli teknolojileri temel düzeyde anladıktan sonra geçmesi gereken bir işle karşılaşınca tamamen bunalma ihtimali daha yüksek
      Dev bir şirkette proje yöneticileri ve tasarımcılar gereksinimleri daraltıp yalnızca uygulamaya odaklanmanızı sağlıyorsa durum farklı olabilir; ama çoğu insan için bu nadir bir durum
    • 10 yıl önce 30 yaşında bir geliştirici olarak sektöre yeni girdiğimde ben de tam böyleydim. Değişmeyen şeyler de var demek
    • Ya da bir işletim sistemi denemek de iyi olabilir. Uzun zaman önce Operating System Concepts kitabını takip ederken benzer pek çok konuyu ele aldığımı hatırlıyorum
      Yalnızca kapağındaki dinozoru hatırladığım için başlığını yeniden aramam gerekti
  • Bu rehberi tamamladığın için tebrikler
    Üniversiteye gitmiyorsanız, kapsamlı sistem kaynakları çok olmadığından kalitesi değişken ve bazen birbiriyle çelişen bir sürü materyali kurcalamak zorunda kalındığı anlaşılıyor
    Bulabileceğiniz en iyi kaynak Charles Petzold’un Code: The Hidden Language of Computer Hardware and Software kitabı. 2. baskısı yeni çıktı
    https://codehiddenlanguage.com/

    • Noam Nisan ve Shimon Schocken’ın The Elements of Computing Systems kitabı ve ilgili nand2tetris projesi de bence en az onun kadar iyi, hatta daha iyi. Çok daha fazla elle yaparak ilerleyen bir yaklaşım
      https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
      https://www.nand2tetris.org/
    • O kitabı okuyup gerçekten sevmiştim, ama bugün onun yerine Turing Complete adlı oyunu güçlü biçimde öneririm
      NAND kapısından fonksiyon çağrılarına kadar sizi çok iyi götürüyor ve bunu çok keyifli, etkileşimli bir şekilde yapıyor. Okurken kafanızda nasıl çalışacağını hayal etmek yerine doğrudan inşa ediyorsunuz
      Ben kendi CPU assembly’mle ve programlanabilir shader diliyle LED matrisi süren küçük bir SIMD/GPU bile yaptım
    • Teşekkürler! Donanım tarafı hissi veriyor ve çok ilginç görünüyor. Bir gün okuyacak gibiyim
    • Web sitesine bakarken aklıma bu kitap geldi
      15 yıl önce aldığımda CPU mimarisi kısmında gözlerim dalıp gitmişti; şimdi hazır olabilirim. Yakın zamanda 2. baskısını da aldım
  • Okuma listeme aldığım bir yazı. Daha önce şu küçük ayrıntı beni kazanmıştı
    “Okurun tutarlı bir göz hizasını koruyabilmesi için her sayfanın altına boşluk ekledim.”
    Gerçekten küçük ve geriye dönüp bakınca bariz bir ayrıntı. Ama şaşırtıcı derecede rahat. Bunu fark ettiğimde bunun bir tutku projesi olduğunu anladım

    • Oldukça fazla çok iyi UI detayı var. Yazarın 17 yaşında olması da bununla ilişkili görünüyor
      Web’de bir kitabın nasıl sunulacağı üzerine çok düşünmüş ve yeni bir nesilden beklenebilecek türde yeni teamüller üretmiş gibi. Örneğin üstteki bölüm gezinme bileşeninde önceki/sonraki bölümün hafif opak görünmesi yöntemini ilk kez gördüm
  • Neredeyse 40 yaşındayım ve ben böyle bir şeyi hiç başarmadım. Tam sahtekâr sendromumu yatıştırmaya çalışıyordum, biraz daha yatıştırmam gerekecek
    Gerçekten çok iyi iş :p

    • Başarı hissi verecek bir işe başlamak için hiçbir zaman çok geç değildir. 17 yaşında da olsanız, 40’ta da, 80’de de
      Hâlâ yeterince zaman var ve acele etmek için pek sebep yok. Size ilham veren bir fikir seçip ayırabildiğiniz küçük boş zamanlarda yavaş yavaş ilerleyebilirsiniz
      Asıl mesele, o işi yapan halinizle gurur duyabilmek gibi geliyor. Nihai ürün eninde sonunda gelir
  • OP, çalışmanı yaşını öne çıkararak mazur göstermeye çalışma. Bu yazı çoğu insanın ömrü boyunca yapabileceğinden daha iyi. Harika iş

    • Yaşını söylemeseydi burada hiç ilgi görmezdi. Harika materyallerin new içinde ölüp gittiği çok olur. Yaşını bir pazarlama unsuru olarak kullanmayı seçti ve belli ki işe yaradı
    • Kendi tanıtım materyalinin başına yaşını koymak, genç ya da yaşlı fark etmez, çok eskiden beri işe yarayan bir pazarlama açısıdır. Bunu kullandı diye suçlamak istemem
    • Yazar 17 yaşında olduğunu söylemeseydi bu ChatGPT düzeyindeki CPU özetine birinin ilgi gösterme ihtimali çok düşüktü
  • 17 yaşında böyle bir içerik üretiyorsa, bu alanı meslek olarak seçtiğinde gelecekte ne tür şaşırtıcı işler yapacağını hayal bile edemiyorum. Gerçekten harika

    • Bu yazıyı okuyup depolara göz atınca ben tam tersini düşündüm. Umarım teknoloji sektörüne profesyonel olarak girmez ve şu anda yaptığı şeyi sürdürmenin bir yolunu bulur
      Önemsiz yönetim işleri, daha da önemsiz şirket hedefleri ve anlamsız kariyer gelişimi yüzünden ruhunun ezilmemesini dilerim. Şimdiden harika işler yapıyor; keşke teknoloji sektörünün hamster çarkında ruhunu öğütmeden bunu sürdürmesini sağlayacak bir fellowship gibi bir şey olsa
  • OP, Casey Muratori’nin computerenhance.com derslerine bir göz atsa iyi olur
    Dersin ilk kısmındaki ödev, 1978 tarihli Intel 8086 simülatörü yapıyor. Modern x86_64 assembly hâlâ ona epey benziyor. Başka yerlerde gerçekten zor bulacağınız çok fazla bilgisayar bilgisi öğreniyorsunuz

  • Ben de neredeyse 17 yaşında biri olarak söyleyeyim, iyi iş çıkarmışsın! :^)
    Daha sadece 20 dakika önce 16 bitlik bir tamsayının ilk baytını nasıl alacağımı araştırırken endianness’ı öğrendim; sen ise CPU hakkında bir kitap yazıyorsun
    Crafting Interpreters’ı bitirince mutlaka okuyacağım. Yalnız diğer birçok proje gibi ilerleme hızım belirgin şekilde yavaşladığı için biraz zaman alabilir lol

  • Çok iyi bir yazı ve tarzını da sevdim. Yazı ile illüstrasyon/memelerin birleşimi gerçekten keyifliydi
    RISC/CISC terimleri konusunda biraz çekimserim ama bu herkesin kendi zevkine kalmış bir mesele olabilir >.>
    Kernel’ın bazı kısımlarının nasıl çalıştığını çözmeye zaman harcamış biri olarak, bu yazıyı hazırlama sürecinin ne kadar sancılı olabileceğini anlayabiliyorum. Yine de yazıya bakınca buna kesinlikle değmiş
    NT tarafında Windows Internals, bilmek isteyeceğiniz pek çok şeyi ele alıyor; Microsoft dokümantasyonu da fena değil. Bana göre Linux kernel dokümantasyonundan kesinlikle daha iyi ve çok iyi bir başlangıç noktası
    Windows hakkında daha fazlasını öğrenmek istiyorsanız oyun hackleme forumlarını/kaynaklarını da öneririm. Ayıklanması gereken çok şey var ama niş konularda zaman zaman oldukça iyi bir bilgi kaynağı olabiliyorlar
    Son olarak, akıllı telefonda bakarken bazı kod bloklarının yazı tipi epey büyük olduğu için okumak zordu. Örneğin 6. bölümdeki main.c böyle
    Ayrıca “bilgisayarları seven bir gençseniz ve henüz Hack Club Slack’te değilseniz hemen katılın” cümlesi yaşlandığımı bana fazlasıyla iyi hatırlatıyor lol