TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Ask HN: Systems programming – where should I start?

8 pointsby gchpalmost 11 years ago
I want to get involved in systems programming, but don&#x27;t know where to start.<p>My background is in developing web applications, and have used PHP, Ruby, Python and JavaScript heavily over the years. I don&#x27;t have a formal education in computer science.<p>I&#x27;ve recently started looking at Rust[1], and have found myself having to learn about things like memory, pointers, lifetimes, ownership, (de)referencing and so on. I&#x27;ve found that I&#x27;ve been spoiled by dynamic languages over the years in not having to think&#x2F;worry about any of that.<p>Where did you start in learning all of this? Can you show me any resources which would help me in learning this sort of thing?<p>What computer science concepts do you find most valuable when it comes to systems programming?<p>Thanks for the help in advance!<p>1. Rust - http:&#x2F;&#x2F;rust-lang.org

4 comments

Alupisalmost 11 years ago
I would highly recommend starting out by building your own linux distro by following the linux-from-scratch book or similar.[1]<p>You will learn a lot about what goes into making a distro actually boot, how the different pieces of software are interacting with each other, and how to solve and debug typical issues and kernel panics.<p>From there, I think many would recommend attempting to make some sort of Kernel Module, even if it&#x27;s a very basic one that isn&#x27;t of much use. The experience alone will teach you a lot of valuable skills and knowledge.[2]<p>Learning some assembler will help as well. There is a great free ebook from the gnu assembler (GAS) project [3]. Assembler will help teach you how the computer is really doing what it does. This is important if you are going to be working closer to the kernel and most of the critical subsystems, be in Linux or the BSD&#x27;s (even Windows actually). There are many different Assembler languages, but learning some basics in one will help you understand how others work.<p>[1] <a href="http://www.linuxfromscratch.org/lfs/" rel="nofollow">http:&#x2F;&#x2F;www.linuxfromscratch.org&#x2F;lfs&#x2F;</a><p>[2] <a href="http://www.linuxchix.org/content/courses/kernel_hacking/lesson8" rel="nofollow">http:&#x2F;&#x2F;www.linuxchix.org&#x2F;content&#x2F;courses&#x2F;kernel_hacking&#x2F;less...</a><p>[3] <a href="http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf" rel="nofollow">http:&#x2F;&#x2F;download.savannah.gnu.org&#x2F;releases&#x2F;pgubook&#x2F;Programmin...</a>
评论 #8088357 未加载
评论 #8085785 未加载
评论 #8085567 未加载
tjralmost 11 years ago
C would be worth studying, as would some books around and about C. (Peter van der Linden&#x27;s <i>Expert C Programming</i> comes to mind.) Even if you don&#x27;t actually <i>use</i> C much, it&#x27;s been a standard for a long time, with lots of interesting heritage.<p><a href="http://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Expert-Programming-Peter-van-Linden&#x2F;dp...</a>
tuhdoalmost 11 years ago
You can start with learning embedded system from Edx: <a href="https://www.edx.org/course/utaustinx/utaustinx-ut-6-01x-embedded-systems-1172" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;utaustinx&#x2F;utaustinx-ut-6-01x-embe...</a><p>Then, learn Hardware Software Interface from Coursera: <a href="https://www.coursera.org/course/hwswinterface" rel="nofollow">https:&#x2F;&#x2F;www.coursera.org&#x2F;course&#x2F;hwswinterface</a>
jonjackyalmost 11 years ago
I like this book: Computer Systems: A Programmer&#x27;s Perspective<p><a href="http://csapp.cs.cmu.edu/public/samples.html" rel="nofollow">http:&#x2F;&#x2F;csapp.cs.cmu.edu&#x2F;public&#x2F;samples.html</a>