编程的通用思想

通过前面的一系列文章,相信读者朋友们对人工智能的基础知识、知识框架、理论基础已经有了深入的了解。如同练武一样,通过前面的学习,你对武功的招式和内功心法都已经熟悉。那么,接下来你是不是想进行实战了?如果想进行人工智能的实战,那就不得不提编程了。人工智能是一个高度重视应用和实战的学科,需要通过编程来实现具体的人工智能算法。因此,对于编程能力有较高的要求。从本文开始,接下来的若干篇文章将重点讨论人工智能的编程能力和技能的训练,以便读者朋友们能够通过编程可以随心所欲地快速实现人工智能算法,将人工智能的理论转变成生产力。

很多人觉得编程难学,甚至于一看到编程就像见到了仇人,恨不得扭头就跑。其实,编程根本没有那么难?之所以你觉得难,那是因为你还根本没有真正入门!也有很多人经常会问:“那么多编程语言,我到底该学什么编程语言?”或者会问:“至少应该学哪几种编程语言才能够胜任AI的工作?”又或者会问:“为什么有的人写出来的代码读起来赏心悦目,像艺术品,有的人写的代码不堪入目,神仙也看不懂?”诸如此类的问题,它们的答案究竟是什么?

为了回答这些很多人心中都有的疑惑,在正式开始讨论编程之前,非常有必要搞清楚如下几个至关重要的问题:

(1)编程的本质是什么?不同的编程语言它们通用的思想是什么?

(2)不同的编程语言之间是否存在共性或者说共通之处?能否学会一种编程语言之后,即可触类旁通的学会其它编程语言?

(3)什么样的代码是好的代码,什么样的程序员是优秀的程序员?

(4)有那么多程序员从事于各种不同种类的编程工作,那么整个编程领域到底包含哪几个子领域?

回答上述问题,涉及到编程知识体系的总体架构的内容,第1个问题是要搞清楚编程的本质以及不同编程语言的通用思想;第2个问题是关于不同编程语言之间的通用架构;第3个问题则涉及到编程规范和程序员的自我修养问题;第4个问题的本质是要搞清楚整个编程领域的划分问题。下面分别就编程的通用思想、编程的通用架构、编程规范及程序员的自我修养、编程领域的划分四个方面展开论述。

首先来看第一个问题:编程的本质是什么以及不同编程语言的通用思想。编程的本质是程序员把对世界的认知和理解用计算机的语言来进行刻画,是程序员对客观物理世界的高度抽象,最终实现将物理世界的实体映射到程序空间。现实的物理世界总是由一个一个实体所组成,每个实体都有属性和功能,比如在现实世界中的一个学生,他有学号、身高、年龄等属性,他有考试这样一个功能。再比如,不同的汽车,它们有颜色、重量、价格等属性,有运输的功能。程序员要做的事情就是要将这样不同的实体在程序空间中将它们描述出来。通过前面举例,可以发现对于一个实体来说,它有属性和功能两个特点。一般在程序空间中,程序员将实体的属性由变量来描述,将实体的功能用函数来实现。通过这样的映射关系,就将物理世界中的实体映射到了程序空间中。图 4-1显示了一个具体的将物理世界中的实体映射到了程序空间的例子。假设一个班级有4个学生,要去计算4个学生的平均成绩、平均身高、平均年龄。程序员怎么去考虑这个问题呢?首先,分析一下每个学生的属性特点,发现学生有学号、身高、年龄、语文成绩、数学成绩、英语成绩等属性,于是便将这些属性分别映射为变量ID、height、age、ChineseScore、mathScore、EnglishScore,并将它们打包存放在结构体类型student里面,那么学生1~学生4则分别映射成student型的变量student1~student4;同时这个班级还有计算平均成绩、平均身高、平均年龄功能,于是将其映射为函数:averageScore(score)、averageHeight(height)、averageAge(age)。通过上述步骤将客观物理世界中的一个班级用程序空间的变量和函数来表示其属性和功能,从而可以达到计算平均成绩、平均身高、平均年龄的目的。看出规律了吗?客观物理世界中实体的属性对应程序空间的变量,而其功能则对应于程序空间的函数。为了便于理解,这里采用的是面向过程编程的例子进行阐述。如果是面向对象编程,其映射的策略要加以改进。简单来说,就是将客观世界中的实体的集合抽象成为程序空间中的类。其好处是可以提高代码的复用性和可扩展性。比如说,如果还需要计算学生的平均体重,按照面向过程编程方式,则所有代码需要重新写一遍,而采用面向对象的编程方式,则只需要在原有代码上略加修改即可,已有的代码无需重写。通过上面的讨论可知:编程的通用思想就是将客观物理世界中的实体映射到程序空间,从而达到实现具体功能的目的。以面向对象编程为例,面向对象编程的通用思想就是通过编写类,将描述实体的属性映射为程序空间的变量,将实体的功能映射为程序空间中的函数,从而实现具体的功能。

图 4-1 编程的本质是实现由客观物理世界到程序空间的映射:(a) 客观物理世界;(b) 程序空间

关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。

图书购买方式

京东: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

参考文献

  1. Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2020.

  1. Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, 译. 北京: 人民邮电出版社, 2016.

  1. 杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.

  1. James Gosling et al. The Java Language Specification:Java SE 8 Edition[M]. Upper Saddle River: Addison-Wesley, 2014.

  1. 老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.

  1. 翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.

  1. 谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.

  1. Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day(Eighth Edition) [M]. Boston: Pearson, 2017.

  1. Bjarne Stroustrup. Programming:Principles andPractice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.

  1. Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, 译. 北京: 人民邮电出版社, 2020.

  1. Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 等, 译. 北京: 人民邮电出版社, 2020.

  1. Stanley B. Lippman, Josée Lajoie,Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 等, 译. 北京: 电子工业出版社, 2013.

  1. Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2013.

  1. 侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.

  1. Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 等, 译. 北京: 清华大学出版社, 2017.

  1. Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, 译. 北京: 机械工业出版社, 2003.

  1. Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 等, 译. 北京: 机械工业出版社, 2011.

  1. Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2011.

  1. Scott Meyers. More EffectiveC++:35个改善编程与设计的有效方法[M]. 侯捷, 译. 北京: 电子工业出版社, 2020.

  1. Scott Meyers. Effective STL:50条有效使用STL的经验[M]. 潘爱民 等, 译. 北京: 电子工业出版社, 2013.

  1. 陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.

  1. 王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.

  1. 冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.

  1. ghscarecrow.Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.

  1. JMCui.Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.

  1. 明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.

  1. Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M].Sebastopol: O’Reilly, 2005.

  1. Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2007.

  1. Cay S. Horstmann. Java核心技术 卷I:基础知识(第11版)[M]. 林琪 等, 译. 北京: 机械工业出版社, 2019.

  1. Cay S. Horstmann. Java核心技术卷Ⅱ:高级特性(第11版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2020.

  1. Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, 译. 北京: 机械工业出版社, 2019.

  1. 周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.

  1. Brian Goetz. Java并发编程实战 [M]. 童云兰 译. 北京: 机械工业出版社, 2012.

  1. Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 等, 译. 北京: 机械工业出版社, 2013.

  1. 明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.

  1. 未来科技.HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.

  1. Elisabeth Robson, Eric Freeman. Head First HTML与CSS(第2版)[M]. 徐阳 等, 译. 北京: 中国电力出版社, 2013.

  1. Adam Freeman. HTML5权威指南 [M]. 谢廷晟 等, 译. 北京: 人民邮电出版社, 2014.

  1. Eric A. Meyer, Estelle Weyl .CSS权威指南(第4版)[M]. 安道, 译. 北京: 中国电力出版社, 2019.

  1. David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, 译. 北京: 机械工业出版社, 2021.

  1. 许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.

  1. Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.

  1. 孙卫琴. Tomcat与Java Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.

  1. 郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.

  1. 欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.

  1. Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 等, 译. 北京: 电子工业出版社, 2017.

  1. Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2021.

  1. 刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.

  1. 邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.

  1. 任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.

  1. 林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.

  1. 何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.

  1. Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, 译. 武汉: 华中科技大学出版社, 2019.

  1. 张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.

  1. Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 等, 译. 武汉: 华中科技大学出版社, 2015.

  1. Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, 译. 北京: 人民邮电出版社, 2017.

  1. Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOS与OS X多线程和内存管理[M]. 黎华, 译. 北京: 人民邮电出版社, 2013.

  1. Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, 译. 北京: 清华大学出版社, 2015.

  1. 珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.

  1. 罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.

  1. Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 等, 译. 北京: 人民邮电出版社, 2017.

  1. 刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.

  1. 天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.

  1. 苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.

  1. 徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.

  1. 王文峰 等. MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.

  1. 杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.

  1. Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2020.

  1. Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2018.

  1. Luciano Ramalho. 流畅的Python [M]. 安道 等, 译. 北京: 人民邮电出版社, 2017.

  1. Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, 译. 北京: 机械工业出版社, 2021.

  1. Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 等, 译. 北京: 人民邮电出版社, 2014.

  1. Andreas C. Müller. Python机器学习基础教程[M]. 张亮, 译. 北京: 人民邮电出版社, 2018.

  1. 魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.

  1. 郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.

  1. Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly,2019.

  1. Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: PacktPublishing, 2018.

  1. Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, 译. 北京: 人民邮电出版社, 2018.

  1. 朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.

  1. Norman Matloff. R语言编程艺术[M]. 陈堰平, 译. 北京: 机械工业出版社, 2013.

  1. Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 等, 译. 北京: 人民邮电出版社, 2018.

  1. Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 等, 译. 北京: 人民邮电出版社, 2016.

  1. Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 等, 译. 北京: 机械工业出版社, 2020.

  1. Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 等, 译. 北京: 机械工业出版社, 2017.

  1. 程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.

  1. 周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136;2009(7):118-120; 2009(8):134-136.

注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值