Sunday, November 13, 2011

Gone fishin'

I was having a conversation recently with a friend about the sort of work that I've been doing lately. It's not necessarily difficult to explain, but I've happened upon a nice image that more easily illustrates my day to day work life. I work on a team that builds software and on that team everyone has a role and responsibilities. Recently, I was charged with moving into the test automation role. So I got to thinking about test automation and what it is we're really doing. A battery of good automated tests can give a wealth of valuable knowledge to a team. At the most fundamental level, the tests act as a safety net, alerting the team when there's a problem in the code base. We write the tests based on how we know the application should function. Then, because we've automated the tests, that is, coded them out so that they can be repeated very quickly, we have a quick, easy way to spot problems - otherwise known as bugs. In short, if the code suddenly begins functioning in a way that deviates from the expectations of our tests, we have a mechanism by which we can know early and often that such regressions have occurred.

Now if you've ever done any ice fishing, you might be familiar with the notion of "tip ups". Tip ups are fish traps. To set a tip up, you cut a hole into the ice and fasten the tip up at the surface, leaving a spring loaded red flag exposed and a short line and lure dangling below the ice surface, waiting for fish. As schools of fish, northern pike for example, migrate below the ice surface, they see the dangling bait and try to eat it, trapping themselves on the hidden hooks. Once this happens, the fish pull the lines, releasing the spring loaded flags that now pop up, alerting the fisherman that he's caught a fish. When fishing for quantity, especially during migratory seasons, fishermen will strategically place many tip ups along the routes they know fish to travel under the ice. With the traps set, they can simply sit back and wait and drink and freeze and wait some more until that first flag pops up and they can run over and pull a fish out of the frozen water. That's only the start of it though. Because many fish travel in schools, provided you have quite a few tip ups in place, they'll all start popping up one after the other and you'll find yourself frantically running about on the ice trying to pull up as many as possible in a fishing frenzy.

I find this experience to be very similar to what we do when creating and maintaining suites of automated tests. In test automation, the ice surface is our code base. It is often very vast and unknown to the tester. Your average tester only sees the surface of the ice, so it's often difficult to know and understand what's going on below. What if there are cracks and fissures forming? What if there's a whale below us that will break through the ice and eat us? What if there are a thousand northern pike swimming below and we're going hungry because we don't know they're there? As with ice, so it is with code - we need to set traps to catch as many fish lurking below as we can, only in the code base, it's bugs we're trying to catch, and we don't want to eat them. We want to squash them. Our tests are our tip ups and commits are our schools of fish. Commits are changes to the code base and with each new commit comes a new wave of potential bugs, lurking below the surface of our ice. Like our fishermen cousines, we testers have placed our tests strategically, knowing from experience where bugs like to hide and the routes upon which they tend to migrate. With our traps in place, we sit back and watch. And sure enough, it happens every single day. Those red flags (literally red lights on our build pipeline) pop up to let us know we've caught something. I throw on my hat and gloves, slide down a fireman pole, put on my proton pack and fearlessly pull those menacing creatures from the depths. Now, sometimes you get seaweed or a dead turtle, but more often than not you'll get the nasty looking spawn of hell that seconds before was ready to corrupt your database, send all your users viagra emails, and steal all your grandma's money because she still clicks 'OK' on every popup that comes into view. My job is to prevent that from happening. And it works, because I really love to fish.

Friday, September 16, 2011

Learning to work. Working to learn.

It’s been a while since I’ve written on this blog, but I’m gonna start doing it more. I always say that. And I do love to write. So that’s why I made it part of my next work review cycle. If I don’t write one blog entry a month for the next 6 months, I will be FIRED!!! Remember that scene in Back to the Future 2 when Marty’s dad gets fired? It’ll be just like that, but instead of an asian guy yelling “McFLY!” out of some futuristic video conference device, it’ll be Roy yelling “HOTOP – YOUR FIRED!” out of the Chicago office’s contemporary video conference device.

Well, maybe I wouldn’t get fired – but that’s beside the point.

I’ve been thinking a lot lately about the past 18 months. The past unfathomable, surreal, extraordinary 18 months. First and foremost – I married the most beautiful woman in the world – Andrea Marie Coca. I remember vividly the day I walked into the SUB and sat at the AKL table next to Kevin Price. Andrea’s blond hair was huge that day. I turned to Kevin and asked, “What kinda guys get to date that girl?” He said, “I don’t know…probably Betas.” I thought to myself, “Well.. f#@% that”. About a week later, I had just jumped out Craig’s airplane over Iowa, parachuted to the ground dressed in Stefan’s big blowup pink pig costume. I was pretty loaded at the bar that night and there was a party going on at this dumpster I used to live in called Red Room. Low and behold, look who walks in my front door. That big haired Scandinavian looking girl from the SUB. As if the planets hadn’t already aligned, I had the perfect opportunity to ask her to a dance my fraternity was putting on. She said yes and wrote her phone number on a bar receipt I had in my pocket. I remember putting it under my pillow so that I wouldn’t lose it that night. I woke up in the morning, pulled the receipt from under my pillow and below the phone number was written, well, barely legibly written, “The pig found a date to the prom”. We’ve been together since that fateful eve in Kirksville, MO and I wouldn’t change a single thing. I love you very much Andrea.

I’ve had the privilege over the course of the past 18 months to explore. I’ve explored, in true Indiana Jones fashion, a number of new cities. The ability to explore my country and the world is one of the many reasons I love my job. I’ve been fortunate enough to see India, Greece, Dallas, Austin, New York, Washington DC, Annapolis, and Boston over the past year, living in India, Dallas, New York and DC for substantial periods of time. I try to approach each new town from an anthropological point of view, doing my best to blend in and learn a bit about a new cross section of humanity. It has been fascinating. People are funny. You funny too.

The real point of this post, however, is to share some valuable information. Or at least what I consider valuable information. Perhaps the most extraordinary adventure of the last 18 months has actually taken place in my head. I spend a lot of time in hotel rooms. A lot of time. It can get lonely, but it provides something essential to my future success – a time and place meant for learning. I’m lucky enough that at this point in my life (I know it won’t always be this way), I am concerned about 4 things. That’s it. I focus all of my time on 4 main paths:

1. Andrea, Family, Friends
2. Computers / Programming / Software Development
3. Jazz guitar
4. Russian

For me, this is it. I’d like for one of these paths to eventually make me rich. If they don’t, I’ll just sell drugs or something. For the time being, however, I focus every night on making myself better at these things. They each occupy a unique piece of my psyche and pull me in new and challenging directions that over time lead to a series of small accomplishments. These small accomplishments are what fuel my desire to further pursue each field. You might see the cyclical nature of this process. It’s true – the more I learn, the happier I am, and the more I want to learn. There is no doubt in my mind that this is the case. What I’d like to do now is share with you some of the tools and resources I’ve been using to make myself better in these four areas, in the hope that you too will explore what interests you. Remember, if you do something for roughly 10,000 hours, you’ll be an expert in it.

Itunes University – this is the largest collection of free online college courses available. You can stream or download full semester courses in pretty much any subject you can think of – that means watch each class as the professor is teaching it. You can download the homework and class notes. When I started my job, I had no computer science experience. I watched 32 hours worth of MIT Computer Science courses and then “took” a class in Iphone development class from Stanford. This gave me a firm grounding in object oriented programming and prepared me to move forward in the world of software development. Expensive right? Wrong. All of this stuff is free right now in Itunes.
http://www.apple.com/education/itunes-u/


Mit Open Courseware – same as above. Free courses online. Mainly, math, engineering and programming courses. If that’s what you’re in to, it’s MIT and it’s free.
http://ocw.mit.edu/index.htm

Git Hub – strictly programming related. This is like facebook for software engineers. People check code into remote repositories that they create and the community can participate in the development of whatever it is that’s being developed.
https://github.com

Stanford Courses – Two free classes being offered this fall by Stanford. Anyone can enroll and take the courses online in real time.
http://www.ai-class.com/newsfeed/ - Introduction to Artificial Intelligence

http://ml-class.org/ - Machine Learning

Matt Warnock – The best jazz guitar resource on the internet (imho).
http://www.mattwarnockguitar.com/

Google Reader – This thing has made my daily internet browsing much more efficient.
www.google.com/reader

Ruby Koans - A simple framework used to teach users the Ruby programming language. Very simple. Anyone can do it.
http://rubykoans.com/

Java Koans - Same as Ruby Koans, but for Java.
https://github.com/matyb/java-koans

LiveMocha - An excellent language learning site. There are useful classes and exercises in every language you can think of. And what's better is that native speakers grade and give you both spoken and written feedback on your submissions within minutes. Totally free.
http://www.livemocha.com/

Интерны (Interns) - A pretty hilarious russian tv show, similar to Scrubs.
http://interny.tnt-online.ru/