Question: How many lines of code do you think is required to run a Boeing 747? How about a video game?

Answer: A Boeing 747 airplane requires 4 million lines of code and a video game contains 6 million lines.

That’s a lot of code!

You may picture a software engineer as a lone programmer in a basement staying up half the night working on his computer, but you would be wrong. That depiction is more fitting for a hacker like George Hotz, who unlocked the very first iPhone back in 2007. Software engineers work in teams and good communication skills are essential for their success. They do need to write code individually, but they also need to interface with a large number of people on a regular basis. Creating a piece of software for a business is definitely a team sport.

Now let’s dive into the two fundamental aspects of software engineering: development and maintenance.

Development is the fun part for software engineers. When a project is started, software engineers get to experience the feeling inventing new things or adding new functionalities to existing things. There’s nothing more exciting than starting something new. Software engineers, for the most part, love the development phase. They want to be in this phase for as long as possible, but it doesn’t last forever.

The second aspect of software engineering is maintenance which is also known as fixing bugs. Most software engineers aren’t too excited about the maintenance aspect of their job. This is especially true when a software engineer has to fix code that was created by someone else or code that is really old. There are always exceptions, however, and I recently met a guy who actually thrives on fixing code. He describes himself as a code plumber. Debugging is a great way to learn how a new code base works. They start out doing maintenance and when they get good enough at that, they begin working on development projects.

There also exists two focus areas of software engineering: components and systems.

Components make up parts of a system. Most software engineers spend the majority of their career working on components. Working on a component is much easier than working on a system because it doesn’t require an advanced cognitive skill set. Working within components is a way for software engineers to complete a project in a fast and timely fashion.

The second focus area is systems. Building systems requires an advanced skill set because it requires a deep understanding of relationships that exist between components and sometimes even among other systems. People who build systems are referred to as software architects. Usually, a software architect evolves from a software engineer who becomes fascinated by learning about the ecosystem, framework and relationships between the components. Not every software engineer will become a software architect, though. Software architects live almost entirely at the systems level and so they don’t get to have as much fun coding individual programs like component-based engineers do.

The tools that software engineers use to work on components or systems will depend upon the specific project and the system running it. The tools can be C, Java, HTML, CSS, JavaScript or any number of other programming languages. Software engineers are lifelong learners. Most of the really useful information they’ve learned has been acquired on their own, not through any formal education. Software engineering is an organic, ever-changing discipline. The software tools of today will most likely not be in use 5 or 10  years from now.

My name is Dan Prince and I’m the founder of illumisoft. You can reach me via email at dan.prince@illumisoft.com or my cell phone at 816.564.9595. Feel free to reach out and ask me any questions you may have about software engineering or anything else.