像建筑设计师一样去写代码

写代码和写文章,从某种程度上是相通的,需要逻辑、构架,也要尽可能的简练。我们之前说过,创作者的时间表和管理者的时间表是不一样的,编代码和写文章,都是一个孤独而不能受到干扰的过程,面对屏幕,就是一场自己与自己的战争。 

同样,如果说建筑师最后的成品是建筑的话,那么程序员和软件工程师最终的成品就是软件。在实际动工之前,建筑师将会将建筑的每一个细节,都在蓝图上加以呈现。只是程序员和软件工程师并不会这么做。或许,这就是为什么房子很少倒塌,而软件却经常崩溃的原因? 

设计蓝图会帮助建筑师确定他们的设计是可行的。“可行”并非只是保证不倒塌,它同时还意味着,建筑能够达到预定的服务于人的目标。客户或者开发商,也是通过蓝图去了解一个设计师的想法和他正打算去做的事情。

相较之下,很多程序员在他们开始写代码之前,连一个粗略的框架都没有。 

大部分的程序员都认为:所有不能直接产出代码的事情都是没有意义的。思考并不能直接转换成代码,但是倘若在没有一个整体框架之前,就开始匆忙码字,这也是没有意义的。在程序员开始写代码之前,他们应该先充分理解这些代码最终所要实现的功能。理解的过程,自然需要去思考,而将思考过程写下来,对于程序员来说又是件很耗时的事儿。 

但漫画家 Dick Guindon 曾经所过: 写作是发现你想法有多糟糕的最好的方式。

蓝图帮助我们理解建筑的构架,同样,在我们开始噼里啪啦写代码之前,我们也需要一个类似的“蓝图”,也就是“注释”(specification)。 

“注释”不能直接产出代码,所以被很多程序员忽视。但没有“注释”,直接开写,就好像让建筑承包商没有设计师的图纸就直接上阵一样。 

也有人会说,将程序员和建筑师类比,并不合理。因为拆墙重建困难,但删掉重写则相对容易,所以,程序员可以先写着,不满意再改。 

这种想法是错的。为什么呢?因为 Debug 的过程也非常耗时。 

我最近也完善了一些程序,这个过程需要对程序构架本身有个非常清晰的了解。我花了接近一天的时间去了解整个程序的运作机制,而倘若有注释的话,这可能只需要 5 分钟的时间。 

为了避免引入 bug,我需要理解任何小的调整可能带来的结果。而没有注释,使得我必须花很长时间了解每条代码的含义和作用。尤其对于上千行的代码来说,首先读懂它就很耗时,想要改掉其中的某行,我必须了解小的调整可能对整体架构和前后逻辑造成的影响。最终,在超过一个星期的时间里我只改了 180 行代码,而这对一个动辄千行的程序来说,改变算是很小的了。 

Debug 只是写代码一个小的组成部分。这数千行的代码很多我 10 年前写的,尽管我对它们仍有些许残存的记忆,但如果有注释的话,修改代码的过程会更加顺畅,我不仅能在最短的时间里读懂整个框架,还可以准确定位我所要修改的部分。 

改别人的代码就更加困难了,每个人的思维方式都不一样,如果没有注释,我通常要花费两倍以上的时间,只是为了修改一些细小的错误。 

那么,我所谓的“注释”又是指什么呢?“注释”是指附在代码之后的,一段形式化规范说明的文字。但需要区分开的是,如果只是去打造一个工具室,我们是不需要一整套摩天大楼蓝图的,同样,对于小的算法来说,我们也不需要给每条代码加上注解。 

我最近要编写的程序,最多称得上是“平房”,而非摩天大楼。我会为我的每个算法附上注释,有些非常简单的算法,我通常只会插上一两句注解。我有一个非常简单的法则来帮助我和其他人了解我的程序:注释应该尽可能有效地去帮助任何一个人理解和使用我的代码。 

一旦我知道一行特定代码要做的事情后,写的过程其实是非常简单而直接的。也有些程序需要用到非常规算法,这时我会写下我算法的主要思路,来试探其可行性,同时也帮助我更高效的 Debug。 

除了那些特别重要的代码,通常我的注释都是非正式的。在过去的十年里,需要我写准确并正式注释的次数并不多。但对于一个非常复杂的系统来说,注释的重要性不言自明。很少有工程师会在构建一个复杂系统时,花时间去写好注释。有些学校也会教你怎么写注释,但更多时候都是教你如何写好代码。这需要实践,如果你没有画过搭建一座平房的图纸,你很难直接画出摩天大楼的蓝图。 

写好注释也没有一个简单的准则,但有一点你要尽量避免,那就是用代码去解释代码。就好像你不能用两个人们都不理解的东西,用其中一个去解释另外一个。建筑师也不能直接用砖块来告诉你,他想搭建一个什么样的房子。 

了解一个复杂的系统,最好的办法就是将其核心用简单的概念,抽象的概括出来。初中数学的一些基本概念可以用来帮助你写好注释,比如你可以用一些集合、方程和简单的逻辑来解释你的代码。对于一些复杂的算法,你也可以引入数学里没有过的概念来加以解释。总的来说,如果你的注释偏离一些抽象的数学基本概念越远,理解起来也就越困难。 

思考并不能保证我们不犯错,但不思考,犯错是无法避免的。注释能帮助我们将错误最小化,同时它还能提高我们改错的效率,节省我们的时间。

时间: 2024-11-02 21:32:21

像建筑设计师一样去写代码的相关文章

网页设计师的平衡点:到底要不要学写代码

网页设计师到底要不要学写代码?这个问题很有趣,但是却很少被大家提及.因为在一个网站开发中,网页风格设计和前端的布局代码(比如用 CSS,HTML)是分别是由美工和前端开发人员完成的.两者之间泾渭分明,在业界,几乎也从没有逾越这个界线.当然,这个问题的答案就需要仁者见仁了.不过,你可以阅读下文,或许你能从中找到一些启发. 这是个有趣的话题,不过网页设计师们却很少讨论这个问题.以Photoshop作为起点难度大,在完成第一个项目之后,你会感觉兴奋又紧张.但是,如果你不会写代码,网站的原型设计的用处又

我,一个写代码的 程序员 感悟_励志篇

前几天一个朋友给我的blog留言,谈到希望在新年里能够看到的不仅仅是我对技术的分享,更希望能够看到对于技术学习.职业发展的规划.因此想到了写一点什么分享一下自己这些年的一点点"收获",周星驰的喜剧之王里面说到他是一个演员(虽然被叫做跑龙套的),我想我,就一个写代码的. 爱这行        从事任何行业都一样,只有真正的爱上了这份工作,才会投入热情,才会在顺境中自我警醒,在逆境中寻找突破.这个行业的竞争很激烈,你停下来走,别人就立刻会跑步超过你,没有对这一行业的一种热情,就很难在困境中

会有公司让我这样一个新人去写程序吗?

问题描述 各位前辈,先问个好!我的问题:1.我的想法对吗?2.会有公司会让我这样一个背景的人去写代码吗?我很想听听各位前辈的看法,望不吝赐教!先在此谢过!回答得好,会再加分! 解决方案 解决方案二:我想会吧,毕竟新人要锻炼,但应该不会是重要的项目解决方案三:肯定会啊,要不招你进去吃闲饭啊,不过应该会在见习期给你一个指导人,3个月后如果能独立工作了就留下,反之走人!解决方案四:楼上的说得对,一方面公司是不可能给你钱而不让你干活的,另一方面,你也需要锻炼,要不你什么时候能独立工作啊,你也进步不了.解

你需要每天写代码吗?

就像运动员每天锻炼一样,每天练习写代码可以成就更优秀的你. 最近我看过的博客,基本上每篇都有提到,"你需要每天写代码".什么主题不重要,关键是要养成每天写代码的好习惯.写得越多,代码就会变得越容易,你也会越擅长编码. 这不仅适用于写代码,写诗和运动,事实上,这句话可应用于任何行业.骑自行车,打篮球,读书,烹饪等等等等.你做的越多,你就会越擅长,熟能生巧就是这个道理. 这也是编程领域的真理.如果你想擅长编程,那么你就必须每天写代码.代码写得越多,你才会觉得它越容易,并且越擅长于编程.就像

关于CTO该不该写代码:我们调查了100个CTO,70%的人说不用写但要懂

近期,某医疗互联网公司前CTO在网络上飙红,很多IT圈人士的微信.微博均遭到刷屏待遇.具体事件经过不再做累述,信息大家都已心照不宣. 我们关心的是,由这次事件所引出的各种声音,其中最突出的一种声音是,广大IT人士开始对CTO要不要自己写代码产生了诸多疑问,大家都各执己见.鉴于此,我们特别设计了一次问卷调查,在本次调查中我们对接近100多名以CTO,CIO为主,也包括程序员.产品开发人员在内的相关人士通过问卷的形式进行了集中调查.并邀请了相关企业的技术人员对调查结果进行了客观评论与分析.以下为本次

设计师写代码的方式

  设计师应该会代码吗?是的,但不是像开发者那样. 这个著名的问题"设计师应该会代码吗?",答案不只是点个头了,它有更深刻的意义.首先,我们了解一些相关背景. 我们正在迅速地转向移动端主宰的世界.从Sketch 到 Pixate, 再到 Framer,设计师的工具,能越来越简单有效地通过原型表现创意.制作app的成本从没有这么低过.也从从不曾如此迅速. 文档"> 对于开发者来说,这意味着他们终于可以尽快学会设计.相比学习Photoshop,这一步迈得显然要小得多.他们不

不要浪费时间去写所谓的完美代码

一般而言,一个系统能用 5 年.10 年,甚至 20 年以上.但是某特定代码行以及某特定设计则往往比较短:当我们使用了不同的解决方法,其生命周期可能就只有几个月.几天,甚至是几秒种的时间. 有的代码就是比其他代码更重要 通过研究代码如何随时间变化,Michael Feathers 确定了代码库的功率曲线.每个系统都有代码,通常而言里面的很多很多代码,一次写好之后就永远不会变了的.但是还是有少量的代码,包括最重要和最有用的代码,会被一遍又一遍地改动.重构甚至是重头开始重写. 随着你对系统.问题领域

写代码达到20万每年是什么层次?能不能详细谈谈。

问题描述 写代码达到20万每年是什么层次?能不能详细谈谈. 解决方案 解决方案二:这要看是怎么计算的.如果他与10个同时对比,那么有点谱.如果他就是一个人闷头从网上抄袭各种代码.下载各种软件然后拼凑,那么其质量可想而知.实际上我最大的愿望就是痛快地去删除代码,而并不影响软件验收测试.这才是技术.解决方案三:如果他与10个同时对比,那么有点谱-->如果他与10个同事对比,那么有点谱我这样说,是觉得真正的设计师尽管可能非常善于写代码,但是不会用这种指标来说明自己的能力.解决方案四:引用1楼sp123

网页设计师也要学习网页代码编写

通常,在完成了一件网页设计后,设计师的无知都会显露无遗而备受指责.他们把创建网页代码的繁重工作都留给了程序员们.这种现象不只出现在网络开发行业,在软件及游戏开发业也是如此. 残酷的事实就是:开发进度可能会因设计师而停滞不前.为了追求最佳效率,设计师不仅需要描描画画,还需要能把它做出来!本文中,网页教学网想与读者分享一些为什么设计师需要学习编写代码的理由. 做现实可行的设计 有了一个最终产品将如何实现的明确印象,设计师将拿出更多实际可行的概念.作为开发进程中不可或缺的一份子,设计师肩负着确保他们的