本文重点解决如下问题:什么样的代码是好的代码,什么样的程序员是优秀的程序员?
先看图 4 3(a)中的代码,你能明白这段代码要做什么事情吗?再看图 4 3(b)中的代码,你可以知道这段代码在做什么吗?显然图 4 3(a)中的代码所代表的实际含义是不清晰的,而图 4 3(b)中的代码就算是没有学过编程的人也能够搞明白,这是在算水果的总价。造成这种结果的差异的原因是因为图 4 3(a)中的代码命名变量时没有明确含义,不符合编程对于变量命名的规范。通过对比两段代码,谁好谁差,高下立判。
图 4 3 不同风格的代码示例
什么是好的代码?好的代码如同一件艺术品,具有让人赏心悦目的美感。好的代码必须符合以下几个原则:(1)具有规范性,代码的编写严格遵守编程规范;(2)具有易读性,代码阅读起来赏心悦目;(3)具有友好性,编写的代码能够从代码阅读者和使用者的角度出发充分考虑他们的需求和困难;(4)具有安全性,代码必须安全可靠,没有漏洞;(5)具有高效性,编写的代码必须运行时间尽可能短;(6)具有易维护性,编写的代码必须方便维护;(7)具有可扩展性,编写的代码充分考虑后续升级和扩展的需求,预留足够的扩展接口;(8)具有易用性,编写的代码必须使用方便。
什么是编程规范?编程规范就是编程时大家必须遵守的编程规则,包括变量的命名规则、函数的命名规则、类的命名规则、代码的对齐规则等等。遵守编程规范好比同别人交流时必须说同样的语言一样,否则就无法交流,无法理解彼此说话的含义。代码写出来不是为了炫技,也不是为了自我欣赏来获得成就感,而是为了给别人看、给别人用。如果写的代码不遵守编程规范,别人就很难看得懂,很难看得下去。一个编程项目,往往需要一个团队来完成,团队成员必须分工明确、相互配合。每个人先完成自己负责的功能,最后再把每个人的代码集成到一起。如果你写的代码仅自己看得懂,大家怎么相互交流和配合呢?别人看不懂你的代码,又怎么将你的代码集成到一个系统里呢?更甚至于,如果你写的代码就自己能够看得懂,别人怎么放心用你写的代码?所以必须郑重地告诫各位读者,写代码之前必须先阅读编程规范,知道什么是好的代码。否则,如果不先熟悉编程规范,一上来就随意乱写代码,那就不是写代码,而是随手涂鸦了!编程规范很重要,那么编程规范从哪里来呢?编程规范是每个项目团队自己协商约定好的编程标准。不同的公司有自己的编程规范,比如谷歌有谷歌的编程规范,华为有华为的编程规范,阿里巴巴有阿里巴巴的编程规范。这些规范在网上都能够搜索到。如果有时间,你可以下载下来阅读一下。虽然不同公司各有自己的编程规范,但这些规范也大同小异,因为大部分的编程规范是大家必须共同遵守的。关于通用的编程规范可以参见书籍 23。
书籍 23 编程规范教材推荐: (a) 代码整洁之道 (Robert C. Martin 著, 韩磊 译); (b) C++编程规范: 101条规则、准则与最佳实践 (Herb Sutter 等著, 刘基诚 译); (c) 阿里巴巴Java开发手册 (杨冠宝 著); (d) The Java Language Specification: Java SE 8 Edition (James Gosling 等著)
《代码整洁之道》[1]是一本著名的编程规范和经验总结的书籍,该书描述了关于怎样才能写出简洁而高质量代码的法则,适合有一定编程经验的人阅读。初学者也可以阅读此书,由于初学者没有编程实战经验,第一遍阅读此书时可能会觉得书籍质量一般,但当你有了一定编程经验后再阅读此书,结合自己的亲身体会和书中的经验,你一定会将作者的经验总结奉为至理名言。
在《C++编程规范:101条规则、准则与最佳实践》[2]中,两位著名的C++专家将全球C++社区的集体智慧和经验凝结成一整套编程规范。这些规范可以作为每一个开发团队制定实际开发规范的基础,更是每一位C++程序员应该遵循的编程准则。
《阿里巴巴Java开发手册》[3]以码出高效、码出质量为目标。它结合作者的开发经验和架构历程,提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧,浓缩成为立体的编程规范和最佳实践。本手册以开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,每个条目下有相应的扩展解释和说明,正例和反例,能有效地帮助开发者迅速成长,也能够帮助团队有效形成代码规约文化。
《The Java Language Specification:Java SE 8 Edition》[4]是一本全方位描述Java编程规范的书籍。作者以Java语言的编程架构为线索,依次介绍各部分需要注意的编程规范和编程要点。全书结构清晰,写作详尽而友好,值得一读。
读者朋友们可以通过在线课程学习编程规范,掌握规范编程的技巧,写出让人赏心悦目的高质量代码。编程规范方面的课程可以学习《阿里巴巴编程规范》,该课程的视频见课程 36。
课程 36《阿里巴巴编程规范》中文课程,网址为:https://www.bilibili.com/video/BV1c54y1r7ot?p=1
什么是优秀的程序员?优秀的程序员写出的代码架构清晰,各部分实现什么功能一目了然;优秀的程序员编写的代码严格遵守编程规范,就算没有学过编程的人阅读他的代码也会觉得赏心悦目;优秀的程序员写出的代码简洁而高效,能够做到用最少的代码完整而严谨地实现所要求的功能;优秀的程序员必须逻辑思维清晰,善于从待解决的复杂问题中抽象出解决问题的算法;优秀的程序员必须知识全面,而不仅仅局限于某个领域,因为不同领域之间是可以相互借鉴的;优秀的程序员必须与时俱进,因为IT方面的知识更新速度越来越快,不学习就会被时代所淘汰。
有那么多程序员从事于各种不同种类的编程工作,那么整个编程领域到底包含哪几个子领域?如果想搞清楚上述问题,敬请关注本公众号的下一篇文章《编程领域的划分》。
关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。
图书购买方式
京东:https://item.jd.com/13395339.html
当当:http://product.dangdang.com/29469230.html
天猫:https://detail.tmall.com/item_o.htm?id=687374654836
为了让图书惠及更多的读者,为更多想学习人工智能的人提供帮助,经过向出版社申请,对图书《人工智能怎么学》的部分内容进行改编和连载。图书《人工智能怎么学》的全部内容包含了初级入门、中阶提高以及高级进阶三个级别的内容。连载的内容主要是初级入门级别,适合想对人工智能进行快速和高效入门的读者,对于已有一定的人工智能学习基础,希望进一步进阶或提高的读者,则需要购买图书《人工智能怎么学》,学习中阶提高以及高级进阶的内容。此外,对于学习人工智能感兴趣的读者,也可以加入知识星球《人工智能怎么学》,知识星球是一个构建学习社群的平台,通过加入《人工智能怎么学》的社群,你将获得更多的学习资料和课程信息。
与作者互动和了解更多信息
想跟作者一起学习人工智能和互动,你可以加入如下社群:
知识星球:https://t.zsxq.com/0aLkVg0os
QQ群:600587177
想了解更多关于人工智能学习及实践的内容,请关注如下媒体:
官方网站:https://bigdatamininglab.github.io
官方微信公众号:人工智能怎么学(可扫描下方二维码或者微信搜索“人工智能怎么学”添加关注)
CSDN:https://blog.csdn.net/audyxiao001
参考文献
Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2020.
Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, 译. 北京: 人民邮电出版社, 2016.
杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.
James Gosling et al. The Java Language Specification:Java SE 8 Edition[M]. Upper Saddle River: Addison-Wesley, 2014.
老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.
翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.
谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.
Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day(Eighth Edition) [M]. Boston: Pearson, 2017.
Bjarne Stroustrup. Programming:Principles andPractice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.
Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, 译. 北京: 人民邮电出版社, 2020.
Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 等, 译. 北京: 人民邮电出版社, 2020.
Stanley B. Lippman, Josée Lajoie,Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 等, 译. 北京: 电子工业出版社, 2013.
Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2013.
侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.
Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 等, 译. 北京: 清华大学出版社, 2017.
Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, 译. 北京: 机械工业出版社, 2003.
Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 等, 译. 北京: 机械工业出版社, 2011.
Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2011.
Scott Meyers. More EffectiveC++:35个改善编程与设计的有效方法[M]. 侯捷, 译. 北京: 电子工业出版社, 2020.
Scott Meyers. Effective STL:50条有效使用STL的经验[M]. 潘爱民 等, 译. 北京: 电子工业出版社, 2013.
陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.
王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.
冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.
ghscarecrow.Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.
JMCui.Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.
明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.
Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M].Sebastopol: O’Reilly, 2005.
Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2007.
Cay S. Horstmann. Java核心技术 卷I:基础知识(第11版)[M]. 林琪 等, 译. 北京: 机械工业出版社, 2019.
Cay S. Horstmann. Java核心技术卷Ⅱ:高级特性(第11版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2020.
Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, 译. 北京: 机械工业出版社, 2019.
周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.
Brian Goetz. Java并发编程实战 [M]. 童云兰 译. 北京: 机械工业出版社, 2012.
Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 等, 译. 北京: 机械工业出版社, 2013.
明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.
未来科技.HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.
Elisabeth Robson, Eric Freeman. Head First HTML与CSS(第2版)[M]. 徐阳 等, 译. 北京: 中国电力出版社, 2013.
Adam Freeman. HTML5权威指南 [M]. 谢廷晟 等, 译. 北京: 人民邮电出版社, 2014.
Eric A. Meyer, Estelle Weyl .CSS权威指南(第4版)[M]. 安道, 译. 北京: 中国电力出版社, 2019.
David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, 译. 北京: 机械工业出版社, 2021.
许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.
Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.
孙卫琴. Tomcat与Java Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.
郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.
欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.
Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 等, 译. 北京: 电子工业出版社, 2017.
Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2021.
刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.
邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.
任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.
林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.
何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.
Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, 译. 武汉: 华中科技大学出版社, 2019.
张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.
Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 等, 译. 武汉: 华中科技大学出版社, 2015.
Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, 译. 北京: 人民邮电出版社, 2017.
Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOS与OS X多线程和内存管理[M]. 黎华, 译. 北京: 人民邮电出版社, 2013.
Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, 译. 北京: 清华大学出版社, 2015.
珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.
罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.
Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 等, 译. 北京: 人民邮电出版社, 2017.
刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.
天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.
苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.
徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.
王文峰 等. MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.
杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.
Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2020.
Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2018.
Luciano Ramalho. 流畅的Python [M]. 安道 等, 译. 北京: 人民邮电出版社, 2017.
Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, 译. 北京: 机械工业出版社, 2021.
Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 等, 译. 北京: 人民邮电出版社, 2014.
Andreas C. Müller. Python机器学习基础教程[M]. 张亮, 译. 北京: 人民邮电出版社, 2018.
魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.
郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.
Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly,2019.
Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: PacktPublishing, 2018.
Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, 译. 北京: 人民邮电出版社, 2018.
朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.
Norman Matloff. R语言编程艺术[M]. 陈堰平, 译. 北京: 机械工业出版社, 2013.
Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 等, 译. 北京: 人民邮电出版社, 2018.
Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 等, 译. 北京: 人民邮电出版社, 2016.
Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 等, 译. 北京: 机械工业出版社, 2020.
Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 等, 译. 北京: 机械工业出版社, 2017.
程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.
周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136;2009(7):118-120; 2009(8):134-136.
注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。