I have a friend who used to be a member of the MIT Blackjack Team. He's fond of making the assertion that he could "teach a stick of wood to count cards". It's obviously hyperbole, but the point is that it's not that hard to teach somebody to count cards. Another friend likes to tell people about the time her father was sitting a blackjack table when a pit boss tapped him on the shoulder, pointed at some cameras in the ceiling and said something to the effect of "I want you to know that the folks upstairs have noticed that you're counting cards, but we're going to let you keep going because you're still losing money."
The MIT Blackjack Team is well known for its success for winning millions of from Las Vegas casinos. There was a book, a movie, and a history channel documentary that tells the story. While counting cards was certainly a necessary skill for everybody on the team, I assure you that there was a lot more to their winning strategy than just teaching a bunch of college kids that one thing and then heading off to Vegas.
Two Types of Computer Programmers
The same thing can be said for writing computer applications. It's relatively easy to teach somebody enough Python or Java so that they can go off and create a computer program on their own, but that doesn't mean they can do it well.
People who write code fall into two broad categories: Programmers and Software Engineers. It's easy to create bug-laden software that is hard to use or maybe only partially solves a problem. To do the job well isn't about programming, it's about software engineering - understanding the bigger picture and where your work fits in.
Discipline and Teamwork
Now, to succeed in Vegas, those kids from MIT had to work hard. They spent a lot of time learning all of the angles and figuring how to work the system as a team to ensure that they could achieve a favorable mathematical expectation. Then they spent many long hours at the tables working a strategy to ensure that their cumulative small losses were exceeded by their occasional, but statistically predictable, big wins. Each member of the team had a job to do. It took enormous discipline to stay within the rules of their method, keep from making mistakes, and resist the all too human urge to play hunches. A failure in discipline would mean less money for everybody.
To succeed in writing computer software also takes discipline and hard work. Software Engineers have to know how to program, but they also understand the important engineering principals of design, maintenance and testing that goes into the entire lifecycle of producing a reliable and usable software application. Most software requires the efforts of a team where each member understands their own role, but also how their work fits into the greater whole of a software system and its life the system.
Eventually the MIT Blackjack team was discovered and like the rest of his teammates, my friend has been banned from playing blackjack at most of the casinos in the world; but he also got a Ph.D in Computer Science and has become be one of the finest software engineers I know.
If you’d like to discuss how software engineering methodologies can be applied to improve DevOps in your environment, contact us.