I started programming with HTML, CSS, and JavaScript, making small games before moving to Python. I became especially interested in automation and regularly used libraries such as requests, pyautogui, and os. After experimenting with the MERN stack and finding it repetitive, I began learning C and became much more interested in low-level programming, reverse engineering, operating systems, and embedded systems.
Now that I'm at university, I'm required to study Java. I don't dislike it, and I've used it for projects like Discord bots and Minecraft server plugins, but it doesn't excite me in the same way as C. My Java classes have also felt fairly easy, and I'm concerned that I may be wasting time trying to advance in a language I don't plan to specialize in.
Should I focus on doing well enough in Java for university while spending my free time on C, Linux kernel development, embedded systems, and reverse engineering? Are there other paths or languages I should consider?
4 Answers
Keep Java for your degree, but don’t feel obligated to make it your main area of interest. Think of it as an academic requirement while you build your real portfolio around low-level programming. Your interest in C, operating systems, and reverse engineering is already a useful direction, so start making small projects instead of waiting until you feel completely ready.
You don’t have to keep searching for more Java topics just because it’s the language used in class. Learn the concepts needed for your courses, then invest your extra energy in the areas that genuinely challenge you. C, debugging, operating systems, computer architecture, and reverse engineering can all reinforce each other and give you a much clearer long-term direction than forcing yourself through another web stack.
You probably don’t need to choose between them. University will require Java, so keep up with the coursework and treat it as something to complete rather than your main passion. Since you already have programming experience, the material may not require much extra study.
Use your personal time for C and related projects. You could even recreate some of your university assignments in C, which may help you understand the underlying concepts more deeply. If you move toward embedded programming or reverse engineering, learning C++ would also be useful, since it appears frequently in those areas. A practical project such as a small shell or analyzing a simple binary would give your interests some direction.
It may also be worth thinking about how much you enjoy hardware and circuits. People who like low-level work sometimes find that computer engineering or electrical engineering suits them better than a purely software-focused path. If your interest is mainly in software, though, staying in your current program and exploring systems programming alongside it can work well.

That makes sense. I’ve already tried applying some of my discrete mathematics coursework in C, and it gave me a better understanding of the material. I’ll try doing something similar with my other subjects. By low-level programming, I mean both Linux kernel work and embedded systems, although I’m still learning the basics and sometimes struggle with pointers.