2

In academic meaning, it seems to me that

  • algorithm design is studied in a high/abstract level of computation (computability, complexity), although software engineering is also studied in high/abstract level in academia.

  • software engineering is about the process of creating a software program for solving a problem. That seems to make algorithm design part of the process.

  • But from the limited references on software engineering that I have taken a glanced at, algorithm design isn't discussed (but I may miss something). Instead, pattern design (or is it called design pattern instead?) is discussed in software engineering.

My questions are:

  • Does algorithm design belong to software engineering? Is algorithm design a step in the process of software engineering?
  • what are the differences and relations between algorithm design, pattern design, program design, and system design? These words can be heard often from industry as buzzwords. Can you share the definitions of these various kinds of designs?
Tim
  • 5,405
  • 7
  • 48
  • 84
  • To me it is an algorithm before it even touches code. Levenshtein distance distance is an algorithm implemented in many computer languages / frameworks. – paparazzo Oct 12 '15 at 16:59
  • 2
    I'm very curious as to why you think these terms and their relationships are in any way important. You said it yourself: they're just buzzwords. – Robert Harvey Oct 12 '15 at 17:01
  • @Frisbee: in software enigneering, the process is requirement analysis and specification, design, coding, .... Do you mean algorithm design is even before requirement analysis and specification, or somewhere between that and coding? – Tim Oct 12 '15 at 17:01
  • @Robert: I am interested in understanding their accurate/academic meanings, instead of fuzzy meanings. – Tim Oct 12 '15 at 17:02
  • To me an algorithm is just a means to an end. A requirement may be fuzzy word matching. You can pick an algorithm or an software utility. – paparazzo Oct 12 '15 at 17:07
  • 3
    In general, software engineering focuses on *practical concerns.* To the extent that algorithm design is a practical concern, software engineering focuses on it. According to the [Wikipedia article](https://en.wikipedia.org/wiki/Algorithm_design), algorithm design is a *mathematical* endeavor, putting it squarely in Computer Science territory. Computer science is theory. Software engineering is practice. That's all. – Robert Harvey Oct 12 '15 at 17:11

2 Answers2

6

Yes and no.

The study of algorithms (and data structures - the two go hand-in-hand) as they relate to computation tends to fall into the category of computer science. Some algorithms, however, may be developed by those in a particular domain. For example, the algorithms needed to implement some kind of automatic control in a hardware/software system may be developed by someone who specializes in controls engineering. Likewise, signal processing filters may require knowledge of physics and electrical engineering. However, the people who develop these algorithms may not have the knowledge and expertise to turn a mathematical representation of an algorithm into something that can be used by software. In order to turn that algorithm into something that can be used by software, you would also need some of the knowledge that falls into the scope of software engineering.

Algorithm design must fit into software engineering. Your requirements and constraints will likely drive the choices of algorithms. Then, you must design for the use of algorithms, either how you will go about implementing the algorithm or the use of a library or existing module that implements the algorithm. You'll also need to consider the algorithm testability and maintainability - both things that software engineers are concerned with.

Although I wouldn't consider algorithm design to be part of software engineering, I would consider it something that a software engineer must be minimally aware of. The environment and domain in which the software engineer is working will determine the amount of involvement in algorithm design.

Thomas Owens
  • 79,623
  • 18
  • 192
  • 283
2

Algorithm's are not unique to software engineering. These days your more likely to see the term used along with software engineering/development but its not a exclusive term. Now in terms of Algorithm's belonging to software engineering as compared to? software development? That depends on who is in charge of the programmers. You can either come up with the solution and ask the programmers to implement it, or you can explain the problem and have them solve it as well. It's more of a who do you work for issue. I work for a company that explains the problem and its my problem to solve it (come up with the algorithm) I have worked for other companies that the entire solution is already mapped out for you and all you do is translate the algorithm they provide to the computer. who designs the algorithm is really dependent on how software development takes place at a specific organization. Are algorithms exclusive to Software engineering? No.

David-
  • 121
  • 3