{"id":60,"date":"2006-09-05T18:23:23","date_gmt":"2006-09-05T08:23:23","guid":{"rendered":"http:\/\/www.doolwind.com\/blog\/?p=60"},"modified":"2006-09-05T18:23:23","modified_gmt":"2006-09-05T08:23:23","slug":"qualities-of-a-good-game-programmer","status":"publish","type":"post","link":"https:\/\/www.doolwind.com\/blog\/qualities-of-a-good-game-programmer\/","title":{"rendered":"Qualities of a Good Game Programmer"},"content":{"rendered":"<p><a href=\"http:\/\/www.doolwind.com\/images\/blog\/c&amp;c.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.doolwind.com\/images\/blog\/c&amp;c.jpg\" alt=\"\" width=\"239\" height=\"133\" align=\"right\" \/><\/a>After the excellent response to the <a href=\"http:\/\/www.doolwind.com\/blog\/?p=54\">programmer\u2019s personality test<\/a> I wrote I thought I\u2019d look a little more into the beast that is a games programmer. Rather than giving a list of questions to be answered I thought I\u2019d give a list of the qualities I\u2019ve seen in good game programmers over the years. Some of these qualities extend to general software development and others to people in general. As usual feel free to leave comments or email me <a href=\"mailto:alistair@doolwind.com\">here <\/a>with any thoughts.<\/p>\n<p><strong>1. Make many mistakes, but only once<\/strong><\/p>\n<p>I thought I\u2019d start with the controversial one. On the surface it would seem better to say that good programmers shouldn\u2019t make mistakes at all, however I believe this is not the case. I first heard this idea used at flight school with the Australian Air Force where my instructor told me that fighter pilots could make as many mistakes as they liked so long as they didn\u2019t make the same one twice. He used the analogy of a large bag which holds all the mistakes you\u2019ll make in your life. He said to make sure every time you make a mistake you take it out of the bag, sloppy people then just put it back in and wait till they make it again. Successful people take it out, analyse it, and make sure they completely understand where it came from and what they can do to stop it in the future. This is some of the best advice I\u2019ve received over the years, and those that follow it often turn out to be better programmers. Everyone\u2019s deleted a file from the build machine by mistake or incorrectly integrated a file before checking it in removing previous work done to it. The important thing is that we stop and realise what we\u2019ve done wrong and make sure we understand the problem, discuss it with others if need be, and file it away to make sure we remember it in the future. This is particularly important for game programmers as we have short schedules, complex work and an unforgiving customer base. In a business app a mistake may simply mean a debit or credit isn\u2019t bolded correctly, but for us it may mean <a href=\"http:\/\/www.fatal1ty.com\/\">Fatal1ty<\/a> (Johnatahn Wendel) may not go quite high enough with a rocket jump and lose a match. Or more likely, 40% of your gamers will encounter the problem tell all their friends your game sucks because rocket jumps are inconsistent and you\u2019ll lose a lot of sales. Either way we\u2019re only human, so making mistakes is fine, so long as we learn and only make them once.<\/p>\n<p><strong>2. Actually Play games<\/strong><\/p>\n<p>I was both disgusted and disturbed when I finally made it into the industry and found out just how many game developers just don\u2019t play games. They may play the game their actually making but once work\u2019s over they\u2019ll all shuffle off home, watch TV or do some other inane activity that doesn\u2019t involve gaming. I often find the best game developers are those that go by the motto \u2018We makes games we\u2019d want to play\u2019. Even if your game development house doesn\u2019t believe in something like this, perhaps you do, and I implore you to do so. How can people that don\u2019t even play games come close to this level of devotion? I don\u2019t believe they can. Also fitting in with this quality is playing a wide range of games. Part of my dislike for World of Warcraft is the fact it\u2019s stagnating the gaming-life of a lot of players. I\u2019m all for people being passionate about a game, but I think gamers, and especially game programmers need to keep an eye on all the different games that are out to make sure they don\u2019t get too focused on a particular game or style, homogenising the games they make.<\/p>\n<p><strong>3. Be fluent in the language they\u2019re using<\/strong><\/p>\n<p>This is kind of a no-brainer, but notice I used the word \u2018fluent\u2019. I believe there are a number of levels of skill a programmer can have in a particular language and with software development practices in general. To paraphrase, being fluent means you can think about any concept that\u2019s in general use in games today and given enough time you can create a program that will perform that task. The created program should naturally be maintainable, robust, correct and optimized. When I began game programming I wasn\u2019t fluent in C++ and this showed. It took me a number of years of coding in my spare time and then full-time for a while before I reached that level and it has completely changed the way I work. Reaching this goal doesn\u2019t take countless years, but it does take dedication and passion (but that\u2019s for point 5).<\/p>\n<p><strong>4. Ready to learns from others<\/strong><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.doolwind.com\/images\/blog\/carmack.gif\" alt=\"\" align=\"right\" \/>Being fluent in a language doesn\u2019t mean you\u2019re a perfect programmer, in fact I think there are quite a few levels above \u2018fluent\u2019. These levels are for another article; however the important point is that chances are you don\u2019t know everything there is about game development, nor about software development in general. I\u2019ll be the first to admit there\u2019s far more I don\u2019t know than I do, so the important thing here is that you are willing to learn from others. Even if you are the technical director of a company, or John Carmack himself, I believe that you will be able to learn something from nearly any other competent programmer out there. The great thing about being human is that we are all shaped by our own lives, so no two people are the same. Even if you\u2019re the greatest AI programmer known to man and you could make <a href=\"http:\/\/en.wikipedia.org\/wiki\/Skynet\">Skynet<\/a> if you just quit work and put your mind to it, a student fresh out of school will have a different experience with programming and may show you a technique that he\u2019s just come up with for making sure your robots don\u2019t turn on mankind and destroy the world. I said at the beginning of this article that some of these qualities apply to life in general, and this is one of them. I believe that if you go through life listening to people and learning from them, and their mistakes, you\u2019ll come out a better person at the other end.<\/p>\n<p><strong><br \/>\n5. Passionate about software development<\/strong><\/p>\n<p>I touched on this in #3 as I think it\u2019s the most important of the qualities. You really have to be passionate if you want to be able to become fluent in both the language your games are written in and in general game and software development practices. If you take game programming as just a job then you\u2019re not going to be able to stick it out for the long term and make awesome games. I\u2019ve seen people who are excellent C coders who want to make games as it\u2019s a bit of a challenge to them. They write some awesome code, but it just seems to be missing something, that intangible \u2018it\u2019 that makes certain games awesome and others just boring. From what I\u2019ve seen, for most people this passion is born out of a passion for playing games. As I was growing up I lived and breathed games, reading every magazine I could and visiting the hyperactive website every day to find out any news or secrets I could. As I became older I started having ideas for how to make the games I was playing better and ideas for entirely new games. I think passion is the single biggest factor that helps me to move forward and try and become the best games developer I can. This isn\u2019t something you can learn or read books to attain, it\u2019s just something that you either have, or you don\u2019t. So whether you\u2019re in the games industry or hoping to make it one day, please remember that passion for the games you play and make is your strongest quality. Make sure you nurture it by continuing to play and love games and never shut out the little part of your brain that is constantly coming up with ways to better the industry and drive it forward into the future.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>After the excellent response to the programmer\u2019s personality test I wrote I thought I\u2019d look a little more into the beast that is a games programmer. Rather than giving a list of questions to be answered I thought I\u2019d give a list of the qualities I\u2019ve seen in good game programmers over the years. Some <a class=\"more-link\" href=\"https:\/\/www.doolwind.com\/blog\/qualities-of-a-good-game-programmer\/\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[33,5],"tags":[29,112,37],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-game-development","category-games","tag-game-coding","tag-game-development","tag-game-programming"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pgEc5-Y","_links":{"self":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":0,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}