Software Engineers Aren’t Computer Whizzes

There is a misconception held by non-technical types about software engineers and other types of people who you might call “IT types” (this also applies to some degree to hobbyists, power users and tech nerds). It’s the notion that there is this thing called general technical efficacy or “the knack for technology” and that, e.g., programmers have the knack to a greater degree than anyone else.

This might sound like a preposterous strawman but I encounter the fallacy everywhere. You see it when someone goes to their programmer relative because they have a problem with their iPhone yet their own 13 year old daughter would probably fix the problem more quickly and without grumbling about walled gardens and DRM. You see it when someone asks a systems analyst about the best way to send a file or how to do something in Excel when someone in marketing will answer your question more quickly and in language they could understand.

The truth is software engineering (for example) is a different skill than using computer tools. Sure, being good at the latter helps with the former but it’s possible to be good at only one. It’s not hard to think of examples, like OEM system builders who either don’t know how to program or never had a need to progress beyond writing utility scripts. Think also of elderly programmers who are whizzes at optimization but can’t navigate their way around a smartphone.

Sure, someone may be an all-around expert on computers and all things computing just like someone can be an all-around expert on oceans, being both an expert surfer and deeply understanding the ecology of deep sea life. But all most computer professionals do when you ask them questions that aren’t in their core competency is do the same thing you can do – use deductive reasoning.


Response to Steve Jobs’ Open Letter to

I mostly agree with most of the technical issues he raises and I think the lesson here is that it does, in fact, pay to use open standards. However, there are some things he says that I take issue with as a developer:

Replacing flash with H.264 is not an option right now for several reasons. Firstly, flash isn’t simply a way to view video. At present there is no way to have interactive elements in a web page that work on desktop and iP* other than javascript, which has its interoperability problems (though the jQuery and prototype folks usually do a good job at sorting that out for you). Second is the notion that H.264 already is the default format for HTML5. No, it is not. That has not been decided yet. Hopefully H.264 doesn’t win since it, too is proprietary, the very thing Jobs takes issue with for Flash! I even notice that at Apple stores, the employees are basically told to tell this tale to customers who are web developers that they should just replace everything with HTML5 and H.264. I hope that Google does open-source VP8 and that it becomes the format that wins, or VP8 and Ogg and that Apple doesn’t kick and scream in protest when they win the HTML5 video format wars. We don’t want .gif part 2!

Jobs also has a disdain for 3rd party development tools. Here I see the motivation as business, not technical. We developers have only so much time-money and Jobs knows that making it difficult to support multiple platforms with the same source tree more or less will make a lot of developers chose to develop only for Apple’s products. Jobs knows this very well and I believe it was behind the decision not only to not allow Flash but also to not allow Java. Jobs even boldly chided Java as something no one uses anymore. No one? Well, except for their mobile devices’ biggest upcoming competitor, the Android platform. That’s all.

When developing C++ desktop applications, I don’t want to waste my investment. I use Qt. It doesn’t block me from using the latest innovations in Windows, Mac OS X or Linux’ desktops (KDE and Gnome), but it gets me most of the way easily. 90% of the time for 90% of the people making business apps (not games), OS specific GUI code shouldn’t be necessary. I believe the same is true for mobile devices. Without writing with the iphone in mind, I believe you can have your tool translate your menus, form items, etc. into the appropriate code for different platforms. Apple won’t allow this. My understanding is they won’t even allow this if such a tool (including the tool Adobe made earlier to translate Flash into Obj-C) even if you hand-edit the code after generation or make your own regexp to modify after generation (so at least minor edits won’t require a rewrite to remove wasteful routines, etc.) This is a shame. It’s bad for developers and consumers, but good for Apple. It also directly affects me as I was planning on making an XUL to iphone gui converter.

So again, I absolutely agree with Jobs’ assessment of Flash’s shortcomings. If he is serious about them, though, I trust that he will allow Flash once they are addressed? If Adobe fails to correct these issues and it may be impossible without breaking backwards compatibility, their prize platform may go the way of the Dodo, with or without Apple’s sabotage. At the very least, I believe something that creates obj-c from an AS3/Flex project should technically address the issues.

Newscientist: Horizontal and vertical: The evolution of evolution

Lately, I’m increasingly thinking, especially after reading this article, that evolutionary computing would benefit greatly from using a more bacterial type of evolution, where genes are shared between often unrelated organisms, rather than brute inheritance. Another way of looking at it, is it might be good to deal with the complexities of subroutine sharing (which functional programming would make easier) than the complexities of sexual reproduction which make my eyes glaze over to read the solutions offered for. Maybe I’m just not clever enough (my earlier post on genetic programming had a little ruby script and it only uses asexual reproduction).

I am skeptical of the article’s claim that the shared genetic code of all organisms must mean that genes were shared between organisms like bacterium do today. Firstly, bacterium don’t all share some common genes due to the passing of genes between species as it is. Secondly, clade evolution – where clades that are just better at evolving edge out others over time could be sufficient explanation. Surely DNA-based life had immense advantages over life with less fault-tolerant code. Just the same, the article makes a good point that biologists are, being human macro-centric – they focus on multi-cellular organisms even though most of the biomass, even more of the variety, along with the vast, vast majority of the history of life on this planet, is prokaryotic.

Exercise 3-6: Sorting Lists & 3-7 Using Library Modules

It looks like there’s one other guy on the internet who’s posting his answers for the exercises in this book. So, I’ll be linking to his so you (and I) can compare our answers. He knows what he’s doing. In his posts, he talks about, e.g., what he’d do in Haskell. I’m not a functional programming guy (lisp gives me the heebie-geebies, my earlier post on evolutionary programming where I used it notwithstanding). So, below are my answers (click to see more if you’re looking at the blog and not this post by itself) and here is the Japanese guy’s answers.

Continue reading