SOFTWARE ENGINEERING: THE DESIGN THINKING OF COMPUTER SCIENCE BY KARISSA WATERWORTH
What could technology and creativity possibly have in common?
A lot, but not necessarily what you might expect.
Here’s an analogy:
Programming : First Right Answer :: Software Engineering : Design Thinking
And another:
Design Thinking : Creativity :: Software Engineering : Technology
Software engineering is the design thinking of computer science. It’s remarkable how similar design thinking (DT) and software engineering (SE) really are. Both use intentional processes, curiosity, empathy, clarification, observation, prototyping, testing, iteration, strategic failure, and elaboration in creative ways to solve problems in various domains, for a diverse set of users.
Like design thinking, software engineering usually follows a process, which may vary depending on the unique problem but typically includes clarification (observation / interviews), ideation, planning, prototyping, testing, validation with the users / client, iteration, and implementation (programming). The implementation is typically carried out by computer scientists and programmers, who have the skills needed to write the programs as determined by the steps earlier in the process.
Like design thinking, engineers ask a lot of questions when determining how to write a new piece of software, sometimes having already determined that software is needed to solve the problem.
Questions might include:
“What kind of functionality does the software need to have?”
“Who will be using the software?”
“What do its users find helpful, annoying, necessary?”
“What domain knowledge do we need to be aware of?”
“What are the major components?”
“What architectural style would be best?”
“Are there design patterns that can be leveraged?”
“Is there code somewhere else that can be reused or modified?”
“How does this fit into the existing system, if there is one?”
and many more.
Once the basic structure of the software is established, elaboration within the code begins. Programmers take the requirements and specifications and write the code to satisfy them.
Throughout this process, project management techniques and tools like agile are used. Once development / implementation begins, test-driven development is often used, in which tests are designed so that the code fails them at first. As the features are developed, the tests which test those features should pass. As developers write the code, they iteratively get closer to the final product, in which all of the tests should pass. Then the code is ready for launch, preferably on time and on budget.