What kind of hardship am I talking about? Not knowing what to do next when faced with a programming task. This isn’t the hard part though. The hard part is enduring through this uncertainty, trying and testing concepts, and figuring out code design. It’s about enduring long enough for a solution to surface.
Some people just can’t endure hardship. The notables are the new programmers. At the Dream In Code forums, I see people posting threads asking for help in a particular area. The classic cases begin with the title as “I need to do such-and-such, and I need it urgently”. The body of the thread? “Thanks”.
It’s obvious the person never even gave a thought to the problem. The moment the problem became too hard for them, the moment the problem fell out of their known skills, they resort to asking someone else to do it for them. Only senior programmers and managers get to do that. It’s called delegation. You as a lowly programmer at the bottom of the food chain don’t get to do that.
Back when I was younger, I was an enthusiastic gamer. Role playing games were my favourite, and in my opinion, produces more profound “stuck” moments. What are stuck moments? The point in the game where you were unable to proceed further, and you’ve exhausted every possible interaction you know.
Puzzle games offer the most direct stuck moments. You don’t solve the puzzle at this level, you don’t get to the next level. For action games, this could be unable to win a boss fight. The solution could be as easy as upgrading your weapons to deal massive amounts of damage to that stinking, butt-faced-ugly ogre. It could be as hard as executing a certain sequence of actions with a certain timing on your game controller with the agility of a ninja.
Role playing games involve story plots and character interaction. Is it because you didn’t talk to that small fellow crouching in the corner of that tavern? So you missed out an important clue, because that small fellow happens to be the prince in disguise and escaped from the palace (because his father’s forcing him to marry an ugly countess) through the sewers (it always seem to be sewers), and so happens to know the very route you need to sneak into the palace.
So some people, being unable to bear the uncomfortable “stuckness”, finds their solutions in game guides or the Game FAQs site (if someone’s kind enough to have written something). Instead of muddling through, and enjoy the game as the game creators designed, these people just trash through the problems.
I prefer to try and figure out the problem, for example in this situation in Chrono Trigger (it’s somewhere near the end). Buying a Japanese to English dictionary isn’t cheating. Looking up the solution in a game guide feels like one to me.
Ok, I do buy game guides, such as after I’ve completed the game, and want to find out other secrets or stuff I’ve not experienced in the game. Or I’m stuck for an unhealthy amount of time, and I gave my best shot at it. Plus I like looking at the pretty screenshots. *smile*
The search engine problem
Search engines are both a boon and a bane to programming. You can find the solution to your programming problem almost instantaneously, with the expectation that someone has already solved your problem, and you just need to find it. This is useful because you can learn a lot from someone’s experience.
It can also teach us to not think.
Without sufficient discipline on our part, we may form the habit of relying on other people to solve our problems. Of unconsciously depending on other people. And then original thinking goes out the window, and so does creative problem solving skills. And we’ll never get better at programming.
All we need is to use search engines and programming forums wisely.
My hypothesis is that when you suffer, you tend to remember the lesson better. The thing is, you can remember the lesson even if you’ve reached for the game guide, or asked for help in forums, or searched on the Internet. The question is when have you suffered enough. When have you muddled through the problem (and failing miserably), testing out code concepts (and failing miserably), flipped through reference books in search for a clue (and failing miserably), and suffered enough that you’ll remember the solution and lesson if ever offered to you?
My advice is, if you think you’ve suffered enough, go suffer a bit more. If you’re not in a hurry, suffer a day or two more. I’m not advocating masochism. It’s just that the more you suffer initially, the more you’re able to handle ambiguity, uncertainty, and the unknown, the better you become at programming. Your ability to endure hardship speeds up your learning curve, and I can guarantee you’ll suffer very much less in future.
With the speed of technological advances, businesses and thus programming problems are going to get harder and more complex. It’ll be extremely difficult to find standard solutions, because you’re given a unique problem to begin with.
Can you handle ambiguity, expect uncertainty and embrace the unknown? Can you endure programming hardships?