Claiming back the meaning of computer science

原创 2003年03月01日 13:11:00
Claiming back the meaning of computer science
A plea for better programming education in computer science curricula, by Jaap Suter

A commercial disinterest in research is a thing of the past. Corporate funding of university programs is becoming more accepted every day, simply because government budgets are not capable of providing sufficient support. Though a discussion about the government's policy towards education is interesting, I've come to accept that university curricula are no longer defined by universities alone. If we want our students to become corporate-ready IT money makers, instead of letting them study the science of computation, so be it. However, one can only remove a certain amount of fundamental skills and concepts from a teaching program without undermining it. The recent removal of functional programming as a mandatory module in the computer science curriculum at the University of Twente is not only ridiculous, but it finally reveals what seems to be the primary motivation of computer science programs.

I've long been complaining about the lack of decent programming education at the university I attend. While I can't speak for other universities, my contacts with students worldwide, lead me to believe that it's not better elsewhere. The usual reply states that programming is just an instrument to achieve certain goals. It is then said that university people specify the goals, after which people with lower forms of education are left to do the dirty programming job. There are two fallacies in this stubborn idea.

Before I will explain this, we have to consider what computer science does. Simply put, computer science is the study of computation. The fundamental concept of any computation is the algorithm. Algorithms transform data into other data. Software is a collection of algorithms, but writing out a complex division is executing an algorithm too. Heck, the addition of two and two is an algorithm. While the study of abstract data representations is fairly reasonable on our faculty, it is the study of algorithms that is lacking. This is a consequence of its contempt for programming.

Programming is often mistaken for typing huge amounts of text in some obscure language. Even though most real-life programming comes down to this, in essence programming is the act of writing an algorithm. Be it in Pascal, Miranda, some mathematical notation or plain English, it is still programming.

Now returning tot the first misconception of contemporary computer science education, saying that programming is only an instrument. If computer science is about the study of computation, computations are done by algorithms, and algorithms are written through programming, we must study programming in order to say anything about any computation at all. Not knowing programming is like studying ancient literature while unfamiliar with concepts like nouns and verbs. Taking this analogy further we could say that different languages are the actual instruments. One could write a thriller in English, Dutch or Spanish, but the concepts of language (nouns, verbs, etc.) still apply. Here lies the fault. Programming itself is not the instrument, the method of programming we choose is the instrument. The underlying programming concepts have nothing to do with any language. This brings us to the second misunderstanding.

Because of this general loathing for programming, we are led to believe that we only need to specify the goals, after which somebody else can realise it. A bricklayer can do some decent masonry when an architect tells him to build a wall, but if the architect doesn't know the concepts of vertical structures, I'm afraid the building wouldn't last very long. That is why software development leadership requires a thorough understanding of all concepts involved. I've seen freshly graduated computer science Masters being outperformed in design, specification and implementation by young self-taught university dropouts. While the dropout's low-level experience taught him all things about high-level designs, what has the Master of Science done in his five years of college?

This would be a good time to point out that a computer science degree is not worthless. A solid mathematical foundation, knowledge on computing architectures, and some interesting theories about data representations are invaluable assets when it comes to software development. But without the means to implement ideas, what use is science?

A generation of computer scientists is growing up with rather simple ideas about programming. They are doing tutorials on creating graphical user interfaces with Java AWT, disguised as modules called object oriented programming. Java is hot, hence it is used to attract new students. If we really wanted to teach them about object orientation we would have considered using Smalltalk, Eiffel or Objective C. It's saddening to realize how many students fail to understand the concepts of inheritance and polymorphism. Surely they can recite some definition and come up with an example about animals, cats, and dogs. But applying them in real life situations takes more than that. It's even worse; try asking around why the application entry point in a Java program is static, and you'll see what I mean. Many might consider this an insignificant Java requirement, but not realizing that all non-static methods receive an implicit this pointer is missing a great deal of expression power. And this is one of many examples, so don't get me started on pointer arithmetic.

This is only considering the crippled knowledge about some specific programming paradigm. The complete denial of other paradigms acknowledges the already narrow-minded approach to programming. What happened to Pascal, C or assembly programming? It seems they are treated as archaic rudiments from long gone times. True, they bear paradigms not used as much as they used to, but they also convey some important concepts that are beneficial even in today’s situations. The same goes for logical, generic and functional programming which are treated as silly sidesteps from the common path of programming. I consider those without an interest in these sidesteps programmers on a dead end path.

I do not consider myself a good programmer, but I do recognize one when I see one. Professors wonder why student-projects spend too much time in the implementation phase. Well, have they ever tried to merge some unrelated inconsistent and unstable code, where trivial things like comments, assertions or error handling are missing, let alone the more advanced requirements like exception and thread safety. We are told about proven software engineering practices like source documentation and commenting, consistent code styles, source-control, peer reviews, unit tests, etc. in only a single class during our five years of education. It's time professors start accepting only well-written code.

I’d like to see computer science go back to what it originally did; studying data representations, algorithms, and their applications. A study in which programming is the respected art of writing algorithms which transform data to useful, valuable and exciting applications.

Let’s stop training uninterested students to become leaders for herds of Java code monkeys, just because corporate financing requires us to. If this too much too ask, then at least bring back functional programming in the Twente University curriculum.

Jaap Suter, A final year computer science student, not letting his schooling interfere with his education.

Lecture Notes in Computer Science

LNCS 全称是Lecture Notes in Computer Science ,是springer旗下一个重要的分支,主要出版计算机相关的论文,他旗下有 Lecture Notes in Art...
  • vikione
  • vikione
  • 2010年12月03日 10:39
  • 7040

计算机学术期刊排名:Computer Science Journal Rankings(zz)

计算机学术期刊排名:Computer Science Journal Rankings- -转载自  ...
  • orzorz
  • orzorz
  • 2008年05月31日 23:59
  • 1893

看后总结(Introduction to Computer Science and Programming,MIT 600)

本周由于前一半在忙实验室汇报,后面还带了家教,所以暂时还未完成全部课程学习。不过基本已经学完了,只剩最后两课。现先给出已看课程的总结。       总体上,看这个视频花了较长时间。看的是2014版,没...
  • ananhao
  • ananhao
  • 2017年05月21日 23:08
  • 336

关于computer science的思考

我和很多人一样,是所谓computer science专业的在校大学生,几年来都日以继夜的钻研各类编程语言和算法。但是每当我在这个领域走得越深,回首再看computer science这个词的时候,我...
  • adaifire
  • adaifire
  • 2011年08月17日 16:49
  • 4551

Sicily---1034. Forest

思路:由于题目要求合法的图应该 ①没有环 ②没有入度大于1的顶点,符合树的特点,因此,其实合法的输入其实是一堆树的集合,即为森林(o(╯□╰)o好吧,这点从题目就能看得出来)解决方法:判断是否会生成环...
  • qq_30172585
  • qq_30172585
  • 2016年11月29日 14:52
  • 651

MIT Electrical Engineering and Computer Science 参考书整理

Undergraduate Courses 6.00 Introduction to Computer Science and Programming  Python Programming: A...
  • wowdd1
  • wowdd1
  • 2012年03月21日 09:47
  • 9920


Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 2596   Ac...
  • xingyeyongheng
  • xingyeyongheng
  • 2013年07月20日 16:20
  • 989

Printer Queue(打印队列)POJ3125

Printer Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2817   ...
  • tiantangrenjian
  • tiantangrenjian
  • 2011年09月26日 11:34
  • 2729

computer science

Computer science should be called  computing science, for the same  reason why surgery is not call...
  • u012385733
  • u012385733
  • 2016年03月21日 21:11
  • 331

MIT 6.042 mathematics for computer science

20:08 2013-11-20 Wednesday start mathematics for computer science, lec1, induction & proofs! 20:10 2...
  • sentinel911
  • sentinel911
  • 2014年03月20日 10:38
  • 1977
您举报文章:Claiming back the meaning of computer science