Ladies and Gentlemen, Boys and Girls! It is awesome that you decided to give software development a try and I will attempt to give you a little FAQ for your first steps. For the experienced ones among you: please consider adding items :)
- Where is a good starting point?
- Should I learn language X or Y?
- Should I learn framework A or B?
- I learned framework U, do I have to learn the basic language as well?
- Should I learn how to do stuff, or how my compiler/interpreter/stdlib works?
- What resources should I use to learn more and faster?
- I have been learning K for some time, but I think N might be a better choice?
Where is a good starting point?
If you always wanted to learn programming (and might have tried creating a personal website or a little program before) and wonder, how to get started learning it for real, here's the deal. Relax. Lean back in your chair. Get a little comfy and think. Think about the reason why you want to learn programming. Is it to get a good job? Maybe to impress your friends? Because you want to create the next AAA 1337 game? No matter your reason, most likely it's for yourself in the end! Always keep that in mind. Now that you know why you want to program, try to think about something you really want to create next. A program which you really need! Something others don't have. Maybe an app for your smartphone? Whatever it is, that thing will be your main project from now on. You will use it to learn programming, because it's something you want and hence keeps you motivated. In order to create it, go to the search engine of your liking and search for similar applications. Add the search term "programming", so that you can find discussions on creating such a program. Take a look at the technologies involved (even if you don't understand them yet). Then write them down. Those will be the first things you will take a look at. A little remark: It is very likely that your first try will not work that well. Don't worry; keep at it! You can only improve from here onwards :)
Should I learn language X or Y?
When starting out in a corp. environment, your company will probably dictate which language you should use, so ask your boss and they will tell you what to learn and might even give you a simple project to get started. In any other case, decide on a project, then use google to find out with what language other people solved similar tasks. If you aim to create a Flappy-Birds clone, you can google something like "program flappy birds clone". At the time I entered the query, I received quite a few results for Java (however that might change over time ;) ). The most important thing afterwards is having fun creating your project. You will learn the language playfully.
Should I learn framework A or B?
Neither. First learn the fundamentals of the language. If you know how to use the language, you will be able to create software without either of both, or with any of the millions of frameworks available. It is important to be independent of libraries and frameworks, as that allows you to choose the best one for the problem at hand. Choose the right tool for the job.
I learned framework U, do I have to learn the basic language as well?
Here's my advice: NEVER START BY LEARNING A FRAMEWORK. Just think about it: What will you do when U does not provide what you need? What if U becomes outdated? How will you go on from there? Will you go and painstakingly learn a new framework? What happens if you start investing more time into fitting U to your needs?
Learning the basic language allows you to A: get your job done without any framework at all! Sometimes they all don't fit, or the scope of the project is very small and a framework would just bloat the whole package. B: Select one of many frameworks, usually without learning them, but just by using them intuitively, because you already know how the basics work. Always use the best tool for the job! And C: Contribute to frameworks or create your very own one. Often, there is no framework which fits your niche, so you can contribute by creating your custom framework which 99% fits your projects.
Should I learn how to do stuff, or how my compiler/interpreter/stdlib works?
As a complete beginner, I think you should focus on having fun creating something. So you should not worry about how and why stuff works for now. Don't worry about performance, algorithms, architecture and so on. Just get a feeling for logic and your programming language for now. The other stuff will come later, when you are easily able to solve problems and your project becomes big enough for you to actually start worrying :) Let's say, once your average new project hits a thousand lines of code, you might want to start thinking about arranging your code in a more efficient way.
What resources should I use to learn more and faster?
If you are serious about learning, you should definitely spend some money on a good book (there usually is a primer for most languages) or guided online course. You might want to put ca. 100USD aside for that. Later on, once you grasped the basics, you might spice up your learning with additional videos, but only a bit :)
If you do not have money to spend, or just want to give the whole thing a try for a while, you will have to search on the web. You might google for "<language> tutorial" to find free online material, however the quality is wildly varying.
I highly recommend staying away from videos. Though they might seem more approachable in the beginning, they have various downsides, like not being able to quickly look something up. Also, verbal communication is often a lot more fuzzy compared to a text, so you tend to learn less in the same amount of time and might forget things easier.
I have been learning K for some time, but I think N might be a better choice?
Well. I recommend you to stick to your initial decision and at least finish your project. It might be true, that your first decision was a bad one. However you will most likely also hit problems with the alternative which make an entirely different option look even more appealing to you. The danger is that you start tech-hopping, without ever learning anything deep enough to really use it and never finishing a single project. You will not be able to build up required problem-solving stamina. That's very frustrating (speaking from personal experience) and you might consider dropping programming because of it. Programming is about solving problems, so if you are confronted with one, try not to chicken out and search for "the easy way" from the beginning, because that will never bring you to your goal. Sit down and solve that thing! You will be so proud once you did and the stamina you build up will help you with other headaches in life as well :)