Reddit Reddit reviews Computer Systems: A Programmer's Perspective (3rd Edition)

We found 25 Reddit comments about Computer Systems: A Programmer's Perspective (3rd Edition). Here are the top ones, ranked by their Reddit score.

Computers & Technology
Books
Computer Science
Computer Systems: A Programmer's Perspective (3rd Edition)
Check price on Amazon

25 Reddit comments about Computer Systems: A Programmer's Perspective (3rd Edition):

u/HeterosexualMail · 187 pointsr/programming

We did something similar as well. The labs were tons of fun. I remember having to run a couple dozen lines of code through the CPU cache on a test once, including some sneakery of using code as data at one point. I do appreciate having done it, but I'm not sure how much practical lasting value that really contributed.

That said, for those who are interested in this there is The Elements of Computing Systems: Building a Modern Computer from First Principles, more commonly known as "NAND to Tetris".

Petzold's Code is excellent as well.

Edit: Actually, while I've suggested those two let me throw Computer Systems: A Programmer's Perspective into the mix. It's a book we used across two courses and I really enjoyed it. We used the 2nd edition (and I have no issue recommending people get a cheaper, used copy of that), but there is a 3rd edition now. Being a proper text book it's stupidly priced (you can get Knuth's 4 book box set for $30 more), but it's a good book.

Anyone have suggestions similar to that Computer Systems's text? I've always wanted to revisit/re-read it, but could always used a different perspective.

u/Tiberius1900 · 33 pointsr/learnprogramming

To get a feel for low-level computing you should learn C. All modern operating systems and low level utilities are written in C (or C++, which is C with objects). It is as close to the metal as you can get while still being useful. Maybe you could fiddle around with some assembly afterwards.

Now, as for understanding how an operating system form top to bottom works, Windows is a pretty shit place to start for the following reasons:

  • Proprietary nature means little documentation about how the OS actually works internally.
  • Single desktop environment and lack of naked shells makes it hard to understand how and why some things work.
  • Limited capabilities for programming without an IDE, which is what you should be doing if you want to learn C (note that I said learn C. Particularly in the context of understanding, say, how data streams and the like work, programming without an IDE is infinitely better).
  • etc.

    Instead, you should learn Linux, and learn how Linux works. Installing it in a VM is fine. If you're looking to learn, I suggest you start with Debian, and, after you get comfortable with the command line, move to Arch. Arch is great for learning, if not much else, because it makes you do most things manually, and has a pretty extensive wiki for everything you may need to know.

    Resources:

    A Linux tutorial for beginners: https://linuxjourney.com

    A pretty decent online C tutorial (note, you should compile the programs on your own system, instead of doing their online exercises): http://www.learn-c.org

    K&R2 (the "proper" way to learn C): https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_awdb_t1_FSwNAbFDJ3FKK

    Computer Systems A Programmer's Perspective, a book that might just be what you're looking for: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X
u/abstractifier · 22 pointsr/learnprogramming

I'm sort of in the same boat as you, except with an aero and physics background rather than EE. My approach has been pretty similar to yours--I found the textbooks used by my alma mater, compared to texts recommended by MIT OCW and some other universities, looked at a few lists of recommended texts, and looked through similar questions on Reddit. I found most areas have multiple good texts, and also spent some time deciding which ones looked more applicable to me. That said, I'm admittedly someone who rather enjoys and learns well from textbooks compared to lectures, and that's not the case for everyone.

Here's what I gathered. If any more knowledgeable CS guys have suggestions/corrections, please let me know.

u/Airballp · 12 pointsr/C_Programming

It doesn't precisely teach C, but I think my favourite textbook ever might be what you're looking for:

Computer Systems: A Programmer's Perspective

It was an optional textbook in my intro to systems class, but I honestly think it should have been required reading.

u/srnull · 7 pointsr/hardware

> Textbooks aren't much of a thing because so much information is available online and technology changes so fast.

That's

  • really
  • not
  • true

    and I'm not just pointing out that those books exist. They're really good resources!
u/llFLAWLESSll · 3 pointsr/learnprogramming

Since you know Java I would suggest that you a read one of the best programming books ever written: [K&R The C Programming language] (http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628/), this book was written by the people who made the C language and it's one of the best books ever written. It is a must read for every C programmer. [Computer Systems: A Programmer's Perspective (3rd Edition)] (http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/013409266X/) is a great book to learn about computer systems. But I would recommend [Operating Systems Design and Implementation (3rd Edition)] (http://www.amazon.com/Operating-Systems-Design-Implementation-Edition/dp/0131429388) because it has some minix source code which will go really well with learning C.

Best of luck buddy :)

u/michael0x2a · 3 pointsr/learnprogramming

A few books that maybe might help:

  • Nand2Tetris covers how to design a computer yourself starting with basic circuit gates all the way up to a working (basic) programming language.
  • Computer Systems: A Programmer's Perspective covers assembly, C, and some basic operating system stuff. You can find the table of contents here (pdf warning).

    First one's free; second one isn't. Their content overlaps, though the first one has more emphasis on implementing things from scratch whereas the second focuses on describing the way things currently exist.

    Note that both books assume you have some prior programming experience.

    You'll also want to learn about how operating systems work at some point, but that can come later.

    You're on your own regarding how circuit gates/transistors/etc are actually implemented in silicon -- I'm not super familiar with electrical engineering in general so don't feel comfortable recommending resources about that level of abstraction.
u/Himmelswind · 3 pointsr/cscareerquestions

Some resources I found useful:

  • This Github repository is a really good overview. Although it doesn't exactly give a deep understanding of any particular topic, it's a really good way of understanding the system design "landscape". After reading this, I had a much better idea of what I needed to study more.
  • Designing Data-Intensive Applications is an awesome and thorough book that covers just about everything you need to know for a system design interview.
  • Maybe a bit obvious, but CTCI's system design chapter is useful (although not enough on its own).
  • It's in some ways a bit orthogonal to system design, but Computer Systems: A Programmer's Perspective gave me a much better idea of how the hell this machine I touch all day works. I think learning the things covered in here helped me speak with more confidence on system design.
u/bonekeeper · 3 pointsr/cscareerquestions

No worries, glad to help. I bet you must be overwhelmed. It's hard to me to give you a clear path because I was "lucky" enough to start programming from an early age, an indirect influence from my father - the first programming language I learned was dBase when I was 12 years old and since then I never stopped (while my father still programs in Clipper to this day). Then I learned Clipper, Perl, PHP, JS, Python, C, Go. One side effect of my self-taught days is that I also skipped the CS fundamentals which I came to learn only much later - which in a way helped me appreciate their importance.

There's no way around it, if you want to be a great developer, not just someone looking for a quick easy buck, you'll need to learn the fundamentals. One book I greatly recommend is Computer Systems: A Programmer's Perspective - there's a cheaper "international version" of lesser quality (black and white and cheaper paper). It is such a great book that I recommend buying the hardcover version because you will be referencing it forever. (as a side note, I bought the hardcover 2nd edition a long time ago and cheapend out with the "international version" for the 3rd version and I would go back and invest on the hardcover version if I could).

Anyways, that's a great book that you give you a good grasp of some fundamentals - it will go from the basics of logic to how processors work (even creating your own 64-bit CPU) and then to assembly and C and the Operating System. Knowing how the CPU actually works and execute code will help you learn lower level languages (C, C++, Go, etc) and how to be good at it (by knowing what is happening behind the scenes). It will take you a while to digest this book.

You'll leave this book knowing how to program in assembly and C. With that you could already get a job working with embedded programming or working with C, or invest another year to learn C++ - the second most used language out there (only behind Java). Alternatively, instead of C++, you can focus on Java - although the marketplace competition will be greater with Java because every school teaches it so the market is saturated.

In the short term, if your focus is to hit the ground running and get hired as a programmer (and then buy time to learn the stuff I mentioned before), Java is probably the quickest/surest way. It is easy enough that it is the language of choice on Computer Science courses and there are a lot of jobs out there looking for Java (most popular language). The learning curve to master it will be steep because it has a pretty rich and complex ecosystem, but it would be your best bet in the short run. Just go to "Indeed" and do a search for "title:python" versus "title:java" where you live and you'll see.

If you dedicate 2h-3h religiously everyday, and you feel that you have a knack for programming (in other words, it interests you even if you're not good at it, or at the very least you don't hate it), I think you could learn Java well in a year, enough to get an entry-level job. What you'll have to keep in mind though is that you're gonna be studying 2h-3h everyday for the next 10 years if you want to be a good engineer - there's no way around it, but if you really like it, it won't feel like work, it will be fun. Even today, after been programming for almost 20 years, I still study 2h-3h everyday, recap stuff I have long forgotten, keep up with newer stuff, etc. So you'll never really stop studying, because in this field, if you stop, you deprecate quickly.

So yeah, by all means, learn HTML, CSS, JavaScript and Python, they're basic staples nowadays and every job expects you to know them (and JS and/or Python). Then look into Java if your short-term focus (and by short-term I mean, a year, a year and a half) is on getting an entry-level paid job. Keep in mind too that you'll never just learn Java - you'll have to learn about databases (at least MySQL or PostgreSQL and maybe something like MongoDB), you'll certainly be expected to know HTML/CSS/JS if you're gonna be involved with a web company (even if doing backend work and not frontend), etc... but you can learn these "extras" as you go by marginally including them in your projects.

u/Truth_Be_Told · 2 pointsr/embedded

Not sure what your budget is (buy used books or South Asia editions), but you may find the following useful :-)

Also, unless required, avoid programming in assembly but use C/C++ exclusively. This allows you to carry over much of your acquired knowledge across various MCU families.

  • Make: AVR Programming This will teach you programming directly-to-the-metal on AVR using C. If you have the Arduino IDE installed, you already have the "avr-gcc" compiler toolchain as part of the package and hence you just need to setup your path and use the the toolchain in your Makefile. The book takes you by hand and shows you everything. Note that you can use the same Arduino board to do both "Arduino language" programming and "AVR C" programming.

  • Designing Embedded Hardware Excellent overview of the hardware aspects of Embedded Systems. As a Software guy, this book is the one which clarified hardware for me.

  • Building Embedded Systems: Programmable Hardware A very good book on all practical aspects of embedded programming. Hard-won knowledge which will make you a "professional" embedded engineer.

  • Introduction to Embedded Systems: Using Microcontrollers and the MSP430 Excellent and comprehensive textbook detailing the hardware and software aspects of embedded systems. Every topic starts with an illustrated overview of the hardware and then shows you how to program for it.

  • Embedded C Introductory book on C programming for 8051. The example code is simple and direct thus enabling you to grasp the concepts clearly.

  • Patterns for Time-Triggered Embedded Systems Comprehensive and full of C code showing how to program all standard peripherals for an 8051. You can translate the code to your favourite MCU family. The book is available for free from the author's company website.

  • ARM System Developer's Guide An oldie but still the best for firmware programming on the ARM microprocessor.

  • Practical Microcontroller Engineering with ARM technology An exhaustive book on programming the Tiva version of the ARM Cortex-M4 MCU. The book reads like a manual but the ARM Cortex is complex enough that there is no easy way to learn it.

  • The Engineering of Reliable Embedded Systems Advanced book showing how to implement industrial quality embedded software on various ARM platforms. The 1st edition of the book was available for free on the web.

    and finally;

  • Computer Systems: A Programmer's Perspective A must-read textbook to understand the low-level details for a x86/x86-64 system. Many of these details are similar for MCUs and hence you will understand them better.
u/[deleted] · 2 pointsr/programming

Here's a good one about ELF http://www.cirosantilli.com/elf-hello-world/, also Wikipedia entry and there's a good explanation in the book Computer Systems: A Programmer's Perspective. There are also lectures from the authors of the book. ELF is discussed in lecture on Linking.

u/julienchurch · 2 pointsr/learnpython

No problem. :) If you're trying to learn on the cheap, browse through edX and Coursera's offerings. There are a lot of free introductory CS courses on each, including Harvard's CS50. I'm not sure you'll have much luck finding introductory CS material in Haskell, though. Most will use C, Java, or Python. The good news is that if you learn any one of these three, you'll know the broad strokes of the other two.

If you want to hit on higher-level concepts and logic, the Lisp-based SICP is freely available and widely considered to be a classic. It would probably dovetail nicely with Haskell. If you want to get closer to the metal, Computer Systems: A Programmer's Perspective is a good text (slightly older editions that focus on 32-bit architectures can be readily found in .pdf form with a little Google-fu).

Side note: Tim Roughgarten's Algorithms course or Andrew Ng's Machine Learning course should be right up your alley if you're interested in AI. They may not be the best starter courses, though.

u/john-yan · 2 pointsr/learnprogramming

I would suggest everyone who are serious about computers to read this book: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X/ref=sr_1_1?keywords=csapp&qid=1568386364&sr=8-1

You will gain so much elementary knowledge which will help you significantly no matter what you want to explore afterwords.

u/kirang89 · 2 pointsr/AskComputerScience
u/iamsidd2k7 · 2 pointsr/Python

When you run Python it actually kicks of a VM {CPython}, think of it as a abstraction that will run on your machine. Finding "hotspots" in your code will allow you to make improvements independent of hardware.

On the other hand what I've seen is using SSD does improve reading performance, but there are lot of factors to consider: How big the file is, Are you using any Parser etc. Your best is to really gain a bit more of understanding of how things work under the hood.

If you're interested you might want to read Computer System a Programmer's Perspective, but be warned its pretty heavy.

u/jbos1190 · 2 pointsr/learnprogramming

I thought C Programming a Modern Approach was a very good C book - certainly the best C book I've seen for beginners. It might be a little difficult if you are completely new to programming, but with careful reading, doing the exercises, and seeking help online, you should do fine. After learning C from that book, I recommend going through this book, which assumes a knowlege of C and introduces assembly language and the inner workings of the computer from a top-down perspective. It has a website with projects to do like reverse engineering a program, hacking a program, writing a shell, and making a web server. You can also get the 2nd edition for a cheaper price.

u/samrjack · 2 pointsr/ProgrammingLanguages

I would say go with whatever your computer uses so that you can follow along (unless your computer uses something really obsucre).

As for books, I can only really recommend the places I learned X86 from which would be Hacking: the art of exploitation since it puts assembly the context you'll find it most often (looking through assembled code) so you learn many useful tools along the way. Also the textbook I had in college (you can find it cheaper if you look around) which covers many other topics too relating to computer memory and whatnot.

Though for just learning some basic assembly, look for some simple resources online. It's not too hard to learn generally speaking so you should be fine.

u/super__mario · 1 pointr/coding
u/keepthethreadalive · 1 pointr/learnprogramming

This is often regarded as the canonical textbook for low level understanding of a computer. You'll learn about C and C++'s compilation process, overall computer architecture and more.

u/ideletedmyredditacco · 1 pointr/AskComputerScience

Start with the fundamentals so has a good foundation to build on

u/NohbdyAhtall · 1 pointr/learnprogramming

http://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X?ie=UTF8&*Version*=1&*entries*=0

This was awesome. I learned so much from the beginning alone, and I didn't feel like I had to struggle to do so.

u/Zardov · 1 pointr/rust

I second OSTEP; hands down the best introductory OS book.

Also, to learn systems programming from the ground up, [Computer Systems: A Programmer's Perspective] (https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X) is a monumental work.

u/ordnance1987 · 1 pointr/learnprogramming

This is the book I used in class. If you know C or C++ you can implement your own memory system, that's what helped understand how memory allocation works.

u/lanzaio · 1 pointr/AskProgramming

Definitely C. It's closer to the computer and lets you see much more of what the computer is actually doing. Learn C then read this book: Computer Systems. This book will teach you the answers to the questions you want to ask but you don't even yet know about to even want to ask them.