It’s Harder Than Ever To Learn To Program

Despite the seemingly endless amount of resources dedicated to learning programming (Kahn Academy, MIT Open Courseware, Stanford’s free classes, etc.) available to people these days, it seems as though it’s harder than ever to learn to program. Now, it’s not because of a lack of resources (obviously); rather it’s because of what a new user can produce with these resources.

Someone coming of age in the 1980s when home computing was just starting to take off would find that not only was everything about a computer new and novel, but everything they did appeared to be at the forefront of computing. Every second of interaction was unknown, exciting, and precious. As a perfect example, you used to have to type in programs on the old Apple machines because disks to store the programs weren’t common/cheap enough. Want to find out what a certain instruction does or modify it to make it do something different? Go ahead, you’re the one typing it in.

Everything a user did felt like they were stretching the boundaries of the machine. Without the internet there was no bar to compare yourself to, only your friends and the cool things they did with their computers. Everything seemed new and as if they were the first person alive to come up with such a cool way of doing things. This, then as it is today, is incredibly addictive. During this time, doing one cool thing with a computer made a user fiend to do more. Inevitably, the user becomes so enthralled with the machine that they put in their 10,000 hours and poof, become masters of the machine.

Contrast this with today. Kids are growing up having smartphones, tablets, and laptops at ever younger ages, and are being exposed to beautiful, wonderful programs that can do so many cool things. Curious and interested, they may sign up for a programming class or read a tutorial online. What’s the first thing they’re taught? “Look, you can make the screen show this horribly antiquated and awkward string of words, ‘Hello, World!’. Isn’t that amazing?!” This kind of stuff wouldn’t even impress my 2 year-old niece, let alone someone who has access to the flash-bang-whiz 99c attractions of the world’s app stores. Even the most inexperienced engineers can build a fun, useful catapult just a short time into learning the material while building something as conceptually simple as a photo-sharing site takes years and years of practice and hard work.

Now, I’m not advocating for the exclusive use of higher-level languages when teaching a person to program or that humanity is doomed because we’ve advanced the state of computing so far that nobody will want to approach it ever again. I think that what really propels people to continue to learn and mature their skills is what drives most creative people: a desire to build, explore, and understand things regardless of the external sex-appeal what they’re currently working on. I know it’s the primary motivator behind my learning and growing. Mostly, it’s just interesting to note the differences between the environments of learning to program 30 years ago to starting to program now.

Quit Making New Social Networks

Facebook and Twitter have won. It’s over. Despite people claiming they’re not “open” or their privacy issues “suck”, this is a good thing.

It is good because it has solved one of our longstanding problems as a species: our need to connect.

Now, if I wanted to quickly send a message to someone I’d of course want to use a system that is beautiful and cohesive, one that works as it should (according to its “essence”, as Walter Isaacson has put it). But guess what, I don’t want to have to look around on 20 different sites to see which one is the flavor of the month and see if that particular person is a part of it. Facebook and Twitter have won because they’re ubiquitious.

This is different from most tech issues where the use of a device is singular. Only you use your smartphone and it doesn’t matter what anyone else in the world has; that phone can make calls, text messages, and picture/video messages to anyone else in the world who has a smartphone.This is not true for social networking. It is completely dependent on the number of participants in the network.

For instance, I just sent a group message to 7 of my college roommates using Facebook. It was as easy as, pull up the existing thread, type my message, click send. At no point did I have to wonder about what network they were a part of or any of the details of sending it. This matter of sending a message to a group of friends is solved.

So forget Path, Stamped, and all other “new” social networks that come about. This is a problem that’s been solved and doesn’t need reinventing or redefining.

Windows Batch Scripts

Ever edited batch scripts on Windows (.bat files) that modify folder hierarchies and the changes don’t seem to take, no matter how correct they look? Well, chance are, they are correct and it’s Windows being lazy. I’ve found that anytime I try to delete a file with the command ‘del /rd /s [folder]’ and it fails, a good restart (yes a full machine restart, in 2011) is all that’s needed. I’ve no idea why this happens or if there’s a cleaner way to force it to delete but luckily virtual machine restarts are quick and settings save rather easily.

Basketball Codes (ooweeoooh) Part 1 (of a billion)

Growing up playing organized (and often unorganized) basketball allowed me the chance to learn many lessons I otherwise wouldn’t have had the chance to. Looking back I see many similarities between playing basketball and writing code. This (hopefully recurring) series will attempt to tease out insights to be gained and applied to the professional world of software development.

One of the most lasting lessons that one of my coaches was fond to give us speeches about was along the lines of, “You may not be the most talented out there. You may not have the best jumpshots or be able to jump the highest. But you will be the most prepared and the most conditioned.”

I can’t attest to have learned this lesson immediately but it was reinforced time and again throughout high school and college. Not one time could I lay claim to being the smartest person in any of my classes but I always tried to work the hardest. Even now I’m far from being the most talented developer on our team but I try to remember these talks I had with my basketball coach. I’ve found working hard to be the only attribute in a person that even comes close to being an indicator of success.

Play good ball, write clean code, work hard at both.


What I want to say to clients: “Yo son, this wild-ass update is maddd faster n’ shit.”

What I have to say to clients: “Hi, this new version is now much faster.”

I think all application developers must feel this way at some point.

Access Headless Local Machine With Dropbox

Last Friday, 7/8/2011, just before closing time, my monitor on my primary development machine broke. The screw attaching the monitor’s arm to the base snapped clean in half, leaving a perfectly good monitor with no way to stand on its own. An unfortunate circumstance but one that is easily remedied with a new screw (or, in the case of Amazon’s customer service, a brand new monitor).

This left me in an unfortunate position come Monday morning when trying to get into my machine to start my day. Luckily, I had brought another computer and had Dropbox installed on the now headless development machine.

All I needed to do until the new monitor arrives is to SSH into the machine, with the possible exception of running a VNC client to access some of the Eclipse GUI elements. However, in order for SSH to work properly, one needs an IP address of the target computer. How would I get this? After running an uninformative NMAP scan (too many machines on the network to pinpoint mine) I realized I had already installed Dropbox on the machine. Following are the steps I used to gain the IP address of my development box in order to SSH into it:

1. After booting the machine, login (hit ‘Enter’ then type password – will depend on how your login process is configured)

2. Press keys ‘cntrl-alt-T’ (This will open a Terminal window)

3. Type ‘cd Dropbox’ (this too will depend on how you’ve installed Dropbox – I’ve set mine to the default location)

4. Type ‘ifconfig > ipaddr.txt’ (without the ‘ character)

You should now have a .txt file in your Dropbox folder with the IP address of the development machine! From here you can use that IP address to SSH into the development box! It’s an easy and clever little trick to get the IP address of a headless machine (provided you have Dropbox installed. If you don’t, you may want to look into piping ‘ifconfig’ into a ‘sendmail’ command).

First Days

I’ve officially started work as a professional developer. Surprisingly, it’s been somewhat of an easy transition from unstructured life (world travel and apartment lounging) to waking up at 6am and resuming using my brain all day. This first week has primarily been spent on a combination of tasks: learning the existing power systems and how the various pieces interact with each other, and also setting up my development machine.

I’m extremely excited that I get to spend some time working on two of my favorite parts of computer science: networking aspects (which is important in the power field as many plants and substations are connected to each other) and operating system-like coding. Perhaps these two fields are far more prevalent in the professional world than it first appears to be, but I consider myself lucky that I get to spend time in such interesting areas.

One of my primary initiatives as a newly professional programmer is to spend a significant amount of time reading. I had a conversation via email with my cousin the other week asking him to recommend to me any books on programming that he thought would be helpful at the beginning of a career. He responded that it depends on whether a person wants to spend their time on the higher-level “theory” versus “tech-specific” kinds. In my mind both can be helpful at the beginning of a career depending on how you apply the techniques and the technology stack one works with. So, with that in mind, I’d like to keep my time nearly equally divided between the two categories.

Books that I’ve found to be highly recommended and I have plans to read in the coming months are:

  • Code Complete: A Practical Handbook of Software Construction
  • Pragmatic Programmer: From Journeyman to Master
  • And not programming specific but still a good read: Zen and the Art of Motorcycle Maintenance.

These, along with some JavaScript tutorials should keep me occupied for some time to come. Here goes nothin’!

Are We There Yet?

Have we arrived yet? Has everything in the 21st century been worth it? We’re living in a society where anything one wants and desires is available in a matter of seconds through an app. While so much of it is valuable and is a natural progression of our technological progress, much of what we’ve accomplished and built feels like it’s disconnecting us with what it means to be human. This isn’t meant to be an exploration into what makes humans most human but rather wondering if we’ve lost contact with one of the things that makes us human.

For the sake of this discussion let’s say that what makes us the most human is our connectedness with other humans. It’s our ability to gain share and gain new experiences through others. Traditionally, this has happened through spoken and printed word. So many technologies today allow us to sidestep the need for physical communication and replace it with communication in the form of sculpted pixels.

While this certainly may seem a bit like a case of “biting the hand that feeds you” given my technology background, at some point I feel we all must wonder: are what we’re building and spending our time with every day only separating us further from ourselves? I don’t mean to say that technology can’t aid this task, rather that sometimes it creates barriers to us further realizing our true selves.

Boy Scouts Robotics Merit Badge

Today, the Boy Scouts of America (from which I’ve attained the rank of Eagle Scout) revealed a new merit badge on none other than robotics. This is very cool for so many reasons: what the Scouts truly need as of late is something fresh to appeal to a younger audience. I know I would have loved to get this badge when I was in the scouts.

(via Hot Hardware)