I am a software engineer. It’s still hard to fathom how I got here from the days of studying at university, knowing only a fraction of what I know today. I never liked the course curriculum in university or highschool as they follow strict guideline on what to teach students and judge based on how students adapt to it, not allowing enough freedom. I, like most people, did struggle in university from rapid learning, testing, and demanding schedules. I think that did more damage to my learning process as that meant that to get a good marks, I selectively picked courses that I knew I could manage better and avoided courses that I knew I would have hard time in. Not only was this correct in experience, but the fact that I had to do this to avoid learning something so crucial was I think a failure in educational experience. You could argue that it entirely depends on student(I) to make the choice to learn or not, but when you are judged on how well you understand a difficult subject in limited time, a realist in student must make a choice.
That’s why I chose to instead pick online courses that I couldn’t comfortably pick in university. One such course I HIGHLY HIGHLY recommend is Algorithmic Thinking on Coursera. If you haven’t taken a course in university that teaches the fundamentals of computing (Most CS students will learn this, but engineering student me could only optionally take it), you should take this. It teaches you about all the fundamentals of computing, the tools and theories that empower you to approach most problems easily. It’s essential to being a programmer, so much so that if you weren’t taught this, I don’t know how you call yourself a programmer. Even if you weren’t, do learn this, and you become master of the tools to tackle any problems previously taught to be hard and trivialize them with few lines of python.