Live data from Hacker News

Putting the Science back in Computer Science

cs.princeton.edu

21–30 of 42 posts

Re: Putting the Science back in Computer Science

#21
post #14

A good part of the presentation is a critique of worst-case-analysis, which is often not relevant for practical problems. The author doesn't mention smoothed analysis which addresses this very issue: http://en.wikipedia.org/wiki/Smoothed_analysis

That's interesting. I hadn't run into this before in college or grad school, and it seems like a good way of bridging the analytical gap between theory and practice that Sedgewick talked about.

It's unlikely that Sedgewick hadn't heard of this before. I suspect that he didn't mention it simply because it isn't often taught. According to your citation, it was introduced in 2001 which is quite recent in academic terms. How did you come across it?

Re: Putting the Science back in Computer Science

#22
I thought his reasons for advocating Java for teaching are interesting, in particular:

  Q. Why not Python?
  A. Poor data abstraction; everyone needs layers of abstraction
I've recently been telling my dad that he should teach himself Python (he has no programming background aside from BASIC), perhaps I should rethink this. I like Python's REPL for teaching, but back in my Java days I used to use http://www.beanshell.org/ to provide something similar.

Re: Putting the Science back in Computer Science

#23
post #14

A good part of the presentation is a critique of worst-case-analysis, which is often not relevant for practical problems. The author doesn't mention smoothed analysis which addresses this very issue: http://en.wikipedia.org/wiki/Smoothed_analysis

That's interesting. I hadn't run into this before in college or grad school, and it seems like a good way of bridging the analytical gap between theory and practice that Sedgewick talked about. It's unlikely that Sedgewick hadn't heard of this before. I suspect that he didn't mention it simply because it isn't often taught. According to your citation, it was introduced in 2001 which is quite recent in academic terms.…

Yes, it is quite interesting, and although the main idea is straightforward, the analysis of concrete algorithms gets quite technical. Also, it's still actively researched and maybe not entirely accepted into the mainstream yet. AFAIK it has been successfully applied to many well-known algorithms which have bad worst-case, but surprisingly good behavior in practice (e.g. quicksort). I heard about it from my advisor.

A list of related papers: http://www.cs.yale.edu/homes/spielman/SmoothedAnalysis/index...

Re: Putting the Science back in Computer Science

#24
post #14

A good part of the presentation is a critique of worst-case-analysis, which is often not relevant for practical problems. The author doesn't mention smoothed analysis which addresses this very issue: http://en.wikipedia.org/wiki/Smoothed_analysis

That's interesting. I hadn't run into this before in college or grad school, and it seems like a good way of bridging the analytical gap between theory and practice that Sedgewick talked about. It's unlikely that Sedgewick hadn't heard of this before. I suspect that he didn't mention it simply because it isn't often taught. According to your citation, it was introduced in 2001 which is quite recent in academic terms.…

Spielman and Teng are very famous, and have received even a Godel prize for their work in smoothed analysis. Currently they're doing some very interesting things with efficient algorithms on graphs laplacians and linear systems, you can see Spielman's talk at last FOCS, it's very enlightening: http://weyond.com/www/focs/2010/downloads/1335.f4v

Re: Putting the Science back in Computer Science

#25

I thought his reasons for advocating Java for teaching are interesting, in particular: Q. Why not Python? A. Poor data abstraction; everyone needs layers of abstraction I've recently been telling my dad that he should teach himself Python (he has no programming background aside from BASIC), perhaps I should rethink this. I like Python's REPL for teaching, but back in my Java days I used to use http://www.beanshell.or…

I'm not entirely sure that's a cogent argument. Two major objections:

1. If anything, I think the problem with Java is that it encourages too much abstraction. This isn't inherent in the language design, but is a product of Java culture—the massive UML diagrams and fragile class hierarchies which are glorified in Java tend to encourage adding extra abstractions to things which don't really need to be abstracted away, and you spend time doing extra work to accommodate them. There's an attitude among computer scientists, especially of the academic variety, that there's no such thing as "too much abstraction," and while abstraction is generally a decidedly good thing—I have, in my time, written Strategy-Factories, after all—I think it can be possible to overemphasize and overuse it. (John Carmack: "It is not that uncommon for the cost of an abstraction to outweigh the benefit it delivers. Kill one today!")

2. I'm not entirely sure that I agree with the statement that Python has poor data abstraction, especially in comparison to Java. Python in many ways lets you abstract away more details than Java does; e.g. duck typing allows you to treat several pieces of data as identical black boxes without having to worry about the implementation details and without using subtyping or interfaces, which is exactly the definition of abstraction. On the other hand, Java fails to abstract away some of the implementation details which are unimportant to the kind of programming that beginners do, e.g. the differences between int and Integer.

My own two cents is also that I also prefer Python's OOP-but-not-necessarily-always philosophy to Java's OOP-all-the-time-everything-in-a-class-somewhere philosophy. I am involved with teaching a Java course right now, and it has made me really wish that students could start out not worrying about classes and just writing scripts, as in Python, before they have to learn about classes and inheritance and data abstraction. (I have previously taught everything from C to Scheme, and it really is wonderful to just start people out writing code in a high-level Python-like language without having to handwave about static and classes and so forth.)

Re: Putting the Science back in Computer Science

#26

Earlier quoted context omitted.

I prefer the German word for CS. They call it 'Informatik,' because it's all about information. I agree that the terms 'science' and 'engineering' are both abused by those who seek to legitimize their disciplines in the eyes of the public.

I have noticed that any degree program that ends with "Science" is generally not science. "Social Science" and "Political Science" are two of the big offenders.

"exercise science"

Re: Putting the Science back in Computer Science

#27
post #18

More than anything else, Computer Science is young . Unlike other disciplines, there has not yet been a schism between the theoretical and practical yet. In school, we learned a bit of everything. I took classes focused on algorithms and computation, but also took classes on software design, learning how to use databases and practicing loose coupling and such. If you look a physics, which has been around a little lon…

I really agree with this, but think that we'll see even more of a split than just math/application. I got my PhD in Information Systems and Technology, which fused a social science approach with a topic of information systems being used in different domains. I found it really useful, and think that a business-oriented/programming-oriented/math-oriented division will probably split up the field.

Re: Putting the Science back in Computer Science

#28
Quadratic algorithms are useless because performance matters? That is a textbook false dichotomy. Performance obviously matters, but the time hierarchy theorems suggest that there is certainly legitimate computation that requires quadratic time. Max flow will need at least quadratic time.

Re: Putting the Science back in Computer Science

#29

Earlier quoted context omitted.

I prefer the German word for CS. They call it 'Informatik,' because it's all about information. I agree that the terms 'science' and 'engineering' are both abused by those who seek to legitimize their disciplines in the eyes of the public.

I have noticed that any degree program that ends with "Science" is generally not science. "Social Science" and "Political Science" are two of the big offenders.

This is an old topic. Auguste Comte and Emile Durkheim, both foundational to the social sciences, each sought to bring empiricism and the scientific method to the study of social institutions. I would argue that they were largely successful and it is a shift in our modern understanding of science that questions whether Social Science is "real" science.

Specifically, I think the power of mathematics as a tool for objective description of natural phenomena has given us the impression that any field without underpinning equations is soft, subjective, and inherently unscientific. Biology is Chemistry is Physics is Math, but the study of social institutions resists reduction to "hard" sciences, to the objectivity of equations. I have even seen people say that Chemistry is not science!

In this view, Sociology seems inherently less legitimate than Biology. And I think that is dangerous. If this is how we are to understand science, then we are doomed to belittle and ignore the possibilities for better understanding society and intelligent behavior.

Re: Putting the Science back in Computer Science

#30
You know, correct me if I'm wrong, but I always viewed a true science as something held the scientific method at its core. So the big test for me is whether computer scientists apply the scientific method. And to be honest, I can't think of many examples where people rigorously chase a problem using the scientific method.

From Wikipedia, in case anyone's unfamiliar:

1. Define the question

2. Gather information and resources (observe)

3. Form hypothesis

4. Perform experiment and collect data

5. Analyze data

6. Interpret data and draw conclusions that serve as a starting point for new hypothesis

7. Publish results

8. Retest (frequently done by other scientists)

How many people do this other than maybe to try and solve P=NP?

edit: formatting

Post reply on HN