Repeatedly shooting hoops

Shoot the hoop by Matthew Porter @iStockphoto

I was walking around the arcade. Fighting games, 2D or 3D, were the rage once. Then there’s those dancing games, where you step to the beat on one of 4 floor panels. Then there’s driving simulations, where players strive for beautiful exit curve lines and cool looking drift moves.

I was walking around the arcade. One of my favourites is the shooting games. Time Crisis, House of Dead and recently Silent Hill. Why? Because they’re the ones with a story plot. And if the players are moderately good, I get to see the story unfold. If they don’t shoot at the screen to skip the cut scenes of course…

I was walking around the arcade. Recently, two arcade centres I frequent did some major shifting of their machines. Both pushed the same game machine type to the forefront, visible immediately upon entering.

This game machine was added quite a while ago, but from the rearrangement, I’m guessing it’s gaining popularity. And the arcades stack them side by side, 8 in a row. And the machine is one of the few that physically engages the player in the game.

It’s a basketball game machine.

Specifically, it’s a shoot-the-hoop game machine. There’s just enough space for one person to stand in front of it. What you do is simply, uh, shoot the hoop. Each machine has 6 basketballs, and at the start of the game, the basketballs roll downwards towards the player. I think an illustration is in order…
Basketball game machine side view
There’s a protruding panel that flips up and stops the basketballs from rolling down once the game ends. There’s also a metal grate to reduce the likelihood of basketballs bouncing out of the machine. Basketballs can bounce out very far if they hit the hoop at the correct angle…

I don’t know how many sets a player has in one game. Maybe 3, maybe more if there’s bonus sets. Anyway, each set lasts for 60 seconds. During those 60 seconds, the player simply try to score as many times as possible, throwing the ball and make it fall through the hoop. Each successful throw nets the player 2 points. During the last 15 seconds of each set, a successful throw is worth 3 points. If I understand it correctly, in the second and third set, the hoop will move from side to side, increasing the difficulty.

Why am I talking about this? Because I noticed a similarity among the good players. All of them had their eyes fixed on the hoop. Their hands just keep getting the balls in front of them and they just shoot. Their concentration is focused on the hoop, and they just keep shooting. And shooting. And shooting.

Basketball isn’t solely about shooting the hoop of course. There’s dribbling, there’s teamwork, there’s accurate passing. But this game machine allows you to practice the shooting, over and over again, in a very short amount of time.

I actually find watching the good players playing, rhythmically mesmerising. There’s something very elegant in the way they take up a basketball, hold it up, throw and score in one smooth motion. I’ve seen a player use both hands, as in right hand take up ball and throw. Then the left hand take another ball and throw. Left, right, left, right. How’s that for ambidexterity?

If you read this far, I appreciate your attention and time. And now for the crux of this entire story. If you find programming difficult, start small. Write small programs as proofs of concepts that you learn. Then write a lot of them. Write them in different ways. Rearrange code to test your understanding. Build on your understanding.

Say you just learned about arrays. Test your understanding. Write small programs iterating through them. Read values from them. Assign values to them. When you keep working with arrays, you get familiar with them. Then you get to the point where using them becomes natural to you. You know what you can and cannot do with them. Then you move on to another concept.

Programming is about putting together concepts and constructs. It’s when you’ve understood the basics, that you can think beyond them. That you can invent and write advanced software.

All software, great and small, are made up of the basic programming constructs. Variables, assignments, loops and more. All you need is practice. Practise writing code. It’s the same with learning a (human) language. The more you read and write it, the better you become at it.

The rapid repetition of just throwing basketballs and scoring, trains the player to become very good at it, in a very short amount of time. After one particular game, I checked a player’s scores. Close to 200 throws with 80 percent accuracy. That’s 200 throws in 3 sets, 180 seconds, which comes to about 1 throw per second. That’s fast. Not to mention tiring. Can you keep throwing basketballs non-stop for 3 minutes?

Becoming better at programming can mean just practising writing good code until it’s ingrained into you. Write more, write often and write small.

  1. Shonzilla

    What you’re saying makes sense.

    Let me add my two cents as someone who’s pretty good at basketball (I used to train basketball for then European champion Partizan from Belgrade, Serbia) and software development (what I do profesionally for 8 years)… and I can vouch that different types of motivation, dedication and persistence are required in order to be proficient in either of the activities, or any activity for that matter.

    I wholeheartedly agree with your suggestion. I’d also suggest making a lot of small incremental changes to your small programs and making sure that you do not wander off by trying to do too much too soon. Losing focus and spending too much time tends to undermine what you’re after – so keep reminding yourself of your objectives (learning language, improving particular skill subset, developing coordination between time and resources, whatever).

    After all, programming requires more patience and attention to detail then experience (regardless of how experienced and smart you are). The more experienced you are should only make you eligible for solving more complex problems or deal with less tech-savvy tasks like project management, conflict management, product marketing, sales etc.

    Cheers!
    Shonzilla

  2. Vincent Tan

    Yes, making small incremental improvements is important. I guess my point was to start small, then build on the knowledge gained so as to get to more complex programs.

    I browse through the dreamincode.net forums sometimes, and the poster, usually a student, sometimes ask questions on simple concepts. They were trying to jump too far ahead of their skill level too soon.

    And I agree with you on the patience and attention to detail part. A good programmer cares about his code. Experience is just time used to cultivate all those good habits.

    That might be why there are great young programmers. These people already care about their work.

Comments are closed.