写出漂亮的代码

转自:http://blog.csdn.net/fuyuwei2015/article/details/46552697

1)移除你没有用到的东西(就像上面建议的一样)。

2)简化必要的概念,避免不必要的概念。

3)移除不必要的抽象,用实际的实现来替代。

4)移除不必要的虚拟化,并且简化对象的结构。

5)如果一个设置曾经使用过,那么就避免在用另外的配置来运行这个模块。

 

下面的都是废话:

 

转自:http://blog.csdn.net/yaomoon/article/details/23866657

 

要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码。

即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码,整洁而规范,视觉上自 然有一种美感。空白错落有致,注释恰到好处,命名和排版遵守统一的规范。差的程序员写的代码则经常出现过长的函数,前后不一致的命名方式和排版,过深的嵌 套结构,非常复杂的表达式,随处可见的数字等毛病。
再去粗粗阅读,对好的程序员还是差的程序员就会更有把握。好的程序员写的代码,有一种精心雕琢而成的一致性。好的程序员一致会遵守统一的命名方 式,如camelCase,而差的程序员的变量命名时不时的就会偏离统一规范。好的程序员的代码中拼写错误几乎不可见,而差的程序员的拼写错误要多得多。 好的程序员对于同一类动作,不会忽而用这个动词,忽而又用那个同义词,如add/insert混用。好的程序员采用一致的简写规则,差的程序员则时而不简 写,时而简写。好的程序员会很注意名称中形容词与名词谁在前谁在后,而差的程序员没有规则,时而在前时而在后。好的程序员很少会写出大段大段的重复代码, 差的程序员却经常搞不定重复代码,他们难以将重复的代码抽取出一个统一的概念进行重用。好的程序员对于对外的API会注重注释与代码的一致性,差的程序员 经常注释中的参数名称与函数定义都不一致。好的程序员很少会留下被注释掉的或用#if 0括起的垃圾代码,他们意志坚决,代码有用就要,没用就不要,差的程序员则不一样,他们经常不确信一段代码是否真的需要,他们缺乏保持代码整洁的习惯,因 此他们让垃圾代码留着。
如上,即便你不懂他所用的语言,不却关心程序的逻辑,对好的程序员还是差的程序员就能做到八九不离十的判断。程序的好坏几乎总是取决于它们是否 “漂亮”,不“漂亮”而好的程序,除了C++ STL源码,我再也没见过(如果你稍仔细看,STL的源码虽然不够“漂亮”,但仍然满足这里提出的一致性原则)。而又好又“漂亮”的代码则随处可见,如 Linux Kernel,InnoDB,JDK,JUnit等等。
如果再仔细阅读,就能更准确。好的程序员写的代码,好似浑然天成,简单而直白。函数通常较短小,函数的名称准确的反映函数要完成的工作。逻辑简 单而自然,让你读的时候由衷的发出“啊,就应该是这样”的感叹,而差的程序员的代码经常让你发出“怎么是这样?这是再干什么呀?”的疑问。好的程序员会在 紧要关头加以画龙点睛般的注释,差的程序员要么没注释,要么注释只是代码的重复,纯粹是废话,更差的是注释是错的,是误导。
好的程序员未必是“语言律师”,即那种非常清楚的了解语言的各个细节,在编程时到处使用的家伙。好的程序员也不常“炫技”,在代码中精心构造一些独具匠心的片断,他们偶而会,但大多数时候总是用直白的语言来表述。
从代码也可以看出一个程序员的团队协作精神。注意团队合作的程序员,会严格按照团队规范写代码,而风格与团队规范不一致的程序员则很可能欠缺团 队精神。注意团队合作的程序员会注意给模块的对外接口加以重要的说明,如前置条件、后置条件、参数能否是NULL等等,不注意团队合作的程序员懒于处理这 些细节。
好的程序员与差的程序员的生产力差别巨大,项目的周期越长,项目越复杂,项目对质量的要求越高,好的程序员的价值就越大。好的程序员与差的程序 员,管理成本也差别巨大,好的程序员只需要与他共同确定设计,代码可以不看,差的程序员的代码经常需要经过多次review,且仍有可能达不到理想的质 量。
要成为好的程序员,首先要树立要成为好的程序员的志向,再勤加练习,天长日久,就会越来越好,这些人不怕老。没有志向永远成不了好的程序员,这些人若不在老去之前成为经理就会变成废人。
通过两个小时的笔试和半个小时的面试对于判断程序员来说是不够的。通过笔试与面试,你可以判断一个程序员是否具备算法与数据结构等基础知识,可以判断他对编程语言的特性是否掌握,可以判断他对技术是否关注,然而要知道他能否真的能很好的完成工作,不写代码是不够的。
那些显得对技术充满热情的,未必是好的程序员。这些人可能非常乐意从事有新意的工作,但后续的编码、测试、调试、文案工作则可能让他们感到厌烦。他们可能会提出好的创意,但却经常不能够有始有终的将其完成。公司不需要多少这样的人。
因此招聘的方式需要改善。招聘是最重要的,因为进来后就难以出去,即便是试用。转正条件白纸黑字写的很清楚,只要合格就可以转正,要达到合格并不是很困难。今年部门里进了很多新人,并不是人人都很优秀,但确实也都合格,自然也应该转正。
改善招聘的方法,就是让他写程序,可以出两道题,一道让他写程序,一道让他重构一个已有的较长的程序,一天之内完成。假使可以考他半个月,那么 重构是不太需要的,但一天的时间太短,通过重构可以考察阅读并理解代码,并通过重构“化腐朽为神奇”的能力。那些不愿意写别人的代码,不愿意接受别人的代 码,经常要重来一遍的人是不理想的。

转载于:https://www.cnblogs.com/lyggqm/p/6477338.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 垂直搜死哦,垂直搜索(Vertical Search)的详细介绍

垂直搜索是相对于通用的搜索来说的,垂直搜索是通用搜索引擎的一种细化,垂直搜索专注于某一个特定行业的搜索,搜索的内容更加专一化,比如购物的内容,机械产品的内容,服务信息的内容等,是某一个行…

URL编码表一览

?退格TAB换行回车空格!"#$%&()*,-./%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f%20%21%22%23%24%25%26%27%28%29%2a%2b%2c%2d%2e%2f0123456789:;<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]^_%30%31%32%33%34%…

SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息

上一篇讲到的本地推送是普通的消息推送&#xff0c;本篇要讲一下带按钮动作的推送消息&#xff0c;先上个图瞅瞅&#xff1a; 继上一篇的内容进行小小的改动&#xff1a; 在didFinishLaunchingWithOptions方法内进行以下修改 123456789101112131415161718192021222324252627282…

java的input不能更改,无法将方法响应标头Content-Type更改为application / xml

尝试解决Twilio 12300错误&#xff1a;使用AWS的API网关(GET)和CloudFormation通过 aws cli 和Swagger部署Lambda(无服务器)应用程序时导致的内容类型无效 .我将集成响应主体映射模板> Content-Type设置为 application/xml 和模板#set($inputRoot $input.path(S))$inputRoo…

.Net 调用wordCOM组件转PDF

运行环境&#xff1a;office2010或office2007SaveAsPDFandXPS.exe补丁 x86x64系统环境均可。class Program{static void Main(string[] args){DOCConvertToPDF(AppDomain.CurrentDomain.BaseDirectory "/b.html", AppDomain.CurrentDomain.BaseDirectory "/aa…

树状数组基础

关于树状数组的讲解推荐《算法竞赛入门经典训练指南》 一维版本&#xff1a; 洛谷3374 分析&#xff1a;树状数组裸的模板题 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 using namespace std;5 const int maxn50000010;6 int c[maxn];7 in…

php pdo更新,php - 使用PDO和MySQL更新查询

我试图只用PDO编写更新查询&#xff0c;但我无法执行代码&#xff1f;try {$conn new PDO("mysql:host$hostdb; dbname$namedb", $userdb, $passdb);$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8$conn->setAttribute(PDO::ATTR_…

jquery.easyui常用示例

消息框$.messager.alert("提示","法规重复标志更新成功&#xff01;");$.messager.confirm(Confirm,Are you sure you want to delete record?,function(r){ if (r){ alert(ok); } }); 翻页//初始化$(#pagination).pagination({total: actResult.Ro…

vue1升级到vue2的问题

router 不能用map方法了&#xff0c;需要改router的结构改为routers [ { // 当没有匹配路由时默认返回的首页 path:/index, component: index, authenticate:true }, { // 当没有匹配路由时默认返回的首页 path: /spa/, component: i…

python寻找字符串中的英文字符,python如何解析字符串中出现的英文人名?

这里有四个例子&#xff0c;结果来自google scholarstr1 "Jakes, William C., and Donald C. Cox. Microwave mobile communications. Wiley-IEEE Press, 1994."str2 "Schlegel, David J., Douglas P. Finkbeiner, and Marc Davis. \"Maps of dust infra…

win2003/XP删除桌面回收站

gpedit.msc 用户配置——管理模板——桌面——从桌面删除回收站——启用刷新桌面即可。

Spring Boot 学习笔记--整合Thymeleaf

1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-thymeleaf</artifactId> 4 </dependency> 2.添加静态文件 根据…

mongo php update 写法,mongodb update 字符 操作

下面常用的update操作&#xff0c;用mongodb2.6.3版本测试的&#xff0c;官方发布的稳定版本2.4&#xff0c;建议用稳定版。 一&#xff0c;upsert表示如果有数据就不插入&#xff0c;没数据就插入 1&#xff0c;命令行下 db.peoples.update( //查找name等于tank的用户... { na…

js 打印

window.print(); 打印隐藏部分<style type"text/css" media"print">.noprint{display:none;}</style>

oracle 增加一个新分区,oracle 11g 新增分区

oracle 11g新增了间隔分区、虚拟列分区和引用分区。详细的介绍请查看官方文件&#xff1a;1. 间隔分区间隔分区是范围分区的一种扩展。在引入间隔分区之前&#xff0c;DBA 需要显式定义每个分区的值范围&#xff0c;随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止…

jquery.uploadify flash IE6上传无效

类似$().window&#xff0c;以div方式打开弹窗&#xff0c;弹窗中iframe中就是上传页面&#xff0c;页面加载时就加载上传页面会产生这个问题。解决办法&#xff1a;打开弹窗后再给iframe赋src值。

如何手动修改oracle表空间,ORACLE数据库创建和修改表空间

-建立表空间(oracle中的tablespace(表空间))CREATE TABLESPACE data01DATAFILE D:\oracle\ora92\oradata\db\DATA01.dbf SIZE 200MUNIFORM SIZE 128k;#指定区尺寸为128k,如不指定&#xff0c;区尺寸默认为64k--建立临时表空间CREATE TEMPORARY TABLESPACE temp_dataTEMPFILE D:…

dexpler的使用方法

https://www.abartel.net/dexpler/转载于:https://www.cnblogs.com/yuqt/p/6490848.html

jquery.uploadify参数

uploadify函数的参数为json格式&#xff0c;可以对json对象的key值的修改来进行自定义的设置&#xff0c;如multi设置为true或false来控制是否可以进行多文件上传&#xff0c;下面就来介绍下这些key值的意思&#xff1a; uploader &#xff1a; uploadify.swf 文件的相对路径&a…

Kaggle入门篇

Kaggle入门篇转载于:https://www.cnblogs.com/akrusher/articles/6492096.html