阅读更多

44顶
5踩

编程语言

原创新闻 程序员:你的代码为谁而写

2010-11-29 12:41 by 见习编辑 jobbole 评论(64) 有20301人浏览

       几周前,布莱斯在网上发帖,漫谈自己对编程工作的看法。在Reddit上引起了广泛讨论。讨论的焦点集中在程序员的等级——“优秀”、“良好”、“糟 糕”和“极差”。我发现,讨论中一些用语十分不妥。"好"与"坏"都是道德评价,评价之后似乎便给人贴上了永久不变的标签。



  

 
  可以肯定的说,我曾被另一个程序员称作是 “极差”的程序员。我也承认,我确实写过一些极差的代码;但我也自认为曾写过相当多的“好”代码。

  要评判很久以前写出的代码是优是劣很不容易,因为现在已经不知道当时为什么编写这些代码,也不知道为谁编写了这些代码。

  问问自己,现在正为谁编写代码?


  为了按时交付任务

  也许最常见的原因就是为了按时交付任务。走走捷径,宁可复制粘贴删掉几行代码也不愿意重构代码,然后匆匆交工。我们都这么做过,也都知道这是不妥的。


  为了突出的考核结果

  当管理者本身不懂代码,却有一套程序员“好坏”评价标准时,会出现什么情况?程序员要理清这套标准并不困难,因为他们的特长就是解决难题,然后他们会努力完善自己,从而迎合评价标准。代码行数、已解决Bug数量、注释的密度、代码深度等都可能是衡量编码人员的指标,但这些又都是相对标准,而不是绝对标准。也有些新颖的衡量手段(比如“已删除代码的行数”)。


  为计算机编写

  从某种意义上来说,所有的程序都是为计算机编写的,但计算机应当程序员最后才考虑的。计算机只注重语法,不注重注释和变量名称。大多数程序语言也不注 重间 距与代码格式化。当然,你还是要选择正确的算法,但不要想着通过微小的优化来加速算法。在for循环中,使用i++还是++i并不重要,编译器和JITs 会解决这些问题。在考虑优化算法之前,还是应该先把代码写的清晰易懂。要知道编码在使用通用模式时,计算机和编译器运行的更快。


  为了自己

  虽然学习一门新的程序语言很有趣,不过如果你将整个公司架构都建立兴趣之上是不切实际的。Hacker News上曾有一则相关故事,Lambda the Ultimate网站上还有更糟糕的案例。如果你是为自己写代码,你可以不加注释,可以随意使用糟糕的变量名,甚至使用其他“怪癖”,但这样写出来的怪异 代码别人很难看明白。不过没关系,因为每个人都会时不时想在某些事上找点漏洞出来。


  为后来者编程

  编程是把抽象观念转换成计算机可以理解的形式。即使是细微的抽象观念,转换成代码也是很不简单。因此很多软件项目都衍生出了成千上万甚至是上百万行的代码,相当于一本代码书。通过有限的语法与其他人交流这些概念,大多数时候都注定失败。

  我所写的最出色代码就是我愿意花时间来添加注释、列出代码流、甚至附上一些ASCII文字图的代码。编写过程专注于如何把自己抽象概念,与今后将有可 能读到这些程序的、不幸的程序员进行传递和交流。我认为专注于这种交流,代码会变得越来越好,因为你会更深入地思考抽象概念以及如何对正在做的事情分层, 而不是一味的编写代码和转到下一个程序块。

  注释使代码变得更好理解。每当你再次做某事的时候,总会比上一次更好。当你在编写代码和注释时,就是将抽象概念向读者解释了两遍。这会迫使你思考更 多。很多次我写完一个代码以后都会对它写一个注释。然后从头修订代码,甚至改变了一些小地方,例如选择更好的变量名称,来更好的交流想法。


  评价代码/程序员

  综合前文所述,可以看出,编程人员孰优孰劣确实难以定夺。因为难以明确他们编写代码目的。你可以考评代码,但你无法得知代码编写者当时的心理状况。或 许那天是星期五,他急着要赶去维加斯度周末;也许是程序出了问题,他不得不采取紧急补救措施,但这些补救措施一用就是5年;也可能他原本就是个不合格的程 序员。


  也许编程真是一门艺术?

  我不知道如何公正地考核编程人员,我想也没几个公司能做到。看看程序员的面试流程就清楚了,他们只不过坐在桌前被问几个问题而已;根本没有什么标准测试能让计算机科学专业的学生证明自己已经掌握了必要的技能。


  编程工作带有太多艺术色彩,所以不可能通过测试手段或者固定的考核标准来评价。

  你知道还有哪个领域也是通过视觉媒介将抽象的概念传达给其他人?美术和绘画作品。今天,我们或许会说梵高是个大人物(其画作闻名于世),但是仍然有人不喜欢他的作品。类似表达抽象概念的事物不应该用“好”或“坏”来评价。

  程序员可以做到的就是时刻提醒自己,编程的目的要正确。不能仅仅要求编译器能识别就行,不能为了迎合某种考核标准,也不能为了按时交工而编程。相反,应该适时注解或写文档,解释或记录代码功能。只要用心,你就能编写出优秀代码。如此一来,以后就会有人夸你是个优秀程序员,而不会因你那一万行的代码文件而“咒骂”你是“极品”程序员。欢迎在评论或微博中分享你的观点。



  本文出处:伯乐在线 - 职场博客
  本文链接:http://www.jobbole.com/entry.php/355

  Via:Paul 文章推荐:关关  编译:伯乐在线 敏捷翻译组 - 高志翔/石晓明

  如需转载,但请注明文章来源和超链接等版权信息,否则视为侵权,谢谢合作!

  • 大小: 24.6 KB
来自: www.jobbole.com
44
5
评论 共 64 条 请登录后发表评论
64 楼 weidewei 2010-12-03 10:21
为了生活,车房!!!!!!
63 楼 qwe_rt 2010-12-02 16:51
看看牛人是什么观念:“作为一个工程师,热爱你的专业。你能拥有一个可以挣钱、受人尊重、并拥有乐趣的程序员人生。”
做一件事情可能有很多种理由(目的),关键点是你把哪个理由(或目的)放在首位
62 楼 softor 2010-12-02 14:59
为了兴趣和钱
61 楼 xiang37 2010-12-02 13:36
图片不错,很吸引人;文章一般,这些话大家都知道!对于迷茫的人看看,还算是挺好的!
60 楼 conanca 2010-12-02 13:21
编译完成后运行,出现期待的结果时,那一刻的心情而写
59 楼 shazhenli 2010-12-02 12:32
为了拯救全人类而写
58 楼 qwe_rt 2010-12-02 11:51
为了伟大的党而写。
57 楼 nurenok 2010-12-02 10:32
寒窗苦读数十载,卖与帝王家
56 楼 qwe_rt 2010-12-01 23:44
为了获得功能完成后的成功感。
55 楼 pengmj 2010-12-01 23:16
为了鸡的屁
54 楼 江南白衣 2010-12-01 22:49
为了万能的政委
53 楼 jackeycqu 2010-12-01 21:49
瞬间大家都是艺术家
52 楼 wangshaojun241090 2010-12-01 19:35
我究竟为什么而写?很模糊.....
51 楼 howgoo 2010-12-01 18:41
本来想好好写,发现别人根本不管这个。。。只看结果
50 楼 TheMatrix 2010-12-01 16:54
mwxdi 写道
为了 无数个不眠夜,为了不让别人像我们一样度过这个不眠夜!

support!
49 楼 BruceXX 2010-12-01 16:07
呵呵,这家伙和我比较相似。。
48 楼 422759366 2010-12-01 15:55
 编程是把抽象观念转换成计算机可以理解的形式。
GOOD~~
47 楼 mvpzhoulong 2010-12-01 15:09
顶了
46 楼 mwxdi 2010-12-01 13:36
为了 无数个不眠夜,为了不让别人像我们一样度过这个不眠夜!
45 楼 willothe 2010-12-01 12:15
feidaodalian 写道
为反清复明而写!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • VBA从入门到精通(控件+类模块+ADO+SQL数据库)

          本课程属性Excel VBA中比较高阶的课程,主要讲解关于各种事件的应用,各种控件的应用,如果使用类模块,如果在VBA用调用SQL语句去处理数据库中的数据等操作。学习完成本课后,你可以在Excel中开发各种小型应用系统。以下是课程主要内容。第1章:工作表,工作簿常用事件。第2章:窗体控件应用第3章:ActiveX控件应用第4章:类模块应用第5章:vba+ado+sql第6章:实战应用(考试系统开发)

  • 数据库有那些类型?数据库都有什么类型?你可能从未知道,数据库还有这么多类型。

    数据库有那些类型?数据库都有什么类型?你可能从未知道,数据库还有这么多类型。

  • 数据库的类型

    数据库的类型

  • 关系型数据库和非关系型数据及其区别

    关系型数据库和非关系型数据及其区别 关系型数据库 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读...

  • 常见数据库分类

    SQL(StructuredQueryLanguage,结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。 SQL是IBM公司于1975—1979年之间开发出来的,在20世纪随着数据库技术的发展,数据库产品越来越多,如Oracle、DB2、MongoDB、SQLServer、MySQL等。 1. Oracle数据库 Oracle数据库管理系统是由甲骨文(Oracle)公司开发的,在数据库领域一直处于领先地位。目前,Oracle数据库覆盖了大、中

  • ADO模块处理最常用的ADO功能

    ado的代码

  • 数据库的种类,数据库种类大全

    数据库的种类:一、 开放性 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据库。 2. Oracle 能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。 3. Sybase ASE 能在所有主流平台上运行(包括 windows)。 但由于早期Sybase与OS集成度不高,因此VERSION11.9.2以下版本需要较多OS和DB级补丁。在多平台的混合环境中,会有一定问题。 4. DB2 能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5

  • 几种类型的数据库比较

    小型数据库 access、foxbase 中型数据库 mysql、sql server MySQL是一个开源的完全免费的数据库系统,是一个快速的、可靠的和易于使用的数据库服务器 SQL Server是由微软开发的数据库管理系统,它只能在Windows上运行,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业 大型数据库 oracle 、db2、sybase Oracle能在...

  • SQL 之三

    自增量的使用: MYSQL SQL ServerAcess Orcal 定义 关键字 Auto_Increment 关...

  • Oracle/MSSQL/Mysql 常用数据库的字段类型及大小

    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小ORACLE的数据类型常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR ...

  • 数据库的常见分类

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 数据库的常见分类一、按数据的组织方式二、按存储介质三、按数据处理场景2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入.

  • 详解VB中连接access数据库的几种方法

    在VB中,连接ACCESS数据库的方法主要有下面三种 使用ADO对象,通过编写代码访问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件快速创建数据库连接 有三种连接方法 Data Link文件 使用ODBC数据源名称 使用连接字符串 使用数据环境设计器创建数据库连接 首先添加环境引用。 ...

  • 几种主流数据库类型简介

    1.IBM的DB2    DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务。虽然DB2产品是基于UNIX的系统和个人计算机操作系统,在基于UNIX系统和微软在windows系统下的Access方面,DB2追寻了ORACLE的数据库产品。    IBM公司研制的一种关系型数据库系统。DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于

  • 数据库简介及类型

    1.1 什么是数据库? 简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。 1.2 数据库的种类 早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库...

  • dll封装后,ASP调用

    Option ExplicitVB ActiveX DLL 类模块代码-----引用ASP中的一些设置------Private ScriptingContext As ASPTypeLibrary.ScriptingContextPrivate Server As ASPTypeLibrary.Server以下两个子程序是必须的Public Sub OnStartPage(Passe

  • VB连接SAP实例

    最近做个项目有用到vb连接SAP,现在项目完成,做个技术总结。顺便整理了下VB连接SAP取回/传送数据 的方法。 1.连接SAP. Public Function GetSAPConnection() As Object     Dim strStatus As String     Dim oFunction As Object     Dim oConnection As Ob

  • VB6.0连接mysql5.7

    2018年2月4日12:15:42  我的系统是win7 64位 1.在mysql官网下载mysql5.7: https://dev.mysql.com/downloads/installer/ 这个安装版本是5.71 32位 和MySQL Connectors :https://dev.mysql.com/downloads/connector/odbc/ 这个一定要下载32位的 VB不支

Global site tag (gtag.js) - Google Analytics