Think about it, Then Solve it

The final post for an amazing seminar.  I remember when I first applied, the reason I said that I wanted to be a part of this seminar was so that I can “connect to the entity that connects us all.”  Through our discussions, I feel as if my connection with the Internet has not only been stronger, but more aware and thoughtful.  

Before diving deeper into the takeaways from this class, I want to reflect upon our discussion in class, which was about cryptocurrency and blockchain technology.  It was great to clear up the mystery behind blockchain technology because I was getting sick of hearing the word “blockchain” whenever I attended a career fair.  It is one of those buzzwords that get thrown around so much that it begin to look more like a joke rather than something revolutionary.  Even during the class, I was still piecing together what the technology is because even though I learned about it before the class, it was difficult to wrap my mind about the exact workings of it.  Maybe that will be a side project, implementing a simple blockchain app.

*By the way, some other tech buzzwords that I find sickening and being carelessly thrown around are, but not limited, to the following: machine learning, AI, API, data science, VR, AR, and startup.  

Generally, there are many great things about blockchain technology.  Overall, it has the ability to decentralize, make secure, and make transparent information that was originally not any of the three things above.  It relies on the idea that computing power can’t be centralized, or if so, it requires a tremendous amount that it is ‘impossible’ for one entity to take over the entire chain.  On a side note, it was really interesting to learn that information is deemed ‘secure’ by the time it is six blocks down the chain.  

However, let’s take a turn and analyze the downsides of blockchain.  Surprisingly, it is quite difficult to find the cons of blockchain because wherever you go, the general consensus is that blockchain will revolutionize the internet and has no faults.  Today’s class revealed the problems of the technology that I would not have even known, and because of that new information, I am becoming more cautious about blockchain itself.  

The general issue with blockchain is that it hopes that no one entity will ever able to amass the large amounts of computing power required to take over the network.  It would take so much time and electricity to verify the transactions that it would be impractical on a CPU or even GPU.  It is because of this philosophy that Blockchain is said to be “decentralized.”  However, Dean Smith commented in one of my earlier posts, the pendulum of centralization-decentralization swings back and forth in time.  Almost everyone has some form of access to some sort of computing device, but not everyone owns a Bitcoin mining rig.  The inequality in today’s society is seeping into the digital world.  Even if the hashing algorithm was to be written in a way that makes the computation easier for any device, as Dean Smith and Professor Waldo said “we can build the hardware to make it run faster.  If it runs on an algorithm, we can build something that runs it better.”  This is troubling because it reveals that there is truly no way to easily equalize computational power, unless we suddenly adopt a communistic approach to computing, which frankly, will be practically impossible with the Internet.  

So why would someone spend millions trying to monopolize computing power and develop specialized hardware?  There is money behind cryptocurrency.  Unlike TCP/IP, there is real money at stake behind every cryptocurrency.  As long as humans are humans, there will always be someone who want to take control of the money supply.  

Another problem with blockchain is that anybody can contribute to it without any oversight.  The theft of $31 million of Ethereum revealed the problem with blockchain technology itself: it is almost impossible to go back and fix the code because of the tremendous amount of computing power to do so.  Usually, the only way to take care of this is by doing a hard fork, or split from the current chain.  This is completely different from the Internet, where if something breaks, we can easily git push the debugged code.

A possible solution to this is by adopting the Linux bureaucracy model, with an entity having the status of benevolent dictator.  This way, code could be checked and tested extensively to ensure that there are minimal to zero exploits possible.  However, this defeats the entire purpose of blockchain because we have a central authority that oversees the entire network.  Unless the technology behind blockchain can be improved in a way that allows bugs to fixed without redoing the whole chain, we need to proceed carefully as we continue to adopt this technology.

We are near the end of the post, but I would like to reflect on the deeper ideas that these discussions have taught me.  

The first is that computers and the Internet are not perfect.  It was not made by a God or gods but by very human but very smart computer engineers, computer scientists, and programmers. Computers and especially the Internet have revolutionized our lives, but there will always be some shortcomings, bugs, and hacks that is possible with every system.  It is not perfect, but it is enough to change the course of humanity.  

The second is trust.  Throughout our discussions, we keep coming back to the theme of centralization and decentralization, and in general, keep mentioning that decentralization is a good thing.  However, I learned that having no central authority is something that won’t remain forever, and that the pendulum will at some point swing to the other side.  And when it does, it is difficult to shift it to the other side.  When it does, we are placing a huge amount of trust on these entities.  We trust Google to give us reliable information that we want to look for.  We trust Amazon to send and ship quality goods in a timely manner.  We trust software engineers and security specialists that that the code protecting our personal identities is secure (shout out to Equifax).  Why do we have to trust?  Because we simply don’t know or cannot know everything.  

The third is that there is no easy solutions.  We did a lot of philosophy in this class, and the main thing that bothered me was the circular nature of it.  There is no black or white, but only shades of grey in this world.  Solutions are not easy to come by, and if there is a clear one, it is not easy to arrive at.  Asking ourselves these questions by looking at the future will help us become aware of the potential consequences.

The final note that I would like to leave at is that despite everything being circular and complex, we cannot just stare at whiteboards or have discussions. There will be a point in time that we need to release that code to the world.  Problems will always be a common thing in our lives, but we should not let it stop us from marching onwards towards progress. We thought about it, we know about it, we are aware of the consequences.  Now let us solve it.


  1. Jim Waldo

    December 6, 2017 @ 8:25 pm


    I like your conclusion– no matter how gray the decision space, sometimes you have to ship. But remember that when you reach this point will depend on how important the code is. Shipping an application that lets people talk to each other is a lot different than shipping code that controls a medical device (or car); the number of bugs that can be allowed into a game is very different than the number of bugs that can be tolerated by a system that deals with money. Understanding the difference is an important part of becoming a software engineer.

    It’s been great having you in the seminar, and I’m sure we will cross paths in the future. Stay in touch, and keep coding…

  2. Mike Smith

    December 6, 2017 @ 10:33 pm


    Jim’s point about deciding when to ship is an important one. I want to make sure you understand that the question you should ask yourself is one beyond bugs. Yes, shipping a financial app with bugs is more devastating than a social media app with bugs, but the use of social media to impact the last U.S. election shows that you don’t have to exploit a bug in an app or system to have some big negative impact. You should look for bugs and you should consider how people **might** use your system. Technology can always be used for good and bad things, but you shouldn’t make the bad things too easy to do.

    It’s been fun watching you grow throughout this past semester. Please keep in touch, and definitely keep working to solve the problems that face our world.

Leave a Comment

Log in