Software Engineering
TECH BOOKS
The list of tech books I have read and recommend everyone during my career. For the full list of books I have read, please see my Goodreads profile. This is a living list that I will update as I discover new good books.
Hackers: Heroes of the Computer Revolution

A book about the early history of computer revolution. A thick (around 500 pages) but very engaging book that became a classic. The book starts with the Tech Model Railroad Club in MIT and touches on subjects like free software, games, the Homebrew Computer Club etc. Understanding how the software industry evolved provides valuable new perspectives, which is why reading this book is important.
Writing Interpreters in Go

This book teaches you how to write your own programming language using Go in around 250 pages. The Go code in the book is easy to understand and supported with explanations. Even if I didn’t know the Go language, I was able to follow the book easily. The book helps you implement lexer, parser, abstract syntax tree and interpretation without using a 3rd party library. It explains the concepts in a clear way. I recommend this book to those who are curious to invent their own programming language.
The Programmer’s Brain

This is a book that bridges the gap between cognitive science and software development. If you are wondering why a method that takes 8 parameters is difficult to understand or how to improve your code reading skills, this is the book to read. I liked the fact that the information is backed by science, something we often lack in other books that give recommendations.
Agile: The Good, The Hype and The Ugly

This is a book about Agile by industry veteran Bertrand Meyer. In it, Meyer explains the pros and cons of agile methods. The book was published in 2014 at the peak of the Agile hype, which makes it especially valuable. Meyer highlights the shortcomings of agile methods and provides a critical analysis, something many other agile books from that era failed to do.
A Philosophy of Software Design

This is an amazing, relatively short book that focuses on software design. The author talks about both more abstract concepts, like how to design modules, hide information, and use abstraction, as well as more concrete topics like writing comments, naming things, and testing. The examples are easy to understand, and the concepts are explained very clearly. It’s a highly recommended book for both beginners and experts.
Hackers & Painters

This book has a collection of essays by Paul Graham. Some essays such as “how to make wealth” have very good advice which I still remember to this day. This was one of the first books about technology, products and computers that I read, when I was a university student. In those days (2007-2008), books like this were a rare find. So, it has a special place in my life.
How Computers Really Work

The book explains how a computer works by starting from binary logic. Chapters build on top of each other, and the author explains circuits, memory, programming languages, operating systems, and the internet in order. Matthew Justice explains all the concepts in a clear and understandable way without skipping technical details, which is why I admire this book. I recommend it to those who want to learn the big picture of how computers work.
Working Effectively with Legacy Code

Let’s face it. Most of us in the industry work in long-running old projects. A greenfield project is rare. Despite this, we have very few books that address this issue and Working Effectively with Legacy Code is one of those few books. The book gives concrete and pragmatic advice and explains different techniques to those who has to deal with legacy code and uses the mainstream languages such as Java and C++ to explain the concepts.
VIDEOS
There are thousands of videos available on the internet, however it is not easy to find high-quality ones. These are the videos I have watched and I liked.
An introductory videos on computer science introducing various subfields and history of the field. The videos have high quality animations.
Crash Course Artificial Intelligence
An introductory videos on AI introducing subfields and history of the AI. The videos have high quality animations.
The Future of Programming by Bret Victor
An inspiring talk by Bret Victor. He is reimagining the relationship between the programmer and the computer.
A Philosophy of Software Design by John Ousterhout
John Ousterhout’s talk on software design.
FREE ONLINE RESOURCES
These are free online resources I discovered on the internet. I didn’t read everything here in these links.
The most comprehensive list of free and open source programming books, courses and other resources. If you look for a free book in programming and computer science, start your search here.
This github repo contains links that is useful for a working programmer. I didn’t check all the links in this repo but some links are really useful and I benefited from them.
The Modern JavaScript Tutorial
A good JavaScript and DOM tutorial
Architecture Patterns with Python
Free book on Python and architecture
Test Driven Development with Python
Free book on Python and web programming
OTHER LINKS
Protecting Your Privacy and Security
Long list of tips and tricks by Electronic Frontier Foundation to protect your privacy and security. This article is aimed at regular user rather than engineers. However, it is a very good list of items that deserves sharing. So, I included here.
I am always interested in discovering new resources on the internet. If you know cool links, please share with me.