阅读更多

44顶
5踩

编程语言

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

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

       几周前,布莱斯在网上发帖,漫谈自己对编程工作的看法。在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 条 请登录后发表评论
4 楼 wjjxf 2010-11-29 15:49
编程是一门艺术,内行看门道,外行看热闹
3 楼 bolibei395 2010-11-29 15:46
写的不错,很有感触。
2 楼 Puras 2010-11-29 13:03
xiaodatao 写道
这要看一人在工作上的责任心!


偶们领导说过,责任心太强也不是啥好事。。。
1 楼 xiaodatao 2010-11-29 12:55
这要看一人在工作上的责任心!

发表评论

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

相关推荐

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

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

  • 数据库常用类

    数据库随笔 1、MySQL函数GROUP_CONCAT() mysql 中 GROUP_CONCAT()函数,主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用。 语法: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]]

  • 数据库 常见概念汇总

    超键(super key):在关系中能唯一标识元素属性的集称为关系模式的超键。 候选键:(Candidate Key):不含有多余属性的超键称为候选键。也就是说在候选键中在删除属性,就不是键了。 主键(Primary Key):主键就是候选键里面的一个,是人为规定的。 外键(Froeign Key):如果模式R中的属性k是其他模式的主键,那么k在模式R中称为外键。 主属性:如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。1NF:属性项不可分 2NF:R中的每一个非主属性,完

  • VB类模块的使用

    一、创建类模块及类的定义 1.1 打开Excel中 开发工具“ Visual Basic” 如下图 1.2 在VB工程中添加类模块 1.3 类模块的定义 代码如下:定义了三个属性,Let赋值,Get取值 Private pmethod As String Private pmatchStr As String Private ptargetStr As String Property Let...

  • 一个程序所要使用的类模块

    1,网络模块 2,配置模块 3,基类模块 4,底层模块 5,资源模块 6,UI模块 一般就按照这几个方向走,大致能构建一个程序。

  • 功能模型

    功能模型着重于系统内部数据的传送和处理。功能模型表明,通过计算,从输出数据能得到什么样的输出数据,但不考虑参加计算的数据按什么时序执行。功能模型由多个数据流图组成,它们指明从外部输出,通过操作和内部存储,直到外部输出的整个数据流情况。功能模型还包括了对象模型内部数据间的限制。   功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。   建立功

  • 处理效应模型stata实例_手把手教你Stata软件操作与案例分析

    【购买须知/观看说明】本课程为在线视课程,购买后联系经管之家刘老师(手机/微信:15001153936)获取视频观看权限。2、获赠资料:支付成功后,联系经管之家刘老师(微信:leynameimei)备注 stata。3、本课程为一次性付费产品,成功购买后即可获得该课程的全部内容。4、本课程为虚拟服务内容,一经购买,概不退款,请您理解。5、严禁任何形式的转载、销售,未经授权,严禁第三方平台传播,违者...

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

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

  • 数据库-MYSQL

    一、数据库简介 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 二、专有名词 DBMS: 数据库管理系统(Database Management System是一种操纵和管理数据库的大型软件 DB:(Database)数据库 SQL: 结构化查询语言,(Structure Query Language),专门用来操作、访问数据库的通用语言 三、数据库类别 数据库共有3种类型,为关系数据库、非关系型数据库和键值数.

  • 常见数据库分类

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

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

    数据库的种类:一、 开放性 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

  • VB动态调用类模块中的函数的方法

    动态地调用函数是令广大VB程序员比较苦恼的一件事情。VB不同于C++,不同于Java,没有传递函数指针的概念。这么一说,肯定有很多的大神级别的VB高手要来喷我了,说“新手不懂就不要在这里胡说!”。的确,我承认,刚刚我说的不够严谨;老实说,VB中是有函数指针的概念的,不过这一概念显得很”隐晦“,没有C++中使用的频率那么高,而以前我在一篇文章中也看到过,微软的官方也的确不推荐VB程序员在代码中使用指

  • VB中关于自定义模块type的使用

    解析:TYPE自定义类别,后引用进行文本的写入

  • ECShop - 数据库操作类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现。这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小。另外,当网站需要做memcached缓存时,也可以很方便的实现。当然,这样做的后果就是数据库的选择非常狭窄,无法实现其它的非MySQL数据库。

  • 数据库模块操作

                                           第十三章  数据库模块操作 本章所讲内容: 13.1  pymysql 13.2  peewee 13.1  pymysql 13.1.1  介绍        PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 python2...

  • mysql数据库类_MySQL数据库类的定义

    俗话说“好的开始是成功的一半”,而PHP+MySQL项目中数据库的操作是重点之一,能否简化数据库操作程序的编写,就成了影响工作效率的关键之一。所以小阳并不是一开始就做页面,而是先建立一个“dbclass.php”文件,开始编写操作MySQL数据库的类“dbClass”。即在“dbclass.php”中编写以下程序:<? php$db_username="myusername"; //连接数据库...

  • 几种类型的数据库比较

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

  • SQL 之三

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

Global site tag (gtag.js) - Google Analytics