Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Currently I am employed as high level programmer doing some algorithmic & database stuff in C++. In my company there are programmers that are writing Windows kernel drivers (mostly software drivers not hardware). Recently I have read some materials about windows kernel programming and I realised that this type of programming that I am really passionate about (more than high level programming). I would like to switch to kernel programming but I need a plan to do this.

I was thinking about asking a boss to move me to the mentioned project but in my company you cannot freely move between projects (there is a lot of pressure to become specialist in one field). I was thinking about changing jobs but there is one issue.

Does my high level background disqualify me in becoming kernel programmer? Maybe I should not put on CV my high level jobs? Could you give some advice in changing my job?

share|improve this question

migrated from stackoverflow.com Jun 7 '11 at 9:39

This question came from our site for professional and enthusiast programmers.

C++ ain't high level... –  user1249 Jun 7 '11 at 19:37
I agree with @Thorbjørn Ravn Andersen , C/C++ is just one step up from architecture specific assembly. It's just a question of knowing how the kernel works, and what facilities it provides for you. –  Tim Post Jun 8 '11 at 4:42
@ThorbjørnRavnAndersen: nowadays it's not, but it certainly used to be considered that way. Even C was considered high-level. –  haylem Mar 1 '12 at 11:01
@TimPost: I agree. I mean, template metaprogramming and object orientation just scream "Assembly" to me. –  DeadMG Mar 1 '12 at 11:45
@DeadMG: Exactly :) It can be pretty high-level. Horrible, still, but high-level and with the possibility of going fairly low. Very multi-faceted. –  haylem Mar 1 '12 at 12:31

3 Answers 3

If you can do some of this in your current company, then talk to your boss about trying out on a small non-essential project where you can see if it lives up to your expectations and then consider what to do next. This means you still have your current job!

You will find you need to relearn a lot, and think differently, but it is fun. Note that you may need to unlearn a habit or two if you usually just fire up a debugger to see what is wrong :)

share|improve this answer

I don't think your high-level experience will "hurt" your credibility for a low-level job (you might just get the occasional poking from low-level coders, they're cheeky fellas), but it won't help you to get one either that much.

Also, though it's all relative, C++ is not that high-level so it's not a huge gap from there to kernel programming, though the kernel programming job you'll land will be more likely to involve C and Assembly instead. Still, it's not as bad as if your experience was mostly with Mozart/Oz, OCaml, Ruby or C#: you're still relatively close to the machine, and have probably a decent knowledge of memory implications.

So you just need to emphasize this a bit, and probably try the following:

Contribute to Projects in your Area of Expertise

Contribute to an open-source projet involving C++ for low-level programming to show off your already hard-earned skills.

Contribute to Open-Source Kernel / Low-Level Projects

Contribute to an open-source project and/or create one or more pet projects involving at least some C to learn some of the tricks. Pet projects will be nice for you to learn, but I'd recommend to work on something with peers, as you'll learn a bunch of interesting things and if they are vocal about code smells and bad practices they will put you on the spot when you do something that's not aligned with best practices and what would be expected in your target job.

Learn from Code

Learn by reading a lot of system code, and keep doing that until your are familiar with how different types of kernels work:

  • Have a look at the BSDs' source code (NetBSD, OpenBSD, FreeBSD) [monolithic]
  • Have a look at the Linux kernel's source code [monolithic]
  • Have a look at the OpenSolaris source code [monolithic]
  • Have a look at the MINIX source code [micro-kernel]
  • Read also about closed-source kernels of different kinds (their source can be found via different means; maybe try to get in touch with local universities as they often have licenses and partnerships with software companies):
    • Windows [monolithic],
    • QNX [micro-kernel],
    • VxWorks [micro-kernel],
  • others (Haiku, SkyOS, ...)
  • and look at open-source drivers' implementations, of course

DIY: Learn by Writing Your Own

  • Write the important parts of a system yourself:
  • Hack away on good learning kernels (NACHOS, MINIX...)
  • Follow a Kernel training course:
    • at a local university or online
    • or follow a project like the SOS Simple OS tutorial from scratch

Learn from Books

There's also a lot of good books on the topic, either free or online (tough possibly outdated, they're still relevant):

Get the knowledge, and show that you have it by publishing thing online. SCM commit logs and similar things are the only thing that will really matter for other kernel programmers to see when they review your job applications.

This applies to both finding a new job in a new company, or to attempt to transition smoothly internally.

share|improve this answer

Have you seen Win Kernel programming jobs, that you can apply (in your area) ? Its ok if you do something for fun, but, if you want to do it for profit, you must be clear that there are jobs or market for it.

(P.S. Do not confuse doing something for fun, and doing something for profit, and really getting paid)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.