I work as a software engineer in the research informatics field, and have been working as a software engineer for four years. Broadly my work entails designing and implementing software for handling large data sets as well as research programming into new database technologies. There are quite a few misconceptions as to what a software engineer does, and I would like to take a moment to lay those to rest. First off, a software engineer is not just a programmer. A programmer takes specifications designed by other people, writes the software, hands it off to a quality assurance department, and makes modifications until they stop sending it back. A software engineer, on the other hand, is in charge of that process from beginning to end.
Overall I find my work satisfying, and if pressed to give it a rating of 1 to 10 I would have to say a 9. The only problem I have with this field is primarily that the kind of development software engineers engage in is, by nature, usually short term contracts. As a father of two the times between jobs can be very trying.
I enjoy what I do, it’s wonderful to be given the responsibility of designing and implementing an entire system from the ground up and it allows me to occasionally work with technology that may not come to fruition for 15 to 20 years.
I initially got into programming because I was playing a text-based role playing game back in the early 90’s. I saw how even something using no graphics at all could be amazingly entertaining and decided that I would teach myself how to code a similar game. While that has never happened, it led to me enrolling in college for programming and then finally landing a job at a major bank doing software development work. If I could do it over though, I think I’d actually finish college. Not having a degree has kept me out of some truly interesting positions.
One of the biggest mistakes I made in my early career as a software engineer is not writing proper specifications. I was on a six-month contract with a client and four months into it we realized we were aiming for two completely different end-products. I managed to get it done, but it left a sour taste in my mouth and theirs, and required weeks of all night programming marathons.
This taught me a valuable lesson that I really feel that people need to learn in school, and that is when you’re working for someone what you’re really doing is trading their money for your time. That means that they will be watching what is done with that time and may not pay you if they feel you wasted it, even if you felt you had made excellent use of that time.
Software engineering has also led to some truly interesting experiences. I’d have to say the strangest of these was being sent to New York to present a product we had been designing to a group of people from universities around the world. As a professional this wasn’t much of a concern, but as a professional from Florida I was nowhere near ready for the city of New York, and it’s an experience I will remember for a long time.
The desire to create something truly wonderful and enduring is what keeps me getting out of bed every morning. Knowing that my software is being used by, for example, every university in Australia makes me smile every time I think about it.
The job can be challenging though. Before that trip to New York we were trying to get the software into a demonstrable form before we got on the plane so it could be cloned to a few hundred USB sticks. Unfortunately there were several last minute bugs that meant I was up all night fixing them, packaging the software, and the first thing I had to do after landing in New York was clone it to those USB sticks.
As a software engineer there’s a lot of pressure to get it done right because you’re the lead on the project, and that can really get to you after a while. The compensation is worth it though, with even low-end salaries running $50,000 to $75,000 a year, which isn’t bad for someone without a college degree. That compensation has to be enough though, because vacation time is hard to come by not only due to the contract nature of the positions, but the lack of time in which to get a project done.
In this kind of work it’s frequently more important to be good at what you do and have a history of not only getting projects done quickly, but also that you are flexible and can learn new things rapidly. I have had several projects in the past that were in programming languages I didn’t even know and had to add learning that language to the list of things I need to get done.
Overall I would recommend anyone with a logical mind and a strong drive to succeed a position in software engineering, but I would be sure to warn them about the stress and the responsibility, which not everyone could handle. Myself, I hope to continue in this field for quite some time. Since the challenges are always changing it’s impossible to get bored.