
Ask HN: Books/courses for self-taught programmer - throwaway0071
As a self-taught programmer, I realize I&#x27;ve many blind spots. I would like to get better well rounded when discussing software engineering topics.<p>Things like data structures but also modern software engineering practices.<p>Any books, courses or other resources I should focus on?
======
segmondy
Take CS courses online or offline from universities that offer lectures for
free/pay online. If you are sufficiently motivated, you can work through the
book by yourself and watch video. If not, the commitment of paying for a class
and time boxed scheduled of a semester will hopefully push you.

Computer architecture course. - you need to understand the machine you are
programming. Something like Meltdown/Spectre will make sense to you.

Learn assembly programming & C, does much for your confidence, you understand
how your programs get turned to 10101

Take a programming language course, understand the difference programming
languages. When people start talking about the new XYZ language, you can
quickly evaluate it based on the paradigm and decide if you should get on it
or not.

Operating System course. - The OS coordinates resource allocations to your
program, you can begin to understand the discussion such as why fork() takes
longer than a thread. You will make many wise decisions.

Algorithm & Design - You can write better program.

Software Engineering - You can deliver better softwares.

Automata Theory - you can understand machines more, sometimes complex logic is
best representated as a simple machine. This becomes useful if you are parsing
(compiler, NLP, etc)

Distributed Systems - if you have ever uttered the word microservices or plan
to.

The below 3 maths are the main maths of computer science, most cutting edge
work today employ some or all of them.

Linear Algebra, Discrete Maths, Probs & Statistics

~~~
hugja
[https://teachyourselfcs.com](https://teachyourselfcs.com)

~~~
segmondy
Perfect! First time seeing this, I would be recommending this next time. I
often get this same question.

~~~
hugja
Yep, I see this question on Reddit all the time. Here's the previous HN
discussion post on TYCS:
[https://news.ycombinator.com/item?id=13862284](https://news.ycombinator.com/item?id=13862284)

------
baldfat
I program in a lot of languages and feel like I am a master of none. At work I
do R about everyday and I was feeling like I needed to get my stuff together.
I ended up learning Racket and I wish I did it 10 years ago.

"How to Design Programs" [http://www.htdp.org/](http://www.htdp.org/) is the
best book I have ever read. It is very dense and I had to restart it a few
times to get through it. This is not a knock on the material or process it is
just how I process things. When I get stuck I go back and review everything
again from page 1. I also went through "Realm of Racket"
[https://www.realmofracket.com/](https://www.realmofracket.com/) with my 11
year old daughter and that was also great. My programs never repeats itself
and I can program a function quicker and more concise than ever before.

------
writesoftware
You don't mention which language you're interested in, but if you use Go,
check out my guide on Go Data Structures [https://flaviocopes.com/golang-data-
structures/](https://flaviocopes.com/golang-data-structures/)

Even if you're not into Go at all, I think the language is nice to beginners
and the examples can be easily read.

I hope you'll find it useful, it focuses more on the implementation than on
the theory but it could be reference material along with more in-depth books.

------
tmaly
Once you get over the syntax and basics of writing a program, I would
recommend learning about writing maintainable software.

Kent Beck's 4 rules of simple design is great. You can find the rules online.

Some great books are Clean Code, Pragmatic Programmer, Working Effectively
with Legacy Code

------
lual
\- Computer Science, an Overview, by Brookshear: an excellent introduction to
the whole field.

\- Introduction to Algorithms, by Cormen, et all: a bible for computer
science.

\- Design Patterns, by the Gang of 4: well designed solutions for common
problems, a classic.

------
afarrell
If you're in the camp of "I worked through a good rails/django/nodejs/php
tutorial, but I don't really understand SQL", you should go through this
course:
[https://lagunita.stanford.edu/courses/Engineering/db/2014_1/...](https://lagunita.stanford.edu/courses/Engineering/db/2014_1/about)

Skip XML but do not skip relational algebra.

------
pyeu
List of Free Learning Resources

[https://github.com/EbookFoundation/free-programming-
books/bl...](https://github.com/EbookFoundation/free-programming-
books/blob/master/free-programming-books.md)

------
git-pull
Reading code is best. Downloading and building the code locally and running it
(debugging snags along the way) is a helpful skill.

Like this:

Ever use tmux? What if the system your building tmux against doesn't have
queue.h (found in Free/OpenBSD)?

[https://github.com/tmux/tmux/blob/master/compat/queue.h](https://github.com/tmux/tmux/blob/master/compat/queue.h)

How does tmux know to include queue.h? First, the build system detects if the
system has the macros declared,
[https://github.com/tmux/tmux/blob/58e9d12/configure.ac#L481](https://github.com/tmux/tmux/blob/58e9d12/configure.ac#L481)
and defines a C Preprocessor Symbol HAVE_QUEUE_H. That then gets swept up in
the build process:
[https://github.com/tmux/tmux/blob/a3967de/compat.h#L82](https://github.com/tmux/tmux/blob/a3967de/compat.h#L82).

Look at queue.h, nice, portable, solid macros for linked lists. It's actually
derived from BSD's queue.h decades ago.

I like how FreeBSD's fork of queue.h has a table of the macro's features:
[https://github.com/freebsd/freebsd/blob/releng/11.1/sys/sys/...](https://github.com/freebsd/freebsd/blob/releng/11.1/sys/sys/queue.h#L77)

Here's the linked list for Postgres,
[https://github.com/postgres/postgres/blob/master/src/include...](https://github.com/postgres/postgres/blob/master/src/include/lib/ilist.h).

Also, check out Postgres lexer and parser utilities:
[https://github.com/postgres/postgres/blob/master/src/backend...](https://github.com/postgres/postgres/blob/master/src/backend/parser/scan.l)
(for Flex) and
[https://github.com/postgres/postgres/blob/master/src/backend...](https://github.com/postgres/postgres/blob/master/src/backend/parser/gram.y)
(for BISON)

If you insist on an all-around programming book, _Code Complete_ by Steve
McConnell.

------
hackermailman
Lot's of these reading/lecture lists around
[https://functionalcs.github.io/curriculum/](https://functionalcs.github.io/curriculum/)

------
book_mentioned
[https://bigmachine.io/products/the-imposters-
handbook](https://bigmachine.io/products/the-imposters-handbook)

