Yesterday, I had lunch with some friends and two people mentioned that they lacked a proper college degree. Somehow they felt that having a proper college degree has hurt them in some way. While that part might have some truth, it’s not the whole story. The conversation led me to de-construct the notion of academics and practicality with what you learn in school. Ultimately, I went down the path of my chosen profession (technology) and asked this one question: what is the best code written?
Some answers given were “the most efficient” or the “fastest.”
In my estimation, the best code written is that which makes the most money.
What!?!?!?!?!?!
I’m certain many people in the industry and in universities alike will have extremely conflicting opinions on the subject. There was a similar discussion on WWE Legends where someone asked who was the best wrestler ever? While there will always be great technical wrestlers, people often times will go back to guys like Hulk Hogan or Steve Austin because of their box offices and/or what they accomplished for the wrestling industry.
In that vein, the best written code is that which gets all the cash. Why is that? Why isn’t it the most efficient, or the algorithmically precise or things which solve the most complex things in life? Simple: no one cares. People who care would pay the money and use that code. If code is really great, people would have no problem forking over money (or other forms of compensation) in order to use it. Hence, why companies like Microsoft, Google, Facebook, Amazon, Blizzard, etc. in this vein write the “best code.”
The “best code” can be efficient, solve complex problems and be aesthetically pleasing, but these are not necessary requirements. They usually are a part of the reason why a product can sell. For instance, Google’s view on making everything speedy and responsive is one of the reasons why they are so popular. For a long time, Blizzard was held in high esteem for having relatively bug free games. Facebook has solved the issue of helping you finding your friends in the world. So these cases show why the type of software works.
However, some people might think just because code does similar things it can be the “best code” written. This to me is a huge myth. At the end of the day, computers just will end up processing code all the same. End users won’t give a shit what the code looks like nor how it was written as long as it solves their problems. But more importantly, even if code is well written, when no one uses it, code essentially has zero value. It’s that simple.
I wanted to relate this to some personal experiences I’ve had with regards to various work environments I’ve been in and my own projects. For many years, I had made attempts to create my own projects for the web, but none of them succeeded (obviously). However, I also worked at some high profile companies. In only one case, did I see anything close to both the near ideal engineering environment and code base. However, it was for a well established company. In another case, I worked for a social media content company. The site I worked on had mediocre code that we were slowly improving over time. But the more striking part was two other sites that I discovered were purchased for $5 million a piece. In those situations, the two sites had some of the most god awful code. However, they generated revenue, had high traffic and a good community.
Then I worked at a domain name company where my coworkers were from excellent schooling (Caltech, Stanford, UCLA, USC, etc.). We attempted to put process in place, holding numerous meetings to gather requirements, think through all the little issues and then come up with an architecture that would be able to scale and handle all types of use cases. At the end of the day, big fights broke out, people got laid off (me) or quit. However, all those meetings, which lasted around 6 of the 7 months I was there, went nowhere and the code ended up being a hacked up version.
I might be biased in getting laid off but I think if we managed to write “crap” code that made money and managed to penetrate the market at the right time with the fever against ICANN, we probably would have had a chance to do well (even if the business model sucked at the time; that said, more domains were released over time so the idea wasn’t bad, just the management and implementation).
Going back to the lunch, my new friend did ask me whether the projects gave me any enjoyment or betterment. While I did learn some things such as my limits, weaknesses and a few techniques that I could use later on, I do feel that my time would have been better spent overall chasing women (since quite a few projects I was doing was in Japan at the time).
But let’s put it another way. When you’re employed, you’re not going to be building what you want. You’ll never write the best code because most of the time you’ll have little insight into what you really need to build. The requirements gathering phase will always be extremely vague because product people, project managers and software managers alike (as well as higher levels of management) will do the bare minimum to define every aspect. Most likely, they too will never have a full view of what they want to accomplish. But then again this is software and if we wrote everything perfectly on the first try, why would it ever evolve?
So why this rant? Part of this rant has come from an article I read recently about the problems of academic computing vs business computing. The article goes to discuss how universities tend to oversimplify the problems students need to solve by providing only the easiest examples. Also, the theories of software engineering and coding, while having their place, would tend to not be used at all in practice once you get into the industry.
What academia does provide is a foundation for problem solving and recognizing certain patterns with a few solutions for those patterns. But it does not attempt to provide you with all solutions just enough tools to get to the next step.
Is this a necessary thing for creating the “best code?” Not really. Bill Gates, Steve Jobs, Larry Ellison, Mark Zuckerberg, etc. can all tell you differently. If you’re motivated, energetic, full of ideas and willing to improve/learn, you can write the “best code.” But just having a degree does not equate the “best code” nor being the best programmer.
On a side note, in my career, I haven’t encountered many computer science degree wielding engineers. The ones that had a legitimate computer science degree tended to be on the managerial side whereas the better coders were mostly self taught and/or college drop outs (some didn’t even bother attending college). I think since they didn’t have the indoctrination of academia, they’ve felt compelled to be better than their compatriots. Also, the people in school who did the best in terms of grades were not necessarily great programmers. They simply could take test better, or worse they cheated on test and homework assignments.
I think this is why guys like Peter Thiel and Larry Ellison feel that academia is a waste of time. In many ways, they are right. It isn’t uncommon to find people with degrees doing something completely unrelated. Also, you’ll frequently meet people who complain that after receiving their degree that “they learned nothing at a university.” For me, it’s all about satisfying expectations. I think that people feel entitled to some job after college that relates directly to what they’ve done. But if you choose something like liberal arts, what opportunities can you get easily outside of teaching?
From a numbers game point of view, school (definitely in America) can be a waste of time and money. Take masters degrees for instance like an MBA. A friend of mine once said that anything less than a top 10/25 school is worthless. Why? Because no top business will ever recruit from there. Another friend who works as an architect has an MBA from UC Davis. When I told him that I considered getting an MBA, he dissuaded me from it. He pointed to himself as an example. I can cite numerous other people who all felt the same way.
The time and money it’ll take you to obtain a masters degree (say 2 years on average) implies roughly $100k debt and potentially $200k (or more) of lost income (where I assume that in a programmer’s case, that a decent programmer can earn $100k/year these days). Also, there’s no guarantee that after getting a masters degree (or anything for that matter) that you get the job you want or any job that matters.
But raw skills, experience and a proven track record will always outweigh a straight out degree. If your code increases revenue, traffic, usage, etc. those aspects will qualify you as one of the “best programmers.” As an English major and as someone who has worked for great companies and has made it to the level of CTO, I can attest to this.
Lastly, don’t forget that academic institutions have their own agendas. School != some godly entity that will look for your best interest. Schools are run by people all the same. Not by some benevolent deity who will serve your needs. Schools serve their own needs, which is to sell more books, pay for professors, get more research grants, more prestige, more rewards and so on. Professors themselves want you to buy into their philosophies, their schools of thought, so they can continue their research and have more publications sold and be given more research grants for what they want to do. When professors ardently defend themselves against people like Peter Thiel, they simply are rationalizing their own personal experiences, but not the workforce at large.
At any rate, I hope this article will help convince you that at the very least you should stop beating yourself over the head for not writing academic code. Academic code is useless and belongs in textbooks. In fact, I think they shouldn’t even attempt to use that as examples since it only gives people bad ideas of how things ought to be. Having a sense of balance and understanding how to get things done is more important. Also, being confident in oneself in their own abilities while striving to better themselves at all times. But most of all, just get things done so you can collect a nice paycheck for all that hard work you’ve done.
Leave a Reply
You must be logged in to post a comment.