原文:That's Not Programming, By Andrew Binstock, August 16, 2011
Every year or so, it seems to me, academic publications in our industry indulge in a bit of mental torpor by running an article on the question of whether computer science is a real science. Not to be outdone, the practitioners of software engineering enter into their own learned debate of whether their practice constitutes real engineering. In both cases, the end result is generally no consensus save for agreement that if there were legitimate credentialing of professionals — as there are with real (there's the word!) scientists and engineers — we'd all be better off. Fortunately, the debates never make it far out of the journals in which they inevitably burble up.
学术期刊上每年都会充斥一些泡沫文章,争论计算机科学是否一门真正的科学、软件工程是否真正的工程。从事计算机科学研究和软件工程的专业人员,该如何认证?该颁布怎样的证书?争论来争论去,再没有多少共识。
Fortunately, like most Dr. Dobb's readers, I work in a field in which the rigor of an individual's work becomes clear enough fairly quickly. There is no need for definitions of the field of endeavor so as to enforce standards or impose criteria. The available certifications connote little more than minimal classroom knowledge. More accurately, there is a slight prejudice against candidates with many certifications. The more you have, the more suspect you become. They are like reverse merit badges.
我想,自己有幸和大多数Dr. Dobb杂志读者一样,从事着这样一种工作,它以严密的逻辑思维为显著特征,而且除此之外再没有具有普遍适用意义的强制标准或规程来定义从业者的知识领域。业内已有的那几种证书,仅能说明持有者对最低限度的课堂知识的掌握而已。业界对那些持有大量证书的人甚至存在某种偏见:拥有越多证书的个人,其能力越是被怀疑。
This aspect is one of the things I most like about programming. The only way to assess individuals' skills is to see their code and to talk about programming in the abstract. Very quickly, you can detect the ease and the exactitude with which they navigate topics. Doing this is something I do through a narrow keyhole in my work as editor.
这是我喜欢编程的原因之一。评估程序员技能的最佳途径,是看看他们写的代码,与他们抽象地谈论一些编程问题,观察他们把握话题的轻松程度和准确程度。作为编辑,这是我的工作内容之一。
In so doing, a feeling of humility is often evoked in me. Programming, as Knuth wisely pronounced, is an art. And reading through elegant code evokes the same sense of wonder and admiration that I feel when I experience other more traditional forms of art. It has a sense of beauty, but here commingled with an inherent practicality that gives it a unique and highly agreeable aspect.
这样的工作,经常唤起我谦卑的感受。克努特敏锐地指出,编程是一门艺术。阅读优雅的代码,恰如感受其它更传统形式的艺术品一样,可以欣赏,有时震撼。优雅的代码蕴含美,而且,因为这种美与实用性浑然一体,所以代码的美能获得高度认同,非常独特。
Because of this admiration for what others can do, I find myself often bridling at the easy dismissal of programming. Mind you, it's never dismissed outright, but the term is loosely used. Two decades ago, people who used spreadsheets described writing macros as programming. The similarity is deceiving only to the non-programmer. Ten years ago, it was HTML programming that converted designers into developers. (Shockingly the phrase "HTML programming" returns 1.2 million hits on Google.) While it's certainly true that HTML5 might in fact jump the canyon, the basic rule suggests that presenting data is not the same as computing it accurately and calls on different skills.
正因为这样的体验,对于“将不再需要编程”这样的言论,我不敢苟同。当然了,“不再需要编程”这样的言论仅限于俗话,从未登大雅之堂。二十年前,使用电子表格的人们,把编写宏这样的工作叫做编程。十年前,“HTML编程”一说,使版面设计人员摇身一变成了程序员。“HTML programming ”一词,在Google上竟然搜索到一百二十万个条目。尽管HTML5或许真的是一个突破,但作为基本的常识,我们知道数据的展示与数据的精确计算是两码事,需要完全不同的技能。
All the while, publishers continue turning out titles such as Teach Yourself C++ in 24 Hours (a real book). The profusion of such volumes might convince the unknowing shopper that programming is not a hard field...The quixotic belief that non-programmers could do this is what still nourishes the BI field's abuse of the term. This self-deception persists despite the now considerable body of evidence to the contrary. Everything is simple for the neophyte "programmer" until something unexpected happens. Then everything stops suddenly. Frequently, a professional programmer is summoned. If none is available, the project or report simply dies in its tracks. So ends the matter.
长期以来,出版商喜欢围着“24小时内掌握C++自学手册”这样的题目出书。市场上充斥着大量这样的书籍,或许会让不明真相的顾客误以为编程很容易。商务智能(BI)领域滋生的浮夸风气,再一次滥用了“编程”一词。“非程序员也能胜任编程工作”,简直是堂吉诃德式的妄想。尽管现在大量的事实证明实际情况并非如此,但这样的提法依然有市场。如此定义的“程序员”,一旦碰到意外情况,就无从下手。经常需要召集专业程序员来解决问题,如果找不到专业程序员,项目就会夭折。
Our trade requires problem-solving skills, imagination, curiosity, discipline, hard work, and especially experience. Add talent to these and you have Knuth's art. Note that these facets do not bar the way to anyone — unlike engineering or real science, which won't acknowledge skills no matter how demonstrable until they have been certified in academia.
我们的行业需要解决问题的技能,需要想象力、好奇心,需要训练,需要吃苦耐劳,需要经验。从这些方面增益其所能,你就会达到克努特说的艺术境界。注意,所有这些方面的要求,没有一项是门槛。而传统的工程和科学领域都设有门槛——除非你获得特定的认证,否则哪怕使你掌握了足够的技能,也不准从事相应的工作。