Experienced Points: So You Want to Be a Game Developer, Part 2

By Shamus Posted Tuesday Mar 10, 2015

Filed under: Column 119 comments

We’re a little more positive this week. It’s not all doom & gloom. People can and do get jobs in this industry, and some of them even make a living at it.

And now for the stuff that wouldn’t fit into the column:

When I was younger I thought I was good at codingFor the purposes of this discussion, let’s just assume this is true. because I had a special knack for it. But after trying to teach some other people to code, I’ve come to suspect that the secret to success isn’t some special form of intelligence, but an oddball affinity for the process of coding. I’ve seen smart people – people smarter than me – crunch up their faces at simple coding problems and refuse to think about it. “I’m not good at this,” they say.

It’s not that they tried to figure it out and failed, it’s that they find the problem completely uninteresting and have no desire to spend time thinking about it. It’s true that they aren’t good at it. But nobody is “good” at coding at first. The problem isn’t that they don’t know how to code, it’s that they have no interest in learning.

When I was young I had an Atari 2600. It came with a brochure for all the games you could buy, and one of them was Atari BasicI never got Atari Basic, which is good. It was apparently awful.. I was maybe 10 or 11 when I saw the advertisement depicting a few lines of BASICIt wasn’t proper basic, but I didn’t even know there WAS such a thing as “proper Basic” yet. code. I felt this overwhelming need to understand those mysterious lines of text. I had this strange feeling of anxiousness. This was happening. Somewhere out there were people who understood this stuff, and I didn’t know how to become one of them. It’s not that I wanted a job, or wanted to make games, or was interested in self-education. I was interested in coding for its own sake. (Although I did like games and I understood that having a job was a good thing.)

Once I learned to code, I thought about it all the time. I thought about it in school, on the bus, in the car, at dinner, or anywhere else where there was Real Life stuff between me and the hours I would get to spend coding.

I’m not suggesting that you need to have this weird obsession with code in order to program. But I am saying that it’s not all about smarts. Imagine how much easier it would be to do your daily workout if you loved the experience of exercise. Imagine how easy it would be to keep a tidy house if you loved to clean. How much easier is it to learn an instrument when you’re practicing because you love doing it, and not because mom says you have to practice for at least 20 minutes every day when you get home from school?

So my real career advice is this: See if you can figure out what that thing is that you have passion for. Do that for a living.

I realize this boils down to the old advice of “Find a job you enjoy doing.” And I guess it is. But it’s important to note that the benefit isn’t just in having a job you like to do, but also in the fact that if you like it, you’re likely to get really good at it.

Don’t sweat it if you can’t find that thing. If I’d been born 50 years sooner, I wouldn’t have been able to discover my own love for coding. You don’t always discover your thing in a moment of revelation like I did. And even if you do find it, it’s not a guarantee of success. If your passion is for acting, or playing sports, or painting, then the odds of you making money at that are pretty lowOn the upside, if you DO make money at these, you’ll probably make a LOT..

But as you grope around, looking for a career (or how to improve the career you already have) look for passion. Sometimes passion looks like creepy obsession to others. If you’re trying to figure out what kind of game developer you want to be, try a little of everything and look for the activity that tickles your brain. And don’t beat yourself up and or assume you’re dumb if you can’t code. We are all good at one thing, and bad at many things. There’s no shame in not being able to code, unless you decide to become a coder for a living. And yes that is apparently an ongoing problem.

To complete the lesson, later this week we’re going to return to Good Robot and I’ll talk about a bone-headed mistake I made.

 

Footnotes:

[1] For the purposes of this discussion, let’s just assume this is true.

[2] I never got Atari Basic, which is good. It was apparently awful.

[3] It wasn’t proper basic, but I didn’t even know there WAS such a thing as “proper Basic” yet.

[4] On the upside, if you DO make money at these, you’ll probably make a LOT.



From The Archives:
 

119 thoughts on “Experienced Points: So You Want to Be a Game Developer, Part 2

  1. Da Mage says:

    I think the biggest mistake younger people make is that because they enjoy playing games they believe that they would enjoy making games or doing game design. I enjoy playing games, but I really like deconstructing a game to figure out how it’s underlying parts work as well. When I am hobby programming I much prefer to work on a system in my game engine rather then try and design the game that would run on it.

    If you aren’t asking the questions of “Why is this good?”, “How does this work?” and most importantly “What would I do differently?” then maybe you aren’t as into game design and development as you thought.

    1. Bropocalypse says:

      Yeah, it’s kind of like assuming that because you enjoy eating fried food you’d enjoy a job at a fast food joint… Of course, there are some who do.
      I enjoy playing games, and I do enjoy coding. But, I no longer feel like it’s what I’d want to do for a living. It’s another hobby for me, essentially. Sort of free-form puzzle solution. For me, the game is the craft itself. That’s what’s critical, finding out if you enjoy the work in of itself. It’s a good idea for anyone to try all sorts of things to find out what they enjoy. I feel like everyone has something they love to do that 90% of everyone else would find tedious and frustrating.

    2. Trix2000 says:

      Its not only that, but there’s also the busywork aspect of game development – it’s not all designing elegant systems and tweaking mechanics. Sometimes you just gotta make some menus and come up with convincing dialog, and that can get tedious if you’re not into that sort of thing.

      It’s worth it in the end, but hard to keep sight of that goal when you don’t have a lot of interesting results to look at.

      1. Eric says:

        I am one of those crazy people that actually likes the boring stuff. Doing UI flow, figuring out controls, etc. is actually pretty interesting and can present some cool challenges that you’ll have to figure out solutions for. And defining the main way the player engages with a game’s systems is one of the most important parts of design.

        And for other even more mundane things, there’s something vaguely hypnotic about being able to just put on some music, zone out and do an otherwise repetitive task for 5 hours straight.

        1. Wide And Nerdy says:

          I’m really glad someone has a passion for that because its so important and so often overlooked by developers. People think you can hack together a good menu just because you can code but thats like saying you can design a house just because you’re a skilled carpenter. Having one skill might help with the other but its a different discipline.

          This is not to say that you can’t be good at both. It just requires some investment.

    3. Felblood says:

      Another major pitfall is the one for people who assumed that because they enjoy crafting experiences out of rules, they will enjoy expressing those rules though computer code.

      I expect we’ve lost a lot of great videogame and boardgame designers, who missed their calling trying to be mediocre videogame programmers.

      Likewise, I’ve know a few guys who are actually brilliant at coding engine guts, and yet have no talent or real interest in the human-interface side of things. Story, characters, art, and even the game mechanics are just things that they need to have to do the part of the job they enjoy. They just want to make the computer draw tanks on the screen; they don’t care where they’re going, or who’s driving them or why.

      It’s always been my wish that I had enough money to hire these guys, and yoke them to making my own visions into reality.

  2. Attercap says:

    I completely agree with your assessment of coders coding–and really, this fits for any particular profession. These things take more than just intelligence, there’s a certain knack or interest that a person should have, too. This goes for physical skills, too, and it’s why the majority of athletes aren’t good at all sports. (Michael Jordon is an anomaly!)

  3. Lachlan the Mad says:

    Guys, guys, guys…

    “I’m a middle-aged guy who has yet to ship a title. (Although my game might hit Steam Greenlight this month.)”

    YES PLEASE GREENLIGHT FOR GOOD ROBOT THANKYOU

  4. David says:

    What I find weird is the people who can demonstrably write code, but who can’t debug problems. I’ve met them.

    The best model I can come up with for how they must interact with their job is that they treat it like magic, and they know some “spells” which produce results, but if it doesn’t work then they can just shrug and say “well, it’s magic isn’t it?”

    1. Bropocalypse says:

      Writing code is a heck of a lot easier than reading it, even when it’s your own. This is why we have code comments, and it’s good practice to use them on everything, no matter how seemingly obvious the code seems now.

      1. Robyrt says:

        I’m one of the rare people for whom it is easier to read code than to write it. I’m a technical writer these days, so all my actual programming experience is a decade out of date, but I can generally get the gist of what someone’s trying to say in their code. But yeah, in general, comments make life better.

      2. nm says:

        Comments are great and all, but bad comments are worse than worthless and good code structure is more important than good comments. It is not good practice to comment everything. Example:

        if (foo) // Check to see if foo is not false.
        doStuff(); // Call the doStuff function.

        I’m pretty sure WordPress will mangle the indentation there, but that’s why I chose C not Python. Worse is when comments get out of sync with code. Then they’re like sabotaging future readers.

        Anyway, much better in my stupid example above would be useful variable and function names. Those don’t need comments and the compiler will help you with them sometimes if you try to use the wrong ones. Granted, these things have similar problems to comments (yes, I’ve seen functions named after things they don’t do) but good practices can only get you so far. Sometimes you need good programmers too.

      3. Chamomile says:

        My policy, thanks largely to Shamus, is to treat every program I write as though it is a tutorial. I write comments explaining how if/else functions work the first time one shows up in each program I write. Better to over-explain than under-explain.

    2. Downie says:

      There’s a mindset where some people have an unhealthy level of confirmation bias. When they put their code to the test, they try to create tests that the code will pass, where they should be trying to find tests that the code will fail in order to reveal problems that need fixing. They assume that any given bit of code will do what it was intended to do, rather than looking at it and trying to find flaws. Their ego sabotages them, because they hate finding evidence of their own failure.

      1. Richard says:

        That’s not an “unhealthy” level of confirmation bias, it’s called “being human”.

        For example, how often do you spot typos in you’re written word, and how often do you see them in the prose of others?

        It’s simply very hard to read what you actually wrote, instead of what you think you wrote. That’s why important prose has proof-readers, and important code has pair-programming, code review and testers.

        Deliberate error is deliberate.

        1. Chamomile says:

          “how often do you spot typos in you're written word”

          Intentional?

        2. Wide And Nerdy says:

          I wasn’t sure if your intentional error was “you’re” or omitting the comma in the last sentence (different style guides differ on whether the comma on the last item before the “and” is necessary. I learned from a pro proofreader.)

          I’ve seen so many self-demonstrating proofreading jokes, I reflexively proofread anything about proofreading now.

    3. Patrick the Bludgeonist says:

      This might not be an exact analogy, but…

      I’ve met lots of people in other professions that have the same issue. Only being able to succeed in 1/2 of what their job title would suggest. Engineers that I work with are capable of designing a 5 ton lathe, but horribly ill-equipped to go out on the shop floor and build the machine they designed. Doctors that are excellent in treating known ailments but horrible at diagnosing them.

      I dated a girl once that was a clinical dietician at a hospital. Her job was building a diet for people with special dietary needs at a Veterans Hospital. She was a horrible cook. She sucked at making toast. I mean….even Shamus can make toast.

      Point is…writing and de-bugging aren’t necessarily the same thing. I’m sure even Stephen King has a copy editor.

      1. David says:

        I think that debugging is a more core part of programming than those examples suggest, though.

        To rephrase them: Engineers who can design a 5 ton lathe, but can’t tell why it catches fire when you try to use the sanding attachment. Doctors who can treat known ailments, unless their scalpel was given to them upside down, at which point they can’t work out how to make an incision or why their fingers are bleeding. The dietician who can build a diet, but not see that it’s not working because the patient loathes apples and isn’t eating the diet as given to them.

        Debugging isn’t just fixing a newly discovered problem. It’s understanding the code you are in the process of writing, and why it’s doing what it does. Unless you’re on a team which has ivory tower designers who spec out the system and then hand it off to pure implementation programmers, the job of necessity involves both aspects.

        1. Wide And Nerdy says:

          They’re definitely two different types of thinking though. I realized this when I was still struggling with coding (I arguably still am in some cases) yet feel right at home debugging . . . because debugging feels a lot like troubleshooting, something I did for almost 5 years as a help desk employee.

      2. StashAugustine says:

        given the length of his recent books perhaps not

    4. Cybron says:

      “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” –Brian Kernighan

      I find debugging requires a great deal more self-discipline than coding. Coding is fun, debugging is not (for me, anyways). Simple as that. Too bad debugging is vitally important and all that.

  5. Samrobb says:

    Typo: “borcure” –> “brochure”.

    I only noticed the misspelling because I wanted to quote that paragraph as a perfect description of my own start in programming. You really, absolutely nailed it.

    1. Wide And Nerdy says:

      I want to “borcure” something. That sounds delicious.

  6. John says:

    Coding requires systematic thinking. You need to understand what you want the computer to do before you can write instructions that tell the computer how to do it. That’s not a comfortable or natural way of thinking for some people, hence brain shutdown. I’ve seen people have the same sort of reaction toward math. It’s not that they can’t do it, it’s that they don’t like it and don’t see why they should have to do it. Brain shutdown can also be a response to (perceived) overwhelming complexity. I get it myself every year around this time when I print out Form 1040.

    1. Echo Tango says:

      OMG, taxes. The worst part (at least up here in Canada) is that you have to fill out one form part-way, then use that number to fill out another form part-way, then go to a third form and finish that part-way again, and you can’t finish any of the forms until they’re all like, 4/5 done! :C

      1. Arstan says:

        That sounds like a classic quest puzzle )))
        Thank god for form 910 in my country – way easier

      2. John says:

        That is generally also true in the United States. If you want any of the really good tax breaks, you’re looking at multiple forms. If you’re self-employed, or even if you do just a little bit of contract work, you’re looking at multiple forms. If you get dividends or received capital gains, you’re looking at multiple forms. God help you if you own real estate, especially farm property.

        I finished doing our taxes earlier this week, and it wasn’t too bad. (My family falls into just a couple of the categories above.) But taxes haven’t been easy since I was straight out of college.

      3. Trevel says:

        You mean, some forms are subroutines of other form, called with a variable from the first form? Sounds pretty straightforward to me.

    2. Bryan says:

      Not just systematic thinking, even. (Though, yes, that’s a big chunk of it.)

      You have to be able to break any problem down into very small parts, and tell the computer exactly how to do each part.

      You have to be able to separate what you *thought* you told the computer to do from what you *actually* told it to do. When debugging, read the code you wrote, not the code you were thinking about at the time. Play dumb. …Really, really dumb. The CPU is fast, but it’s really, really dumb…

      1. Ingvar M says:

        This is why cat / rubber duck / teddy bear debugging works.

        If you haven’t heard of the technique, grab a cat / rubber duck / teddy bear. Point its adorable little face on the screen and explain your code to it, in terms it can understand. You are most likely to find your problem.

        1. Cybron says:

          We have a code donkey at work.

          It’s a little plastic donkey you have to explain your code to before you’re allowed to bug someone else to help you.

      2. John says:

        I find that coding is a bit like teaching a child to tie shoes. I haven’t consciously thought about how tying shoes works since I was a kid myself. In order to teach my daughter how to do it, I had to stop, consciously think about it, break it into steps, and explain it using language appropriate for a 5-year-old.

  7. bloodsquirrel says:

    It’s actually been observed that there’s a “double bell curve” when it comes to programming. It’s something that some people just get and some people don’t.

    I guess it just requires a certain combination of highly abstract and immediately concrete thinking that some people can’t reconcile.

    1. MadTinkerer says:

      My impression is that programming is actually two kinds of skill. It’s a logic / reasoning skill with a side-order of math, but it’s also a language skill. A solid understanding of English grammar (or whatever grammar your native language is) can help you parse your own code and understand documentation easier.

      You’re communicating with an intelligent but absolutely strictly logical mind which will follow your precise instructions but has no understanding of your intentions. (Computers are intelligent but incomplete minds and are incapable of subjective reasoning. Thus, they can understand everything that has been explained to them but only everything that has been explained to them.) You have to express and organize the very specific instructions, but those instructions can be essentially anything that you can explain in specific terms. Some people just aren’t good (or patient enough) at coming up with original, explicit, explanations that are appropriate for the task in question.

      Programming is, in part, a communication skill, but requires a lot more effort than communicating with humans.

      1. Echo Tango says:

        It’s not that computers are “intelligent”. They’re not. In any way. They’re completely stupid, but blazingly fast, and pre-programmed to solve certain problems instantly. They’ll follow your exact instructions to the letter, and if you mis-place a letter, well that’s your fault for not giving them correct instructions.

        Lots of people can’t handle having to follow explicit instructions, and thus also have trouble producing explicit instructions. That’s what’s needed, though. I think most of our education from 0-high school, involves being able to think outside the box. There’s very little practice, however, with systems that will follow your exact instructions, even when they’re wrong. Part of the reason why the Raspberry Pi and other systems exist – to expose humans to this way of thinking early on, before it’s an expensive choice of post-secondary education.

        1. Khizan says:

          I usually use the peanut butter sandwich method of explaining this to people, confused aspiring programmers especially. Just ask them to tell you how to make a peanut butter sandwich and then interpret their instructions 100% literally.

          1) Put the peanut butter on the bread.
          –> Puts jar of peanut butter on top of loaf of bread.

          Okay, try again.

          1) Open the peanut butter
          –> Opens jar of peanut butter

          2) Get one slice of bread
          –> gets one slice of bread

          3) Get some peanut butter on the knife
          –> places jar of peanut butter on top of knife

          It can take FOREVER for some people to describe making a peanut butter sandwich in a way that will make it through a literal interpretation of the instructions. I find it helps to do something like this to take the computers out of the context and get them thinking about the importance of precise instructions.

          1. Arstan says:

            You should stop on “Get some peanut butter on the knife” line, since knife is not defined)

            1. Daemian Lucifer says:

              Only if the knife is still in drawer/knife stand and not taken out.

            2. Wide And Nerdy says:

              He didn’t ask for the bread or peanut butter to be defined either. I guess part of the problem with the example is figuring out how literal you want to be. Probably only as literal as you need to be to get the point home. Which I guess means you do want them to define what those three things are. In fact you could define a “loaf” as an object containing an array of bread slices.

              You could also have the students write conditional statements to account for things like whether or not there’s a slice of bread already on the plate.

              So
              This is loaf.
              Loaf contains Slices of type Bread
              Loaf contains container
              Container has states “open” and “closed”

              This is knife
              Knife contains handle
              Knife contains blade

              This is Jar
              Jar contains Lid
              Jar contains Peanut Butter
              Jar states are “open” and “closed (default)”
              Open Jar is defined as “If Jar state is closed, rotate lid counter clockwise 360 degrees, lift lid, if jar lifts with lid, rotate 360 more degrees, repeat until lid lifts without jar.”
              and so on and so forth (feeling pedantic today)

          2. Wooji says:

            This was essentially what my current programing course did and it helped me alot in understanding programing.

            For each program we are to write we first have to do a smal report answering a few questions about the concepts that particular program is meant to teach us and then we have to describe step by step the algorithm for the program.

            Having to write this out in plane language before beginning the code has given me a much better ability to create functional code and programs then i had before.

        2. MadTinkerer says:

          See, here’s the problem: You say “It's not that computers are “intelligent”. They're not. In any way.” and then you say “They'll follow your exact instructions to the letter”.

          You’re saying that the following is not intelligence:

          Quantitative reasoning
          memory storage and retrieval
          sensory processing
          Deductive reasoning

          These and others are things tested for in IQ tests. If computers are not intelligent in any way, then all things that computers can do should be excluded from intelligence tests because in those cases you’re not testing for intelligence.

          1. Purple Library Guy says:

            I don’t see any deductive reasoning involved in the task of “following precisely specified instructions to the letter”. I didn’t know what you meant by “quantitative reasoning” so I looked it up. I don’t think that’s happening either. Quantitative reasoning is not calculation; rather, the “reasoning” part lies in figuring out how calculation can appropriately be applied to a situation to yield useful information. A computer program is precisely designed to remove any need for quantitative reasoning by specifying exactly what calculations to perform.

            As to “sensory processing” and “memory storage and retrieval”–sure, those probably should be excluded from intelligence tests. That’s probably impossible actually, but they should not be deliberately tested for, at least. Anyhow, “intelligence tests” aren’t, and nobody should use what they do as a validator of anything involving defining intelligence.

            I would say that, while memory isn’t something I’d consider a genuine part of intelligence, it can be underestimated too. People’s intelligence works with the mass of information they’ve digested, creating connections, extrapolating, doing weird stuff. Being able to remember and so accumulate a database to operate on is perhaps a precondition for intelligence to be very useful.

            1. Patrick the Bludgeonist says:

              Aaaand the pants are off.

              1. Purple Library Guy says:

                Huh?

          2. Daemian Lucifer says:

            Um,computers dont poses either quantitative reasoning,nor deductive reasoning,and memory manipulation and sensory processing arent measured by intelligence tests.They are used by intelligence,but they arent part of it.

          3. Echo Tango says:

            Computers don’t do any kind of reasoning; They just have programs which can simulate that behavior in simplified situations. Also, memory storage and sensory processing do not require any amount of intelligence. A VCR/tape-deck/etc is not thinking when it stores/retrieves information from its storage; It’s just doing exactly the steps it was built/programmed to do. So, no, computers aren’t intelligent.

    2. Brett says:

      There was an interesting paper about this (that I can’t find anymore, arrrgh!). It was these two CS professors who gave incoming students a pretest before they’d learned any coding at all. It was all dirt simple things like:

      int a = 2
      int b = 3
      b = 5

      What are the values of a and b?

      And then they correlated answers on this test with grades in the class. They found the double hump — two distinct populations, one that can program and one that can’t. And the upper hump were people that had consistent answers on the pretest. Note – not correct answers. Some of them got all the answers wrong. But they got all the answers wrong in the same way — they came up with a model for how these crazy symbols worked that wasn’t the right model. But hey, they hadn’t learned it yet! The bottom hump weren’t consistent, they didn’t have any model, even a wrong one.

      1. Echo Tango says:

        Here’s a blog-post discussing it, and here’s the paper. ;)

    3. Daemian Lucifer says:

      It's actually been observed that there's a “double bell curve” when it comes to programming. It's something that some people just get and some people don't.

      That sounds so much better if you replace “double bell curve” with “breasts”.And its not even much of a stretch to do that.

      1. Kian says:

        “It's actually been observed that there's a “breasts” when it comes to programming”?

        No, I don’t think it works quite as well.

        1. Daemian Lucifer says:

          Who do you think was responsible for the internet?Programmers.And internet is full of naked breasts.So yes,breasts are there when programming is happening.

          Also,the second sentence.

        2. Purple Library Guy says:

          Well, OK, but say you tweak for grammar.
          “It's actually been observed that there's a pair of breasts when it comes to programming”
          or
          “It's actually been observed that there are breasts when it comes to programming”

          Those do still sound weird, but in isolation the version with “double bell curve” doesn’t make any obvious sense either.

  8. MadTinkerer says:

    When I was a young child, my father worked for Sperry Univac (we still have Sperry Univac fridge magnets), GE, and a few other companies. Because of his position as some kind of software engineer/architect (his title changed at least once every two years), he would bring home lots of personal computers. I wasn’t allowed to touch them (because it makes sense to not allow a three year old to touch a $10,000 machine unsupervised), but I got to see a lot of them. How many exactly? Well about half of the things on display at Vintage Computing Festival East were things I remember seeing in real life as a kid. They were in the office for a few months or years and then gone before I was old enough to try them.

    As neat as this all was, I was under the not-completely-inaccurate impression that programming these computers required a math and/or electronics degree like my father had, and I didn’t even know BASIC existed at first. I did eventually get to play Asteroids and Frogger and a bunch of the earliest educational software on my Apple II (my particular Apple II had a Franklin 1200 logo on it, but in my mind the fact that it ran Apple II programs was more important than corporate branding). Then in ’87 or ’88 I saw this commercial. We didn’t actually have a Commodore 64, but the line about “draw, program, even do music” was mind blowing. Never mind all the fancy visual effects, this commercial was suggesting that KIDS COULD DO PROGRAMMING. Furthermore, that programming was on par with drawing, which is something I knew I could do well (for an eight year old). Because of this, my father was all but forced to let me learn BASIC when the Apple II (Franklin 1200) was given away and my father wanted me to learn how to use an IBM Compatible.

    Tragically, I had just missed the golden age of BASIC game programming, with hardly any magazines still listing BASIC programs to type in yourself. But there were things like Adventure Game Toolkit (the text adventure engine written in PASCAL) and Visual Basic (terrible for arcade games, not completely terrible for making extremely basic point & click games), and eventually Dark Basic and Klik & Play. For a while I was looking into maybe making something in C++ because that’s what I was learning in college before I dropped out but SCREW C++ for all the reasons Johnathan Blow said and then some.

    I missed out on ZZT and Megazeux because somehow I missed the fact that they had editors and weren’t just more levels for Caves of Thor and/or Kingdom of Kroz. I’m still kicking myself for that.

    Anyway, tonight I’m actually working on a roguelike in Game Maker. I was originally intending to enter the 7DRL competition, but I’m not going to have enough time to finish. It would be super nice to do this instead of my day job for a number of reasons, but I’m not quite at the point where I should even consider trying to charge money for something I’m making. But actually making a complete roguelike (this time), even if it takes a while, is probably good practice for maybe doing something people might be willing to pay me to do.

  9. Decius says:

    I bet that if you didn’t find coding you’d have found some other branch of abstract mathematics.

    Yes, coding is part of mathematics: Ada Lovelace, Charles Babbage, and Alan Turing were mathematicians, and they (re)invented the concept of computing machines that follow instructions.

    1. swenson says:

      I wonder about that, sometimes. What if I’d been born in a century without computers, what would I have done with myself? I’m honestly not really into math, more the problem solving and analyzing systems.

      Then I remember that as a woman from a middle-class family–i.e., not rich enough to be an eccentric mathematician–I would’ve been a housewife either way. Welp, answered that question, I guess. :P

      1. MadTinkerer says:

        I probably would have gone into fiction writing or art. I might well not have been good enough at either to make a living, but that’s what I would have tried to do in a computer-less world.

    2. Shamus says:

      True. Although statistically I’d probably have ended up as a really mathematically-inclined farmer or carpenter.

      Or died of dysentery.

      1. silver Harloe says:

        Given your allergy situation, I’m pretty sure you’d’ve died of living.

        Thankfully, you were born just at a good time to get the right diagnoses and treatments, with just the right amount of technology to live mostly safely indoors.

        1. Daemian Lucifer says:

          Im pretty sure he was referencing oregon trail:

          the phrase has since become a classic catchphrase used by old school video game fans on the web.

        2. Downie says:

          Allergies are often caused by growing up in extremely hygienic surroundings, so it’s not guaranteed they’d be such a big problem in a more primitive environment.

          1. Daemian Lucifer says:

            True.But there is the genetic part to it.So if Shamoose were born 200 years ago,he would either die as a baby,or not have any serious allergies.

            1. Ahiya says:

              Not true, actually. There are studies going both ways – currently, we can only say that there’s a correlation between allergies and 1st world countries, which could be related to multiple things. For one thing, as you pointed out, in 1st world countries kids with allergies live long enough to be diagnosed. Shamus would probably be in the significant percentage of kids who die of seemingly trivial illnesses before they can communicate.

              1. Daemian Lucifer says:

                Environment still plays some role in it,however.Just how you can build tolerance to poisons and diseases,you can build tolerance to allergies as well.Though its not recommended to attempt it if you have severe ones,but milder ones can be done away with by exposing your body to controlled quantities.

      2. Patrick the Bludgeonist says:

        Like everyone else you would have been a steelworker and hated it, but you would have unique reasons for hating it. You would have also sucked at being a steelworker.

        I would also have hated it, but at least I would have been awesome at it.

      3. Galad says:

        I’m getting flashbacks to the “Would you have survived the 19th century/The Middle ages/whichever old epoch it was” post :)

    3. nm says:

      It’s not really true that coding is part of mathematics. Computer science is a branch of mathematics, and the people you mentioned above were computer scientists. Writing code is engineering, and engineering is applied science. Math is a science, CS is a science (thus the name). Sometimes computer scientists will build things (like Haskell) to facilitate their research, but the people who use the computer scientists’ work for practical applications (like games) are engineers.

      The argument has been made that physics is applied math, and chemistry is applied physics and biology is applied chemistry, but all those fields have engineers who apply their work.

  10. swenson says:

    Programming is such a fascinating thing. So many people are just incapable of “getting” it–not because they’re not smart enough, but they just aren’t naturally wired that way. But me, the first time I ever cracked a book on programming (it was a book on BASIC that I got from the library when I was fourteen, I can still picture the tiny shelf in the library that held the very few programming books they had!), it just clicked. It’s not like I instantly understood everything forever, but it just… made sense to me.

    I dunno, man. Programming is special to me. I was one of those kids who changed what I wanted to be when I grew up every week, but when I started programming, it was all over. I was gonna be a programmer, no matter what. I wouldn’t say I’m a good programmer, not by a long shot, but at this point, there is nothing I would rather do with my life.

  11. Ilseroth says:

    While I’d say my preferred spot is as a game designer, I am working on a project (which I hope can be turned into a game proper) and you have to wear so many hats in a solo project that is 3d.

    Thankfully I went in with years of programming experience from highschool and a bit of college, so, since i am using unity, it is mostly figuring out their API, what works and what doesn’t.

    Programming is an interesting experience to say the least. Since I started work on this project I have been delaying making 3d models. and my design concepts are mostly bolted down until I get to the iteration process so I have spent I’d say about 30-40 hours coding the last week or so, and pretty much whenever I wasn’t coding I was thinking about how to solve the problems I was having with coding.

    Programming seems to draw those into logic puzzles because like that really is what it is in a nutshell. Figuring out which levers and knobs affect the things you want and how and when to pull them.

    3D modeling is honestly kind of mind numbing for me. I mean it is cool, but just comes down to a lot of time and fiddling. I mean, I am not particularly terrible at it, but the amount of time you have to put into making a *good* model is.. frustrating. Not to mention unwrapping models well is can be just as time consuming. I feel awkward whenever I am modeling because I feel like I can make much progress on the project if I am coding and just make box models.

    2D work I find less frustrating but I don’t think I could ever make a purely 2d game. 2D sprite work takes forever, and I am far too anal retentive to not adjust every single pixel to be the way i want it… which is fine when a sprite is like, 18×18 pixels… but if you are trying to draw a proper modern high def sprite… I don’t have the talent… though having some kind of drawing tool other then a mouse it would probably help.

    Animation work is awkward, but then I was working in blender and their animation tools seem… counter intuitive? Not to mention it seeming to randomly decide to delete animations doesn’t help. I’d say this is similar to 3d modeling to me in that it takes a long time; but if you know *how* to do it, you can get pretty much what you want out of it.

    Sound stuff I haven’t really worked on yet, I know there is a lot of freeware banks; but I’d rather see what it takes to build the sounds myself.

    As for game design, I mean, I boil ideas in my head on simmer for years; this is one of my first real attempts to make it into a reality. Designing systems for how to make a game fun is fantastic but not having a project get to the point where you can iterate off the design is frustrating. While I can probe concepts and designs in my head, until I can test them proper I don’t know if those designs will work or not.

    That’s kinda the problem with being chiefly interested in the design process of making the game. If you are taking the development process on solo; there is just so many steps between the design concepts in your head and seeing them in use and being able to iterate on them in game. The worst part is when you find some kind of… hindrance to your concept because of your personal capability at coding, or modeling or so on. I have abandoned several projects when I realized I just wasn’t skilled enough yet to actually bring them to fruition.

    That’s why my current project is purely coding and design. The characters are all super duper basic, the animations are simple, the textures to this point are literally *all* just unity materials with a set color so far (though I do want to draw textures at some point when the project is past the coding and design phase.) just want to push past the initial work barrier so that I can work on implementing the design… and I am nearly to that point actually so I am pretty excited… Though at some point I am going to have to buckle down and churn out some 3d Models for the game; probably next week.

  12. Slihgtly off-topic but probably of interest to you Shamus.
    A forum post by someone who was a intern at Nvidia, and who seems to have some knowledge about Mantle and the upcoming Vulkan graphics API.

    http://www.gamedev.net/topic/666419-what-are-your-opinions-on-dx12vulkanmantle/#entry5215019

    An interesting read.

  13. Cable Pizza says:

    Considering that programming is still pretty new to me (I’m a senior in high school and I started learning c++ in late middle school), I remember somewhat vividly how it felt not to understand code. There was this long period of nearly a year where code was still “magic” as others have noted. I reused various algorithms, and “#include ” and “using namespace std;” were things that just got put at the top of the code because, well, that was what made it work. I quit using c++ and moved to c# and at some point everything just clicked. It was like waking up one day and suddenly all these strange symbols seemed perfectly logical. I’ve since used java, python and various other languages, before returning to c++ and I’ve found that it seems much less daunting now that I understand the intricacies of the concepts and simply need to pay attention to the syntax. I think many people who have trouble with programming would benefit from a language agnostic learning environment, as that allows connections to be drawn between concepts rather than being mired in the syntax of a single language.

    1. nm says:

      That’s an argument I’ve seen for Scheme as a teaching language. There’s so little syntax that you really just have to learn the concepts. Once you’ve got those, you can move to languages with more syntax and learning new languages becomes more of a “how do I spell this” than “how do I do this” process.

      That said, I learn new languages with the goal of learning new concepts. Being a blub programmer is lame.

  14. I’ve run across a substantial number of youngsters starting out who have just a terrible time deciding what to pursue–there’s a big expectation that late-teens-early-twenties people should “just know” what they want to do. It’s not true, particularly if you have psychological hangups that are a.) common and b.) can make it spectacularly difficult for you to analyze your own emotional reactions to what you’re doing. It’s not enough to know that you enjoy doing X, you also need to be able to analyze WHY you enjoy doing it, at least to the extent that you can identify if it’s attached to other problems and issues.

    Sometimes the answer to the question “what do you have a passion for?” really, truly is “I have no freakin’ clue”. And THAT IS OKAY. The solution is to go ahead and see what’s out there–preferably in a way that if you fail it’s not too costly.

    College is a situation where failure IS costly. Enormously so–to the point where I would now say to anyone “if you are in that ‘I don’t know’ boat, do NOT go to college.” Four years and $40,000 is not an experiment that many can afford.

    1. Ingvar M says:

      Oddly enough, I am (and have been, for my entire working life) in one of the three fields of endeavour I envisioned myself working in, in my mid-teens.

      Not quite doing what I thought I would be (I thought I would be “a programmer”, whatever that meant to 15-year-old me; I am a site reliability engineer, which is “a fair chunk of coding, a fair chunk of systems administration and a big horking pile of reasoning about distributed systems”), but recognisably not very far off.

      The two fields I didn’t pursue were “chef” and “military officer”. I am really happy I didn’t choose the officer line of work, but sometimes I long for the kitchen.

  15. Daemian Lucifer says:

    We are a culture that loves to consume art and hates paying for it

    Thats not quite true.More accurate way of looking at it would be that we have erected industries that hate paying for it,but we collectively do.This can be seen by all the kickstarters and patreons.People do want to give money to artists,but until recently they simply lacked the means to do so.

    1. Patrick the Bludgeonist says:

      I’ve always thought we are a culture that loves to call whatever-it-is-we-happen-to-be-good-at “art” as a means of justifying our mindless obsessions.

      I actually found a website once that tried to promote things constructed in Minecraft as “architectural wonders”. As if BonerZ-420 re-creation of the Sphynx changed to look like ALF smoking a joint somehow makes him John Roebling.

      All art is creative. Not everything a person can create is art.

      1. Daemian Lucifer says:

        I prefer the simpler:Not all art is good.

        So sure,a giant glass dick in minecraft would still be art,but pretty bad one.

        1. Akhetseh says:

          That’s a thing in real life.

          EDIT: Not sure if it’s also a thing in Minecraft.

          1. Daemian Lucifer says:

            Yeah,there are lots of dicks in architecture.Also,thats not something I expected to find on wikipedia,but there you go.

  16. Daemian Lucifer says:

    I've come to suspect that the secret to success isn't some special form of intelligence

    If you subscribe to the theory of multiple intelligences,then you actually do need a special form of intelligence to code.Specifically,the mathematical/logical one.

    1. Patrick the Bludgeonist says:

      I whole-heartedly agree with this. Being “smart” isn't a super-power. It's like any tool, really. Sledgehammers don't work well when you try to use them to tighten a screw. Screwdrivers could be used to scrape paint off, but it would probably be easier/faster to use an actual paint scraper.

      I have little doubt that Stephen King would make a lousy school teacher. Probably not good at being a carpenter or welder, either. He's an amazing writer and obviously incredibly intelligent, but that doesn't he would make a great Doctor. Coroner, maybe. But I have my doubts about the longevity of Dr. King, OBGYN.

      Shamus is one of the smartest people I know, but that dude couldn't assemble Ikea furniture at gun point. Being smart does not a person successful in everything requiring advanced intelligence.

      1. Chuk says:

        King actually did teach high-school English for a while in the 70s and doesn’t seem to have been ‘lousy’.

      2. Cuthalion says:

        Intelligence = interest + opportunity + experience

        Incidentally, that’s true of skills in general. I think intelligence is a skill. I could be wrong, but I like to think intelligence is attainable for pretty much everyone.

        1. Daemian Lucifer says:

          Thats a formula for wisdom.Intelligence is largely a genetics thing.

          1. Cuthalion says:

            No one’s likely to read this at this point, but I have to disagree. That formula very well may make wisdom as well, but I’m talking about the stuff where people say, “Oh, [Name] is so smart!” when they see a person who can do math or connect the dots between ideas or work computers or whatever. Never really heard, “Hey, [Name] is really good at this thing, they’re so wise!”

            Admittedly, I may just be hostile to the idea that intelligence (for people with normal cognitive function) is genetic. But I do see much more correlation between what people value, what their attitudes are, and whether they think they are smart on the one hand and how smart they are on the other. I think the causal relationship goes attitude/value/self-fulfilling prophecy -> smart/dumb more than the other way around. And I guess I’m talking more about the “interest” portion of the formula here.

  17. Atle says:

    Be careful though. Making your hobby into a job can take some of the joy out of the hobby.

  18. Patrick the Bludgeonist says:

    Perhaps not really suited for the site is the question: What does a person do when their passion/obsession is something they aren’t in anyway capable of doing.

    My passion always has been sports, contact sports specifically. Not necessarily mindless contact sports, like boxing (though punching is a very under-valued problem solving technique in today’s pasteurized society. No, I’m not joking.) but sports that require thought and intelligence as well. Like so many others I am completely unqualified for any of it.

    So what does a person do when they are obsessed with coding/programming and lack the skill set? Aside from you know…. making a website about table-top games and programming.

    1. Hal says:

      The usual answer to this advice is to find a way to combine the things you love with the things you’re good at; thus, the horde of professions that surround professional athletes (journalists, trainers, therapists, chefs, etc.)

      This isn’t always great advice. I love table top RPGs, but my day job is “scientist.” That’s not really a good combination; I don’t think anybody is itching to play “Immune System RPG.” (“Whadya mean I can’t dual-class between macrophage and dendritic cell? This game sucks!”)

      1. Patrick the Bludgeonist says:

        HMMM….Interesting. In this “scientist RPG” game you speak of…..is there any punching?

        1. MrGuy says:

          Or maybe use of a crowbar?

      2. Patrick the Bludgeonist says:

        No kidding, no joking….I actually just spent 10 minutes, while at work, thinking up a back story for a horticulturalist barbarian.

      3. Daemian Lucifer says:

        I don't think anybody is itching to play “Immune System RPG.”

        People were disappointed by how lackluster spore did the cell stage,so Im sure there are plenty that wouldve liked a more involved system surrounding it.

    2. Daemian Lucifer says:

      You open your own game company,make a bunch of crappy-paste games that earn you shit ton of money,spawn a bunch of imitators,and ruin the whole decade for everyone who likes games.

      1. Patrick the Bludgeonist says:

        You know, that actually sounds like a viable business model. We could probably get an IPO listed based solely on that paragraph.

        What do you think of the name “Feverbell Studios”?

        1. Daemian Lucifer says:

          You obviously have to call it “cutscene video games”.Either that,or “diamond hills”.

      2. PhoenixUltima says:

        Alternately you can just keep doing the thing you love but are awful at anyway, ala Ed Wood or Florence Foster Jenkins.

        I suppose the video game equivalent would be something like whoever made Ride to Hell: Redemption.

    3. Shamus says:

      It certainly happens. I call it the Salieri effect. It’s a bummer.

      1. Matt Downie says:

        Salieri was a highly respected musician. The average person nowadays couldn’t tell his work from Mozart’s.
        https://www.youtube.com/watch?v=G_5Dr8Bz5Bc

        “What does a person do when they are obsessed with coding/programming and lack the skill set?”
        In most cases, they learn the skill set. Programming isn’t boxing.

        1. Patrick the Bludgeonist says:

          Programming would be so much better if it was boxing. If that was true then Shamus would probably be the one trolling the comments section of my blog.

          Whaddya gonna do…

        2. EwgB says:

          Hm, what happens if I answer in a thread that has been dead for over three months? Let’s try it out!

          I don’t think it is necessarily a contradiction or all that uncommon that the Salieri effect is named for someone who didn’t exhibit it himself. Napoleon most certainly didn’t suffer from a Napoleon complex – it is now believed that he wasn’t that short of a guy, and with 1,68m (5ft 6in) actually larger then the average person at the time. Oedipus didn’t have the Oedipus complex – he didn’t actually know that the king he killed was his own father and that the king’s wife that he essentially raped was his own mother (Greek tragedies are a bummer).

    4. MadTinkerer says:

      Journalism. I’m not being flippant. There is 100% nothing wrong with writing about what you want to do but can’t do yourself if you can make a living doing so.

      Weathermen can’t make weather, but they sure can talk about it.

      Alternately, if you’re good at music or art, make music or art about games. Then start a Youtube channel / webcomic as appropriate.

      Or if you really want to be an astronaut but you’re good at programming instead, make a game set in space. Why else do you think there are so many games with spaceships?

      1. Daemian Lucifer says:

        Umm,shouldnt you have writing talent if you want to be a journalist?Or at least charisma if you are going to do speaking parts.

    5. MrGuy says:

      I’m personally highly sympathetic to Scott Adams’ “Several Things” advice.

      Boiled down, his advice is that being one of the world’s best experts in a single thing is really hard. The key to success is being reasonably good at two things, or even three things, thus creating a niche that you can be an expert in.

      In his examples, he can draw better than many people, but isn’t world class. He can tell jokes better than many people, but again not world class. When you combine those, though, you get people who are good cartoonists. And when you bring in a third skill (business degree/experience), you get a niche where he is uniquely positioned and highly successful, without being a “top” expert at any one thing.

      If your passion is for sports, maybe you can’t be a world class athlete. But if you like sports AND teaching, you can coach. If you like sports AND writing, you can be a sportswriter. If you like sports AND programming, you can go into sports statistics. Etc. There are a lot of places (some existing, some you might be able to create) where the ability to bring multiple separate skill sets together in a single person is highly desirable.

    6. wumpus says:

      “What does a person do when their passion/obsession is something they aren't in anyway capable of doing.”

      We had a guy interview for a software engineering position in my group. He seemed overqualified, so the real concern was whether he really wanted the job, or was just biding his time or ladder climbing. It didn’t occur to me to test his programming skills, as he had tons of experience.

      As it turned out, he really did want the job, and really did want to be a software engineer. He just sucked at it, which kind of blew my mind. If you looked more closely at his resume, you could see that he mostly had worked as an FAE in a foreign country for a big hardware producer. He was probably quite good at that job, but it doesn’t require writing much, if any, code.

      The guy could write and read code, but had no knack whatsoever for elegance, efficiency, or anything past brute force, really. He could not complete even the most basic projects on his own in anything approaching a reasonable amount of time. We got rid of him after about a year, and still suffer from having a few bits of his ‘code’ around. He was upset that we ‘hadn’t given him a real chance’; I wanted to encourage him to try a different field, but didn’t think he’d be receptive to that advice.

      1. nm says:

        Every once in a while I run into people like that at work. Huge resume, decades of experience, can’t code their way out of a paper bag. I get worried when I see 20 or 30 years at one company, just because of the risk of expert beginner syndrome.

    7. DivFord says:

      I believe the adage goes “those who can’t do, teach”. My grandpa used to add “those who can’t teach, teach teachers”. His job was, of course, teaching teachers of teachers.

  19. Hal says:

    So my real career advice is this: See if you can figure out what that thing is that you have passion for. Do that for a living.

    I don’t dislike this advice, per se, but it’s becoming increasingly irrelevant in western society. We are becoming a society defined by mindless “hobbies” which are merely the consumption of entertainment. We spend our free time watching shows and movies, playing video games, or simply goofing off on the internet looking at pictures of cats.

    This is why it’s possible to ask someone, “What are you passionate about?” and they can say, “I don’t know.” How can you be passionate about anything if you never do anything?

    (As a side note, this is also why so many people have trouble finding friends after they leave college. If your hobbies are limited to binge watching Netflix, it’s pretty hard to get out there and meet people.)

    1. Patrick the Bludgeonist says:

      I blame the cats.

    2. CJ Kerr says:

      There is a related notion called “deliberate practice”, which seeks to explain why a kid can spend every hour between school and dark playing basketball and never get better at it, whilst another puts in the same time and becomes brilliant.

      Once you hear it, it’s kind of obvious – it is insufficient to simply “do”. You must deliberately do the things which are hard, but attainably hard, so you get better at them. Aim too high and you merely perfect doing something badly (“practice doesn’t make perfect; practice makes permanent”). Aim too low, or rather fail to set the goal at all, and you remain the same.

      So the real trick isn’t to find something you’re “passionate” about – as you note, this is almost meaningless in career terms. Instead, find something you can dedicate yourself to, to deliberately practice until you become genuinely good at it. If you do that, the satisfaction will come (again, this is kind of obvious – if you don’t get satisfaction, you’ll never put in the thousands of hours required).

      1. MadTinkerer says:

        I was terrible at programming when I started. Now I’m almost okay at it.

      2. Ilseroth says:

        This reminds me of me and my brother playing fighting games as kids, we could spend the same amount of time playing the game, he would even usually be more natural at it then me. But as time goes on I was more interested in learning mechanics and improving while he was just playing something for entertainment.

  20. Arkady says:

    I’m reminded by this of a Jewish saying:

    The secret to happiness is two steps:

    1. Find something you enjoy doing.
    2. Find someone who will pay you to do it.

  21. Steve C says:

    The first sentence of that link at the bottom of your article is a reference to a blog post by Reginald Braithwaite. What a name! It’s better than Reginald Cuftburt.

  22. Kian says:

    I love programming, I can lose myself for hours in it, but never had a single moment that drew me to programming. Although now that I think about it, I must have first been introduced to it when I was 13, which is much younger than I thought. It was a high school pascal class. I then didn’t touch it again until college a few years later, where I lucked into a C++ course (there was an alternative Java class, dodged a bullet there).

    It was the only class that I found enjoyable. Still remember a data structures class where one of the TAs explained trees, and in particular self balancing trees(AVL trees specifically[1]). We were tasked with providing an implementation of a regular tree structure, and not to worry about the balanced tree because they didn’t expect us to be able to write one. I took it as a challenge and turned in a self balancing tree. Pretty proud of it, although I’d probably be appalled if I looked at it now.

    One thing I love about programming is the immediate feedback loop. I can code something, and test that it does what I meant for it to do pretty quickly. That’s not something that happens in the physical world. If I want to cook a meal, it’s not enough to know how to do it and write it down, I have to go, do the steps, babysit the food, etc. I hate cooking, and generally limit myself to food that just need some form of heating as preparation (boiled foods, grilled foods, microwaved foods, ovened foods). Sauces? That’s doubling the effort to cook for the same amount of meal! I’ll add some butter or oil to pasta to not eat it by itself, but that’s it.

    And when I’m not coding, I read about coding. It’s a field where you can constantly improve, and all the materials are easily accessible. Not to mention all the good technology and automation can do, lowering the barrier to entry to lots of things and empowering people, really democratizing a lot of environments that used to be closed to the masses.

    Also, I’ve been incredibly lucky and gotten cool jobs (if low paying ones) where I get to code all day and learn a lot. You have to really spend a lot of time coding to improve, not just on the job but as your hobby to. The only thing I regret is that my coworkers don’t generally want to talk about programming itself (aside from whatever current problem they’re dealing with).

    [1] http://en.wikipedia.org/wiki/AVL_tree

  23. Purple Library Guy says:

    I agree with Shamus’ general point that you will tend to get good at the things you have a passion for but that this isn’t quite the same as having innate talent at the thing.
    I actually might have made a good programmer. I always found it pretty easy, and had a knack for debugging. But I never had that tinkering urge to a very strong degree, that drive that made the computer-club-type kids fiddle constantly and mess with programming. So I took a couple courses and left it at that, and that’s probably for the best. Even a couple courses has I think been very useful to me, though.

    On a side note, that link about coders who can’t code boggles my mind. I mean, I took a course or two in high school and then CMPT 101 in university like nearly 30 years ago, and it took me a couple minutes of thought to figure the outline of that little “fizzbuzz” question they talk about. How can there be people who pursue coding as a career and spend years learning who can’t handle such things?

  24. Alan says:

    In college the entry level CS class was incredibly easy. I could bang out the homework assignment in 15 or so minutes. This isn’t a matter of previous experience; I had never received formal training in programming, never read a book on it. The closest I’d come was some poking around at BASIC and Lotus 1-2-3 macros. So I recommended the class to a friend in entomology who needed one more class to reach a credit requirement. I deeply regret making that recommendation; they struggled with it. This was enlightening.

    My thoughts on becoming a programmer, based on my own experiences and those of a friend who TA’d introductory CS at the university level and another friend who teaches CS and “Computational Thinking” at the high school level:

    I agree with Shamus, if it’s fun it’s way easier. If writing silly projects, no matter how simple, seems like fun, you have a big advantage as you’re essentially self-teaching CS. Find simple things that amuse you and try to create them. If doing so sounds like work, that is a warning sign that programming may not be a field you’ll enjoy.

    Being a really good programmer requires a number of abilities:

    1. to correlate various facts to draw new conclusions.

    2. to hold a fair bit of information in your head at once so you can identify correlations and draw those conclusions. Being able to focus is a key part of this.

    3. to understand on a fairly deep level indirect references

    If one like logic puzzles like this, they’re using 1 and 2 heavily. If one is comfortable with 1 and 2, one can probably get a CS degree and find, worst case, grunt work programming at a large institution.

    Being good at 3 allow you access to the rest of the programming job marketplace. If you’re not a CS person, this may be weird, let me see take a stab at explaining it:

    The President at our company is Alice. The CEO at our company is the President. From this we can conclude that Alice is also the CEO. It gets a bit weird when Bob takes over the Presidency. Because CEO is defined as “the President,” Bob is now also the President. But now we decide to make Carol in CEO. Bob remains Present, Carol is CEO, and the two positions are no longer linked. When Carol leaves we decide to again define the CEO as the President; Bob now holds both positions and they are again linked. (I make no claims that actual businesses work this way.)

    In computer programs this sort of indirect thinking is common can get much more complicated. It is a testament to how fiddly this is that on double checking, I made a (now corrected) mistake in the above example. I got cocky over such an easy example, so I didn’t focus on the logic and a bug slipped in.

    (One can get surprisingly far as a programmer while being terrible at 3. One can certainly get a Bachelors and Masters in CS while being terrible at 3. Other programmers will resent dealing with the code you write. )

    I believe most people can learn all three of these skills. The “natural programmers” are mostly just people who learned to enjoy using those skills as children. Since using the skills is fun, they voluntarily practiced. That’s the real advantage. If one doesn’t learn to enjoy the skills, learning and improving them will be difficult and one will likely hate working at a programmer.

    I’m not sure why some kids enjoy these skills more than others. My own observations are that children of “hard” sciences are overrepresented in the professional programmer population. I doubt genetics are a major factor.

    (I suspect the same is true for other disciplines. For example “natural musicians” are mostly kids who enjoyed playing instruments or singing and did so voluntarily.)

    You really need a solid but basic grasp of algebra to be a good programmer. If you want to do 3d of any sort, including games, you need trigonometry. Beyond that the jobs that require more advanced math vary too widely to suggest a general course. (But if I had to, it’s hard to go wrong with statistics. The jobs using advanced statistics aren’t usually glamorous, but they tend to pay well.)

    You don’t need a CS degree, but a university CS curriculum tends to provide a certain breadth of knowledge that is easy to overlook when self-teaching. Breadth means you are more likely to have the best technique for a problem, or at least know which technique you need to learn about. Oh, and a lot of companies require their programmers to have CS degrees. Lacking a CS degree will limit your options, but the remaining jobs are often less traditionally corporate. If you skip the CS degree (egad, have you seen university prices!), my recommendation is to pick a school with a good CS department, identify a series of classes someone in CS would take, find out which books are assigned to those classes, and read them!

  25. Chamomile says:

    My pull into programming was less “I need to understand this code” and more “I need to make this real.” Code problems are intriguing, but they don’t sustain my interest on their own. “Solve this coding problem” questions tend to bore me if I can’t figure them out in a couple of minutes. But to try and make something real, to see the different functionalities of a project slowly take shape, to use clever tricks to squeeze features out of a development environment that was never meant for that sort of thing, that’s a lot of fun.

  26. SKD says:

    Shamus, you have hit upon the exact point I have made to many people over the years when they ask why I don’t want to be a programmer. It isn’t that I am incapable of learning to code, it is that my mind is not skewed that way. A perfect example for me would be database coding; I can read and understand SQL code but when I try to construct or normalize an SQL database I spend an inordinate amount of time figuratively banging my head against the wall.

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun. Your email address will not be published. Required fields are marked*

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>

Leave a Reply to MadTinkerer Cancel reply

Your email address will not be published.