Things like data structures but also modern software engineering practices.
Any books, courses or other resources I should focus on?
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
"How to Design Programs" 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/ 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.
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.
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
- 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.
Skip XML but do not skip relational algebra.
https://github.com/EbookFoundation/free-programming-books/bl...
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
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 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.
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/...
Here's the linked list for Postgres, https://github.com/postgres/postgres/blob/master/src/include....
Also, check out Postgres lexer and parser utilities: https://github.com/postgres/postgres/blob/master/src/backend... (for Flex) and https://github.com/postgres/postgres/blob/master/src/backend... (for BISON)
If you insist on an all-around programming book, Code Complete by Steve McConnell.