I remember learning about strings in programming languages. It wasn’t in class, it was on a production application. I had just written a tool that would log all of the data link traffic between Caterpillar’s ECMs and their PC based service tool. Now I needed to do the sister task of writing a viewer for the log file. I ran the process for about 2 or 3 minutes. Enough to get a couple kilobytes of data to load into the viewer. I open the file and it takes forever* for the text to appear. I called over a couple of our more senior developers/architects. They looked at the application, then looked at the code, and within a minute or two pointed to my problem. I had opened up the file, decrypted the line and added it to a string. I then did this to the next line, and the next, until the EOF was reached.
* Not literally forever, pobably something like 45s.
They were quick to point out that what I was doing was essentially doubling memory usage each time. Iteration one had one copy of the string. Iteration 2 had 2 copies of the first string, plus one copy of the new string. Iteration 3 had 3 copies of string 1, 2 copies of string 2 and 1 copy of string 3, etc.
That was about 11 or 12 years ago. It’s a lesson I remember to this day. In fact, I’m always aware of this story when I work with strings.
Unfortunately, it seems as if in today’s software world, little value is placed on experience. Perhaps it’s the ease of writing software which leads to a low barrier to entry. Perhaps it’s the philosophy that everyone shuold learn to code. Perhaps it’s the DotCom trend of the 2010’s (read: startup fever.) Whatever it is, it seems more and more people are striking out on their own. Overall that’s good. It fosters innovation. It leads to new ideas and new approaches.
But just because we’re all busy trying to innovate, let’s not ignore experience. For such a young industry, there are already a lot of traditions and assumptions in the realm of software development. Some of them need to be challenged. Some, like the story of adding to strings in C++ above, need to just be understood.
What I’m seeing, though, is a lot of people that either
- Don’t know about lessons learned
- Don’t care about lessons learned.
The latest incident that I’m aware of comes from Hacker News. It started with a new product called Ice Box Pro. I didn’t go check it out because based on the headline, I knew what it did. Today, a new post showed up talking about not giving sensitive information to a “10 minute old startup.” (That’s actually pretty good advice, and at the same time, it’s sad that anyone would have to say that. I’d think it was pretty much common sense.) The discussion that followed seemed to basically take issue with the blogger’s stance of calling the site out in public. Personally, I don’t have an issue with that, the company is releasing a public product, they pimped it out on Hacker News, and a reader wrote a blog post about it and also posted it on Hacker News.
To me the bigger issue appears to be that in a rush to get a product out, basic security was not considered. I don’t think this product is malicious, I think they were just ignorant of this issue. But that’s a problem for me. The attitude in software these days seems to be that I don’t need any experience, and I don’t really need a team that’s done anything like this in the past. My three friends and I can just sit down and a hackathon or startup weekend and crank out some code.
In contrast, last year I worked for a startup with a couple friends of mine. It’s an online escrow system (I haven’t worked on it since this summer, and really even this year was cut back as one developer was able to go full time.) I remember a conversation over lunch where the idea of transaction and user ids came up. Everyone was of the same mindset, that the ids could NOT be incremental. This was a team of people that had an average career of 10+ years. We’d been around the block some. In fact, part of the reason this team was selected was that it had experience. The owner knew he could get some kids out of the local college and pay them a lot less than he was paying us, but he also knew they wouldn’t be able to anticipate problems in the same way we would.
I’m all for “disrupting” an existing industry, and “changing how ____ is done.” But from the standpoint of a consumer AND a developer, don’t do it without experience. It can cause your customers suffering, and it makes the rest of the industry look like idiots.