下载APP
关闭
讲堂
部落
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

开篇词 | 别闹了,学编程 ≠ 学语言

2020-01-02 胡光
人人都能学会的编程入门课
进入课程

讲述:胡光

时长11:46大小9.44M

你好,我是胡光。欢迎加入专栏和我一起学习编程。
我喜欢编程,从高一开始接触信息学竞赛的时候,就喜欢。我的信息学竞赛成绩,不能和同时期的那些真正的牛人相比,就算是小有成绩。后来我被保送到了哈尔滨工程大学,本硕博连读,外加学费全免。在本科期间,我参加了大学生的算法编程竞赛,并拿到了 ACM 竞赛亚洲区金牌,进过两次全球总决赛。可以这么说,我是在激烈的竞赛环境中,成长起来的。
毕业后进入百度,一直做算法研发相关的工作。期间,我开发了部门内部的第一版推理引擎,并顺利在人物关系推理等应用场景中落地实施。后来由于兴趣,自己开始从事教育行业,希望能够帮助更多的人从零开始学习编程,然后进入互联网公司从事相关职业。
作为教育行业的创业者,学生能够学有所成,是我最具成就感的事情。在我所教导的学生中,双非院校中的本科生最高毕业薪资包 59.5 万,211 类院校学生毕业平均薪资达到 35 万以上。
今天我来到极客时间,希望也能带你了解如何学习编程,掌握编程的精髓。

一个蕴含编程真谛的等式

程序 = 算法 + 数据结构
学编程,其实就是学习编写程序,那么程序到底是什么呢?上面是关于程序本质的一个非常著名的等式。其中数据结构的作用,是将问题中的相关数据,表示到计算机中,算法则是一套计算并且得到结果的流程。
这个公式中包含了两个最重要的部分,数据的表示和数据的计算,所以学会了这两部分,就等于学会了写程序,这就是这个等式经典的原因。但是对于刚刚接触编程的你来说,对着这个等式看会有两个问题。
如果你按照这个等式来,学完语言,就学习算法数据结构,肯定会感觉难度太大,我知道的很多人就是这样被“劝退”的。
如果你不听从这个等式的安排,只是大量学习语言,你会发现虽然学了各种语言知识,但很多的编程问题还是搞不定,甚至有些时候明明知道思路,却无法用程序语言表达出来,这也会极大地降低你学习编程的信心。
那么,是上面这个公式错了么?不,上面的公式是对的,这一点我丝毫没有质疑过。但我想说的是,上面的公式只描述了编程中的一部分,只是“程序”这一部分。而编程,不仅有程序,还有程序的设计过程。
因此,我想告诉你一个新的等式,这个新的等式,就是我将在这个专栏里带给你的学习编程的方法:
程序设计 = 算法 + 数据结构 + 编程范式
这个新等式包含了程序设计中重要的三部分,从前到后,重要程度依次递减。如果把程序比做人的话,那么算法是灵魂,数据结构是骨架,而编程范式就是性格。
对于三者的学习顺序呢,则应该是反过来的:当你掌握了一定的语言基础以后,应该先从编程范式开始学起,然后是数据结构,最后是算法,整个过程采用传统的螺旋式上升的方式进行,这样才能获得最好的学习效果。正如许多会学习的人,他们在学习中往往不会纠结于一个点,而是会反复来回地琢磨理解,从而达到对知识的融会贯通。
所以在专栏的设置上,除了有语言基础的讲解、部分算法及数据结构的讲解外,我还在中间加入了一个特别的章节,叫作“编码能力训练篇”,这里其实就是帮你把分析具体问题的思路转换成代码的技巧,也就是实战写代码的能力。这是我从具体教学环节中总结提炼出来的内容,也真真切切在线下帮助了一批又一批的学生,让他们在短时间里扎实地提升了编码能力。再配合后续的算法数据结构学习,这样进行下来,半数以上的学生最后能在 1 小时内,没有 Bug 地打出来红黑树的全部代码,顺利通过线上标准测试集的测试。

课程设置

从内容上来说,我将这个专栏设置为四部分:语言基础篇、编码能力训练篇、算法数据结构篇和综合项目篇
语言基础篇,基于 C,我会带你体验一些有趣的语言特性,让你看到编程不是单纯枯燥的知识理解,而是轻松、有趣的思考与实战过程。这一部分与其他资料最不一样的是,以往大家都认为 C 语言是黑白的,在我的专栏里,C 语言是彩色的。以往大家都认为指针很难学,在我的专栏里面,我会教你一句话,通过这一句话,你就可以把指针的内容学得透彻。以往大家都认为,程序只是人写的,在我的专栏里面,我会教你利用程序写程序的技巧:预处理命令。
总而言之,这部分既是基础,又是我个人编程学习经验的总结,让你轻松入门 C 语言。由于专栏篇幅有限,我只会在专栏中讲解那些,容易被你忽视,容易被你误解的知识。如果你想更进一步详细了解 C 语言,我还会给你推荐几本比较好的图书,为此我还专门买了 15 本现在市面上面最畅销的 C 语言书,替你做了对比与筛选。
编码能力训练篇,主要解决你编程学习过程中,学了语言却写不出程序的尴尬局面,让你真正能够将思维变成代码。这里的课程设计原则是,减少你面对的问题数量,一步一个脚印地提升编码能力。举个例子,如果我一上来就给你讲算法,那么你不只要理解相关算法思维,还要同时理解相关算法的具体代码实现过程,这样就在你面前同时放了两个你不太擅长的问题。在这一篇里,我尽量在你面前放置一个陌生问题(编码技巧),和一个不太陌生的问题(简单的算法和数据结构),让你能够在舒缓的学习曲线中不断提升现有的编码能力。
算法数据结构篇,看到算法二字,你不要害怕,相信经过了编码能力训练篇的洗礼,再来面对算法和数据结构相关知识的时候,你只需要站在前面的基础上建立更深层次的理解。并且,我会教你另外一个学习数据结构的等式“数据结构 = 结构定义 + 结构操作”,其实就是学习这两个内容,就是这么简单的两步。
综合项目篇,这一模块主要是为了检验你之前的学习效果而准备的。你会接触到两个小项目,一个较难的项目,你需要仿照 Google 测试框架开发一个自己的测试框架,第二个项目较简单,就是实现一个带变量的表达式计算程序。项目过程中,我将带你从需求到设计逐步分析、拆解,并会给出一部分核心代码的讲解。其余部分,我希望你可以通过自己的思考和文章中的引导,自行补全没有给出的部分代码,从而完成整个项目的开发与实现。
总地来说,我希望通过接下来近 3 个月的学习,带你达成三个小目标:
掌握 C 这门迁移性最好的语言,以便日后学习其他语言。理解了 C 语言,你就理解了操作系统,也就是理解了所有语言的运行环境。
掌握从简单的问题出发训练编程技巧的方法,为日后将思想转换成代码减少障碍。
掌握算法、数据结构学习的关键方法,为自学其他数据结构和算法打好基础。
如果这门课程,能够帮助你逐渐的建立学习编程的方式方法以及建立学习过程中的信心,那将是我写这个专栏最大的快乐之处。
如果篇幅够长,我想跟你说的还有很多很多,可十几万字无法穷尽所有编程知识,但我希望这个专栏能够让你拥有自学的能力,强化独立思考的能力。我还希望,你可以基于这个专栏内容,总结升华出更棒的内容,讲给其他人听。计算机是一个新兴学科,我坚信,现在我们所接触的所有和教学相关的方式方法,在将来都将被改进。
如果说今天想让你记住点儿什么的话,那就是“学编程不等于学语言”。编程学习就像是探索一片森林,不同的人,会带你走不同的路线。站在你面前的我,已经全副武装,就等着你的加入了,我将带你去到这片编程森林中最有趣的地方,你不来一起看看么?
欢迎你在留言区,写下对于编程学习的认识以及你希望达到的目标,也好让我知道,应该给你准备哪些沿途中的装备。
我是胡光,我们留言区见!
unpreview
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
下一篇
01 | 学习编程,我到底该选择哪门语言?
 写留言

精选留言(30)

  • 2020-01-02
    订阅了,不过有几个小问题请教:几天更新一篇文章?控制台彩色用的是什么操作系统?(windows还是linux,有不同的api)编译器用哪个?(我的是vs2017)你说的c语言用的是什么标准?(c89还是c99还是c11)命名标准是下划线命名法还是驼峰命名法?……这些边边角角的基础设施能先简要介绍一下吗?
    展开

    作者回复: 1、文章每二、四、六更新。
    2、操作系统会以Linux作为基础,不会教windows-API
    3、C的标准是C99
    4、编码规范方面的东西不会要求,以大家舒服的方式来写,即可。作者主要用下划线命名法。

    7
  • 2020-01-03
    编程范式和设计模式的区别是什么?
    展开

    作者回复: 编程范式的范围更大:
    1、面向过程
    2、面向对象<——设计模式的作用范围
    3、范型编程
    4、函数式编程

    2
    4
  • 2020-01-03
    Mac电脑学C语言用什么IDE好?
    展开

    作者回复: 推荐使用Vim+gcc的终端编程模式。

    1
    3
  • 正需要一位老师来帮我回炉再造,感谢老师的专栏,我会持续追下去并希望得到新的灵感与启发,找到最正确的思路,重新夯实基础。
    展开

    作者回复: 加油,希望可以帮到你,其间有问题,随时留言讨论,

    3
  • 2020-01-02
    没学过编程,能学吗?
    展开

    作者回复: 那可能需要更加用功了!加油!

    3
  • 2020-01-02
    一个文科生零基础来报道学习编程:)
    展开

    作者回复: 压力好大,学习过程中,如有问题,随时提问!

    3
  • 2020-01-03
    这个名,让我想到了人人都是产品经理
    展开

    作者回复: 还有人人都是销售^o^

    2
  • 2020-01-03
    windows 用什么编译工具啊?
    展开

    作者回复: 到时候会有视频演示,最简单方便的,推荐devcpp,一键安装无烦恼。Y(^_^)Y

    1
    2
  • 2020-01-03
    能不能请老师先推荐下值得看的辅助教材?
    展开

    作者回复: 权威一点的推荐《C语言核心技术》,被称为牛书。此外我会在文章中给你们推荐几本小册子,到时候你就知道啦。(。ì _ í。)

    2
  • 2020-01-03
    老师,零基础学编程,写代码需要什么工具吗?
    展开

    作者回复: 到时候会有一个视频教你的,别急。你应该是windows系统吧?

    2
  • 2020-01-03
    可以提前发下用的发行版,需要的环境什么的么?
    展开

    作者回复: 由于本专栏主要教你编程,对于编码环境没有太严格的要求。你要是windows环境的话,就使用devcpp即可。

    2
  • 2020-01-03
    求照相馆信息
    展开

    作者回复: 哈哈哈哈,海马体,这算是广告。(*^o^*)

    2
  • 2020-01-03
    已经看过耗子叔的专栏了,算法+数据结构+编程范式已深入日常生活。希望再跟老师提升一下境界。

    作者回复: 境界不敢说,带你看些好玩的东西。(。ì _ í。)

    2
  • 2020-01-03
    问个比较笨的问题:对电脑系统有要求嘛?需要Linux?盼回复。。

    作者回复: 最好是Linux,windows的话,也可以,除了颜色部分知识不兼容之外,其他都一样。

    2
  • 2020-01-03
    老师,我参加了java培训,毕业后也是不擅长java开发,所以转行做了数据库管理,工作期间,也要接触python,go语言的学习,都没有自信自己能够学好学会了,请问老师我该怎么办?

    作者回复: 忘了所有以前学的,这两个月试试听听我说的。之间咱俩多讨论,我帮你分析。

    1
    2
  • 2020-01-02
    一直自学,学了无数的语言。就像你说的一样还是不会,但是我就是放弃不了这件事。我可能是个愚公,要移完这座山。我要做那半数手写红黑树的人
    展开

    作者回复: 那可是需要一套系统化的训练的,专栏的30篇文章只能教会你如何练习编程。^_^

    2
  • 2020-01-02
    我是一名小学教师,一直在考虑提高自己的编程水平。也思考响应邓总的号召“计算机要从娃娃抓起”这句话如何在小学课堂内外落实下去,开花结果。
    展开

    作者回复: 为您点赞!我的专栏是面向成人的职业编程教育。希望可以帮助您了解编程,而面向小孩子的编程教育,还得靠您们总结,提炼。我可以提一个点,给您做参考:孩子的编程教育,有一个点可以放在对于『计算机的工具属性』的理解上,利如用计算机解决应用题。

    2
  • 2020-01-03
    期待已久,终于上线了,跟船长学编程
    展开

    作者回复: Y(^_^)Y

    1
  • 2020-01-03
    老师可以参加你的线下课嘛
    展开

    作者回复: 现在只有黑龙江地区有线下课。(。ì _ í。)

    1
  • 2020-01-02
    来学习怎样教学生学会编程
    展开

    作者回复: 共同探讨!

    1