HackerNews Readings
40,000 HackerNews book recommendations identified using NLP and deep learning

Scroll down for comments...

The Forever War

Joe Haldeman, George Wilson, et al.

4.4 on Amazon

7 HN comments

The Soul of A New Machine

Tracy Kidder

4.6 on Amazon

7 HN comments

Code: The Hidden Language of Computer Hardware and Software

Charles Petzold

4.6 on Amazon

7 HN comments

The Structure of Scientific Revolutions: 50th Anniversary Edition

Thomas S. Kuhn

4.5 on Amazon

7 HN comments

Digital Minimalism: Choosing a Focused Life in a Noisy World

Cal Newport

4.6 on Amazon

7 HN comments

Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones

James Clear and Penguin Audio

4.8 on Amazon

7 HN comments

Operating Systems: Three Easy Pieces

Remzi H Arpaci-Dusseau and Andrea C Arpaci-Dusseau

4.7 on Amazon

7 HN comments

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma , Richard Helm , et al.

4.7 on Amazon

7 HN comments

The Origin of Species: 150th Anniversary Edition

Charles Darwin and Julian Huxley

4.6 on Amazon

7 HN comments

The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change

Camille Fournier

4.6 on Amazon

6 HN comments

Open: An Autobiography

Andre Agassi, Erik Davies, et al.

4.7 on Amazon

6 HN comments

Getting to Yes: Negotiating Agreement Without Giving In

Roger Fisher , William L. Ury, et al.

4.6 on Amazon

6 HN comments

Lonesome Dove: A Novel

Larry McMurtry

4.8 on Amazon

6 HN comments

How to Avoid a Climate Disaster: The Solutions We Have and the Breakthroughs We Need

Bill Gates

4.5 on Amazon

6 HN comments

Working in Public: The Making and Maintenance of Open Source Software

Nadia Eghbal

4.6 on Amazon

6 HN comments

Prev Page 5/58 Next
Sorted by relevance

khaledhonJune 21, 2021

What worked for me is trying to develop my own kernel. This might be too low-level for you, but it helps immensely to dispel the magic around how code gets executed by the CPU and the OS. You'll learn how the OS achieves protection from user programs, what are interrupts and how does the OS handle them, what are processes and threads and how does the OS schedule their execution, how virtual memory works (segmentation/paging), how the program is laid out in memory (code, data, heap, stack), how runtimes like the C runtime manages memory and links your code to OS syscalls, how dynamic linking works, what is an ABI, what is a calling convention, how does the compiler, the linker, and the OS know what each should do? How memory mapped file access works, etc. I can keep going, but you get the picture.

From there, you'll know where to go next based on what you've learned so far.

My recommended reading list is:

[1] Operating Systems: Three Easy Pieces https://pages.cs.wisc.edu/~remzi/OSTEP

[2] Intel Software Developer Manuals (especially volume 1 and 3A) https://software.intel.com/content/www/us/en/develop/article...

[3] OSDev wiki https://wiki.osdev.org

pramodbiligirionJune 21, 2021

All the three books you've listed focus on APIs and code. It's also useful to know what's going on in the machine so that these APIs can be understood more easily.

The "Operating Systems - Three Easy Pieces" is one great book that has already been mentioned. I would also suggest "Computer Systems - A Programmer's Perspective" along the same lines (https://csapp.cs.cmu.edu/).

Computer Networking is another field you're likely to run into. "Computer Networks: A Systems Approach" is a good book (https://book.systemsapproach.org/)

financializeonApr 30, 2021

All those technologies will be gone in less than a decade. Learn fundamentals, don't worry about the current trends. Here's a good starting point: https://columbia.github.io/ds1-class/. I've also found "Operating Systems: Three Easy Pieces" to be surprisingly relevant to system design: https://pages.cs.wisc.edu/~remzi/OSTEP/?source=techstories.o....

MeinBlutIstBlauonJune 21, 2021

I agree with the Operating Systems Three Easy Pieces textbook. It was used in one of my courses in college and even as a bad dev then, it made me appreciate a lot of things I take for granted, as well as C. Although once I got to the scheduler, mutexes, etc I lost interest haha. But making my oen linked list was a very fun exercise.

avrgamponJune 21, 2021

First off, don't worry. You already have all the necessary tools you need.

Although the language you use to learn system & network programming doesn't matter much, it is better if you use C or C++ to practise and learn. This is because the kernel itself is written in C and exposes system calls that can be used directly from a C/C++ program. That said, "The Linux Programming Interface"(I am personally reading it) is a really good book. It talks a lot about how one should go about using system calls to get things done by the kernel. Make sure to read a little every day and try out the examples by writing C/C++ programs.

I recently realized that TLPI doesn't talk much about why are things the way they are(a very good example would be virtual memory and related stuff). You should refer some theoretical book for this. I suggest you go with "Operating systems" by Deitel & Choffnes.

Read man pages and practise using the libc/kernel APIs. For example, if you want to know about flushing, read 'man 3 fflush'. This might be needed when you want to flush all the input/output data that has been buffered by the C library before you can get fresh input from stdin. For example, if prompts are buffered, you definitely don't want to "scanf" before you have flushed the buffers. If you want to learn network programming, read chapters related to socket and refer 'man 2 socket'.

You will eventually get to a point where you will be able to connect all the dots(APIs) and be able to figure out what exactly you will need to get some problem solved.

Finally, don't learn for a future job. Learn for yourself. This will help you in the long run.

khaledhonApr 29, 2021

From "Operating Systems: Three Easy Pieces" chapter on "Process API" (section 5.4 "Why? Motivating The API") [1]:

    ... the separation of fork() and exec() is essential in building a UNIX shell,
because it lets the shell run code after the call to fork() but before the call
to exec(); this code can alter the environment of the about-to-be-run program,
and thus enables a variety of interesting features to be readily built.

...

The separation of fork() and exec() allows the shell to do a whole bunch of
useful things rather easily. For example:

prompt> wc p3.c > newfile.txt

In the example above, the output of the program wc is redirected into the output
file newfile.txt (the greater-than sign is how said redirection is indicated).
The way the shell accomplishes this task is quite simple: when the child is
created, before calling exec(), the shell closes standard output and opens the
file newfile.txt. By doing so, any output from the soon-to-be-running program wc
are sent to the file instead of the screen.

[1] https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-api.pdf

nindalfonJune 21, 2021

There are two books that taught me how systems work.

- One system in isolation - Operating Systems: Three Easy Pieces. Covers persistence, virtualisation and concurrency. This book is available for free at https://pages.cs.wisc.edu/~remzi/OSTEP/

- Multiple systems, and how data flows through them - Designing Data Intensive Applications. Covers the low level details of how databases persist data to disk and how multiple nodes coordinate with each other. If you’ve heard of the “CAP theorem”, this is the source to learn it from. Worth every penny.

More on why these two books are worth reading at https://teachyourselfcs.com

Built withby tracyhenry

.

Follow me on