Book review: How to Become an Expert Software Engineer
Title: How to Become an Expert Software Engineer
Subtitle: A programmer's guide to the secret art of free and open source software development.
Author: Marcus Tomlinson
Review
The book is oriented towards developers just starting their careers or who are not familiar with open source and the typical tools. The author proposes open source as the main way to obtain experience for your résumé. It is divided into four parts: Define, Design, Develop, and Deliver.
The first part (Define) seeks to inspire the reader to work for the job they want, and also describes a systematic process to find what technologies and skills you should learn and practice.
The second part (Design) dives right into how to create an open source project that matches the technologies and subdomains that you identified in the first part. The author seems especially interested in creating a popular open-source project.
The third part (Develop) deals with solo project management, productivity, and motivation and explains some API design best practices. It's like a summary of multiple disciplines, but it only manages to point out the most obvious perils along the way.
The last part (Deliver) explains how to handle software releases and market your project. It is the one I found more irrelevant, as the initial goal (finding your career path) fades in the distance of the first chapters.
Summing up, the book is not long and can be read in a few hours. It touches many subjects, although very lightly. Nevertheless, it can be a good reference for new developers who are not aware of the multiple elements that are involved in software engineer projects. Some chapters might be motivating to a more experienced developer, even if you don't pick up many new things.
Key Insights
- Proving your proficiency in the job you’re asking for is by far the most convincing argument you can make.
- Hard work spent doing something worthless will always be worthless no matter how hard you work.
- The trick is to find a job that will be a perfect fit for you, then get to work on making yourself perfectly fit for it.
- Contribute good free software that is well-written and helpful to ourselves and to others.
- Expertise is usually measured in the time you’ve spent deliberately practicing:
- 20 hours to learn almost anything and reach a decent level of proficiency.
- 10,000 hours to become an expert in almost anything.
- Create a prioritized list of job requirements with technologies and subdomains in order to decide what to focus on.
- Manage your project like you would manage a work project: do research, split tasks, define good APIs, implement quality tests, estimate tasks, etc.
- Always consider research time when estimating tasks and rate it according to your relevant experience.
- Plan your project to keep your motivation high and start with the minimum set of must-do features.
- Try to focus exclusively on solving just the immediate problem at hand, be mindful of how long you’re spending on it, and postpone any divergent issues to separate tasks for later.
- Put a few hobbies on hold for a while, work whenever you can find the time, and try to avoid taking breaks that are longer than a week, at least until you reach your project’s first release.
- Motivation is key: All you need to create good software is a personal interest in seeing the problem solved.
- Design and test your interfaces before implementing them.