I finally finished reading Micheal Abrash’s Graphics Black Book from cover to cover. I found it funny that Jeff Atwood of Coding Horror fame posted about it about the same time that I started reading it. Almost a year later I finally made it through. I had read the Zen of Graphics Programming but not the entire collection before.
In my opinion there is only one real reason that Micheal’s writing and articles are exceptional: He LOVES what he does and it shows. I got my start in games programming in the pre-internet days and articles from people like Micheal or even books like Tricks of the Game Programming Gurus were like candy to me as a kid. It seems that since the 80’s, books on programming have generally become more stuffy or process focused and move away from the love of coding. It was good to read this book as a reminder that anyone that has the lucky job of creating things, in this specific case code, has a dream job that is contantly changing and challenging! Some people might be confused why someone would derive so much entertainment out of squeezing performance out of code. I think that the days of fast hardware are making the efficiency battles less important and less fun.
I consider this the “Great Cultural Divide” that is developing within the game programming community. There are people that want to code to the metal and understand everything that makes a program tick. Then the other group wants to make the computer do something specific and the details of that are not the strict focus. Some people split these up as programmers vs. scripters. The divide to me is actually between people that like working with well defined problems and people that don’t mind creative iteration and subjectivity.
Low level programmers love direct challenges and fixed hardware environments. This allows you to craft out the best possible solution to a problem and “know” that you are close to optimal. You can measure your progress by the time taken to execute.
High level programming is mostly about making sure you are hitting the requirements of the application within reasonable performance/memory targets and getting a product that is interesting.
Even through these personality types can co-exist in the same programmer, I still find that one takes a healthy precedence. I also think that the low level programmer is changing from being assembly programmers to being C++ programmers. It is a scary thought, but the move towards having fully fledged support libraries like .NET, XNA, DirectX etc. are making it so that you don’t need as low level expertise. This means we are making more programmers into the high level programmers and I find that less are doing it for a love of code, but rather for a love of results. This changes the dynamic and feel of the workplace from loving code and learning to frustrations about what hardware can do and how annoying the coding part is to get results. Meanwhile, the low level luddites hang onto languages that take twice as long to write the code and may not end up getting things done. This is going to lead to an interesting language transition in the near future where some other language will completely dominate C++, even in embedded systems. I am interested in seeing how this evolves and what being a low level programmer will mean 5 years from now.
I also apologize for my lack of posts in the last little while. I’m packing my place up to try and sell and have been out of the house more than I have been in it!