I know some Python, Haskell, C, JavaScript, Java, Assembly. Had courses on basics of Databases, Networks, Alghoritms and Data Structures, Non-imperative programming, Low-level programming, Operating systems...
What general advice do you have for me? What should I do and what should I avoid? What topics should focus on? Which domains of computer science do you think are best to study right now?
Technologies will change rapidly. Foundation knowledge is what will help you maintain your technical chops. I think understanding multi-core, like 100+ CPUs on a single chip are going to be useful in the near-term, data storage and management is another area.
Depending on your other interests and your university's approach to elective subjects, study broadly outside of CS. For example, biology, medicine, law, commerce, etc. Domain knowledge rather than CS knowledge is the key to a successful career.
If GitHub statistics are to be believed, there are over 100 million programmers in the world. To avoid becoming just a fungible resource competing with AI and low-wage countries, you really need to understand some area of commerce that makes profits instead of being just a cost center.
- look at your professors who are running successful companies or working on research of interest to you. reach out to them early, ask to do your bachelors or masters with them, be serious, hardworking and show potential.
- cultivate relationships with other smart people in your class, maybe you or them have an idea for a business or a project, work on it together, experiment, fail a lot see what works and what does not, you are young in fact you should be doing as many mistakes as possible to learn from them
- go on an exchange program abroad for a year or so
I got a small part of knowledge from studying and a large parts in a laboratory with peers or by just dabbling in topics of interest. At that time I leaned heavily in low level systems programming. But that was probably because we had so many toys to play with at our university (which often received presents from large companies to draw students toward their tech).
On the theoretical side I wouldn't pay any attention to the latest IT buzz, but looking into tensor algebra, number systems like quaternions and numerics in general have a very broad application in modern computing and I think university is a good place to take the time to lean into such topics. Not becoming an expert, but perhaps forming an understanding why and where such tools are applied.
For example: When you start, you know what a compiler is: "It turns code into programs". Then you learn the actual nuts and bolts of using a compiler to do things. But you're still a long way from building one from scratch. Of course, building a toy compiler from scratch would be a very good project to work on as part of your studies.
This can apply to everything you're studying. As you learn more, you will learn the names of many many concepts, libraries, languages, techniques. Sometimes knowing the name and a 2 line summary will be enough, but don't confuse it with the other deeper knowledge. Make a conscious effort to pick up deeper knowledge in the areas that interest you.
A metaphor from what I personally like: If you can make fast websites, you’re a good software engineer. If you can make fast websites with great copy and a subsequent positive effect on SEO, you could be a company.
Don't forget to develop other interests outside of computer science. You are more than your major. When you do computer science 40 hours a week, you will need other outlets.
Technology is the means to an end. Sometimes digital duct tape provides more value than a digital masterpiece.
A few 15 minute conversations have more impact on your income than mastering a programming language. Learn to negotiate. Kalzumeus.com has two excellent articles about that.
Look into the history and people who made significant changes. Not just as trivia, but make them living breathing ghosts in your mind.