首页 » 个人生活 » 正文

读计算思维有感如何成为一个程序员

计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。——Jeannette M.Wing[1]

不知道这是不是所有人的共识,但个人认为周教授给出的定义确实蛮科学和准确。

计算思维,不仅应该是计算机工作者最基本的思维,也应该是大众所应该具备的基本技能。

在拥有超级计算机的今天,人脑的运算量再牛叉,也只能去电视台参加一次类似“挑战不可能”的活动,毕竟个体的运算能力在大数据和云计算的今天是可以忽略不计的。

在文中,周教授已经阐述了什么是计算思维和介绍了些许计算思维的案例。

如果以此文来反观我们如今大部分计算机从业者和教育者,可以说计算思维的普及还任重道远。

那么,说到这,我就想起了数据库的发展。

在早期,随着人类社会的活动日益频繁,人们记录一些事情都依靠人工纸笔记录,这就是最早期的人工数据库。

随着时代的进步和科技的发展,Dr. Edgar Frank Codd[2]将关系数据模型引入数据库的应用,提出关系型数据库的理论,将数据库的发展推向了一个新高度。

在这个过程中,它就包括了约简、嵌入、转化和仿真的几个阶段,这就是典型的计算思维。

类似的案例还有很多,那么我曾经还读过一篇文章,其中,Perl语言的发明人Larry Wall[3]说程序员的美德有三种:懒惰、傲慢和急躁。

Laziness:The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don’t have to answer so many questions about it. Hence, the first great virtue of a programmer, Also hence, this book.

懒惰:是这样一种品质,它使得你花大力气去避免消耗过多的精力。它敦促你写出节省体力的程序,同时别人也能利用它们。为此你会写出完善的文档,以免别人问你太多问题。

Impatience:The anger you feel when the computer is being lazy. This makes you write programs that don’t just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer.

急躁:是这样一种愤怒——当你发现计算机懒洋洋地不给出结果。于是你写出更优秀的代码,能尽快真正的解决问题。至少看上去是这样。

Hubris:Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won’t want to say bad things about. Hence, the third great virtue of a programmer.

傲慢:极度的自信,使你有信心写出(或维护)别人挑不出毛病的程序。

以上是那篇文章中Larry Wall对这三个词汇在程序员身上的新解读,个人感觉这三个词汇这样子去解释确实成为了美德。

毕竟机械而重复去做一件事情,会让人觉得你很不专业,因为你不会找出捷径去高效处理这件事。

在我2009年刚当班主任的时候,学校要求老师收集新生的个人信息数据,我看了下范表大概有30多个字段,还详细到每个人的身高、体重、鞋码,毕竟还得分发军训服。

我肯定不是把表格打印让每个学生手写之后再录入上交,我认为那样做的话,既费时又费力,还容易出错。

于是,我梳理了下字段,建好数据表,读取了数据表的字段,用工厂模式构建表单,最后生成一个web地址,集中全班近50多号人到机房,让他们输入一个网址,大概10分钟左右,我就搞定了所有数据,因为他们提交之前还会有个预览确认页面,我只是在他们输入信息之前讲了几分钟注意事项而已。

从我写程序到最后收集好信息,不超过2个小时,而我其他同事,都用了几天时间来收集、核对和录入信息。

当然,可能人少的班级,10几个人的情况下,可能会比我快很多,但是如果你面对的是几百号人的院系呢?

又比如无限分类的建表,都明白要构建一个parentNode标识,但是有的时候,往往在读取数据的时候却不知所措,可能是因为想省事,或者其他,但是正确的做法应该是先根据parentNode的标识来构建一颗树,再做递归处理。

再比如面对泛域名解析的过程中,面对同一类型的解析处理的问题。

例如,aaa.domain.com ; bbb.domain.com ; ccc.domain.com类似的前面二级域名和子目录相同的情况的处理,如果去配置若干的的virtualhost节点,个人认为这是重复的做一件事是很不高效,虽然能解决问题,但是却不优雅。

笔者倒是很愿意去写正则表达式处理rewrite,除去非批处理域名,做好过滤,其他的统一做正则重写处理即可,这样只需要几行代码,就解决了需要几十行,甚至几百行配置文件来解决的问题,即优雅,又高效,同时还让人挑不出毛病,这也是计算思维的简约、转化、仿真的体现。

当然,如果你认为成为一个好的程序员只是懒惰、急躁和傲慢,那么你就错了,这只是其中的3个独特品质,好的程序员还必须具备自学和交流的能力。

那么什么是自学能力?

笔者认为,在互联网+时代的今天,有google和github足够获取我们所需要的所有的学习资源,如果你找不到,说明你的自学能力不够!

还有,程序员应该是很木讷不愿意和人交流吗?

不不不,其实程序员很爱和人交流和分享的。

如果你说的东西很过时,或者你的提问很low,同时还认为自己很牛叉的话,程序员是不屑于和这种没有自知之明的人交流的。

当然,你可以和一个程序员聊美食、聊生活、聊旅游,但是如果你要和一个程序员聊他的专业的话,请给予他足够的新鲜感和专业性。

看了周教授的篇文章,胡说八道这么多,时间不早了,该休息了,明天还得起床继续写代码,晚安。

【附】

豆瓣翻译后的原文:《计算思维》

【注】

[1]Jeannette M.Wing,周以真教授,曾任CMU计算机科学系主任,现任NSF计算机和信息科学与工程部(CISE)主任。于1983年在MIT获得计算机科学博士学位。主要研究方向为并行分布式系统的规范和认证以及编程语言。

[2]Edgar Frank Codd,埃德加·弗兰克·科德(Edgar Frank Codd,1923-2003)是密执安大学哲学博士,IBM公司研究员,被誉为“关系数据库之父”,并因为在数据库管理系统的理论和实践方面的杰出贡献于1981年获图灵奖。

[3]Larry_Wall,拉里·沃尔(Larry Wall,1954年9月27日—)是程序员、系统管理者、语言学家和作家,Perl语言之父。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据