Tuesday, July 30, 2013

Introduction

I'm a mechanical engineer (still a student to be exact) that  programs computers. Almost all of the engineering jobs that I've had were related to software development and not mechanical engineering. I've only had one class related to computer science which was a c# class during undergraduate. Although we didn't get to far in explaining complex CPS problems in the class, it did teach me OOP which has been invaluable as I've tried to learn C#, Java, Matlab, and C++. 

I got started programming in undergraduate because I was working on a robot that would self-navigate down a course marked by white lines. This robot was about 100lb., had 3 wheels, and used a laptop running Windows XP as it's brain. The funny thing was that all of the engineering students who had volunteered to work on the robot did not know how to program because all of our classes were about math or dynamics or some other engineering topic. Ironically, the hardware of the robot was working great, but the brain of the robot need some help. So there I was as a mechanical engineering student faced with the dilemma that has continued to come back to me, how do I modify the source code of this program to make it do what I need? No one else on our robotics team really tired to understand the C++ code that controlled the robot, so as I jumped into it I didn't have much help. But as I started to try to understand and modify the code I learned a lot and I was able to make some basic changes that helped the robot act smarter.

I'm sure that my story of getting thrown into programming is common to many engineers. It highlights the fact that computers are powerful, software often is what separates good machines from bad machines (even if mechanical engineers like me wish it was the mechanical design that separated the good from the bad), and that all engineers need to learn to program.

Since my robot experience I've had other jobs related to software development. My undergraduate senior project allowed me to create a 3D simulation of the robot in C# using XNA to test a vision algorithm. I had a job straight out of college working for a defense contractor working on a Linux embedded system. I reused my 3D robot simulation for an optimization project in graduate school to determine the optimal steering parameters of the robot. I worked extensively with Matlab in designing control systems for several of my graduate classes. I went to China to fulfill Clemson's contract with Baoyan Automation. While in China I modified a windows form application to meet the needs of Baoyan Automation. Now I'm still in graduate school and I'm trying my hand at Android development.

The purpose of this blog is to share thoughts, ideas, and solutions to some of the engineering problems I face. Many times when I've faced a problem I would find the solution on an engineer's blog, and now it is my turn to start doing the same in return.