I've been learning through tutorials for the last three months and when I try remembering what I've learnt I feel I know nothing.
What should I do different?
Learning through tutorials is great but I'd say you won't really understand it or remember till you start hitting rubber against the pavement. Start building a project and reference google or tutorials along the way. You will start remembering it once you have used it. It will help you tie concepts to actual features and functionality.
My reply is only to reinforce what @noahwbragg already said. I'm the same as you, Allan, and I've been coding for years and years. Tutorials are an okay start, but they come at you with little-to-no real world context. I can do tutorials for hours or days, and when I come out the other side, I'm not much smarter for it. Personally, I start with a few tutorials, and once I feel good and dumb because of them, I start building something for me. It doesn't have to be big, but it has to be slightly meaningful. Something I want to do, not some random tutorial project (to-do list #1384).
The epiphanies rarely come while copying a tutorial character-for-character into your IDE. Once you have to ask yourself, "Why isn't this working?!" a few times, you'll start to get some answers. Frustration is growth.
You are a CS student so here's my laundry list-type advice I give anyone serious about becoming a solid software engineer, take what you will:
Of course there's more depending on what you want to focus on, but I think these are solid fundamentals for anyone serious about programming.
Do you need all this to just "code"? No, you don't. But the above concepts are the foundation on which no new piece of tech will ever scare you because you'll be able to relate it to already well-known concepts. The names might change but the ideas are the same.
I've seen many self-taught "coders" and they always come up short in terms of depth of knowledge which holds them back in a lot of ways. For one thing it really limits their range of application. They typically end up working on a narrow software category and can't really transition out of it. Not without a huge time investment plus the corresponding downtime.
Hope it helps, best of luck.
This is exactly the sort of problem that I'm working to solve: that context is as important to mastery as syntax and that tutorials are, by nature, limited in scope to solving reasonably trivial problems. Even after attaining a working understanding of the syntax of a language, it's quite difficult to understand how to proceed from syntax to actually building working software, especially when the problem you want to solve is more complex than can be implemented via a simple script.
Here's the approach that I'm taking: learn software development through real-world projects and immersion. Rather than the simple projects defined in tutorials, we'll give you projects with some modest complexity: for a web application, maybe that's a project with between 10 and 50 source files. These are projects that are complex enough to be non-trivial and to actually implement useful features) but simple enough that they can be understood by the relative novice- at least at a high level. The projects will be code reviewed and written according to the language's style guide and other best practices.
With these projects, learners will be given guidance and direction:
DM me if this is something that you're interested in; I'm working to gauge interest so that I can build-out projects that are of interest to the most people and, hopefully, build-out a community to contribute these type of projects and mentorship.
When it comes to learning programming languages I can recommend https://www.hackerrank.com/ . They have a huge practice section with lots of easy tasks divided into categories. And what is important you can validate your code with predefined list of tests. And it works really well psychologically (at least for me) when you have confirmation that you have solved given task.
Allan - I am a self-taught developer. I still feel like I dont know anything, but I have built a few side projects myself. The key to learning anything is curiosity, perserverance but most of all hands on. build something that you've always wanted to build. Start somewhere and the doors automatically open. If you want to talk about this more, I am happy to chat.
Thanks for the invite.Chat on Twitter?
yes lets chat on twitter. https://twitter.com/ChakrVyuh
You learn to ride a bike for 3 months through reading online tutorial and working on cycling machines, guess what happen when you hit the road with an actual bike? Take your bike and go out to play, thats how you learn how to ride a bike.
The first thing is to know yourself.
How do you perceive information? No two programmers are alike, be aware of that when asking programmers for help. Second what language are you learning? C++ tends to be more difficult than a language like python. Third when you do program, don't think about the biggest picture you can imagine, code in sessions. Do one small part of your project at a time. My last piece fo advise is understand the concept of each part of code before you dive into examples. Know what's a variable, input, output, conditional, and loop. why are they important. Programmers in the beginning don't memorize everything, part of being a programmer and a professional is knowing how to get the answer. Learn to do research as you create your projects. Hope these tips help.