Friday, December 5, 2014

Floundering in Ignorance


One of the most enlightening experiences I had in college was collaborating on a software project in a large group. After struggling with the social dynamics and the difficulty of the project, I learned about a concept described by Philip Armour called the "Orders of Ignorance." This concept provides a framework for understanding difficulties in software development and illuminates the source of our struggles.

Armour explains that in life there are various orders of ignorance. The 0th order is knowing something, or having an answer. The 1st order is awareness of a lack of knowledge, or having a question. The 2nd order is a lack of such awareness, or not even having a question. The 3rd order is not having a way of discovering what is unknown. My group’s main difficulty dealt with the 3rd order of ignorance: we did not know how to proceed once we chose a problem to solve.

Originally, the group leader decided that we would build a product to help system administrators easily view a computer system’s status. We hoped that building an interactive web interface with real-time graphs would enable system administrators to easily identify system-related issues. While we understood the problem we wanted to solve, we could not figure out what information the user would need. We did not know which kinds of data should be displayed together, how to analyze and display the data in a meaningful way, or how to empower the user to dive deeper and inspect the data more thoroughly. The group leader had the best understanding of system administrator needs, but he was often unavailable and ineffective in communicating his desires, leaving our group to flounder.

Ultimately, the group decided that the project was too hard and we switched to one we understood better. Looking back on the experience, I now realize things that we could have done to succeed with the original project. In other words, I no longer have 3rd order ignorance concerning the situation; I know processes we could have used to find questions and figure things out.

First, we should have just started building something. We could have made a simpler version of our product to report at least one piece of the data in real-time. Not only would this have helped us progress in building the product, but it also would have likely given us new ideas about displaying system data. In other words, we should have tried to discover through building. Armour calls this process of resolving 2nd order ignorance hacking. Hacking almost always makes 3rd order ignorance impossible by definition.

The second thing we could have done is to ask for help. If we had just made the connection between our struggles and 3rd order ignorance, this would have solved the problem. We could have sought help from our professor, done more research, or talked to other students who might have had more experience with system administration. Each of these sources might have given us direction.

This experience of applying the orders of ignorance to my situation after I had already failed makes me wish I had understood them better at the time so that my group could have succeeded. While the other project we worked on represented a great learning experience, giving up on the first project leaves me with a bad taste in my mouth. Other software developers should also have an understanding of these principles. This could help companies, open source groups, and programming hobbyists succeed where they might otherwise fail.
(Philip Armour's "Orders of Ignorance" can be found in Appendix B of his book, The Laws of Software Process: A New Model for the Production and Management of Software)

Tuesday, December 10, 2013

Knowing your limitations as a working student

October was a bad month for me. I was falling behind in school and I was unproductive at work. The worst part of this for me was the feeling that I was cheating my employer. I only worked three days a week and was assigned to large projects. I felt bad because I spent lots of time figuring out what I was doing and what I needed to do next instead of making progress on the assignments. Also, school pressures were distracting me from work. Luckily, I had a great manager who helped me adjust my responsibilities and encouraged me to take a day off from time to time to catch up in school. From this experience, I learned that I need to be honest with my employer about my limitations or any hesitations I have about a particular assignment. The ACM's Code of Ethics states,
"A computing professional has a responsibility to request a change in any assignment that he or she feels cannot be completed as defined. Only after serious consideration and with full disclosure of risks and concerns to the employer or client, should one accept the assignment."
I wish that I had been wise enough to understand this concept before. I hope other working students and new working professionals can learn this lesson without the pain of hard experience.

Tuesday, December 3, 2013

Internet Immune System

Like germs coughed up by a room full of children, inappropriate content spreads through the Internet. We use the term "viral" all the time to describe Internet content. Just like we have to balance avoiding germs and building an immune system, we need to balance avoiding Internet filth and building self control. Parental controls and pop-up blockers will only protect us so much. At some point we will have to exercise self control, so let's make sure we get some.

Thursday, November 7, 2013

Cheer up your friend with a simple text

Since we all know that technology can be used for both good and bad, I thought I would share a way that was recently added to the good list: NowCheerUp.Me. This site's slogan is "Have a Hug on Us." Using this site you can send a random friendly note anonymously to any mobile phone number... for free! Here are two samples:
"What do Iron Man, The Doctor, Indiana Jones, and Marty McFly have in common? You're more awesome than all of them."
"You are loved by so many people. You're a beautiful, wonderful, amazing human being. Seriously – don't stop being brilliant."
So, go and do something good with technology!

Thursday, October 31, 2013

Level-headed thinking about intellectual property laws

Usually when I hear people talk about intellectual property laws, they just rant about how restrictive copyright can be and how we should have a more free and open society. Occasionally I hear (or give my own) rant about how copyright should be respected in order to protect producers (whether they be writers, programmers, or whatever). The truth is, however, that intellectual property law is not black and white. Yes it is important to protect consumers, but having a free and open society has its merits as well. Sometimes big companies fuss over illegal file sharing (especially music), but really the big companies benefit from free word-of-mouth advertising. I do not know exactly what changes should be made to copyright law, but I for one will continue to obey the law and begin to be more open to some of the potential reforms.

This article by Osron Scott Card has some good insights and interesting ideas about how to change the laws in a way that is win-win for everyone.

Friday, October 18, 2013

Work for it. Care about it.

I am a computer science student, and as such, I have learned a lot about open-source software. I recently had the opportunity to work on a project called OpenSeadragon during my internship at FamilySearch.org. I found working on the project deeply satisfying. I was able to contribute to code many people use, simultaneously contributing back to the open-source community that I rely on so much as a programmer. A year ago, I knew almost nothing about open-source software. Now I feel strongly that it is an initiative worth supporting and contributing to. It is because of the effort I invested into open-source that I care so much.

Another example of this can be seen in Cliff Stoll's personal account of chasing a hacker in his book, The Cuckoo's Egg. Because of Stoll's background as an astronomy student and a programmer, he recognized the value of computer networks and research sharing. But it wasn't until he worked for months to catch a hacker in his system that he really began to feel passionate about network security. Usually we invest in what we care about, but just as often we care about what we invest in.

Tuesday, October 8, 2013

Piracy and intellectual property

I respect copyright. When I need an image to use in a PowerPoint presentation, I use Google's advanced image search to find images with a non-restrictive license. If someone is going to go to the effort to produce something awesome, they have a right to charge for use or not. This makes me appreciate movements in open-source and ad-based products because they let me use great products without paying. As a programmer, I use open-source software all the time. As a consumer, I often watch YouTube and read web comics and I am happy to disable my ad-blocker for these and other sites I visit frequently (as long as the ads are appropriate). It bothers me how people disrespect others' intellectual property. I hope that we, as a global society, can learn to respect the effort that others make to create great things.

Post inspired by: Think piracy is killing the music industry? This chart suggests otherwise.