pranavappu007 wrote:
Exactly. Actually in the far future I want to get into hardcore C like, well, OS Dev. But nobody is gonna hire a simple guy who just completed his degree(after 1 yr) to make their next revolutionary OS. So I wanted some other stop gap soln. to get experience in C. My initial plan was to go something other than C but is close to C to later make the jump. But now I think it's better to go with something likeWin32, because it is used a lot in traditional applications(everything except store apps as I understand) and is completely compatible with C.
If you really want go into "hardcode C" like kernel development, my personal advice is to stick with it from now (you're a student, right?). Sure, you'll need to learn other languages in the meanwhile like python and bash for scripting etc, but, if you're sure about your plans, don't go working as a C#, Java, Web (etc.) developer. Even if C++, which seems somehow closer to C, in reality is very far from C in the job market. Let me explain that better: once you start your professional career, people and companies will search for you because you have experience with "XYZ", over and over again. Recruiters and hiring managers think about potential candidates considering their "profile". So, if you build a profile different than want to you want in the long term, it will be harder to switch. The "C++ profile" is typically far from the low-level C "kernel/embedded developer" profile. Even if C++ is sometimes used there, 99% of the C++ jobs will be about high-level stuff like software services in the cloud (backend) or video games (but there you need to have knowledge about computer graphics etc.). Other languages like Rust might be used in kernel development too but, it's the same problem as for C++. Actually, it's even worse because there are even fewer job offers for Rust developers.
So, you wanna be a low-level C developer? Start mastering C and system programming in user space. Learn assembly. Learn everything you can while you're a student about compilers, linker, executable formats and especially what's the job of an operating system. In parallel, learn one CPU instruction set (typically x86 or ARM). I'd recommend ARM. In the meanwhile, start contributing to open source C projects. In the Linux world, most of the "stuff" is written in pure C. Forget about finding a job with Win32 + C. It's very rare and there's less and less demand for that. There's very little demand for GUI desktop applications in general, no matter the technology, even less if you want to do that in C. Only in the open source world, you'll find that (see GTK applications). By contributing to open source projects, you'll build A LOT of experience and most companies will value that A LOT. Then, after you have a fair amount of experience with C and assembly in user space by working with other people (that's not a detail), start moving your focus down the stack and start learning about kernels. Contribute to small kernel projects as the ones you can find here or write your own. When you're confident enough, start contributing to major kernel projects, like Linux or FreeBSD. At that point, you'll find a job as a kernel developer. I know it's a long road, but that's the reality. If you really need a job earlier than that, try entering in the embedded/kernel world as an intern, showing just good C knowledge, algorithms & data structures + theoretical understanding of how operating systems work. It might be enough, depending on your skills and the company. If that doesn't work, apply for "system developer" positions. The closer you start to your end goal, the better.
Vlad