一个好玩的现象

简介: 一个好玩的现象 这学期上了一门叫“软件工程实践”的课程。目的在于从需求分析、概要设计一直到验收结题,全程模拟真是的软件项目开发过程。让我们这些象牙塔里的本科生也有机会体验一下实战经历。 一个学期做下来,对我来说印象最深的就是文档写作。相信很多程序员对写文档这档子事都是深恶痛绝。我们的需求频繁地更改(估计是老师们为了体现真实感而故意前后说得不一致),导致每次洽谈结果都是要修改大堆文档。但是我

一个好玩的现象

这学期上了一门叫“软件工程实践”的课程。目的在于从需求分析、概要设计一直到验收结题,全程模拟真是的软件项目开发过程。让我们这些象牙塔里的本科生也有机会体验一下实战经历。

一个学期做下来,对我来说印象最深的就是文档写作。相信很多程序员对写文档这档子事都是深恶痛绝。我们的需求频繁地更改(估计是老师们为了体现真实感而故意前后说得不一致),导致每次洽谈结果都是要修改大堆文档。但是我的厌恶倒并不在于需求变更,因为不管需求变化不变化我回来都照样工作,对于具体是什么工作我倒并不在乎。原本在Debian下我习惯用LaTeX来排版,但课程是硬性规定只能用Word排版、Visio画图、打包成rar提交。可惜了Word和LaTeX我都是半桶子水(不好意思,给咱们科班丢脸了),所以期间遇到了很多问题。但在用Word修改文档的过程中突然发现了一个很好玩的现象:“一个新手往往事必躬亲,每件事都亲历亲为;相反那些老手或者高手倒都是一个个懒人,能让机器做的绝不自己做。

初看觉得很好笑,因为事必躬亲往往是那些能力强又追求完美的人喜欢做的:周围比自己好的人不多,事情交代下去就是不放心,干脆就自己解决掉算了。但环顾四周和计算机打交道的,猛然发现我们平时还真抢了不少计算机的饭碗!而且很多时候的烦恼都来自这些原本不属于自己的事情(的确有点杞人忧天,庸人自扰)。

从使用软件的角度看

例如,作为一个Office(或者网页设计)新手,由于对软件功能的不熟悉同时也是在好奇心的驱使下,往往会不厌其烦地为每一句话甚至每一字设置字体、字号、颜色等,对每处细节都精雕细琢、力求完美(例如文档要求所有的引用需要用五号斜体宋体,新手们就手工一段一段地设置尺寸为五号、字体为宋体、风格为斜体,如果文章长的话就得花费很多时间),最终呈现的产品也可能完全符合要求。但这样的做法可维护性比较差,如果临时提出要求说所有引用的段落都要加粗,此时新手们可能要加班加点地给所有引用的段落添加粗体风格(可能会有遗漏。万一修改完成后又要求重新改回去,估计再温和的人都要发飙了^_^);老手们有更简便的方法,就是定义一些格式类型然后去套用(例如标题1、标题2等),要统一修改时只要右键“选择相同格式的文本”,就可以一次性全部重新定制。我们只需向计算机描述我们想要什么,比如告诉LaTeX,我要写一个报告(/documentclass{report}),标题是“Test”(/title{Test}),作者是“redraiment”(/author{redraiment})等等。至于“报告型文档”该怎么布局、标题该用多大尺寸、作者名是不是应该用斜体,都无需我们劳心,这些是LaTeX的工作。

“绿色软件”这一概念也是一个很典型的例子!作为一个成熟的操作系统,统一管理软件包的安装与卸载属于份内之事。安装一款新的软件,不仅仅是把软件拷贝到硬盘上,将自己融入整个系统之中,在需要它的时候能很方便地调用(比如用IE在网页上打开一个pdf文件能自动调用Adobe Reader来显示)。而这些和操作系统打交道的工作交给系统本身是再合适不过了;“绿色软件”的思想是让应用程序与系统泾渭分明,目的在于尽可能少地产生系统垃圾。传统的“绿色软件”是很有益的,它们大部分都属于小工具,实在没必要向系统注册什么信息,这也恰巧体现了“物尽其用”的原则。只是最近“绿色软件”有被滥用的趋势:像office等通用软件也被制作成“绿色软件”。这意味着你要手工进行文件关联等操作,结果往往没系统自己做的好。我称他们为绿色发烧友,因为他们决定完全摒弃系统自动化的软件管理程序(由于抵触系统垃圾或其他什么原因)。

从开发软件的角度看

产生上述这些现象有一部分原因在于新手对软件功能的不熟悉,也有一部分原因在于软件本身没做好本职工作(比如Windows环境下注册表体积增大的确会影响系统响应速度)。

软件开发过程中也有很多此类现象:用Java开发GUI程序,新手普遍还不能理解Layout布局带来的优越性,为达到理想效果一般更倾向于用setLayout(null),把控件位置的控制权掌握在自己手中。但诸如不同平台上可能显示的位置不同,或出现重叠等棘手问题将接踵而至。

另一个典型例子就是我们这些年轻程序员往往有一种“非自己做不可”的强烈情绪,相比于去理解和维护前辈们留下的代码更乐意于自己从零开始创作。这导致的结果会是文化没有沉淀、知识没有积累,从软件专业的角度来看就是代码没得到重用(重用的话题以后再聊)。一味地从零开始创作而不是在以往的基础上进行拔高,一般很难有所突破。

无为而治

从上面的例子来看,似乎这是初学者过度到有经验者需要经历的一个阶段。这是不同的人,理解事物的方式不同:上述的新手们可能都是从结果到原因,而老手们则是从原因到结果。比如第一个例子中使用word排版,新手们就是因为“引用文字是斜体”这个结果才把某一段文字设置成斜体,而不是“因为这段文字是引用,所以它才是斜体”。如果一开始就本着这样的思想去学习,也许会少走一些弯路。

事必躬亲虽然精神上值得鼓励,但可能不是长远之计。用这种方式去思考问题容易钻牛角尖,也容易沉浸于一些奇技淫巧中而学不到真正有价值的东西,终究只是看的见一棵树看不到整片森林。比如会有很多经验丰富C程序员告诫你“循环中用++i比i++快”、“整数的乘除尽量换成移位运算”等等。这些编程技巧基本上都是那些编程老手和自己的编译器混得太熟,以至于愿意为它们分担一些工作。但终归到底和语言本身无关,何况现代的高级编译器都已经具备自动优化功能。过度地手工优化不仅可能破坏代码的可读性和移植性,而且让编译器难以进行优化、发挥不出其长处,到底是聪明反被聪明误!

而尽量让计算机来做事,这不仅体现“物尽其(奇)用”、“各司其职”,还反映了道家的无为思想(我所理解的无为不是不做任何事情,更确切的说应该是不做多余的事情。即“最小行为”或“按自然法则行为”。由于我的坚持,在中学里曾一度被语文老师树为反面教材)!它让我们摒弃一切不相干的事情,一心着眼于问题本身,提高解决问题的效率和质量。

后记:“不做多余的事情”,这是与计算机打交道的方式,但不应该用来处理人际关系。虽然我们也都有各自的工作要做,但我还是挺愿意偶尔帮我老爸老妈干点活的~


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者“redraiment”和主站点上的本文原始地址


我的邮箱,欢迎来信(redraiment@gmail.com
我的玩具箱(子清行
我的百度空间(梦婷轩

目录
相关文章
|
2月前
|
运维 JavaScript 程序员
7 行代码搞崩溃 B 站,原因令人唏嘘!
7 行代码搞崩溃 B 站,原因令人唏嘘!
26 2
|
6月前
|
Java 程序员
IT学不好没什么,大不了躺平
IT学不好没什么,大不了躺平
|
25天前
|
IDE 安全 程序员
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
14 1
|
3月前
|
数据采集 算法 Java
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
|
9月前
|
小程序 Windows
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
|
9月前
|
搜索推荐 小程序 程序员
看过很多教程,却依然写不好一个程序,怎么破?
最近在和学员的沟通中,发现不少初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,但是面临一个新的编程问题时,依然感到无从下手。
|
程序员
能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
在我们的眼里,程序员好像是无所不能的,那么复杂的App和那些游戏都是他们做出来的,这让我们很难相信还有什么是他做不出来的。不过,就是我们每天眼里看着很厉害的程序员,每天都要面临的就是头疼,头疼,头好疼,特别是我接下来要说的几件事情,几乎是所有程序员都会把头抓秃的事     那么这五件事情究竟是什么事呢? 写着代码停电,代码没有保存 如果有一天突然代码写到一半,眼看就快要完工了,突然一下就断电,代码没保存。
1303 0
|
负载均衡 安全 搜索推荐
游戏陪玩源码并非越复杂越好,有时简单才是王道
游戏陪玩源码并非越复杂越好,有时简单才是王道
|
算法 程序员 持续交付
如果你有拖延症,程序员不如试试这个技巧提升效率?
  要吃掉一头大象,每次吃一口。   ——克雷顿·艾布拉姆斯(Creighton Abrams)   造成拖延的首要原因之一,同时也是造成生产力低下的祸根,就是总是在感慨一个问题:好忙啊,问题好大啊……实际上,你并没有真正试着去解决问题。当我们从任务的全貌来审视任务的时候,它们看起来比真实情况都要大,并且更吓人。   在本文中,我会谈及一个能够帮助你克服拖延的提高生产力的窍门:分解任务。通过将大任务分解为小任务,你会发现自己更有动力去完成它们,也更加稳妥地向着目标前进。
123 0
|
小程序 Android开发 容器
为何小程序上线了,他们的内心却留下遗憾?
你的小程序还是那么卡卡卡卡么?
7654 0
为何小程序上线了,他们的内心却留下遗憾?