This post is primarily aimed at people looking to change careers or start a new one in software development and is somewhat a summary of what worked for me with the help of my favourite philosopher, it is in no way about teaching the skills required but more of a framework of suggestions.
Someone recently asked me, "What do I need to learn at the very basics to be a junior software developer", I thought about it for a while and the following list of knowledge I would consider pre-requisite:
This list doesn't even begin to touch on all of the things you will learn in time but is merely a starting point to give some structure on areas to research. many would-be programmers, when learning, feel overwhelmed at the metaphorical blank sheet of paper they have before them when looking to start down this path, however, one has a lot of resource and knowledge available, so what are you waiting for, as the great philosopher Kierkegaard once wrote:
"During the first period of a man's life the greatest danger is not to take the risk."
As a young (or even not so young) person looking to get into development, perhaps straight out of school, there are a number of options such as going to college/university and learning computer science or getting an apprenticeship as a software developer or perhaps even just self-teaching using the internet and books/videos whilst working a day job (ideally in IT), no one way is better than the other (although apprenticeships are probably the fastest way to get real-life experience and learn at the same time).
What is important though, is when you decide this is the path, you take the risk, drop everything else and fully commit yourself to this decision.
"Passion is the quality of striving to become. Without passion, there is no movement.
One of the key factors in learning software development is passion, a passion for code and computer science.
Since I was a wee lad I had this passion, I would spend many hundreds of hours of my time just reading up on programming languages and paradigms, poking at other peoples code on the internet, chatting with likeminded folk on IRC (old school form of internet chat room) and working on projects of my own simply to throw away once I was finished just for the pure enjoyment I gained from it, without this passion, it's hard to keep motivated and movement/progress will always be slow or non-existent.
"Most men pursue pleasure with such breathless haste that they hurry past it."
It's often easy to focus on the end-game, pushing constantly to learn more, letting the pressure of learning suck the joy and passion from you, enjoy what you are doing, make learning fun, keep the passion, this is something you are doing because it is your passion, enjoy the journey.
"Patience is necessary, and one cannot reap immediately where one has sown."
This leads on from the previous quote, in that, it's easy to lose the passion and feel frustrated when things feel hard, every failure is another lesson learnt.
If something doesn't feel enjoyable, step back and approach the problem from another angle, or come back to it later.
Nothing worth doing is ever easy but the benefits will come in time and will repay many times the effort put in, consider for example planting corn, with nurture and water the corn seed will grow and repay many times the initial single seed even if for the first few weeks nothing shows, externally, under the ground roots are forming to support the growth of the plant to come.
Learning is much the same, even if it looks like no progress is happening, beneath the surface new thought patterns are forming and neural pathways are strengthening in your brain to support the visible growth to come.
"It is better to try something and fail than to try nothing and succeed. The result may be the same, but you won't be. We always grow more through defeats than victories."
Again to further compound my last statement because I believe it to be so very important, failure is a normal part of your growth as a person and a professional and should be embraced, there is much to be learnt from failure.
"Life can only be understood backwards, but it must be lived forwards."
Key to any project or endeavour in life and business is the concept of being retrospective (Huge part of the AGILE development theory), looking back and making notes and memories of lessons learnt, what works well, analyse the past and you can learn so much more about yourself and you capabilities, strengths and weaknesses.
"It seems essential, in relationships and all tasks, that we concentrate only on what is most significant and important."
In combination with regression and looking back on past successes and failures finding one's weaknesses become apparent, it's essential to focus on building up in these areas and not straying too far from your goals, always ask yourself when learning something new, "Do I need to know this now, is it important to my growth, is there anything more Important I can focus on?"
"Letting a child explore the world and develop its own powers gives the child an "inner sustainment," a self-confidence in the face of experience."
While it's important to stay on track with your learning path don't be afraid to explore, if one only follows a pre-trod path then one will emerge with the same experiences as those who trod the path before, while this is not of itself bad, take your time and enjoy the views on the path, perhaps even wonder off slightly to view things from another angle, we are the sum of our experiences maximise those experiences.
"If someone who wanted to learn to dance were to say: For centuries, one generation after the other has learned the positions, and it is high time that I take advantage of this and promptly begin with the quadrille--people would presumably laugh a little at him, but in the world of spirit this is very plausible. What, then, is education? I believed it is the course the individual goes through in order to catch up with himself, and the person who will not go through this course is not much helped by being born in the most enlightened age."
There is no better time than now to learn whatever you want, the internet is awash with tutorials, blogs and even structured learning video sites such as Cloud Academy, YouTube and Pluralsight, use these to your advantage, become familiar with Stack Overflow, don't be afraid of asking questions, we are in an enlightened age, we stand on the shoulders of giants, many who have come before have done so much groundwork that we do not need to start at basics, learn from the mistakes and knowledge of others, there is no need to make the same mistakes as other people have, copying and pasting someone else's code is not cheating it's saving time, just take some time to understand the knowledge so easily ingestible.
Therefore, to summarise, If you don't take advantage of the resources available then your task is an order of magnitude more complex.
"There is nothing with which every man is so afraid as getting to know how enormously much he is capable of doing and becoming."
This quote hits quite hard with me, a lot of people are happy to just sit by letting time pass them by, coasting on a path of, "I'll do it tomorrow", but guess what... tomorrow never comes, the person with this mentality will never reach full potential, the ENORMOUS full potential each and every one of us has because they are fearful as to what they will find out about themselves or just simply don't care.
People and things can help you reach that potential but ultimately only you are the owner of your destiny, are you ready and willing to do the work required to see what you are capable of becoming?