Are Problem-Solving Techniques Specific to Computer Science?

  • Thread starter Thread starter Avichal
  • Start date Start date
  • Tags Tags
    Problem solving
Click For Summary
Problem-solving techniques such as Dynamic Programming, Greedy Algorithms, and Divide and Conquer are essential in computer science for developing efficient algorithms. While these techniques are applicable beyond computer science, their formal study is primarily focused within this field due to the nature of programming, which emphasizes minimal and efficient code. Other engineering disciplines may utilize similar abstract approaches, but they often prioritize established methods for safety and reliability, particularly in critical applications like construction and aerospace. The discussion highlights a gap in formalizing problem-solving techniques in other engineering branches, suggesting a need for more structured courses similar to those in computer science. Ultimately, the emphasis on algorithms in computer science stems from the discipline's unique focus on computational problem-solving and efficiency.
Avichal
Messages
294
Reaction score
0
In algorithms, we learn various problem-solving techniques namely Dynamic Programming, Greedy Algorithms, Divide and Conquer and more.

Why am I studying this is a computer science course? I think these are general problem solving techniques, not just related to computer science, right?

Basically in all the problems, we try to solve the simpler problems and then combine to find the unknown. This is the basic idea behind all the techniques.
 
Technology news on Phys.org
Yes, they are general problem solving techniques, but you will need them later to implement them with https://en.wikipedia.org/wiki/Abstract_data_type

In other words you will make a mathematical model to implement those problem solving techniques usually with the aim of being more efficient (be it in calculations, memory, space, complexity of the code, etc).

I once took a course in which the book was all about abstract mathematics (it was the most hard course for me till now) and we learned about number theory and similar concepts which now makes it easier to write efficient programs. And its worthy after all.

The thing is that those problem solving techniques, when translated into a programming language, usually output really good and efficient programs.
 
Programming is 10% about knowing the language, 20% Math and 70% problem solving (IMO).
 
The point is taking abstract approaches and templates and combining them in a way suited for a generic form of problem that you may face in your later work/research.
 
chiro said:
The point is taking abstract approaches and templates and combining them in a way suited for a generic form of problem that you may face in your later work/research.
But why is this done only in computer science course? Won't this be helpful in other engineering branches too?
For e.g.:- There must be abstract approaches done while solving physics problems but no one formalizes them.
 
You have to understand that the nature of engineering is different to applied science.

You don't want to take risks when building bridges, sky-scrapers, or aeroplanes. If you have something and it works then you don't want to get too creative and mess around with it.

If you want to do creative stuff in engineering, you will need a lot of support people to make sure that what you are doing is absolutely safe, but for a lot of applications, the solution is already known and it has most likely standed the test of time for a while (years or decades).

As for computer science, one premise of writing good code is writing minimal code.

To write minimal code we use templates and abstract approaches to help meet that goal. Writing a template once is a lot shorter than writing a version for each data type.

Writing shorter code makes it easier to read, easier to debug, easier to understand, and easier to use and for these reasons and more, we study things like templates, data structures, algorithms and abstract structures in computer science.
 
Avichal said:
Won't this be helpful in other engineering branches too?

Sure. This is one version: http://en.wikipedia.org/wiki/TRIZ Google for more information, books, training courses, etc.

The "Approaches which are modifications/derivatives of TRIZ" section of the wiki page lists some others.
 
Avichal, computer science (or at least a large part of it) is the study of algorithms and how they perform and how to improve them. What do you think you should be learning in a computer science course?
 
Office_Shredder said:
Avichal, computer science (or at least a large part of it) is the study of algorithms and how they perform and how to improve them. What do you think you should be learning in a computer science course?

Algorithms is about solving computational problems. We have formalised several problem solving techniques like Divide and Conquer, Dynamic Programming etc.
These problem solving templates are great for solving computational problem but what I am asking is that why such a course is only taught in a Computer Science course?

Let's take for example Mechanical engineering. Now there are several problems in this domain. Is there a corresponding course to algorithms that teaches abstract techniques and templates in this domain?

Hope I make sense.
 

Similar threads

Replies
29
Views
5K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 10 ·
Replies
10
Views
6K
Replies
4
Views
3K
  • · Replies 14 ·
Replies
14
Views
2K
  • · Replies 41 ·
2
Replies
41
Views
5K
Replies
16
Views
3K
  • · Replies 24 ·
Replies
24
Views
3K