There are so many resources online for learning computer science related stuff, new programming languages and some things not easily accessible to all.<p>Lately I've been feeling the need to invest considerable time on learning new things and re‑learning things I'm supposed to know (or already know).<p>So I'm wondering; If you could learn programming or computer science again – what would you do differently?
You should put an end to this mode of trying to figure out some kind of globally optimum sequence of learning. There is none. If somebody tells you otherwise, they are either lying or they have forgotten the countless hours/days/months/years they spent trying to hone their craft and <i>in-retrospect</i> they feel they could have avoided all this if only they knew some optimum way to learn. You are in a partially observable environment. The only way to learn is to explore a bit, consider what you now know, re-explore. rinse, repeat. Pick something, anything, that interests you and jump at it.
I did a degree in Computer Science, which I didn't _get_ at all, and I hated every minute of it. I worked in sales and teaching for a few years before accepting an offer to program full-time. I came into the field with fresh eyes, and a desire to excel. There I learned the programming not taught at my "Java school" such as: emacs/vim, bash, code control, web programming, perl, and php. I read Steve Yeggy. From there I went to a job highly focused on quality first, where I was exposed to good (or at least better) OO, TDD, Uncle Bob, and Fowler. Now, I am learning to burn off all the cruft of programming that is not directly related to quickly shipping high quality code. If I could go back: I would spend more time programming _anything_. At this point, the only thing that has slowed me is a lack of practice at the craft.
It might sound obvious, but I would have written more code. In school you work on such small scale projects it doesn't give you a good sense of what happens in the real world. Work on a large scale open source project that you have a passion for. In addition, learn C. My CS degree was wholly based around java and I regret not forcing myself to learn pointers, memory management and functional programming.
I'd actually learn more of the other disciplines, whether it's psychology, health care, biology, philosophy, etc. Technical skills have become a commodity - anyone can code if they have the persistence and enthusiasm. But not everyone knows how to code AND have expertise in a specific field. That's unique.