A friend of mine, a beginner PHP programmer, needs to link the product his company develops with a third-party product (a set of web services). He received the "relevant" documentation (a few hundred of pages of unreadable stuff) from this third-party, have read the PHP documentation related to SOAP client, have read about SOAP and WSDL, but doesn't have a slightest idea where to start. Instead of a step-by-step tutorial, he has lots of overly verbose documentation.
I suggested him to use prototyping:
- Imagine the most basic scenario where the third-party web services can be used,
- Select the relevant documentation,
- Build (from scratch) the simplest PHP script which will play this scenario,
- Once the prototype works, integrate the functionality into the existing product,
- Refactor,
- Expand the existing product with additional features.
While this may help pushing this person to the right direction, I feel that my suggestion is only partially helpful. I imagine myself six years ago knowing nothing about WSDL and SOAP and having to search inside hundreds of pages of documentation: I would be already discouraged at steps 2 and 3.
Experienced developers have a bunch of patterns, practices and processes which help solving basic problems frequently encountered in software development:
The technical aspects of a feature are uncertain? Use prototyping.
The application "feels unresponsive"? Use profiling to find bottlenecks.
The requirements are subject to frequent change? Use Agile.
Programmers need to be sure their code doesn't contain omissions? Use code reviews.
The successive versions of a product are not deployed fast enough? Use DevOps.
While those patterns and practices help developers solving purely technical/organizational issues (such as "I know how to implement Web Sockets in Java, Python and Node.js, but now I need to do it in Haskell."), the same patterns and practices are not helpful for less experienced programmers who need to solve more substantial and less technical problems (such as "I believe Web Sockets are a sort of HTTP but it happens the other way, something like that; now lead developer asked me to implement that in my app, but I'm not sure why do we need it.")
Inviting the programmer to spend three years in college or twelve months reading programming-related books is not always an option: some people need to work to pay their bills, need to finish the project for the next deadline, and are not paid to read books.
So what are other options?