This has absolutely nothing to do with intelligence. Programming requires an entirely different way of thinking that is not natural to people. It is an acquired mental skill set, and although some people may pick it up quicker than others, nobody is ever born naturally thinking this way.
The most essential concept to understand when learning programming is also very simple, and here it is: computers do exactly what you tell them to do, which may not be exactly what you want them to do. It is a subtle difference that will help you enter this with the right mindset. Your computer is absolutely stupid and will blindly follow your instructions exactly as you write them. It is hardcore logic, at the very core of the term.
Many terms and words you encounter (i.e. transient, volatile, synchronized/mutex, mutability, constant/final) and shortcut words (i.e. malloc, atoi, itoa, ioctl) may seem to be incredibly complex "arcane magic" that you will never understand. I promise they are not as crazy as they seem (transient means something should not be saved, volatile means something changes often, synchronized/mutex are terms for achieving safety in a multiprocessing environment (this is an advanced topic), mutability is whether or not something can be changed, constant/final means something never changes, etc.). It is almost as if programmers intended to come up with crazy words to seem more badass and smart. Just remember that all of these terms were made up by friendly guys like you and me, enjoying this as a hobby.
Take it slow and learn through practice. If you bite off more than you can chew, you can very quickly become overwhelmed and want to give up. There is a whole lot to learn, but remember that everything you learn is another tool in your toolbox which can help you become more productive and indispensable for employers. It is essential, however, that you don't just learn these things for the sake of learning them. The best way to learn new things is by needing them for your current project, and figuring out how to apply them. There is no better way to remember. Traditional memorization that is taught in schools will simply not work.
Work with other programmers who are better than you, if you can. You will learn so much by working with their code. Join an online community and participate in some projects. Again, be careful not to bite off more than you can chew. Start small, and make something that you actually care about.
Many programmers often joke that time spent programming is 50% writing code, and 50% fixing the code you wrote when it doesn't behave the way you want/expect it to. Nothing is further from the truth. Programming is a constant cycle of writing code, compiling it (using a tool to make it executable), then running and testing it, and fixing it when it doesn't behave the way you expected.
Don't be afraid to look for help! I would say that on average, half the time I'm programming I'm Googling ways to fix problems with my code, or looking up documentation to code that other people have written that I'm working with. You will find that most problems happen to many, even hundreds, of programmers. And most of the time, if you know what to search for (Googling is a skill in its own), you will find a solution that you can mend to work your way. Unless you're running into problems with deep kernel development, you are almost never alone!
Don't force it. If you don't find yourself having fun, you may want to consider another field of computer science to work in. I love being able to work hard on a project for a long time, overcoming tons of problems, and finally seeing it run perfectly for the first time. That sense of pride, that something you labored hard over to build is now working beautifully, is hard to beat. Remember that if you don't enjoy something as a hobby, then you won't enjoy having to sit down and do it 8 hours a day.
Reading code from programmers who are better than you is key.
Nice article, enjoyed the read.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Great that you want to encourage others to start :)
I would sign to all of this, but one thing I was not able to experience yet.. Everytime I worked with somebody with more experience, their code seems to be too "much" for me - they use strange things, concepts, functions..which make the project looking more complex than necessary to complete the desired task.. Sometimes, weeks or months later, I finally understand what they did and why they did that - but at the moment that I needed it, it wasn't the right thing. It scares me rather than teaches me something...
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
I agree. I think that is normal process of learning something new. Every start is difficult.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit