编程算法同步入门

avataravataravataravatar

课程内容
开篇词 | 为什么我们要学习编程?

为什么需要学习编程?

如今,学习编程的人分为两类,一类是程序员,另一类是期望成为程序员的人。

编程这个事儿,在大多数人眼中还是一种特定领域的、专门的技能,认为学的人都是需要以此谋生的。

其实,作为一个“码龄”超过20年的老程序员,我是这样认为的:在不久的将来(也许三五年,也许十来年之后),编程将从一个职业技能逐步蜕变为职场通用技能

对此,我们可以类比“识字”这个技能来看——

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

但到了今天,识字率已经差不多100%了,具备此技能已经不再是职场的加分项了。相反,如果在今天不认字,那恐怕注定只能从事低端工作了。而如今的职场环境,要比之前要求的多,除了基本的电脑办公软件,要求会编程,也在各个互联网公司的面试中开始蔓延开来。

类似的技能还有:

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

在未来,编程就会成为人人都会做的事情,作为势必要踏入职场中的一员,除了要具备听说读写本国语言的能力外,还需要能够读写代码。

不久的将来,职业写代码的人,将越来越少。取而代之的,编程将是每个职业人的必备技能,拥有更多技能的人,就更有拿到好offer,升职加薪的机会。

即便现在一时之间无法达到社会全员编程的地步,至少是朝着这个方向发展,未来3年或5年,编程将成为互联网从业者的必修课。所以,在此我们要把握这个机会,勇敢的迎上新时代的机遇,只有把握先机的人,才会在未来的发展中有一席之地。

点击了解更多《编程算法同步入门》

那么编程的核心是什么?

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

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

其实是为了用编程语言来描述事物、概念,以及它们之间的相互关系和运行方式,将我们身处在的大千世界转化为一台计算机能够理解的电信号,驱动硅晶金属构造的计算机部件去完成任务!我们学会了这门语言,用来和计算机交流,在反过来作用于自己,创造更多的价值。

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

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

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

经得起时间考验的通识技能

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

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

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

这些方法和策略基于人类几千年文明史的思维积淀,又经历了最严格的数学分析和验证,本身既是人类文明的结晶,同时又是一种有效的思维训练。这种逻辑思维能力,也能用于平时的生活中解决问题,当你的逻辑思维被打通,你会发现没什么难事,都会有解决方法。

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

经过这种思考训练内化出的思维能力,也是学习者可以相伴终身的助力。

本课讲了些什么?

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

  • 使用 Python 语言编写程序;
  • 最基础的经典算法。

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

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

  • 程序设计语言(Python)
  • 数据结构
  • 计算机组成原理和体系结构

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

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

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

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

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

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

  • 顺序查找

  • 二分查找

  • 简单排序
    • 选择排序
    • 起泡排序
    • 插入排序
  • 快速排序

  • 编程和 bug 总是难舍难分,为了系统性减少 bug ,就要讲软件工程。

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

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

祝大家学习顺利,有所提高!接下来让我们一起,迈入编程的大门!

点击了解更多《编程算法同步入门》

分享交流

我们为本课程付费读者创建了微信交流群,以方便更有针对性地讨论课程相关问题。入群方式请到第 2-1 课末尾添加小助手的微信号,并注明「同步入门」。

阅读文章过程中有任何疑问随时可以跟其他小伙伴讨论,或者直接向作者提问(作者看到后抽空回复)。你的分享不仅帮助他人,更会提升自己。

1-1课:又回到最初的起点:软件和程序

软件和程序

每每提到“编程”这个词,大家都会觉得这是件高端、神秘的事,或者会皱皱眉头,觉得这肯定是个挺难的事儿吧?

基本所有与编程没有打过交道的人,都认为编程似乎被一群秃头的程序员垄断了,是一种旁人无法介入的专属行为。

而就在这一两年里,“少儿编程”的概念又伴随着素质教育、stem 教育迅速崛起。好像一时之间,连小学生、幼儿园小朋友都开始学编程了。而且还有不少幼儿型选手拿了不少编程大奖!

所以,编程到底是个啥玩意儿?是不是真的有这么难呀?

软件是什么

要说编程,首先就要先说一说计算机。计算机大家都不陌生吧,就算是一个完全不懂编程的人,也每天会用到——工作中用来处理资料、文档的台式机、笔记本,看剧的 pad ,日常不离身的智能手机,这些其实都是计算机。

如果我们把计算机拆开,看到的是若干电路和电子元件。把这些东西组合起来,通电开机,就可以用来读新闻、刷抖音、听歌、 写文章、P照片、打游戏、看 idol ,发微博/微信……了。

你有没有想过,计算机能做这么多事,仅仅是因为有那些电子器件吗?当然不是!

我们新买来一个智能手机,上面的 App 少得可怜,最初的时候啥也干不了。需要我们自己去下载各式各样的 App 。

enter image description here

这些 App 又被称作应用软件,这些 App 正是通过编程制作出来的。

手机 App 是软件,台式机上的各种应用(浏览器、文本编辑器、图像处理工具等)是软件,嵌入式系统中的应用(汽车的防锁死刹车系统、核磁共振成像设备、大型固定装置如交通灯、工厂控制器,以及在非智能手机时代曾红极一时的 mp3 机中的播放器和手持 PDA 中的应用等)也是软件。

软件可以简单的被认为是一组程序,这组程序相互配合,通过接受输入、产生输出,来为我们每一个人解决问题或完成任务。

互联网软件

日常生活中,你打开微信,在朋友圈发了一张自拍,并精心配上准备好的文案“今天也要做个精致的猪猪男孩/女孩”这样的文字,然后点击“发表”按钮。

你的朋友圈里就显示出了你刚发的图和文字,你的朋友刷到了你的朋友圈顺手给你点赞评论一条龙。

这几个步骤对你而言可能只要几秒钟,但是在这样一个简单的过程背后,却有多个程序在为你提供服务。

enter image description here

首先你点击“微信”的绿色图标,然后点“发现”->“朋友圈”->朋友圈右上角的小相机图标,到相机选择照片,输入文字,最后点击“发表”。

这个过程看起来是你在干活,其实微信软件也没闲着:

1.微信的前端程序在接受你的输入(每次点击按钮、上传照片和键入文字都是用户输入),将每一次输入记录下来。

2.在你点击了“发表“之后,微信前端将之前的输入打一个数据包,注明这是你新发的朋友圈内容,通过互联网发送给后端程序。

3.后端程序接收到了前端的发来的“发朋友圈”请求之后,会读取数据包,从中取出你的照片和配图文字,把它们记录(存储)下来。

当你点完“发表“返回到朋友圈之后,看起来你并没有再做什么事情,然而这个”进入朋友圈“的动作就表示了你要阅读朋友圈内容。微信又会有一系列动作:

1.微信前端程序又会向后端程序发出一条请求,要求阅读最新的朋友圈内容。

2.后端收到这个命令后,会把最新的朋友圈内容打一个数据包发送回来。

3.前端接收到这个数据包后,会将其中的内容(图片、文字)按特定的格式显示出来。你通过手机屏幕看到的,就是这种显示的结果。

上述过程其实经过了简化,实际情况要复杂得多。

目前,我们暂时掌握前端、后端和通讯的概念就好。几乎所有的互联网应用都涉及到这几个概念。

enter image description here

我们手机上的 App 经常要更新,每次我们更新的都只是前端程序而已,更新前端后,经常会发现新的版本显示文字、图片的样式不同的,新的版本又加入了新的功能(比如新的页面、新的按钮)等变化。

实际上,一般互联网软件后端程序更新得往往比前端更频繁。只不过后端程序部署在开发软件的公司或个人自己的服务器上(或者第三方的云服务器上),更新的过程不被用户察觉而已。

因为内容来自于后端,所以,就算你的手机上有前端程序,如果网络不通,或者后台宕机,也无法使用该软件。

这是我们现在日常用到最多的互联网软件,大概就是这样运作的了。

点击了解更多《编程算法同步入门》

单机版软件

在互联网时代到来之前,我们用的软件基本是单机版软件,比如常用的 Word , PowerPoint , Photoshop 等——当然现在这些工具也互联网化了。

单机版软件需要专门的安装程序(还记得光盘、软盘吗)一次只能安装到一台机器上(单机版软件流行的时候大家基本都在用台式机),软件中所有的程序都在一台机器上运行。

那个时候,软件是要钱的,一张光盘理论上只能安装一台机器,因为你买的是license(安装许可证)——一张光盘都好贵的,当年微软的办公套件一套就要成千上万的。

所以当初在学校和普通家庭里,流行的是盗版和破解版……回首看好像是很久以前了,其实也不过就十来年前而已。

程序又是什么?

到底什么是程序呢?程序接受输入,根据输入完成某些特定任务后产生输出——你有没有发现,这么听起来和软件不是一样嘛?确实,无论程序还是软件,都会接受输入,产生输出。

软件是由若干程序组成的,在多个程序组成的软件中,具体某一个程序都有输入和输出。但往往这个程序接受的不是全部用户输入,或者产生的输出也不是全部用户输出,而是输入或输出某些中间结果,经过几个程序的共同努力,才将原始输入转化成了最终成果展示出来。

打个比方,软件就像一条完整的流水线,能够把原材料加工成最终产品,一个个程序则像其中的一道道工序,这些工序的联合协作,完成了整个生产过程。

enter image description here

如果软件的功能非常简单,一个软件也可以只有一个程序。

理论上讲,其实很多全部功能都安装部署在一台机器上的软件(单机版软件),都可以把所有功能写在一个程序里。

但是在现实当中我们会故意不这样做。原因是,复杂软件的功能太多,如果所有功能都用一个程序来实现,会导致这个程序的源代码过多,程序结构很难清晰,管理和维护起来的成本太高。

等等,这里怎么又出来了一个“程序的源代码“,它和程序不是一回事嘛?且听下回分解啦!

点击了解更多《编程算法同步入门》

分享交流

我们为本课程付费读者创建了微信交流群,以方便更有针对性地讨论课程相关问题。入群方式请到第 2-1 课末尾添加小助手的微信号,并注明「同步入门」。

阅读文章过程中有任何疑问随时可以跟其他小伙伴讨论,或者直接向作者提问(作者看到后抽空回复)。你的分享不仅帮助他人,更会提升自己。

1-2课:安静的程序,淘气的程序和编写程序

静态程序——程序的源代码

上一章我们讲到了程序的源代码,你是不是很好奇它和程序到底是不是一回事儿啊?

严格来讲,“程序”和“程序的源代码”并不是一回事情噢。

程序的源代码是指用编程语言编写出来的程序的逻辑,是静态的文本,我们暂且可以叫 TA 安静的程序,一般被存储为以特定字符串为后缀的文件。

比如下面就是一个 Python 程序(程序员世界中最著名的打印“Hello World”的程序),被保存为FirstProgram.py (py是python文件的特定后缀)。

def main():    print("Hello World")if __name__ == "__main__" :    main()

是不是有点看不懂,没关系,听我给你娓娓道来,这个程序的名字叫做 FirstProgram ,FirstProgram.py 文件里面的内容就叫做 FirstProgram 程序的源代码, FirstProgram 程序源代码的功能是在运行该程序的计算机的显示器屏幕上打印“Hello World”字样。

你可以把上面的代码拷贝到一个文本文件里,然后将该文件存储为“FirstProgram.py"——注意后缀,后面没有“.txt”。

enter image description here

让程序跑起来——运行程序

光有了程序的源代码还不行,因为静止的程序什么都干不了。要让程序干活,就得让它先跑起来。

这时,我们就需要程序的运行环境

涉及到运行环境,不同的编程语言的具体需求不一样,这里又涉及到编译执行、解释执行等概念,不要着急

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值