Monday, November 14, 2016

Why Open Source?

There was a period of time, roughly sixteen years ago, that for the life of me I could not understand why someone would spend their time on open source projects. A decade and a half later, I have flipped my opinion to the point where I cannot understand why some people have such a deep seated distrust of open source.

We are now over a decade past when then CEO of Microsoft, Steve Ballmer, referred to open source as a “cancer”. There was a point of view that sincerely believed that something given away, maintained by a community, and with no central authority could not possibly be as good as something that was built by professionals. I now truly believe the opposite.

Open source does not depend on security through obscurity. With the source code readily available for viewing by anyone, it better be secure. Further, there is a different mindset in the open source community versus the closed source. In the open source world, anyone who finds a security flaw is hailed as a hero (Example of the  Postgres community asking for people to break their security model). The flaw is patched and the software is up to date and more secure. In the closed source world, finding a flaw makes one a “hacker” and possibly a criminal. A company can sue an individual for even attempting to find a flaw (Example of Oracle threatening to sue customers).

As a software professional, I can sort of understand the point of view that simply giving away a product degrades what it is that I do. I tend to look at it and in a different light. I do not see myself as a master of everything. I depend on certain raw materials to make things work. I may take a database from Postgres or Mongo, an API server from Java or NodeJs, and a front end library from Facebook’s React. I did not create any of these materials, but I take them, work with them, and assemble something with them that I find useful. Even without making each of these components from scratch, assembling them is a skill and that skill has value.

In a goofy analogy, I see myself as a general contractor. I get to go to Home Depot and get a bunch of raw materials for free, but making a house out of the materials is on me. Having free material does not take away from the ability to build something with the material. Instead, it builds a community of expertise from which I can draw on to build better finished products.

Further, there is greater flexibility in the components offered in the open source world. In a previous life, I had selected a JavaScript library for displaying tables with the requirement that the table had to have pagination, searchability, and sortable by column. Later, I was told that the library was not 503(c) compliant as the user needed to be able to tab from the search box to a column, click enter on the column, and have the table sort in the same manner as if a user had clicked the column with a mouse. Instead of being thrown by the new requirement, ripping the library out, and starting over; I modified the code and had the new requirement working in about half an hour.

So open source creates a bunch of really great components from which cool things may be built. It may very well be more secure than closed source code and it is definitely more flexible and modifiable. But why in the world would someone dedicate their time to something which will inevitably just be given away? While not speaking for everyone, I can speak for myself...

CONTINUING EDUCATION

My first real job out of college was at Deloitte and Touche. At one point, there were six major accounting firms in the United States. These firms were so big that they were known collectively as the “Big Six” (consolidation has now brought it to the “Big Four”). The accounting companies had consulting arms, but being born of an accounting firm there was an emphasis on the idea of “continuing education”.

I really love this idea. Just because I know how to do something now with an existing set of tools does not mean that I have been exposed to everything. In the last few years; I have done work in Java, Ruby, and NodeJs. I have built ReSTful APIs. I have used MySQL, Postgres, and Oracle databases. I have used jQuery, ReactJs, and Angular. I taught myself how to use map/reduce and deployed projects onto Azure and AWS.

Five years ago, I really struggled with the concept of NOSQL vs a traditional relational store. It took a lot of soul searching, reading, and experimenting to come to a more pragmatic realization that they both have their place and the real trick is knowing when to use each. Without hands on experience, I am not sure that I would have ever gotten there.

DOING SOMETHING GOOD

In a certain sense, in a capitalist society, simply producing something is doing good. However, I would like to do more. In my goal of doing an open source project a year, I have raised over $2,000 for the Juvenile Diabetes Research Fund and am currently working on a monitoring system to help parents care for their children with diabetes. While I believe the monitoring system is worth something monetarily, I cannot sell it as it would require a bunch of regulatory compliance with HIPAA. I can give it away and help other parents and that actually feels better than commercializing the product.

Those of us caring for T1Ds are all in this together. I would sincerely rather help than profit.

FOR THE LOVE OF THE GAME

For the last several years, I have developed for a living. It would be nice to think that I get paid to do something that I love. However, it is never the coding that is difficult. It seems like every professional job I have been stuck “Throwing the Slant”. It feels great to be able to decide what I write, how it gets used, and interact with people directly who use my software.

SHAMELESS SELF PROMOTION

I may be giving away software, but I am also allowing people to see how I think and work. Tech interviews absolutely suck, building a portfolio and having something to talk about in a tech interview has done wonders for my career. The last two job offers I have heard that the developers were literally on my github page checking it out.

What if someone doesn’t like the way I code or think it sucks? No problem. I would rather not get an interview. If you like it, let’s talk. If you don’t please pass and we will save each other some time. It’s a win win.