Problem-Solving in Software Engineering: An Inside Look was originally published on Springboard.
Software engineering is about problem-solving first, coding second. Why? Computers need to be told exactly what to do; they can’t make assumptions like a human would when given vague instructions. Secondly, software engineers are tasked with designing features and applications that may not even exist yet, so it’s their job to come up with the user interface on the front-end and data infrastructure on the back-end to power it from scratch.
For this reason, the hardest part of being a software engineer is not understanding programming languages and frameworks or even algorithms. Rather, it’s stringing many instructions together to accomplish something useful.
What types of problems do software engineers solve?
Software developers work on a range of tasks, from pure coding to system-level design and troubleshooting. Much of an engineer’s time is spent “debugging” — that is, detecting and correcting errors and bugs in the code that cause the program to break or behave unexpectedly. Using a computer language is a lot like writing; understanding solid grammar usage and sentence construction are more important than memorizing the entire dictionary.
Most of the web and mobile features we now take for granted took incredible problem-solving ingenuity. Take Google’s auto-complete tool, for instance. This is a prediction feature in the Google search bar that suggests search terms related to what you’re currently typing. According to Google, this feature reduces typing by about 25 percent.
Secondly, they needed a sensible list of autocomplete suggestions based on what the user was typing. Given that the user can type literally anything into the search bar, there are an infinite number of possible variations.
Thirdly, Google had to develop a system to sustain this function on the back-end. Apparently, the autocomplete function generated such an enormous load on the system that Google had to increase its infrastructure by six times to support the added HTTP requests and data queries.
Finally, engineers had to refine the UI to create a socially acceptable experience for all users. The autocomplete function is powered by Google Trends, which makes suggestions based on the top searches people have made. However, Google algorithms remove predictions considered offensive, slanderous or sexually explicit under its autocomplete policy.
Here’s another software design feature we take for granted: image recognition technology. When software company Intuit launched TurboTax, customers could file taxes simply by taking a photo of their W-2 on their smartphone. The AI-enabled software would then “read” the information from the photo and auto-populate information into the correct fields. However, developers didn’t realize just how difficult it is to take a photo of a tax form in the right conditions for a machine to understand.
People would submit photos of folded or crumpled W-2s in poor lighting taken on mattresses, cluttered kitchen countertops, textured carpets and even toilets, and complain to the company when the software didn’t work.
Intuit identified three pain points it needed to address to fix the gap:
- Define how to get a good image
- Teach the computer to recognize the different types of forms and their respective layouts
- Make sense of the data and apply it in the right context
Designers added edge detection, contrast, brightness and focus adjustments to the image-capturing feature so users could edit their photos before uploading them.
This example goes to show how problem-solving in software engineering is not just figuring out the right way to tell a computer to do something, but defining the right parameters for the people who use the software so they can accomplish their goals.
In the real world, software engineers work with numerous clients, many of whom don’t know what they want or how to ask for it. A good software engineer knows how to extrapolate unmet needs and communicate their ideas effectively.
Solving big problems starts with smaller ones
When interviewing for a software engineering job, recruiters are looking for your ability to “divide and conquer” or reduce a problem to manageable components that can be handled separately. Here, we’ll take a look at some of the toughest questions Google asks in its initial recruitment interview and what it says about the skills the company is looking for.
“Estimate the number of tennis balls that can fit into a Boeing 747.”
As off-putting and impossible as this question sounds, the hiring manager wants to get a sense of how you use what you already know about the dimensions of tennis balls and what you can deduce via educated guess. They want to see that you can string together disparate pieces of information and create an “algorithm” of sorts to infer further information.
“Describe AdWords to a 7-year-old.”
Aside from testing your product knowledge, the recruiter is listening for your ability to break down complex or abstract ideas into simple concepts. They are also testing your communication skills without reverting to computer-speak.
“Would you remove the link to an extremist piece of writing?”
It’s never enough to think of yourself as a coder. Software engineers must always consider the user experience. This question tests whether or not you’re considering the ethical and social implications of the software you’re designing.
Ready to start or grow your software engineering career? Check out our Software Engineering Career Track—you’ll learn the skills and get the personalized guidance you need to land the job you want.
The post Problem-Solving in Software Engineering: An Inside Look appeared first on Springboard Blog.