Wednesday, November 19, 2008
Internship at Smart Robots, Inc.


My internship at Smart Robots, Inc. taught me a number of things. Two in particular come to mind; never underestimate how long it takes to do something, and always check, double-check, and triple-check your assumptions. Old sayings are often true, and this summer was no exception.

After the first few projects, it became clear to me that I could not afford to make assumptions about anything, especially when it came to documentation. Never assume that you have the latest documentation and never assume that the documentation is correct. In another vein never assume that your own code is bug-free. I could have saved myself a lot of time if I had this followed these rules from the beginning.

The key to a successful internship is that both the student and the organization get something out of it. My internship was most definitely a success.

Prior to this experience, I felt that I had a lack of practical application of my programming skills. Did I know Java? Yes. Had I really applied it to anything? No. Academic projects are certainly useful as learning tools, but to take your skills to the next level you really need to apply it to something that will have a real-world application. A failure of your own code can lead to potential customer dissatisfaction with a product, but the success of that code can add value to the product. It is a sobering perspective, but I found it to be motivating. I wanted to produce code that could be run by customers without any problems. This is not to say that problems will not appear, but the discovery of problems combined with this perspective only fuels the desire to fix them. Problems always mean delays, however.

I do not like being forced to estimate my own time. I never have, because inevitably I would underestimate and end up falling short of my own (and others’) expectations. Working at Smart Robots forced me to estimate my time to complete a project. This required breaking a project or task down into multiple sub-tasks until you are at a level where you can readily estimate the time required for each sub-task. I won’t say that I can estimate my time with guaranteed accuracy now, but I’m a lot better off than I was before. Estimating your time is an important skill that will be called upon in any business environment.

The last few projects that I worked on involved rigorous testing of the robot and prototype hardware that would be incorporated into future versions. For the hardware, the goal was to evaluate whether or not it performs as specified. For the robot itself, I tested its navigational accuracy for distance and lateral drift. All of the tests required a scientific, methodical approach. The design and execution of these tests required a bit of creative thinking, as we did not have a whole lot of test equipment available. I ended up using a laser level and string to align the robot and to take measurements after a test run.

I think I finally understand why, in essentially all of my classes, there are usually several projects that require you to work in groups. All of my tasks this summer required interaction, coordination, and cooperation with others to complete. More often than not, a problem I encountered required me to relate the problem to someone else, and work with them to reach a solution. Students may complain about working in groups, but they’ll be appreciative of it later when working with others is a job requirement.

This summer’s combination of programming, testing, and documenting has been highly beneficial to me both as a student and as someone who will be entering the workforce in the next two years. Working in a professional business environment prior to graduating college will better prepare any student for the real world. My work at Smart Robots directly applied to my field of study and helped to reinforce my skills as a programmer.

Sean Underhill
September, 2004