优雅的书写代码!

如何才能写好代码呢?

写代码就是学一门语言然后开始撸代码吗?看完了我的《GoF设计模式》系列文章的同学或者本身已经就是老鸟的同学显然不会这么认为。编程是一项非常严谨的工作!虽然我们自嘲为码农,但是这工作毕竟不是真正的搬砖,我们是软件工程师。编程需要关注的问题太多,不仅仅有语言,还有算法、数据结构、编程技巧、编码风格、设计、架构、工程化、开发工具、团队协作等方方面面,涉及到很多层面的问题。本文将分享一下根据我这几年来的编程经验总结出的一些关于如何写代码的个人见解。

“编程心法”希望帮助大家渡过职业生涯的第一个瓶颈期。

首先让我们思考一个问题,何谓编程?编程就是写代码吗?

所谓的编程,其实就是不断的对这个现实世界中的问题建立模型并将其固化为代码自动化执行的过程。

在对问题建立模型的过程中,我们会遇到非常多不同层面的问题,所以我们需要很多领域的知识去解决这些问题。


我们需要管理被操作的数据,因为数据与数据之前是相互有关联的。将数据结构化,通常是编程的第一步。关于结构化数据的相关理论以及实践,需要有一个专门的学科分支或者说课题去研究——数据结构

我们需要解决一个具体的问题,这个具体的问题如何一步步去解决,过程是怎么样子的——算法

我们需要将解决方案进行自动化,并以代码的形式进行交付——编程语言

如果将一个抽象的模型进行编码实现,如何实现“这个功能”,如何实现“那个功能”——编程技巧

问题的规模大了,众多代码糅合在一起,连程序员自己都看不懂了!怎么来拆分、模块化这些代码——设计

代码量已经到了一个人无法完成的地步了,需要团队分工合作才能完成了——工程化

你写的代码我看不懂,没法调用或者很难调用,我写的代码你也看不懂,或者很难看懂。还怎么愉快的玩耍——编码风格/编码规范

问题的规模继续扩大,到了系统工程的规模了,之前学的套路已经不管用了!怎么来构建这个系统才能实现正确、安全、高性能、高可用——架构


然而这些也只是一个系统工程中的冰山一角!

这是一个庞大的体系。也正是因为软件开发需要考虑到的问题太多且团队成员水品参差不齐,所以团队开发中并不是每个程序员做的事情都是一样的。每个人都有自己的角色、初级工程师、中级工程师、高级工程师、架构师、CTO。。。

所以编程不仅仅只是堆砌代码!

说到这里,我想起来了一件事情——为啥业界普遍鄙视培训出来半道出家的新人?人与人的区别是很大的!我见过培训出来也很牛的。其实,说到底,被鄙视的并不是所有人。而是那些培训了几个月之后发现随便找个工作也能拿“高薪”然后还自认为编程很简单的新人。因为这种经历给了他们一种错觉——编程如此简单,我培训几个月也会嘛!有点像刚学会开车的新司机,很嚣张的对老司机说“开车很简单嘛!你看我也会啊!”。语言和开发工具只是招式,这是外功。而编程思想、经验是内功。这些内功并不是靠短短几个月的培训能够掌握的,这一点有点像中国制造业和日本制造业的区别。动不动赶英超美可不好。

编程并不简单!这是一件很严肃的事情。不过,我没有办法介绍完所有的方面!或者说,到现在为止,我也并没能掌握所有领域的知识。所以现在我只是分享一些关于编码本身的一些经验。

编码风格

先来一个圈内的段子。

大部分程序员在工作中都很讨厌这四件事情:

写注释

写文档

别人不写注释

别人不写文档

这个段子其实反映出来一个问题,即大部分代码都需要通过大量注释和文档来说明才能将意图传达给维护这些代码的程序员!然而,就像上面的段子说的那样,写大量的注释和文档其实是一件很麻烦的事情。所以很多时候,由于嫌麻烦,注释和文档就没写,导致维护代码的人相当的痛苦。这个苦同学们肯定都是体会过的!相当于给你个精密仪器要你维护还不给说明书。

其实,打破上面那个段子描述的那个怪圈的一个很有效的手段就是统一编码风格。优秀的代码可以实现代码即注释,代码本身就可以非常清晰的体现出它的意图来,让别人可以很容易读懂。这就是所谓的可读性!

命名

计算机科学领域中最难的两件事是命名和缓存失效!命名并不简单,很复杂。好的名字可以见名知意,非常容易理解。之所以说命名难是因为命名的过程同时也是概念提取的过程!对问题建立模型,需要提取概念并赋予其“术语”。这个过程其实是“万里长征”中最难的一步。毕竟,设计也好,架构也罢,都有成熟的套路可以参考。唯独这个过程,是需要程序设计者自己进行充分的思考的创造性工作!

以下是总结出来的一些命名经验:

一个类是某物、某事、某人的抽象,是数据与行为的集合体。这恰好符合名词的定义,因此 类名 是一个名词!

方法名 或者说 函数名 是某操作或者某过程的抽象,是一个动作。这恰好符合动词的定义,因此函数名通常是一个动词。

变量名宁可长一些说明清楚用途也不要用a、b、c之类的无意义的名称,除非是循环计数器中用i、j、k等约定俗成的一些变量名。比如pageIndex和pageSize就要比取名成i和s好!取成这种和用混淆器混淆过后的代码一样的名称没有什么好处,如果算法比较复杂的话,过一段时间恐怕自己都会看不懂。

变量名最好包含变量本身的业务含义。比如List studentList = new ArrayList<>();就比List list = new ArrayList<>();好很多。如果同一段代码里再出现一个List的话,这样就可以很方便的取名为teacherList或者teachers而不是list1和list2这样的毫无意义的名称!


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,471评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,048评论 18 139
  • 那是一年花季,树上 花开浓艳,树下 旖娜娉婷,拉着 我的手,你说 春天来了…… 那是一年花季,青春 映染飞霞,裙诀...
    劉海峰阅读 456评论 0 2
  • 转自链接:http://www.51testing.com/html/17/n-3720317.html 一、什么...
    羊羊羊羊羊阳阅读 771评论 0 3
  • 时间将将算作一种标的,如果附加一些疑惑,连标的这二字都要摘掉。 只需门卡“滴”一声,过去的二十年一笔勾销。 该怎么...
    万粒阅读 363评论 1 2