如果你有一把锤子,那么所有东西看上去都像钉子--我们是否应该冷静

很意外自己会写这么一篇文章,绝对是临时起意。算作是看最近在读的《暗时间》一书而对于很多事情的有感而发的其中一发吧。从开始读这本书,很多自己之前形成的系统一点的观点就和作者相同。


关于冷静,这次想说比较多的几个方面。


程序员有很多锤子。丰富的语言、框架、设计模式、过程方法论等。


1. 上学期深受UML折磨。这学期又有系统分析与设计(SAD)。


于是乎看到一段话,深表赞同:有人希望拿UML去统一用户和软件设计者。殊不知UML有多么难以理解(大赞),而UML设计者却认为UML可以描述一切。就是这个道理,要理解你的代码还要去读懂《设计模式》,这要求也太高了吧。

代码设计时去遵守设计模式,问题是,开发这种事情不是你一个人干的,你让别人怎么去读懂你的代码。不说如此,就算是被人调用你的代码。你告诉他:使用起来得配置这个或者那个,各种注意,还有时去用工厂方法创建XXX。。。我就是要功能而已,你给我个函数接口,最好还可以不传参数,我调用就直接成功多好。效率、功能、易用性还一样不少。至于想实现的框架、Pattern等,在自己代码中搞定。

自己确实试过UML后面那些设计模式,后来觉得--好无聊,写起来复杂不说,别人也不懂。可能只有能显示自己知道的东西多那么一点。但是看来,知道这些东西也不是什么炫酷的事。另外我始终不理解,软件开发设计无非就是--设计界面--调用响应函数。特别是以现有的丰富的“所见即所得”的可拖拽设计界面的开发环境如此丰富的情况下。快速设计出界面,然后大家分几个函数去写。这样迅速、结合起来也足够清晰。不过也可能是因为我没有见过那种极大的项目开发的缘故。或许以后我能懂。不过就课上老师自己描述的做过的大型项目而言,无非如此。

另外如果为了代码复用,这个理由更荒谬。

著名的《Head First Design Pattern》在书靠近结尾的地方也郑重提醒:

       不要觉得不用设计模式就不够好不够强大,以尽可能简单地方式完成任务才是王道。


2. 语言之争。越熟悉一门语言,那么就会越容易走到死胡同。


比如迭代器这个概念。可能C++、Java、Python程序员都会认为这是一个极其出色的概念。但是“更简单的迭代方案是无需定义多余的迭代器类和继承体系(书中语)”。对此我没有更直观的感觉,只能说,确实太多的人视自己最爱的语言为圣经。最直观的的就是Java和C++随处可见的对骂。然而语言最大的优势就在于特长。或者说,只是工具。

由TopLanguage对Bjarne的访谈中的问题:


1) 学习C++的第一原则是什么?

答:关注基本的概念和技术,而非特定的语言特性,尤其不是C++中细枝末节的语言细节。

2) 使用C++的第一原则是什么?

答:将你的设计理念直接映射为C++中的类或模板。


我对于第一条的解读就是,关注一个语言的细枝末节,不如去写汇编去。《Python学习手册(第四版)》是我学习Python的第一本书。当时自己看了600页出头,然后实在看不下去了,那是真的有种要吐的感觉。全书在讲述任何一个知识点的时候,都过于冗余,或者说,过分地关注语言的细枝末节的东西。后来的很多代码真的是很难读懂,因为糅合了过多的Python特性。当忍无可忍时,我跑去看另一本书了。Python的设计最吸引人的地方在于,代码的简单易懂,实现起来易上手。但是那本书确实对不起“学习”的“手册”之名。我用这本书学到了不少知识,但是我真的不觉得它适合语言的初学习。

学习投入的精力是有限的,一旦掌握了基本的概念,要用到细节的时候,细节就自然到位。读书也一样,特别是对于初读,追求细致会走到一个迷茫和苦恼的误区。这个道理我直到最近才明晓。也是最近才能慢慢地让自己不再为“读书”二字所累,而是单纯地追求知识。

所以以后看到伪码写的算法,我是不是应该高兴一下?

而对于第二条,STL的实现与发展就是最好的解读。


3) 历史的作用


最近上的课是《计算机网络》。再结合自己以前的学习经验,发现学习历史对于学习的重要性。

当对于一个方向的历史了解之后,再学习起来是很轻松的。举个例子,我们在将网络传输层协议的时候,就是沿着传输层协议历史发展的道路一步一步设计下来的。这样,理解与学习都快速、清晰、同时还印象深刻。很多其它的学习也一样。我们不学数据库实现。但是了解SQL的历史,知道SQL89和后来的SQL92,那么对于数据库的理解与学习同样会有帮助(就好像怎样的SQL语言更通用、什么情况下用什么样的SQL实现等)。

更何况思维。历史的发展就是思维的产生与成熟的过程,这自然更符合人的学习习惯。当然,这也是为什么大家对于我们现在学习数学的方法那么厌恶的原因:一上来就把公式摆在那里,就好像它是天生的一样,然后我们去用就好了。最明显的就是“一致收敛”,当时我学的时候,就想说这TM是什么玩意


4) 培养计划


原本想说教育,但是未免过于宽泛了。

上学期学Java。虽然大一下的时候就接触了C++的面向对象。但是我相信对于大学之前没有接触过这个行业的人来讲,知道Java后,才开始对于面向对象有了那么一点概念。然后就被赶鸭子上架学了UML,这学期又是SAD。反倒是编程本身变得越来越不重要。语言相关的课程从考试变考察,学分也更低了。再加上可也繁重的培养计划,自由学习的时间无比地少,更何况对于我这种人来讲。在我看来,UML和SAD这样的东西,拿到大三更合适。在我们实训回来之后,有大一大二的学习以及后续对于面向对象和系统设计和工程开发的理解与学习,再学这些就是水到渠成了。

另外就是,国内的SE开的真是显得急功近利。说白了,底子也不厚,学习也盲目。计算机,不管以后是哪个方向,基本功好才是真的好。这也是为什么材料专业爱要学物理的、软件专业那么多学数学的做的好。

教育不是流水线作坊。软件工程说到底还是计算机。技术>成绩


所以,程序员有很多锤子。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值