|
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
|