raw / 10_things_to_know_about_software.md
Raw source · read-only
10_things_to_know_about_software.md
10_things_to_know_about_software.md
# 10 things to know about software 10 things to know about software 1) There is a big difference between a good developer and a great one. Speed of finishing a project lack of bugs good communication 10x research study 2) There is a big difference between good code and great code Runs much faster 3) Most/many manual tasks can be done far faster and more accurately by a machine web scraping categorization of items 4) The reason why developers are so expensive is because companies can turn their work into money and their work product lives for a long time If it takes a developer 6 months to build a website and you use 5) When you contract software development, you are more likely to pay more If you are building software that will be primarily used by people other than yourself, your first version will almost never be right People are surprising in how they repaid to an interface. --- Conflicting modification on December 5, 2013 at 10:17:36 AM: --- 10 things to know about software 1) There is a big difference between a good developer and a great one. Speed of finishing a project lack of bugs good communication 10x research study 2) There is a big difference between good code and great code Runs much faster 3) Most/many manual tasks can be done far faster and more accurately by a machine web scraping categorization of items 4) The reason why developers are so expensive is because companies can turn their work into money and their work product lives for a long time If it takes a developer 6 months to build a website and you use 5) When you contract software development, you are more likely to pay more Why Programming is a Non-Intuitive Experience 3) A simple model or automated system can be tremendously powerful Anyone who has used Excel understand the powerful of light automation. If you want a row of cells to list 1960 through 2000, you don't have to type out each year by hand, you just type out a few, click and drag. Many times, simple software can replace manual labor and do it tremendously well. Optical character recognition of an typed image is one such example. More surprisingly, a fairly basic political flowchart was able to predict Supreme Court decisions in 2002 at a 75% accuracy rate - a fact made even more impressive by the fact that a panel of 83 law professors and political experts only came in at 59% There are probably a lot of things you do day-to-day that could be made way more efficient by a little bit of software. And if you aren't willing to experiment with 2) A fairly simple algorithm can do a lot of things very well. A more complex OCR - can be really good. Voice dictation. Web scraping (using HTML). Predicting the relations of things. Whether or not a female is pregnant and how far along. On the other hand, it sometimes gets stuck - Netflix posted a $1M prize to improve their recommendations by 10% and it was hard to improve. 3) Update for one, impact on millions 4) Users never do what you expect In the tech world, I would consider myself a "business guy". I help with marketing, sales, product management, partnerships, working together with more technical folks. But since coming to the Smithsonian and serving as a Presidential Innovation Fellow, I often find myself in the position of being one of the most technical people in the room. Which is an odd feeling, but also made me appreciate what I have learned about technology and software over the past few years. I realize that the process of creating and implementing software is deeply unintuitive. That is, it often does not go the way we expect and is frustrating in ways we don't often understand. I thought I would share a few lessons I've learned about this issue. 1) Even simple programs require a lot of decisions When we imagine a new website or a new piece of software, it often seems fairly straight forward in our heads. Lots of people will say that they "had the idea for Facebook" years before Mark Zuckerberg launched his now infamous social network. But even a simple Facebook-like website is fairly complex. Should profiles be public or private by default? How big should the picture be? Are friendships "two-way" or "one-way"? Will we have a menu for navigation? If so, what are the categories? Can people change their usernames? How should we manage deletion of accounts? Forget about the actual coding for a minute, if you aren't prepared to do a lot of thinking when designing how your software will work, it's unlikely to be very effective. 2) Accurate estimates of software are deeply challenging If you've ever built software, you've heard the phrase "we're almost there" more times than you care to admit. But honestly you might ask, how hard is it to move that button 50 pixels to the left or connect two databases together? Sometimes really hard. We would totally understand if engineers building a new jet engine slipped on their estimate because, say they found out the metal alloy they were using changed its electrical properties when temperatures exceeded 400 degrees or something. In the same way, there are often unexpected difficulties in creating software that are only discovered much later in the process. That's why in the tech industry, the preferred term for a coder is "software engineer" because every piece of software they make is literally being "invented" out of thin air. 3) You can't just set it and forget it. There are many things that we make that we don't update. A book. A tall building. A work of art. Once you make one of these things, you don't really update it substantially - or if you do, it's a long time later. But when you build software that is used by people (this includes websites) it is more like a garden than a monument. It needs to be tended, to be weeded and watered. Too often I hear of everything as being a "big redesign". I challenge you to find a way to allocate some of your budget to incremental upgrades to your website 6 months and one year out, rather than just launching and forgetting it. 4) Software at scale is an incredible thing Because I've spent these first few lessons describing how difficult it is to make software, I feel I should at least say something about how great it is. When you've got a site that reaches thousands or millions of users, it is a pretty amazing thing. When a researcher comes to the Smithsonian and requests a special notebook, and we go out and get it for them to study, we feel good. We're helping them, we're helping the world. But with some effort and time, we could create a piece of software that automatically retrieves any notebook we have a digital image for to anyone in the world. It's hard to appreciate just how amazing that is - but imagine a stadium full of researchers all looking up different things all at once. That's the power of software.
promote · cite · dialogue ⟶ coming in M3