人人都能学会的编程入门课
胡光
原百度高级算法研发工程师
19410 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
开篇词 (1讲)
人人都能学会的编程入门课
15
15
1.0x
00:00/11:46
登录|注册

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

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

一个蕴含编程真谛的等式

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

课程设置

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

胡光的专栏《学编程不等于学语言》深入探讨了学习编程的全面过程。他强调编程学习不仅仅是掌握编程语言,还包括算法、数据结构和编程范式。胡光提出了一个新的等式:程序设计 = 算法 + 数据结构 + 编程范式,并建议学习顺序为编程范式、数据结构、算法。专栏内容涵盖语言基础、编码能力训练、算法数据结构和综合项目,旨在帮助读者掌握编程技能。通过深入浅出的讲解,胡光为读者提供了学习编程的有效方法和技巧。他希望通过这个专栏,读者能够掌握C语言,训练编程技巧,以及学习算法和数据结构的关键方法,从而建立自学能力和独立思考能力。胡光的专栏为学习编程的读者提供了宝贵的指导和启发,让他们能够更好地探索编程的世界。

2020-01-0252人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《人人都能学会的编程入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(69)

  • 最新
  • 精选
  • Heroyaoplus
    一个文科生零基础来报道学习编程:)

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

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

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

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

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

    2020-01-02
    15
  • 梦醒十分
    编程范式和设计模式的区别是什么?

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

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

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

    2020-01-03
    9
  • Xunqf
    Mac电脑学C语言用什么IDE好?

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

    2020-01-03
    2
    8
  • NeonTronic
    老菜鸟说一句,整个计算机科学+软件工程的学习中,总是存在“先有鸡还是先有蛋”的问题:理论需要实践,实践需要理论。能拿捏好“螺旋上升”的老师,都是好老师👍

    作者回复: d(^_^o)

    2020-01-06
    7
  • 亲爱的偏执狂
    正需要一位老师来帮我回炉再造,感谢老师的专栏,我会持续追下去并希望得到新的灵感与启发,找到最正确的思路,重新夯实基础。

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

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

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

    2020-01-02
    6
  • 三皮
    没学过编程,能学吗?

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

    2020-01-02
    5
收起评论
显示
设置
留言
69
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部