Et in Arcadia Ego 10¢ Contact
 
« How Siri Works
Four Kinds of Stuck »

A Programmer’s Greatest Enemy

By Jeff | Published: October 14, 2011

A programmer’s greatest enemy is getting stuck. A crucial skill in programming—and one that many of my beginning game programming students lack—is the ability to recognize when they’re stuck, to get out of being stuck, and to avoid getting stuck in the first place.

Indeed, it’s a skill I’m still learning myself, although the contexts in which I still get stuck are shrinking with time, study, and experience.

This morning, as I downloaded crash reports from Apple, I realized I was dreading my job today. I started looking for other things to do—checking email, reading news—anything to avoid what looked to be a tedious round of programming.

I asked myself what it was I was dreading exactly, and it took me a moment to figure it out. Getting stuck, came the answer.

It wasn’t the debugging that bothered me. Crash bugs don’t scare me. Usually I find that crashes are easier to fix than more insidious problems like memory leaks or uninitialized variables. With a crash, at least you know where to start looking: right where the crash report says to look.

Ah, but those pesky crash reports. That was the source of the dread. You see, I’ve used crash dumps for debugging before, but never from Apple, and never in Xcode. What would be involved in using these reports? Could I just drop them into Xcode and have them point me to the source code, or would I have to painstakingly read through the report myself and interpret it manually? How helpful would these reports be in directing me to the actual source of the crash?

Part of the problem was that the reports lacked debug symbols. I could see what module caused the crash, but apart from that there was only a byte address—no source file name, no line number. So to use the report properly I would need to find the .dSYM file associated with the version of the app that was causing the crashes, and hook it up (somehow) to the crash report. How would I “hook it up”? And did I even still have the .dSYM file around?

All of these thoughts were mere intuitions, haunting the back of my mind as I browsed the reports. It was only when I stopped and thought about them that I realized: I was dreading programming this morning because I was afraid of getting stuck.

What if the process of symbolicating the crash reports was complex and finnicky? I could spend hours reading man pages and trolling through forums, look for tips on how to symbolicate a report. Sounds ridiculous—but then sometimes these little bureaucratic processes are ridiculous. Ask anyone who tried to get codesigning working for iOS in ye olden days. I hate reading man pages and semi-relevant forums looking for answers to questions about how to overcome silly barriers. I was dreading that.

Or worse—what if I didn’t have the .dSYM files around any more? How could I use the crash reports without symbols? Maybe they’re buried in the app package? If not, maybe I had a backup of the files on Time Machine somewhere. What if I didn’t have a backup—what if I had to try to interpret the reports by hand, without symbols, using mere memory addresses? Ack! Tedium awaits.

Now I know all this sounds pitiful. It is. But I’m exposing my morning whinery to illustrate a certain kind of thinking that all programmers wallow in at times.

In my years of experience as a lead programmer and a teacher of programming, I’ve learned that when a programmer is really struggling—when his or her productivity has really sunk to the bottom, and days go by without much getting done—dread is usually involved. That programmer is stuck. And when a programmer gets stuck frequently, or stays stuck for long, unemployment can’t be far behind.

Origin SystemsIn my first “real” game programming job, at Origin Systems circa 1995, I befriended a programmer who had been there for years. He was a terribly nice chap, and he was kind to me as a newbie in the games industry. I liked him, but after I had worked there a few weeks, he confessed that he was struggling with his coding. He had been weaned on C, and all this C++ tomfoolery mystified him. The company was moving toward Object Oriented Programming—had already moved that way, in fact—and he was being left behind. Although I was a n00b, I had studied C++ while at college and understood it pretty well. So I explained OOP concepts to him, showed him why C++ really was a better C, and tried to help him modernize.

I didn’t realize it at the time, but it was too little too late. He understood the concepts I taught him. But something had happened to his confidence. He kept showing up to team meetings with new excuses for why he hadn’t made any progress that week. “I had this terrible bug that took a couple of days to track down. It was a killer—Tony helped me with it, you remember that don’t you Tony?” (Tony, looking unconvinced:) “Oh yeah, that was a killer.” “And then I had to go and help the other team get their installer working and then I got sucked into a design meeting they needed me for…” He had all sorts of stories about useful things he had done that week, none of which were getting his assigned programming tasks done.

Since then I’ve seen this a thousand times. Shoot, I’ve done it more times than I’d care to admit. Showing up to progress meetings with beautiful excuses.

Only a couple of months later—just a few months into my own career—that programmer got fired. I was shocked, I was horrified—nothing in business is as scary as the first time you see somebody get the axe. It’s like watching a death. Rational or not, you can’t help but feel you just dodged the bullet yourself. Axes, bullets—unemployment isn’t a pretty thing.

“He wasn’t making progress,” they told me when I asked why they let him go. “He just wasn’t getting things done.” He got stuck—real stuck—and he couldn’t get unstuck in time.

Most stucks aren’t as bad as that. Most are half-day or one day affairs—maybe a few days of avoiding the boss’s searching eye, playing a few too many rounds of Robot Unicorn Attack when you should be coding. But it still stinks to be slinking around at work, not doing the job you (usually) love, just because you can’t figure out how to move forward. Big or small, stucks hurt the soul.

A programmer’s greatest enemy isn’t the tools or the boss or the artists or the design or the legacy code or the third party code or the API or the OS. A programmer’s greatest enemy is getting stuck.

Therefore a crucial step to becoming a better programmer is learning how to avoid getting stuck, to recognize when you’re stuck, and to get unstuck. More on this next time.

Be Sociable, Share!
  • Tweet
This entry was posted in employment, productivity, programming, thinking. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.
« How Siri Works
Four Kinds of Stuck »

64 Comments

  1. StuckProgrammer
    Posted October 15, 2011 at 5:30 am | Permalink

    Holy cow. You just described the biggest bump in I had/have in my life.
    Maybe programming is a bad choice of career for overly-anxious people.
    Maybe thats the reason I don’t have a career anymore. I’m just stuck.
    The thought of “something boring coming ahead” is worst than actually solving the issue.

    I’m so waiting for the next post on the subject, you have no idea.

    Reply
  2. Sean Nieuwoudt
    Posted October 15, 2011 at 6:09 am | Permalink

    great post and incredibly true!

    Reply
  3. penet
    Posted October 15, 2011 at 6:44 am | Permalink

    Word “stuck” was used 14 times. In any other ways I agree with You.

    Reply
  4. Jason G. Tumusiime
    Posted October 15, 2011 at 6:50 am | Permalink

    I think it would have been kind if you mentioned something about how to avoid getting stuck.

    Reply
  5. Matthew Coleman
    Posted October 15, 2011 at 8:28 am | Permalink

    Great read. Perhaps this could more easily and generally be summarized as a specific instance of the ‘fear of the unknown.’ Programs that we write ourselves, for the most part, are all about using well-thought out and well-used tools. Our work complements the nature of our want to partake in processes that are cohesive and easy to picture from a big perspective.

    I think a good defense in this could be found in a love for technology and strength of presence. If we can convince ourselves that some new software tool or piece of code that you have to review is just another way to learn and develop learning for technology, things seem a bit brighter. It’s attached to the mantra that “there’s always something more to learn.” Your dread of finishing a task slowly becomes then an excitement (or at least a looking-forward-to) in learning and applying a new concept. For me it even becomes “how quickly and efficiently can I finish this?”

    Reply
  6. Mike Sluyter
    Posted October 15, 2011 at 9:47 am | Permalink

    Hey Jeff,
    Remember me from the IBM days? Congratulations on making the front page of Hacker News. I was hoping you were going to say that a programmer’s greatest enemy was Oracle, but I guess that’s just mine. Actually, the thing I fear most is indeterminacy. When things fail occasionally and randomly. Good to see that you’re doing well.

    Cheers,
    Mike

    Reply
    • Jeff
      Posted April 15, 2013 at 11:30 am | Permalink

      Holy smokes I just now saw who this was. Howdy, Mike!—so sorry I didn’t reply sooner! Email me or something!

      Reply
  7. sausages love you
    Posted October 15, 2011 at 1:26 pm | Permalink

    Whoa – if you really deliver, in usefulness your next post will outweigh all the other blog posts I’ve read in a year.

    Reply
  8. Jordan
    Posted October 15, 2011 at 2:08 pm | Permalink

    Great article. Definitely rings true.

    Thanks.

    Reply
  9. Michael Chermside
    Posted October 15, 2011 at 3:58 pm | Permalink

    I certainly have this problem. What most often gets me “stuck” is environment issues. If there’s a problem with the CODE, I can almost always come up with another clever work-around to isolate or fix it, but I’m particularly poor at figuring out why it is that the build works on every OTHER machine but not on mine (or whatever the environment issue of the day happens to be).

    I am certain that if you paired me up with someone good at troubleshooting environments, my productivity would go up by a factor of 1.5.

    Reply
  10. Brent
    Posted October 15, 2011 at 7:41 pm | Permalink

    Nice post! Huge cliff-hanger though. I do that sometimes when I get stuck in the middle of writing a blog post ;-) .

    Reply
  11. Rob Lowe
    Posted October 15, 2011 at 8:45 pm | Permalink

    Nice read.

    I find this related to the Four stages of competence

    Sometimes, there’s something you don’t know you should be doing until you’ve learned it.

    Reply
    • Jeff
      Posted October 16, 2011 at 6:43 am | Permalink

      Yes! That’s absolutely part of thinking behind this post. We talk about the four stages at the Guildhall a lot—it’s part of how we thinking about learning and teaching programming. You’ll see it again in my next post.

      Reply
  12. Engineer
    Posted October 16, 2011 at 12:54 am | Permalink

    I’ve been writing software for 20+ years. You’re absolutely right. Getting stuck is such a killer because, often, when you really get stuck, you can’t figure out how to get unstuck. I’ve developed tricks over the years to get my mind to loosen up so I can start figuring out the problem– like going to a movie, that usually helps. Sometimes playing a game will help, but sometimes playing a game becomes an escape. Most amount of time you can blow on a movie is 90 minutes.

    Anyway, when there’s too much uncertainty– for instance, you’re architecting something new, that’s never been seen before, or you’re integrating three different technologies, all of which you’re just barely coming up to speed on to begin with, getting stuck can be terribly painful and kill huge amounts of time.

    sometimes there are more things you need to think about than can fit in your head, and by the time you get to the end of thinking about something, and need to refer to something you thought about earlier, you’ve forgotten it, because you just crashed the stack in your head. And so you try again… and again… and again… because you can’t figure out how to do it without thinking about all the things you need to think about. And so you’re stuck.

    I hate it.

    Also, I’m stuck right now, or I wouldn’t have hit HN and seen this post.

    Reply
  13. David Thielen
    Posted October 16, 2011 at 1:49 am | Permalink

    That’s an interesting way of looking at it. But I think stuck is more an effect than a cause. The cause is things like avoiding learning new technology (your C programmer that put off learning C++) and not being able to figure a way around difficult problems.

    We all face change. We all hit problems where the lack of documentation, tools, or bugs in 3rd party programs stop progress. But the ones who let that stop them – that’s stuck. The others figure a way through and continue.

    Reply
  14. Scott Christopherson
    Posted October 16, 2011 at 3:21 am | Permalink

    That was excellent. The stuff you’re describing is exactly what I experience all the time. It’s good to know I’m not the only one.

    Reply
  15. Bertie
    Posted October 16, 2011 at 3:31 am | Permalink

    I agree completely. But I’d add another cause of getting stuck. Namely, the ‘too many things in my head’ syndrome. That’s what happens when you’re doing both development, debugging, helpdesk and even some project management simultaneosly. And when you turn on your computer, you know that there is no way to accomplish what you’ve planned for today, as in less of 30 minutes you’ll be interrupted by a phone call with some urgent matter. In that circunstances, you tend to think it’s simply not worth to start programming.

    Reply
    • Jeff
      Posted October 16, 2011 at 6:47 am | Permalink

      Man, no kidding. That’s a big one for me too. I call this the “spin up/spin down effect,” and my wife and I bemoan its impact on getting things done all the time.

      Reply
  16. Javier Corra
    Posted October 16, 2011 at 3:41 am | Permalink

    It’s 6am on sunday here in Buenos Aires (Argentina), I’m awake because I can’t sleep. I have insomnia, so I got up to drink a cup of tea and do something until morpheus hits again. While I was trying to get sleep I couldn’t help but to think all the wasted hours I spent these last couple of days because … I GOT STUCK. It usually happens to me on the last days of the project, when the clock is ticking and the deadline is coming; when you have most of it done and all it’s left are the DETAILS, small fixes and some TO-DO’s. I HATE when it happens. Nothing is better than when you’re inspired, just vomiting lines of code almost without thinking them and it feels like you’re writing a Concerto or something.

    Anyway, EXCELLENT article, I’m glad I read it just now. I’m going to try to get the inspiration back and get UNSTUCK.

    Reply
    • Jeff
      Posted October 16, 2011 at 6:48 am | Permalink

      Thanks, Javier. Getting stuck both sleeping and programming in the same week really stinks. At least it is the end of the project….

      Reply
  17. Matt Joiner
    Posted October 16, 2011 at 4:44 am | Permalink

    You just got yourself a subscriber.

    Reply
  18. Gavin
    Posted October 16, 2011 at 7:17 am | Permalink

    Can’t wait to see the solution.

    Reply
    • Jeff
      Posted October 16, 2011 at 11:43 am | Permalink

      Check my next post for more thoughts on getting unstuck.

      Reply
  19. abraxas
    Posted October 16, 2011 at 3:42 pm | Permalink

    My biggest enemy are non-IT CEOs who send me 200MB .pdf files containing 8 raw bitmaps.

    But I have to disagree with you about being stuck. A good programmer is stuck very frequently, unless he is responsible for databases or GUI. But there is a good line I know from Rareware, “A problem that cannot be solved for hours in the evening is easily solved in 10 minutes the next morning.”

    Reply
    • Jeff
      Posted October 16, 2011 at 4:59 pm | Permalink

      That’s a great quote from Rareware.

      If I’m reading you’re point about good programmers getting stuck frequently rightly, I don’t think you’re disagreeing with me. I think you’re agreeing. I’m not saying good programmers don’t get stuck. I’m saying that good programmers are conscious of stuckness as an enemy and pay attention to avoiding getting stuck and getting out of being stuck. And surely database and GUI programmers get stuck just like any other area of specialization.

      Reply
  20. Seth Newton
    Posted October 16, 2011 at 10:45 pm | Permalink

    I think I would agree with you on “stuck” being the source of fear in the early year(s). However, I think my greatest fear and enemy now is getting bored. If you replaced the word “stuck” with the word “bored” throughout this entire article, I would identify with it more.

    “the ability to recognize when they’re , to get out of being , and to avoid getting in the first place.”

    Reply
  21. alejandro varela
    Posted October 17, 2011 at 6:49 am | Permalink

    cool post! thanks!

    Reply
  22. Robert Schultz
    Posted October 17, 2011 at 7:25 am | Permalink

    What ever happened with your iOS debug task?

    Was debugging the dumps as difficult as you thought it might be or was it pretty easy?

    Reply
    • Jeff
      Posted October 17, 2011 at 11:41 am | Permalink

      It turned out to be super easy. Just drag the crash report onto Xcode’s “Device Logs” entry in the Organizer. Symbolication happens automatically. Magic.

      Reply
      • Ken
        Posted October 17, 2011 at 11:24 pm | Permalink

        Isn’t the word automagically?

        Reply
        • Jeff
          Posted October 18, 2011 at 6:53 am | Permalink

          Ah yes. I suppose I could have simplified. Just as

          i += 2;

          is an improvement on

          i = i + 2;

          Reply
  23. Steven
    Posted October 17, 2011 at 10:29 am | Permalink

    Great post!

    Everybody in every profession that ever existed gets stuck sometimes, the best and the worst of them. What’s key in getting past that is what you do after you’re stuck. In I.S. it’s best to start bringing in additional resources (searches on sites, books, help from colleagues and/or coworkers) and see if they can give you a fresh prospective on the situation. And it’s important to keep those higher-ups in the loop as well. The worst thing you can do is to let it go on and on and as deadlines approach, they think you are just rolling along without problems. Our egos can be our worst enemies.

    Communication is extremely important and worst case, can save your job!

    Reply
    • PKW
      Posted October 17, 2011 at 1:23 pm | Permalink

      Edison tried many different things before he got the light bulb to work. He told a reporter who asked him if he felt like a failure for having tried 9000 things that didn’t work “No, now I know 9000 ways to not make a light bulb.” There’s a museum in New Jersey that has a large number of these failed tests on display.

      Reply
    • Rog
      Posted November 23, 2011 at 8:00 pm | Permalink

      Errmm, wouldn’t that be ‘Best case’? Just how bad *is* your job, anyway? ;-)

      Reply
  24. marie
    Posted October 17, 2011 at 11:00 am | Permalink

    yep totally agree..i learnt to “raise the flag” as soon as i get “stuck”

    Reply
  25. Morgan
    Posted October 17, 2011 at 11:10 am | Permalink

    I really enjoyed your article. I’ve pretty new to the industry and I get super frustrated with stuck moments quite a bit. I’m looking forward to your follow up post.

    Reply
  26. Mahmedi
    Posted October 17, 2011 at 11:56 am | Permalink

    The greatest enemy of a programmer is his wife!

    Reply
    • Steven
      Posted October 18, 2011 at 1:25 pm | Permalink

      This can be true….and don’t forget, his 2 dogs who think that when work is over it’s all about them.

      Reply
  27. Joe Coder
    Posted October 17, 2011 at 7:18 pm | Permalink

    If you are getting stuck, then you are not doing it right (probably from lack of experience). I would estimate that 99,99999% of all code written is not doing anything new/exciting/groundbreaking. Most of the code written today is trying to duplicate what somebody else has already done. So, if you are stuck (instead of going to see a movie), why not trot over to your local university library or search the interwebs for how someone else did it. Also here is a few tips:

    - Ask yourself, “what am I trying to do?” A short user story is the best way to think of this. Three sentences or less.

    - Ask yourself, “what is the simplest thing that could possibly work in this situation?” Don’t optimize and don’t be clever. Clever people aren’t good programmers and they are terrible team members. Be obvious and deliberate (principle of least surprise). Don’t write code just because you can (oh, remember that really cool non-locking list implementation, I should write one of those…).

    - Ask yourself, “why can’t I do what I am trying to do?” If you have control over the code, then maybe you don’t understand the API (probably) or a proper API hasn’t been provided (also probably)

    - Write unit tests (separate from your production code, DO NOT PUT THE TESTS IN YOUR PRODUCTION CODE). Writing separate tests will help you distill the problem into what you can and can’t do. Also, you are making small incremental progress along the way that can be demonstrated to others.

    - Practice…

    Reply
    • Jeff
      Posted October 18, 2011 at 7:42 am | Permalink

      I’m surprised, frankly, that a programmer would claim never to get stuck, or that getting stuck is a sign of “not doing it right.” I suspect that the only programmers who never get stuck are either those who haven’t programmed much, or who work in a pretty constant environment, doing similar things with similar tools each day.

      I got stuck yesterday—twice!

      The first occurrence took about an hour and a half to resolve (which is a long painful time when you’re in the middle of it). I was trying to move my iOS project from using the GCC compiler to Apple’s recommended LLVM 3.0 compiler. But whenever I used the LLVM compiler, in Release configuration only, the app would crash in a really peculiar place: in the middle of a template function that was used as a comparison predicate being passed to std::sort(). Here was the function that was causing the crash:

      template< typename T >
      bool compare( T a, T b )
      {
      return a < b; // Hard crash with LLVM in Release mode only! EXC_BAD_INSTRUCTION.
      }

      This almost immediately put me into a stuck state. How do you debug code that crashes on a less-than operation? I did searches on “LLVM EXC_BAD_INSTRUCTION” and the like, and of course all the results were totally irrelevant to what I was seeing.

      The program ran fine with GCC. But was that because GCC was overlooking some real flaw that LLVM had exposed? When you’re stuck, you don’t know who the good guys and bad guys are. It’s hard to know whether to go up or down or sideways—every option looks reasonable.

      I found the bug—I came unstuck—by narrowing the problem. First, I got rid of the calls to std::sort() that generated the error. The program ran fine, so this confirmed that the problem really was something to do with this code—it wasn’t, for example, just a memory corruption that had happened earlier and only manifested at this point.

      Once I was sure that std::sort() plus this comparison function were involved with the bug, I tried doing the same thing right at the start of the program—right at the start of main(). Sure enough, the crash occurred there too. More confirmation that context was not the issue.

      Finally I isolated the problem code into its own project—a project for which the main() function did absolutely nothing but call this code, and for which there was no other code at all! The problem still occurred. But again, in Release builds only.

      So then I started comparing Release build settings to Debug build settings, considering what difference might account for the change in compiler behavior. Fortunately, my first guess was correct. LLVM has a “Generate Position-Dependent Code” option that was enabled in Release but not in Debug. When I disabled it in Release, the problem went away.

      I was then able to further confirm that the problem occurred whenever you tried to use an inline function as a function pointer argument to another function, when Generate Position-Dependent Code was enabled.

      That was stuck. It was pretty bad stuck—at least, it felt like it was. But it wasn’t because I wasn’t “doing it right (probably from lack of experience).” It was because I was doing what programmers often do: move to new compilers, new platforms, new tools, new languages, and these new situations often throw up mystifying challenges, up to and including arbitrary bugs.

      Stuckness is not a function of experience or even of programming mastery (which are not, BTW, the same thing). Stuckness may be a function of trying new things. And if you’re programming without trying new things… well, I wouldn’t place bets that you’ll be programming for long.

      Reply
      • Joe Coder
        Posted October 18, 2011 at 7:28 pm | Permalink

        :-) Maybe our definitions of “stuck” and “development” are different. Your story in your reply sounded like “development”. You had a problem and took deliberate steps to solve it, which involved isolating and testing the problem. The story in your blog about the developer that couldn’t produce cause he kept getting “stuck” sounded different to me. I guess my only point was, that I’ve seen many programmers get “stuck” by trying to re-invent every wheel (Not Invented Here syndrome). Trying new things is great, and necessary, but maybe not so much when it is costing other people money and you have a deadline.

        (BTW, to retort your argument, the “stuck”-ness in your reply was caused exactly because you weren’t doing it right because of lack of experience with the LLVM compiler. You probably will remember how to solve that problem quickly the next time ;-) )

        Full disclosure, I have also gotten “stuck” plenty of times when trying new things, and am definitely not a “master programmer”. However, like any other craft, it is good to have a toolbox full of tools to use in various situations. Also, your followup post on tips for getting unstuck was good reading.

        Reply
      • Robert Sullivan
        Posted October 19, 2011 at 9:30 pm | Permalink

        Very interesting topic. I think what Joe is missing the deeper point of this topic, but what is even more interesting, which you cover, or some of the other commenters propose, is the root cause. I’d say, if you’ve never been stuck, you are a very green programmer, or aren’t challenging yourself too much. Any time someone gets their nose to the grindstone, pushed by a deadline, tired, then they miss the easy things like #pragma, or “duoh! I’m pointing to the wrong database”, when, had they asked someone else, or taken a short walk, they would have solved the problem in 2 seconds. Now, there’s another topic you are touching upon, let’s call it getting stuck in a rut. This is where the C guy was. Procrastinating. He really didn’t want to do his job (learn C++), so he found all manner of ways to procrastinate and do other stuff. (Funnily enough, C is still heavily used, like an OS for ex, so getting fired was probably a good thing, he can go work at the many places doing just fine with good old K & R ANSI C.) So this is the deeper question, I’ll read your next set of posts, thanks again!

        Reply
        • Jeff
          Posted October 20, 2011 at 8:56 am | Permalink

          Good point about getting “stuck in a rut.” In these posts I’ve been focusing on “immediate stuckness”—getting stuck in the middle of a single task. But when you’re continually stuck, or when your whole career—or even sense of purpose in life!—is stuck, it’s a much deeper kind of stuck. Much more horrible too.

          Reply
  28. Bill
    Posted October 17, 2011 at 10:31 pm | Permalink

    stuck ? Stuck ? Really ? .. rarely do I every get stuck ..of course I have many years of experience in a number of environments. My biggest problem is Not getting paid anywhere what I am worth. I am typically hired for jobs that others are unable to do, but i get paid the same. I have to face things like doing internals programming for a software system with insufficient internals documentation, writing com servers using 11 year old com technology to interface to an unsupported software system (i.e. No one at the parent company seems to know anything about their COM software, I have to do testing just to find how to interface to their stuf (even conceptual stuf)). No, I don’t get stuck I just am forced to face difficult situations and given little time for completion. … come to think of it i guess my pay rate it … STUCK (;

    Reply
    • Rog
      Posted November 23, 2011 at 8:09 pm | Permalink

      Hey Superman… some empathy could be a good thing here :)

      Reply
      • Rog
        Posted November 23, 2011 at 8:10 pm | Permalink

        Oh… and a spellchecker.

        Reply
  29. Programmer
    Posted October 18, 2011 at 12:27 am | Permalink

    thats so true..getting stuck is a killer one indeed

    Reply
  30. goodsammy
    Posted October 18, 2011 at 8:06 am | Permalink

    IMHO, falling in love with the tool is a big reason for this. When we invest our time and achieve a certain level of competence in a certain tool, at some point we develop a liking for it. Because we are getting our perks (money, respect etc) from the tool, we feel like giving back to it. That’s the point where we shift our identity from a good programmer in C to good C programmer. If I have to learn C++ to do the same thing, my mind would constantly resist “its the same thing.. I can do it using C itself.. why this new shiny tool.. I will wait this fad out” Once you wait enough on the “fad” and reality starts staring, it then starts becoming an overwhelming proposition because the new tool has progressed already and you only have to play catchup.

    One way out of the mess is to realize that we are not exactly starting from scratch though it might look like it. So the respected C guy is not going to be a total newbie running for help. This convinction can come if we start dirtying our hands. Further, we should realize that the effort being put in will make us more rounded. Finally we should see the tool for what it is… and separate our love for it from its utility.

    Reply
    • Jeff
      Posted October 18, 2011 at 9:20 am | Permalink

      Wow, goodsammy. Incredibly well said. I can’t add anything to that—I just hope other people here read your comment.

      Reply
    • Rog
      Posted November 23, 2011 at 8:12 pm | Permalink

      Beware the Ides of Functional! Algol-ish ain’t (necessarily) the future…

      Reply
  31. goodsammy
    Posted October 18, 2011 at 8:21 am | Permalink

    Also, in environments where the rate of change “seems” low (product development instead of consulting), you could lure yourself into a comfortable corner thinking that your investment will last forever. You can see the cracks in your shell but you dont feel like you are not needed till that big migration happens when your project is moved to use the platform you have been avoiding or your humble self is eased out into another project with a different environment.

    Reply
  32. devGabriel
    Posted October 18, 2011 at 8:57 am | Permalink

    Perfectly described. Great post.

    Reply
  33. Alex
    Posted October 18, 2011 at 10:04 am | Permalink

    “He had all sorts of stories about useful things he had done that week, none of which were getting his assigned programming tasks done.” … “He wasn’t making progress,” they told me when I asked why he got fired. “He just wasn’t getting things done.”

    I’ve seen this sort of thing before, and I wonder. We all admit that such a person is smart and able-bodied and even doing useful things. These things just don’t happen to be the assigned portfolio. Why do companies have so much trouble making use of such people? Surely a sufficiently-enlightened organization could find some use for this person that would easily justify their employment.

    For example, everybody’s company has a giant codebase that needs refactoring, old bugs fixed, and so on, right? Or you have people working inefficiently because they lack some internal tool support that nobody individually feels they have time to write. Or we really wish we had some more unit tests, but never seem to write them. (Or maybe we just need somebody to bounce ideas off of.) We preach to programmers till we’re blue in the face that these things are everybody’s responsibility, but they never seem to get done. Now here’s somebody who might be perfectly happy to do nothing but this ‘extra’ stuff that nobody seems to have time for (but wastes time by not having). Why not let him, and take that much pressure off everybody else?

    Some industries essentially force all employees to be fully vertically integrated, and other industries allow much more specialization, and still others are happy have a Minister Without Portfolio, and it’s not at all obvious to me that software should always be the first. I think it’s actually more a shame for the company than for the former employee: you’ve gone to the trouble to hire somebody, to let him learn the codebase, and he is doing useful things, and the response is to fire him. What the!

    Reply
    • Rog
      Posted November 23, 2011 at 8:16 pm | Permalink

      All of the above… and pointing out such facts seems to be traditionally a Career-Limiting Move, unfortunately :(

      Reply
  34. Team Launcher
    Posted October 19, 2011 at 7:59 pm | Permalink

    Although getting stuck can be a hassle, it can help make you think differently that you usually do in trying to find a way to get unstuck. But nevertheless, it’s stressful just the same.

    Reply
  35. Tim
    Posted October 19, 2011 at 8:50 pm | Permalink

    I have found in the past that getting stuck can start from the beginning of project/task, when you as the developer take on a little bit to much.

    When I first started as a developer this was a regular occurrence for me, and when you get stuck on a “small bug” the above snowballs.

    Like you said if you can identify how not to get stuck, life becomes a lot easier.

    Great post.

    Reply
    • Jeff
      Posted October 20, 2011 at 8:54 am | Permalink

      You’ve put your finger on a huge part of the emotional impact of being stuck. When you’re stuck, not only is it frustrating to be stuck, but you’re also conscious of the backlog of tasks waiting for you in the future. You know that the longer you stay stuck, the later you become with your work overall and the more ominous those future tasks become. I know that for me, personally, if I just have one task to focus on, even if I’m stuck it doesn’t feel to bad. But if I’m stuck and I’ve got to take out the trash and I’ve got to take Jimmy to the dentist and I’ve got to finish my tax return and I’ve got to get ready for the birthday party… the pile of tasks quickly turns to anxiety and dread.

      So maybe along with the advice, “Don’t get stuck” we should add a corollary: “Plan to get stuck, and give yourself ample time, so that the backlog doesn’t turn nasty.”

      Reply
  36. Adewole Ayobami
    Posted November 5, 2011 at 7:56 am | Permalink

    That is true, and even I have just got stuck on a project I am working on, and instead of find a way around it, I just left it and started doing other things, I just realized I need to go back and get it done

    Reply
  37. mean
    Posted November 16, 2011 at 12:34 am | Permalink

    IE is the (web) programmers’ greatest enemy.
    Stuck because IE sucks? (it even rhymes!)

    Reply
  38. Jeroen Massar
    Posted January 1, 2012 at 10:59 am | Permalink

    This “stuck” you are talking about is not really “stuck”, it is simply called “Procrastination”.

    Stuck would be if you are looking at a bug and actually trying to resolve the top priority problem that you have and are not able to figure out what is going wrong as well, you are then stuck.

    Procrastination is when you are doing everything but the most important thing that you are supposed to do (like me now commenting on this weblog thingy ;)

    As for “uninitialized variables”, ever heard of this awesome tool called valgrind? :)
    Also quite a few compilers will nowadays nicely warn about these kind of situations when given the proper warning flags.

    Enjoy 2012 with the newfound wisdom that procrastination is your worst enemy…

    Reply
    • Jeff
      Posted January 3, 2012 at 9:41 am | Permalink

      Thank you for gracing us with your profound wisdom, Jeroen.

      Reply
  39. James
    Posted April 11, 2012 at 12:37 am | Permalink

    “I asked myself what it was I was dreading exactly, and it took me a moment to figure it out. Getting stuck, came the answer.”

    I just wanted to let you know that I thought this was brilliant. I’ve actually been doing this today. The reason I found this website was because I was reading semi-relevent and interesting articles on the internet instead of working through my discrete mathematics text, which frequently leaves me “trolling through forums” trying to figure out how to develop some method for a proof. I look forward to reading more of your articles in the near future.

    Reply
  40. Roberto
    Posted October 10, 2012 at 3:36 pm | Permalink

    So funny to have read this after spending a night being stuck with an assignment for my Java class. After reading your post, I had to re-evaluate what I was doing, which was basically trying to force my crappy and unorganized code to do what I wanted it to do. I was stuck because I couldn’t get it to work but also because I couldn’t break free from the fact that the code wasn’t working, and possibly not going to work at all. I was “patching” instead of “coding” – bad, bad, bad.

    I’m not an expert in Java and programming, and I still have a long way to go to be able to say that I’m at an intermediate level of expertise, but at the level that I am now, I should be able to recognize when my work lacks quality.

    I love learning!

    Reply
  41. Nguyễn Thái Thuận
    Posted November 18, 2012 at 10:14 am | Permalink

    “C++ really was a better C” – I don’t think like that.
    OOP is not necessary, too.
    UNIX Philosophy is the best.

    Reply

11 Trackbacks

  1. By A Programmer’s Greatest Enemy | Be Kishore on October 15, 2011 at 9:33 am

    [...] A Programmer’s Greatest Enemy. Share this:TwitterFacebookLike this:LikeBe the first to like this post. This entry was posted in [...]

  2. By A Programmer’s Greatest Enemy | 21 grams on October 16, 2011 at 2:33 am

    [...] in his latest blog post talks about greatest enemy of a programmer. Also, excellent advice for programmers on [...]

  3. By Schauderhaft » How to Get Unstuck on October 16, 2011 at 8:17 am

    [...] Wofford singles out “getting stuck” as A Programmer’s Greatest Enemy. Stuck as getting stuck with a problem that you just can’t solve. This situation gets [...]

  4. By I wonder if Jeff Wofford knows that getting stuck isn't just a programmer's… | Proper Gander on October 17, 2011 at 1:05 pm

    [...] A Programmer’s Greatest Enemy [...]

  5. By A Programmer’s Greatest Enemy? :: Glacier Peak Games | Better games make better people. on October 17, 2011 at 2:43 pm

    [...] Jeff Wofford: A Programmer’s Greatest Enemy [...]

  6. By El gato de 9 colas - Programacion de Juegos on October 18, 2011 at 7:34 am

    [...] O estar atascado por no saber qué hacer después (cuál es el siguiente paso). Estar atascado puede ser uno de los peores enemigos del programador así que hay que tener un arsenal de herramientas para [...]

  7. By Getting stuck and agile software teams at Mark Needham on October 20, 2011 at 4:10 pm

    [...] came across an interesting set of posts by Jeff Wofford where he talks about programmers getting stuck and it made me think that, despite its faults, agile software development does have some [...]

  8. By Mark Needham: Getting stuck and agile software teams | Software Secret Weapons on October 20, 2011 at 7:25 pm

    [...] came across an interesting set of posts by Jeff Wofford where he talks about programmers getting stuck and it made me think that, despite its faults, agile software development does have some [...]

  9. By » On stuckness and teamwork Caroline Ring on October 25, 2011 at 7:24 pm

    [...] “A programmer’s greatest enemy is getting stuck.” [...]

  10. By Talk 147: Tangaraptoren | RadioTux GNU/Linux on November 11, 2011 at 4:13 am

    [...] A programmer’s greatest enemy, Four kinds of stuck, Keep taking steps forward (pfleidi) [...]

  11. By Summary of the Schneide Dev Brunch at 2012-03-25 « Schneide Blog on April 22, 2012 at 8:34 am

    [...] blog entry by Jeff Wofford inspired one of us to talk about the notion of “being stuck” in software development. [...]

Post a Comment Cancel reply

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Holy Ghost Stories
Hobgoblin Hall
by
Jeff Wofford
  • Recent Posts

    • Finding C. S. Lewis’s Essays
    • What is Ethics?
    • SimCity to License Blizzard’s LocalServer™ Technology
    • When Game Development Stinks
    • An Invitation Back to Faith
    • The Four Moral Cultures
    • In Praise of Modern Board Games
    • Hitting a Dead End with FlasCC
    • My Top Ten Least Favorite Ethical Arguments
    • Suitors: A new, free card game for 2 to 4 players
    • The Sorry State of C++ Portability
    • The Sorry State of Game Portability
    • Come Play House of Shadows!
    • Elvis in Wonderland: An Example Game Pitch Document
    • I Cannot Read on My iPad
    • The Final Solution to the Travelling Salesman Problem
    • Angry Birds “Cloned” Crush the Castle, and That’s Okay
    • How Diablo 3′s Networked Standalone Campaign Secures the Auction House
    • In Defense of Article Clones
    • Diablo 4 to Feature LocalServer™ Technology
  • Recent Comments

    • Alyson on Never in a Hundred Million Years Will You Ever Sell Your Game Idea to a Company
    • Alyson on How to Get Your Game Idea Made into a Game
    • Paul on What Does the Bible Say about Divorce and Remarriage? (Part 2)
    • BenTennyson on How to Get Your Game Idea Made into a Game
    • Ben on How to Get Your Game Idea Made into a Game
  • Categories

    • blogging (3)
    • books (13)
    • culture (8)
    • employment (3)
    • ethics (6)
    • faith (35)
      • Bible (3)
    • family (7)
    • fiction (6)
    • games (51)
      • board games (2)
      • Crush the Castle (6)
      • House of Shadows (1)
    • iPhone (14)
    • language (1)
    • Mac (4)
    • music (4)
    • Phit (6)
    • politics (5)
    • productivity (8)
    • programming (35)
    • science (2)
    • technology (28)
    • thinking (13)
    • Uncategorized (7)
    • writing (15)
  • Archives

    • April 2013 (1)
    • March 2013 (3)
    • January 2013 (4)
    • December 2012 (1)
    • November 2012 (1)
    • October 2012 (3)
    • August 2012 (1)
    • July 2012 (1)
    • June 2012 (4)
    • May 2012 (3)
    • April 2012 (2)
    • March 2012 (3)
    • October 2011 (7)
    • September 2011 (3)
    • August 2011 (3)
    • July 2011 (2)
    • May 2011 (1)
    • January 2011 (2)
    • June 2010 (4)
    • May 2010 (2)
    • April 2010 (1)
    • February 2010 (1)
    • January 2010 (3)
    • December 2009 (8)
    • November 2009 (2)
    • October 2009 (2)
    • September 2009 (1)
    • June 2009 (10)
    • May 2009 (5)
    • January 2009 (1)
    • December 2008 (2)
    • November 2008 (3)
    • October 2008 (1)
    • September 2008 (2)
    • August 2008 (1)
    • July 2008 (1)
    • June 2008 (2)
    • May 2008 (8)
    • April 2008 (3)
    • November 2007 (1)
    • October 2007 (2)
    • August 2007 (5)
    • July 2007 (4)
    • June 2007 (8)
    • March 2007 (1)
    • November 2006 (3)
    • April 2006 (1)
    • March 2006 (1)
  • RSS Links

    • All posts
    • All comments
  • Meta

    • Log in
Copyright © 2013 Jeff Wofford. All rights reserved. Powered by WordPress. Built on the Thematic Theme Framework.