Lately, I’ve taken a keen interest in getting as deep into the software on my computers as I can. I’ve been trying to get up to speed with being able to write good assembly, as well as reading all that I can about kernels and low level software concepts in order to achieve my goal of getting an encompassing view of what goes on behind the scenes in a computer. I feel that I already have a good understanding of what it means to be an application programmer, and have become increasingly unhappy with accepting some things as black boxes, unknown tools that you can use for accomplishing goals. In a system as complex as a computer, because of time constraints and complexity, no one person can hold every algorithm used in their computer in their head. Hence abstractions are necessary for a modern computer user. Forgive me for speaking in generalities, but most non technical people take the entire machine as an abstraction, and are happy crossing their fingers and hoping that this black box does what they expect it to. System administrators take it a step further and understand at a basic level how applications and operating systems work, but are happy to leave it at that. Java programmers can enjoy taking the operating system as an abstraction and write algorithms that are contained within the JVM. Application programmers often grasp many of the underlying operating system principles, but understand kernel and hardware largely as abstractions, as tools that heir code can use for functionality. Finally, kernel and hardware developers must maintain very little abstractions in their work, delving into kernel architecture and assembly on a regular basis.
I want to be in the last group of people. As a computer engineering student, this is a natural goal to work for. All the other groups have great function and opportunities in the world, but the reason I’m working to be a low level developer is that I’m attracted to the raw algorithmic beauty and the simple appreciation that there are no real black boxes. I feel that many low level developers are technically oriented people who simply cannot stand, for some reason or another, any level of abstraction in understanding their craft. Learning how a kernel works is surmountable to climbing a mountain or exploring somewhere not yet visited, it is a sort of “programmer’s high” that is obtained through understanding. Although I probably won’t ever be able to even feign total knowledge of every program on a computing system, I feel that learning assembly and OS kernels is tantamount to climbing something like Mt. Everest. Once you’ve climbed it, you know that you can summit any of the ‘lower’ peaks quite easily. I hope that in my journey of delving further into the machine, I can share with everyone good ways to do this, and help others on their own personal roads to eliminate the abstractions they rely upon. Consequently, I’ve set up a website and a publicly editable wiki that I and other interested individuals can submit articles to that are aimed at developing hardware and low level software on open source platforms. This site is aimed primarily at hobbyists and professionals that need a leg up for whatever reason in this challenging field. Although as of right now, the main site is still in pre-release, and I doubt you’ll find anything useful there as of yet. In time, it is my hope that the site will grow into a useful and thriving community. Please feel free to edit the wiki though, with anything relevant to the theme, as I continue to write articles for the CMS Made Simple driven main site. Happy hacking, and many thanks for anyone who contributes!