HACKER Q&A
📣 sdevonoes

How to fill this knowlegde gap?


Not sure how to explain it, but I'll write down a couple of examples to show what I mean.

1. Developer X knows how to write decent code. Readability, maintainability, dependency injection, good patterns, solid principles, etc.; his code is easy to read and elegant, and more importantly it works as expected (at least based on the tests on staging environments). Now, the code goes to production and fails because: the number of, let's say, customers the code was loading into memory was just too much for the server to handle (the code was using a simple `for` loop + array variable to keep the customers). The server's memory was exhausted. One solution was to use rabbitmq instead of a simple array.

2. Developer X writes a `select` query to perform a search. The query works fine and is fast... but in production it takes much more time than expected (because the database has to handle load coming from other parts of the system as well and because the tables in production are way bigger than on dev or staging). Besides, the `select` query wasn't being run against the slave database, but against master. Developer X didn't think about these two topics when writing the query.

Basically, developer X has read all the books that appear in Google when one types `Top 10 Books That Every Programmer Must Read` (and more), and has a solide background in theoretical computer science (networking/databases/operating systems/compilers/automata theory), but has a hard time dealing with so-called "common" patterns/solutions in the real world (master/slave replication, async task processing via queues, issues that appear in production due to a huge amount of data, etc.)

Developer X is learning the "hard way" (through experience at his work place), but he finds this way of learning really slow (that's why he read all the top +10 software engineer books in the past).

How can developer X learn faster the topics he lacks experience with? Any really good books out there?


  👤 PaulHoule Accepted Answer ✓
This advice is not popular but I will share it.

There are some counter-examples: there are certain products for which the official manual are not useful.

Examples of products that have usable manuals are PostgreSQL, MySQL, C, Python, Java, Javascript (at MDN), beautifulsoup, CSS and HTML specifications, C#, etc.

Random books, web pages, stackoverflow add mistakes and misunderstandings; really you want to know the official docs inside and out and be able to find things in it like fonzie putting his motorcycle back together when he was blind. There will always be cases where somebody talks about some way to put elements together that you wouldn't have thought of yourself (particularly in front end design) but for any question that can possibly be answered from the manual you should skip the spam and go to the source.

This is the difference between reading real scientific papers and the scientific american version.