Why Johnny can’t code

I saw a post on Salon.com which reiterates something I feel strongly about, and have been saying for quite some time.

BASIC used to be on every computer a child touched — but today there’s no easy way for kids to get hooked on programming.

Why Johnny can’t code

Yes, absolutely yes. If you bought any PC prior to the Mac and DOS era, it came with programming built in. It was most likely BASIC, or some similar language. You turn on an Apple 2, Commodore, or Atari computer, and you can immediately start typing in a program that will execute.

If you want to get even close to this on a modern computer, you need to either use a much bigger and more serious language, like Python, or you need some piece of software to help you. It’s not built into the computer. Even if you install Linux, the only thing you can do on the terminal is shell scripting. That shell scripting creates a barrier between the user and other programming languages.

Every operating system should ship with some sort of BASIC-like interpreter. It wouldn’t have any significant additional cost. Just one more icon in the start menu or applications folder. That one icon has the potential to open up an entire world of programming to a new generation.

Now, I was born beyond the BASIC days. I used some Apple computers at school, and learned some LOGO, but I was primarily in the DOS/Windows 3.1 era. How did I learn programming without having a prompt shoved in my face every day? Well, I put some effort in, going to science camp and selecting programming classes as an activity. But more than that, I had a TI Graphing Calculator, which comes with TI BASIC built in. I did a great deal of programming on that calcuator to ease my way through math classes.

And that brings me to my final point. Yes, I agree with this article. We need to expose simple, yet useful, programming interfaces on modern computers for educational purposes. However, the author of this article clearly doesn’t know about the large number of these that exist and can be easily acquired. There are TI Calculators, Microsoft Small BASIC, Arduino, Squeak, LOGO, and may more entry-level programming environments to learn on. If you have kids, or are looking to learn programming yourself, I highly suggest you try some of them out. We do not have a shortage of such things, we just need to get some of them pre-installed.

How to hire a programmer to make your ideas happen

There are many people out there with ideas for technology businesses, but have no technical skills. They need to hire developers to turn the ideas into reality. But how to do it? Derek Sivers offers his advice.

Do you have an idea for a website, online business, or application, but need a programmer to turn that idea into reality?

Many of my friends have been in the same position, so here’s my best advice, below.

How to hire a programmer to make your ideas happen

This article has two points I need to address.

The first thing that needs to be said is that ideas are worthless, and only execution value.. Scott Adams, of Dilbert fame, isn’t the only one to say this. The first time I heard it was from a Neil Gaiman blog post, but I can’t find the exact post at this time.

The point is that if you have an idea, but are unable to execute on it, then you should either learn how to execute the idea, or come up with a different idea that you are personally capable of executing. If you get some programmer to do the execution, then what value are you contributing? The programmer now holds all the cards, and you’ve got bupkiss.

And that leads directly to my best advice for getting a programmer to make your ideas happen. More important than anything else, you need some cold hard cash. If you want a talented programmer, you better bring a lot of it. We’re talking about many thousands.

You might trick some foolish or young programmers into doing work in exchange for equity, but almost anyone with talent or experience will have none of that. They know that your idea is worthless. Many other people have the same idea already. If they do the execution, they have all the equity. You have to buy it from them, not the other way around.

Remember, good programmers are really smart people. They have plenty ideas of their own they could be working on. If they’re going to take a huge risk on a new idea, why would they do it for your idea instead of their own?

Unless you find that really nice, or really naïve, programmer, you need to remove that risk. It’s your idea. You want to own it, even though you don’t contribute any value. You believe the idea will succeed. You want the programmer to do your bidding. Obviously, you have to pay the programmer in cash. No IOUs. No options. No equity. Only pieces of paper with pictures of dead presidents on them will suffice. Hand out enough of those, and you’ll have programmers lining up to execute whatever idea you have no matter how ridiculous.

iPhone =/= Debian app

Based upon these comments, I think I can safely say that tialaramex is not a frequent user of a mobile device with a touch interface.

The _vast_ majority of iPhone apps are basically analogous to web pages, not Debian applications.

Imagine if there were debian packages like view-lwn-kinda-like-a-web-browser.deb and view-phoronix-sorta-like-a-web-browser.deb would you be more impressed and believe Debian was going to explode in popularity? Or would you think its developers had gone crazy? For Debian thousands of worthless packages is a cost, so they’re against it. For Apple every “Hello, world” app is money in the bank.

iPhone =/= Debian app

First of all, he provides no statistics whatsoever. Just how many iOS apps are glorified versions of web pages? There is no doubt that such apps exist, but how many? And what exactly counts as a glorified web page? YouTube has video editing now, so does that make the upcoming iMovie app a glorified web page?

We may not know exactly how many, but it is clear that many iOS applications are indeed web pages. In fact, many of them are literally web pages. They create an app that consists of a full-screen Safari frame that is set to load a specific web page. While these apps may exist, how many downloads do you think they get? You won’t find any such apps featured in the store, and we know that discovery is a huge problem. I highly doubt such apps are purchased frequently.

Now, you may try to suggest that some apps like Facebook, New York Times or ESPN ScoreCenter are the glorified web pages that are installed frequently. Well, those apps are all free of charge. They also all provide significant functionality above and beyond what can be done with a web site, even though they offer the same content.

Yes, they are optimized for a touch interface, which is very important, but their web sites are also optimized for mobile Safari, so the app doesn’t provide a huge benefit there. Where they do provide a huge benefit is in things like caching. The New York Times app will download and cache articles so that you may read them if you lose signal. The ESPN app will give you notifications of the status of your favorite teams, without using costly text messages. These are things that web pages can not do. They are also things you don’t need to do on a PC.

If you’re sitting at a computer with Debian, you likely have a guaranteed reliable and fast Internet connection. You also have a large screen and mouse and keyboard. You don’t need the computer to grab your attention because it isn’t dormant inside of your pocket. You don’t need to radically modify the user interface of a web site because it was built for the interface that you’re already using. The value of facebook.deb is very small compared to facebook.com in Firefox. The value of facebook app on iOS is huge because it has many things that facebook.com in Mobile Safari lacks.

Even if we stick just with the desktop computer, and forget mobile devices, you can see how stupid this argument is. Think of a site like meebo.com. It’s a complete instant messaging suite. I guess Pidgin is just view-meebo-kinda-like-a-web-browser.deb. I guess Debian should remove any and all .debs which duplicate functionality of web pages. Seeing as how people have even written browsers that run in browsers, I wouldn’t go there if I were you. Someone will make the Linux Kernel run in a browser, if they haven’t already, and then where will you be?

The “if it isn’t broken, don’t fix it” Mentality

I just read a post by Martin Rue who gets upset when people say “If it isn’t broken, don’t fix it.”

As it is being said, I detect the whatever works attitude emanating from the person saying it. No concept of continuous improvement. No interest in reflecting. Not even 60 seconds invested to consider whether the process is efficient or could be improved. It most cases it’s almost a canned response to any comment referring to the efficiency of a process that is considered to be working.

I have to say that I both agree and disagree with Martin on this one. Yes, there are many times when something can be improved or made more efficient, and people do not want to invest time and effort to transform the satisfactory to the exceptional. People should be striving for excellence, and it is depressing when they do not. Yet, I find myself taking this philosophy quite often, and here is why.

Sometimes, especially in the world of software, I find people want to spend a lot of time improving things underneath the hood. That’s well and good, but quite often this re-architecture makes no difference for the user. If a program is coded in an ugly and horrible way, but it’s fast and functional and optimal for the user, who cares? Unless you have a lot of extra free time, or the bad code is causing maintenance or performance issues, why should you fix it? You’ll basically just be spending time achieving effectively nothing if the user experience is identical. You’ll actually make it worse if you cause downtime or introduce new bugs, which is almost certain.

The other time you shouldn’t fix what isn’t broken is when you have something else to do. In every job I’ve had there have been multiple horrible computer systems to deal with. Almost none of them have been excellent, and many have been broken. Pretty much all of my time was spent fixing the broken ones. The other ones still sucked, and everybody knew it, but they worked. I guess I could sum it up by saying that you shouldn’t fix what isn’t broken if there’s something else that is in fact broken that you could be fixing.

Yeah, if everything works, and you can actually improve things for the user, go ahead and fix a non-broken system. Otherwise, the risk of causing some unnecessary downtime or introducing new bugs into a functional system is probably not worth whatever benefit your improvements might provide.

All this, of course, assumes you are in a business. If it’s open source or something, then strive for excellence no matter what.