Software development can seem offputting because of the way you need to think – a similar thing that happens when you want to learn any engineering discipline, or any discipline at all which requires focused use of methods.
One difference between many other options and Software Deveopment is that the latter is available pretty much to anyone with a computer, as soon as they get it. So they may try to start learning without much of a nurturing environment, which usually doesn’t happen when you go to school to learn something as school tries to create it for you.
Another difference is that there are no physical referents for software development; the abstract ideas, methods and goals may be harder to grasp.
So, what could someone who is learning do, or someone who is in the position to mentor recommend, to facilitate learning?
- Get into a nurturing environment; somewhere with people who are developing and sharing knowledge about it. User groups are amazing, as well as those feverish kids that can’t seem to stop programming all the time.
- Read contemporary publications on the subjects of your interest, written by people who work on it.
- Read and work through key works; some may be too dense, and some too light, but put some effort into it. Doing half of a too-dense book is better than all of a too-light book.
- Start developing personal projects. From simple games to simple apps, from stuff you will give for free to stuff you want to make money off of.
- Start collaborating as soon as possible; be it with documentation, user support, bug triage, or code.
- Do have as much fun as possible.
- Do not despair if you find people with bad attitudes. Just try to endure, or try and find a better environment.
- Remember: knowledge accumulates. That tiny fact about pointers, or about error handling, or about cache misses, or about network protocol behaviors, will join all the rest. It is likely to come up sooner or later in your work or play.
- Explore different avenues of software development; this will make you a better rounded developer, and find more fun.
If you are in the position of seeing someone grow, and you already are experienced, do try to mentor that person. It will help you grow as a communicator, as a teacher and as a team member.
Last, but not least, go read ESR’s great How To Become A Hacker and do some of that stuff.