8

Ever since I discovered programming five years ago, I've done a lot of things. I've learned numerous programming languages and technologies and tried out many interesting things. I've written games, both console and with graphics, console and windowed applications that run in the desktop, CRUD web applications, my own (crappy) PHP XML-based flat file database. In addition to Web and desktop, I've tried mobile development with Android but didn't enjoy it, so I stopped that. I recently finished a Web project of mine and am learning functional programming right now (Haskell).

But I have never dabbled into system programming before. The idea of building software (I'm not even sure if that's the correct terminology to use for it) at a low level that interacts with the operating system seems interesting. The problem is, I'm not sure how exactly to get started, and need more examples of what I do with this.

Should I start by learning the Win32 API? I know some C++ as I've used it to make quite a few console apps and games, but haven't used it in a few years. Is that the way to go? Also, what about C? I am planning to learn some more about C (using the K&R book) before the summer ends and college starts. I want to get a good head start as a college freshman with a solid programming background.

Ryan
  • 835
  • 2
  • 10
  • 10

3 Answers3

10

Consider writing a small embedded project on an embedded controller like the Arduino. This is a great way to begin the process of learning systems programming, because it starts you off at a basic level and allows you to grow into it.

Robert Harvey
  • 200,592
6

The idea of building software (I'm not even sure if that's the correct terminology to use for it) at a low level that interacts with the operating system seems interesting.

I believe you're getting system programming confused with application development. System programming would be more along the lines of writing the operating system, not interacting with it. I would probably suggest starting off with regular application development (on Windows that would be the WinAPI), then move on to exploring subsystems you find interesting in depth.

K&R is obviously the definitive guide on C, and if you're going to target Windows applications I would highly recommend picking up a copy of Programming Windows.

If you're really interested in "low level" interactions, I might also suggest Iczelicon's Win32 Assembly tutorials (MASM is great, and it's also free).

If you manage to grasp even a fraction of that information before your freshman year of college, you'll be light-years ahead of probably just about everyone else.

Brandon Moretz
  • 753
  • 1
  • 8
  • 16
4

If you're interested in systems programming, nothing beats actually working on an operating system (either on the core of the OS kernel or on the related device drivers)

I'd therefore suggest getting involved in Linux development - it's a very good community to learn about OS internals. I learnt a huge amount about operating systems simply by following the linux-kernel discussion lists....

It's also an opportunity to take on a tangible project and enhance your skills. As a recruiter of software developers, I take real notice when someone has contributed to an open source project - it's almost always a positive indicator of skill and commitment!

mikera
  • 20,777