/learning-resources

A curated list of things I've found useful in the past for learning software engineering

Learning Resources

Books

Clean Code by Robert C. Martin

In my opinion, one of the best books any software engineer can read. The obvious mission of the book is to get all of us to write better code, however I feel it does a lot more than that, and helps to motivate me to keep high standards of quality and stay disciplined as a programmer. Very technical, lots of Java code.

Pragmatic Programmer by Andy Hunt, Dave Thomas

A fantastic guide on best practices for software engineers, jam-packed with advice and invaluable lessons. No code as far as I can remember, it mainly covers how to be a better developer, how to work well within teams and how to be part of a successful project. Once you've read it, you can refer back to the quick reference guide found in the book or here.

Extreme Programming Explained by Kent Beck, Cynthia Andres

This book serves as an introduction to the methods of extreme programming (XP). There are many shared theories between this book, Pragmatic Programmer and Clean Code. It will certainly help you to put aspects XP into practice in your team very quickly, and understand the general aspects of agile better. It may well fuel ideas of how to improve your day-to-day activities in a software engineering team.

Eloquent Javascript by Marijn Haverbeke

A brilliant guide on Javascript, its history, its applications, technical aspects, syntax and patterns. Especially good for the novice programmer, but can also be good for a more advanced programmer finding their feet in Javascript. A lot of people recommend Douglas Crockford's works like "Javascript: The Good Parts" but I feel this book gives a more modern and encompassing summary of the language.

You Don't Know JS series by Kyle Simpson

This is a deep dive into many parts of Javascript that very experienced developers may have no clue about. Approaching topics like the JS interpreter and memory management, it will help you to understand a lot of what is going on under the surface of a JS application. Your understanding of JS will be far ahead of what it was before reading this book series. Better suited for someone with a fair amount of experience with JS.

At current writing, there isn't a huge number of great books for Kotlin, and fewer that explore how it can be used most effectively in Android. This book has lots of code snippets to show how effective the language can be, and introduces some best practices when developing Kotlin/Android apps.

Apprenticeship patterns by Dave Hoover, Adewale Oshineye

Recommended to me by a very experienced software engineer, this book will be helpful to novices and experts alike. It describes many different techniques like how to stay motivated, how to always be learning and how to improve yourself with feedback.

You may have noticed this is not a technical book! As a modern software engineer, you work in teams of vastly different kinds of people with various personalities and skills. Your effectiveness as an engineer is dependent on how well you can cooperate with them. I've not read a better book on how to communicate with others effectively and how to win people over to your way of thinking. This will improve your life inside and outside the workplace.

Podcasts

Fragmented
A great way to keep up to date with the Android community. They cover technical aspects like databases, kotlin and architecture, but also softer topics like tools, working as a software engineer and productivity.

Talking Kotlin
A podcast all about Kotlin! Host Hadi Hariri interviews engineers from many different companies as well as contributors to the Kotlin community, to see how they use the language, how it has improved their work (and lives), and where the language is going.

Blogs

Martin Fowler's website is a treasure trove of great articles on software engineering, design and agile.

Typealias is a rich resource of (illustrated) articles on Kotlin from Dave Leeds. Great for both the Kotlin beginner and someone who is trying to understand the language more deeply.

Newsletters

I find newsletters one of the best ways to keep up to date. These are the ones I've subscribed to in the past.
Kotlin weekly
Javascript weekly
Android weekly
Increment - an online publication with longer, in-depth articles from industry experts on a wide range of subjects such as security, programming languages and internalisation.

Compiled lists

I find the "awesome" series to be handy for finding tools or other resources:
Awesome Kotlin, hosted at kotlin.link
Awesome React
Awesome Javascript

Websites

FreeCodeCamp
Probably the best place to learn web development from scratch. It's also free (!)

Codewars
A good place for programming challenges to keep your skills sharp, however the in-built text editor is really quite unpleasant. I'd recommend using an external IDE.

Egghead
Holds guided video courses on all kinds of popular, up-to-date web development frameworks like React, Redux, Vue.js, Express etc. Particular highlights are the redux courses conducted by their author, Dan Abramov

Kotlin Koans
Not a bulletproof way to learn Kotlin, but the exercises here might help you to learn with some hands-on examples.