TL;DR
Don't write an operating system.
----
Kernel space programming is a harsh and hostile environment. You should "learn the ropes" with all the help you can get (debuggers, third-party libraries, generic Q&A resources, ...), and kernel space is "special" in more ways than one. You should learn "general" first, and "specific" second.
My recommendation is, think of something that would actually be useful for you. Something where writing your own software for it might not be the most efficient (e.g. as opposed to whipping up an Excel sheet or commandeering some other existing software), but where the end product is something you might actually use, ideally frequently, yourself.
Something achievable (which "your own OS", pretty much by definition, isn't).
This puts you in the place of being your own customer. You will find what "works" and what doesn't, you will learn how a requirement you might be having is turned into smaller issues and, eventually, code. You find the little edges and burrs in your v1.0, and take pride in smoothing them out in v2.0.
And in doing this, you gain experience on "how things work", you improve your coding style and skills. Doing so while developing an OS means that, pretty soon, you will have to rewrite all the basic stuff because you learned, and realized how much your code base sucks.
That can happen with any hobby project, but in a small-scale, achievable, user-space hobby project, rewriting or ditching doesn't hurt as much as with kernel-space OS groundwork.
---
Some things I wrote when I was still very much a beginner, to show you what I mean:
A program to track student attendance at my Judo club. (Who was there most regular, how full were the Monday courses as opposed to the Friday ones, stuff like that, which was done by hand before and by Excel sheet after, but actually this first "real" program I ever wrote -- on a C128 -- was used for about a year by someone else after I didn't want to do it anymore. I was ~14 at that time.)
A program that scanned upload logs of a specific FTP site for known software titles receiving updates, and turning that information into a website listing the latest available versions for said software titles.
A program that did bookkeeping and game sheet printouts for a boardgame league I was running.
A program that assisted me in turning a collection of text files (containing news items) into a computer news website.
None of these had more than a couple hundred, perhaps a few thousand lines of code when I did put them to rest eventually. But I learned much while doing them, and did useful work with them.
_________________ Every good solution is obvious once you've found it.
|