For over two years during college I was employed as a transit bus driver. Despite not being an engineering activity, the lessons I learned about responsbility, decision making, and communication are priceless. Busses can fit upwards of 100 people at a time, all of who are relying on the driver to get them to their destination safely. In addition, a loaded bus can weigh upwards of 20 tons. Driving safely is of utmost importance, both for the passengers and other people on the road. Being a bus driver is not a job to take lightly. Oftentimes engineers are called upon to design products that can easily kill people if they fail. Life support systems, aircraft computers, and many other devices can be very hazardous if they fail. Also, in life as well as driving a large vehicle, there are times when the only wrong decision is to not make a decision. There can be several decisions that will work equally well, and the important thing is to make a decision and stick with it. Finally, I get to deal with a lot of people on a daily basis, and I have learned to communicate with almost anyone.
One of the most rewarding things about being an engineer is seeing mathmatical predictions and real life match up. Its one thing to be familiar with equations and be able to use them to predict circuit behavior on complex circuits, but actually building the circuits and seeing the measured parameters match the predictions is a wonderful feeling. It ties the abstract mathmatical world to the concrete physical world. Also, after seeing equations and reality blend, it increases confidence that the abstract equations are actually representing reality.
My favorite computer engineering classes have been the ones where we actually design hardware. The first class like this was a processor design class. After taking most of the semester to learn how a simple MIPS processor (pipelined r3k) works, the final project was to design a processor and implement it in Verilog. This was the most rewarding project I have worked on at Iowa State. It took a large amount of time to complete, but seeing the final product run the programs was worth it. I also learned a significant amount about designing instruction sets. Creating the instruction set was fairly easy, but actually determining the binary format of the instructions was challenging. I learned more about the workings of processors by actually designing one than I could have learned in several semesters. Writing the processor and the example code was one of the high points of Iowa State.
Living on my own has been another aspect of college that has taught me many things. In addition to the standard items of independence, financial responsibility, getting along with roommates, learning how to take care of drunk friends, Ive had an opportunity to learn vast amounts about computers. My dorm room has, at times, been home to over 20 functioning computers. Playing with then, fixing them, and trying different things has been a wonderful opportunity to learn. I have experience with desktop systems, laptops, quad processor servers, Unix workstations, and a variety of other systems. The knowledge I have gained from simply making all of them work together is something well beyond what can be taught in a class, but is a valuable job skill.