今天, 学习编程的大部分还是程序员和期望成为程序员的朋友。编程在大众眼中还是一种专门的职业技能, 学了,是用来找工作的。

不过,作为一个积年的老程序员,作者认为:在不是很久远的将来(也许三五年,也许十来年之后),编程将从职业技能逐步蜕变为通用技能。

我们可以类比「识字」这个技能来看——

百十年前,大多数老百姓都不认识母语文字。当年具备了「认得字」这一技能,就可以获得比大多数人工作环境更优越,报酬也更高的职位。那时,识字无疑一种职业技能。

但到了今天,识字率已经逼近100%,具备此技能已经不再是任何职场加分项。相反,如果在今天不认字,那恐怕注定只能从事低端工作了。

未来,编程将成为人人都会做的事情,职场中的一员,除了要具备听说读写本国语言的能力外,还得能够读写代码。而职业写代码的人,将越来越少。

类似的技能还有:

驾驶——汽车工业发展起来后,职业司机会越来越少,驾驶逐渐成为人们的通用技能。

即使一时无法达到社会全员编程的地步,至少是朝着这个方向发展。

从语言特征(词汇、语法等)的角度来讲,最复杂的编程语言远比最简单的自然语言简单得多

我们学习各种自然语言是为了日常生活与人交流、收发信息,学习编程语言又是为什么呢?

是为了用编程语言描述事物、概念,以及它们之间的相互关系和运行方式,将大千世界转化为计算机能够理解的电信号,驱动硅晶金属构造的计算机部件去完成任务!

编程的核心在于通过各种各样的算法去实现具体的业务逻辑,把繁杂的过程抽象化、可计算化。

从纯粹软件的角度讲,甚至可以说:算法+数据==计算机程序。

受过计算机科班教育的人一定上过一门课:数据结构,这门课是计算机科学的基础,它的核心内容就是各式各样的算法,它们是几代计算机科学家从解决现实问题中提取出的套路——这些才是编程的核心。

计算机技术从诞生起就处在飞速发展之中。编程语言从无到有,从少到多,从最初的01代码,机器语言到后来百花齐放的高级语言,此消彼长,兴衰交替。

各种工具、框架更是日新月异,各领风骚三五年乃至三五月就被淘汰者成百上千。但是经由现实问题中提炼出来的经典算法,却经得起时间的考验。

这些经典算法是计算机发展过程中世界上最聪明的一小撮人千锤百炼出的,解决某些模式问题的方法和策略。

这些方法和策略基于人类几千年文明史的思维基甸,又经历了最严格的数学分析和验证,本身既是人类文明的结晶,同时又是一种有效的思维训练。

用数值表达现实事物,用运算描述任务目标,再通过算法处理数据找到达到目标的最优化路径——这个思维的形成过程,远比学会模型本身更为难得。

经过这种思考训练内化出的思维能力,完全可能成为学习者相伴终身的助力。

本课程就带领大家,由编程学算法,以算法促编程。从零开始同步学习两方面内容:

    使用Python语言编写程序;

    最基础的经典算法。

除此之外,为了帮助大家理解算法,对于计算机的基础运行原理也有介绍。

在大学计算机系课程中,本课程所讲述的内容被拆分在几门课里:

-程序设计语言(Python)

-数据结构

-计算机组成原理和体系结构

不过本课没有像一般大学课程安排那样,将这几部分割裂开,而是融会在一起,按下列顺序进行讲解:

    从我们熟悉的日常事物开始,讲解软件、程序、算法和编程分别是什么。

    编程两大要素:控制流程和数据结构。

    几种最常见的数据结构(数组、链表、树和图)。在此过程中,由数据结构的限制和实现引出现代电子计算机的基础:二进制和冯诺依曼结构。

    进入算法阶段,从最简单的顺序查找开始,一边讲算法,一边讲它们的编程实现。

详细讲解的经典算法包括:

    顺序查找

    二分查找

    简单排序

    选择排序

    起泡排序

    插入排序

    快速排序

编程总是难免会有bug,为了系统性减少bug,就要讲软件工程。

讲算法就离不了策略,分治策略是快速排序的基础,而引申自数学的递归则是分治策略的实现方法……

结课前会给出本课之后继续学习算法和编程的方向与方法。

祝大家学习顺利,有所提高!!