It is not uncommon for me to find myself in a social situation where someone asks me what I do. When I state, “I’m a software engineer,” the conversation dries up pretty quickly. My guess? People ask what you do in an attempt to find something they might have in common with you. Many of the people I meet aren’t software engineers, and it’s a field that definitely has an aura of mystery around it. I might as well say I’m a mime for the reactions I get. People are taught that it’s hard or the domain of geeks. It is the domain of geeks, but most of us know well enough not to start babbling about software design to people who aren’t interested. Talk to us about movies, or TV shows, or explain what you do at your job. Often, software engineers are curious and excited to learn about the intricacies of other fields. Knowledge, particularly uncommon or obscure knowledge, can be a very powerful tool for software engineers.
Anyway, that doesn’t help explain what a software engineer does. “Software engineer” is roughly interchangeable with “software developer” or “programmer” in my opinion; I might use any of these terms accidentally but they all mean the same thing to me (this will cause some friction with other software engineers, but it’s a good simplification.) What I do is the same thing that any other engineer does, and it can be described thus:
I solve problems for my client, and ensure that my solution meets all of the constraints in which the client requires the solution to operate.
That’s a beautiful definition to me. It’s indecipherable to non-engineers. Let’s talk about what it means.
Solving Problems
This is pretty self-evident. Programs are created to solve problems. Microsoft Word exists because people want to write letters, reports, books, and a myriad of other document types. Microsoft’s engineers solved this problem by developing Microsoft Word. The specifics of the problems I solve aren’t important. Software engineers satisfy whatever needs the client expresses.
Good software engineers have a special talent for describing problems in very discrete steps. Think about giving directions to someone. You could tell them, “It’s 10 miles away at a heading of 210 degrees", but that won’t help them. What they want is, “Follow this road until you reach a 4-way stop sign. Take a left onto Oak Street. Follow that for 5 miles, if you see a McDonald’s you’ve gone too far…” So, too, must software engineers find a way to express a problem in very simple terms. Computers aren’t as smart as you may believe; you can’t tell a computer to fix a cup of coffee. You have to tell it to walk to this drawer, open the drawer, remove a filter, then close the drawer, and so on. Good software engineers can break complicated problems down to these tiny steps, then get the computer to follow the steps.
It’s not all simple. Here’s a variation of a famous problem in Computer Science:
A salesman needs to visit 10 cities on a sales trip. He has to start from Boulder, Colorado and end the trip there as well. Given a timetable of flights to and from each city over the next few months, determine the flights the salesman should take to spend the least amount of time on his sales trip.
This is called the Traveling Salesman Problem. For more than 30 years, we have tried to find a way to break this into simple, efficient steps that will yield the best solution in the shortest amount of time. For 30 years, the answer has been, “You must try every combination of flights and compare the time it takes.” This can take a long time. If there’s 10 cities and 8 candidate flights between each city, there’s more than a billion possible solutions (my calculation may be wrong, it’s quite late for statistical analysis! If it is wrong, it is too small). Add an 11th city and there’s 8 billion solutions. In the real world, the trip would likely involve more than 20 cities and hundreds of flights between each city. It can quickly approach a point where if the computer tests 1,000 paths per second it will take so long to finish the calculation that the salesman will have died aeons ago and the sun has fizzled out. So software written for this task tries a few thousand trips and picks the best one out of that. It’s not the best solution, but at least it’s a solution. Part of a software engineer’s job is recognizing hard problems like this and explaining to the client why they cannot be solved perfectly. The software engineer that finds a way to solve any of these problems in a practical amount of time will become very famous in the community. In fact, there’s a list of 7 of these problems known as the “Millennium Problems” that carry a $1 million bounty. It’s been 10 years since the bounty was posted, and none have been claimed. Not all are related to software engineering directly, but a solution to many of them would turn modern mathematics inside out and thus have a dramatic effect on software engineering.
Meeting Constraints
This is one where I could ramble on for hours, and this post is already longer than I want. The client never wants any old solution to a problem. Usually the client needs it to be fast, small, accurate, bulletproof, or any number of other things. Would Microsoft Word be so popular if it used 3 Terabytes of storage (as of today that’s multiple hard drives)? Would Youtube be a success if videos took 9 hours to download? Would Facebook be popular if every page took 15 minutes to load? What if MSN messenger took so much memory it was the only program you could run? Now you have a concept of the kinds of constraints software engineers have to respect. It’s not enough to just solve a problem, I have to make sure that the solution satisfies whatever constraints the customer wants.
Those are the externally visible constraints; the user sees them. There’s also constraints the user won’t ever see, but still matter to the software engineer. These have to do with how the code is written. These constraints include complexity, quality, communication, effort, budget, and time. These constraints are also very related to each other, and satisfying one usually means sacrificing another. For example, code complexity makes it harder for developers to understand what they are doing. Complicated code decreases quality, makes communication more difficult, increases effort, and can increase budget and time. However, fixing complicated code takes a lot of effort. When a project is over budget or running late, quality and complexity usually suffer. But when you increase complexity and decrease quality, you tend to have more bugs and spend more time fixing them. We call this a tension between the constraints because when you work on one, it has effects on another as if they were connected by a rope. I suppose you could call it a tradeoff as well; that fits. Good software engineers understand dozens of these constraints and strive to reach the best balance among them while staying within time and budget.
That, in a nutshell, is what a software engineer does. Software engineers solve problems, but ensure that the solutions are satisfactory. It’s not magic, it’s a rigid scientific approach to describing solutions to problems. In the next post, I’m going to talk about some quirks software engineers tend to share and some myths surrounding software engineers.
Yeah, I’ve had a lot of people ask me “So like, what do you actually DO?” upon my telling them that I’m a software programmer. However, the problem for me is usually that their eyes generally glaze over with disinterest pretty much immediately upon asking that question, despite the fact that my answer is usually something like “You know how there programs on your computer? Somebody made those. That’s what I do.”
You got this spot on. I just tell people “I work in IT” that seems to suffice. They have the same disinterested look on thier face, the conversation then eventually meanders to me being asked to solve some strange quirk the person has recently had with Word, Excel, IPod, mobile phone or any other operating system. I guess IT comes with the territory, thats why they pay us the big bucks ………..NOT!
hi…i want to be a good developer..plz guide me sites where i can interact with software developers to sove my problem
Hello.. I’m a bit at doubt about difference between working propects and syllabus during studies between Computer Science, Software Engineering and Computer Engineering. I might want to go for a degree in this field. For example, can software engineers work as a programmer like CS or vice-versa?
But the problem is I don’t really fancy maths that much although I did pretty well during exams. Would you recommend me to study in the IT fields if so?
Please help me? Thank you =)
Hi… I WAAS WOUNDERING IDK IF I WANT TO START THIS OR NOT. i dont like computering… but it might be cool, can you give some avice on what ou think about???? thanks.
Pingback: Hide The Ip Address Software? | Free Hide My IP Address
1thanks for this!
Pingback: Model Rocket Launcher – Model Rockets
Amazing article, im thinking of going in that line of work myself
yeah it’s not a blog but it is boost for a person who want to implement his own applications to have focus of the world on that person…..thank you.
Pingback: Blackberry Smartphone Software Mac | Blackberry-e
Pingback: 400 Words | Three Fires
this is really nice.i loved being a software eng since i was 12yrs and i really wanna do this.plz if yo out there and yo an expert help mi out….am join university this year…thanx
Pingback: Your Best Questions About Video Creation Tools – Top Apprentice Blog
Pingback: Never say Never- a justin bieber love story – episode 51!! | Stop Jealousy
presently im working as a software engineer in an company……..tel me about my future
You are definitely an expert as a software engineer!
I wanted to become a software engineer when i was a small girl. Now im 14.
But i just dont know what a software engineer really is. After i read your blog, I can understand how much effort you are taking in to programme a computer.
But you are really cooooool sir.
Thanx for sharing your experiences with us!
You are really the an expert Software Engineer. And I learned a lots of things from this marvelous article of you. Thanks for sharing you experience.
Hi. Thanks for the article- I was wondering if you could tell me what kinds of math you use? Im sure you use all kinds, but what are the most frequent types? In looking into possible careers and really like math. Specifically I like solving equations, systems, logarithms, mainly most kinds of algebra. Thanks for the help!
Pingback: Evaluating Software Architectures: Methods and Case Studies | Software Architecture In Practice
I heard from someone that with this degree you can work on: telecommunications, finance, health care, manufacturing, retailing, security, transport. Other engineering areas like aeronautical, automotive, building, electrical, etc.
well,i am dreaming of becoming a seccessful software engineer bt by september i wud be at my university. Now i really wanna know wats all about and its benefits..currently working on my unckes website
Hello.. I’m a bit at doubt about difference between working propects and syllabus during studies between Computer Science, Software Engineering and Computer Engineering. I might want to go for a degree in this field. For example, can software engineers work as a programmer.
reply me own problem
i’m doing software engineering,,,,,, and i’m very nervous about my job and soo under confident.. can you tell me that what kind of work i’ll have to do in my future………
i am doing my computer software enginerring course now
it would be helpfull if u tell me what all should i know to become an ideal engineer
currently i am learning progrmming languages c,c++,java
email me at prvyoursonly@gmail.com
Hi..i’m really want to b a successful software engineer & dreaming of it , since wen i was little boy. I need some advice….. …. ….wat should i hv 2 study to became an successful software engineer..??
Hey!! M from nepal guys i’hv currently joined 2 n i’m dreaming to became a successful software engineer doest math subject needed to study in 2 level to became software engineer??? Plz mail me at: syamir_thenex@yahoo.com
hello sir..
i am a comp sci student..but i am very under confident about my capability in this field..plus i feel i lack interest in this field..though i have been trying really hard to develop some interest in it..because i know i’ll have to be in it only ultimately..
please advise something.thank you 🙂
Hi..i’m really want to b a successful software engineer & dreaming of it , since wen i was little boy. I need some advice….. …. ….wat should i hv 2 study to became an successful software engineer..??
what are the devices i need to be a software developer?
this is good. asoftware engineer do what else ?
a software engineer is a software engineer
i’m a young software engineer and im a women 🙂 will be try be as my boss (guru engineering)
me 2o – I wanted to become a software engineer when i was a small girl. Now im 14.
Pingback: computer software.mp4 | computer laptop reviews, desktop computers, notebook reviews
I have been interested in computer engineering since i was in 7th grade. Now i’m a Junior. Is there a certain type of university/college you have to go to ? How much years do you have to go to college? Is there certain math classes you HAVE TO take?(I’m alright with math , just don’t like it much.) Please give as much details as possible.
How much do ya make a year? week? month? 😀
THANKS!
sir, i am shivashankar,i have one Question for you ,i,e …i have doubt about after finishing my BE Course ,i have joining for s/w engineer for working in a organisations.but what type of job i have in that job………….please respond my question…
I’m in10th class
i want to be a software engeenier in future so what subjects should i choose to be a good engeenier
there is no one to guide me
except u……
If you really want to become a software engineer you will need to go to college and major in it. Your high school might have some entry level college courses you can take. My school’s programs include C++, Java, and SQL for grades 9-12. But if you really want to become a software engineer you are either going to need to go to college or work your tail end off learning a programming language. Best of luck.
From my research, software engineers make around $60,000 starting and the top ten percent make around the six digits. If you want to become a software engineer you will need to take Math, Statistics, and computer courses in college. Again, best of luck.
I realy wants to be a great engineer and this is realy.
from my childhood i wanna be a software engineer. So pls suggests me ideas
Its really helpful ! and could be better if information fully provided . on various roles in company a engineer does.
whoah this blog is fantastic i really like studying your articles. Keep up the good paintings! You understand, many individuals are looking around for this info, you could aid them greatly. kkkdccdkcdbackgk
Very nice site! cheap goods
Hi. This is really great written. I’ve come to know much more about a software engineer upon reading your article. Btw, may I know how smartphones can help engineers? and what brand of phones do software engineers use usually? Apple or Android?
software engineering is great
Your post definitely helps understand the role of a Software Engineer. As well it was a fun article to read.
Keep up the good work!