zoukankan      html  css  js  c++  java
  • 野生程序员初长成——记北大程序设计与算法专项课程

    博客中的文章均为meelo原创,请务必以链接形式注明本文地址

    《程序设计与算法》是北京大学在Coursera上开设的一个专项课程。专项课程由6门课程构成,分别是计算导论、C程序设计、C++程序设计、算法基础、数据结构基础、高级数据结构与算法,外加一个编程毕业项目。专项课程没有假定任何先修知识,如果你对编程感兴趣或者羡慕程序员的高工资,你都可以学习这个专项课程来感悟编程的滋味。教授这些课程的老师都是北大的教授,所以课程的内容是毋庸置疑的。下面是教授专项课程的四位老师。

    这6门课程,每门课程大致有6周的课程内容,真实对应于北大开设的三门课。所以不用说,这个专项课程还是有一定挑战的。

    计算导论/C程序设计

    前两门课主要介绍C语言,老师的设定是没有任何的编程基础,所以即便你是一个文科生也完全不必担心。如果你有一定的编程基础,就完全没有必要观看所有的视频了。其实这两门课程是我最后完成的,每门课程只是花了一个星期做作业。

    通过公开课来学习编程语言最大的一个好处是,可以在学习到一个新的语法或者算法理论的时,编写程序来实践。这在英文里叫learning by doing,在看视频学习理论的时候你觉得课程明白了,但只有在写程序的时候你才会发现事实上并非如此。专项课程的每门课的每一周都有很有趣有富有挑战性的习题,是非常好的实践机会,所以我建议一定要仔细思考,然后独立完成,这样你的收获才会最大。

    C++程序设计/算法基础

    《C++程序设计》主要介绍了C++的一些语法,主要是C++面向对象的特性。由于是初次接触,时不时被一些概念给弄糊涂了,什么static、const总是傻傻分不清楚。这门课令我印象最深刻的要数课后作业,编写一个魔兽世界的对战游戏,这个游戏充分应用了C++面向对象的特性,算是对学习内容的一个很好的实践。写这个程序花费了整整两天的时间,800行代码,算是我写的单一项目里最长的程序了。但这还没完,这只是实现程序的逻辑,测试的时候就出现了一大堆的错误。这个程序的输出很长,以至于需要用一个两个文档对比的软件,来寻找错误的位置。又花费了整整两天时间,才把所有的bug搞定了。

    《算法基础》介绍了一些基本的数据结构比如堆栈、队列、深度优先搜索以及算法的三种基本思想贪心、分治和动态规划。这门课主要是通过讲授例题的方式来教学的,这些例题往往是经典的ACM竞赛的题目,都有一些小小的难度。作业也一样很多都是来自ACM竞赛,有时一道题思索许久也没有思绪,我也咬着牙没有去搜索答案,第二天再想想课程由发现了其中的奥秘。这样当完全凭自己的努力完成一道题的时候,成就感不知不觉油然而生。

    也正是这门课,把我带到了程序设计竞赛的道路,这门课的一个老师郭炜就是北大ACM教练。主要是完成这门课的课后作业,poj(北大ACM在线评测)上的排名就刷到了20000以内。在学校,IEEE举办编程竞赛也拿到了第10名的好成绩,要知道第一名可是参加过ACM全球总决赛的大神啊。

    数据结构基础/高级数据结构与算法

    《数据结构基础》和《高级数据结构与算法》主要介绍了树、图、栈与队列这些基本的数据结构,和基于这些数据结构的算法。其中的很多算法都是初次接触,到目前为止还有一个很关键的信息我没有说,在学习这一列课程的时候,我没有读过一本教材。但学习的过程中必然有,困惑不解的时候,这是我会去搜索其它学习者录制的视频。老师对这些问题烂熟于心可能忘记了困惑的时刻,这些初学者制作的视频就能把这些问题讲解地非常透彻。

    与之同时课程的难度也在慢慢地攀升,光数据结构二叉树就衍生出红黑树、伸展树、B树、B+树、后缀树、Trie,而且相当一部分都不太符合直觉,难以理解为什么需要这样设计。好在课后编程习题并没有太过难为这些概念。

    程序开发项目实践

    专项课程的最后一门课在Coursera叫做Capstone,也就是毕业项目。毕业项目是完成一个搜索引擎,算是专项课程的高潮了。毕业项目有7个作业,每一个作业都给出了项目的框架,以及需要完成的功能。7次作业分别是对句子进行分词,不定长文档的存储,倒排表的存储,文档根据检索词进行打分,倒排表的二分查找,多个检索词的与或非操作以及检索表达式的转换。前4次作业跟多的是关于stream的操作,由于不熟悉stream的特征,总是掉进坑里;后3次更多的考察算法,需要实现一个有特殊要求的二分检索的函数和一个类似表达式求值的函数。在做毕业项目的时候,多数情况是很快就实现了要求的功能,提交到测试平台上得分却是个零蛋,然后苦恼地把项目的要求看了一遍又一遍,然后发现自己的理解似乎有些问题。据说毕业项目是腾讯合作设计的,完成之后有奖金和实习的机会。很幸运的是,我是第一个完成毕业项目的人,很期待接下来会发生什么!

    2016年从1月开始,到6月的结束,我完成了第一个Coursera的专项课程。不知不觉,我也能够写上千行的代码,完成一个像模像样的项目了。一点一滴的学习,一步一步的成长,回过头来,才发现原来我收获了这么多。感谢精心设计专项课程的四位老师,以及帮助过我的助教们。

  • 相关阅读:
    Centos7.0 安装Oralce 11g数据库
    python学习:基础数据类型
    Centos7.0 安装MySQL数据库
    Centos7.0 安装MariaDB数据库
    微服务的详情
    Class -- 10 -- Method类常用方法解析
    遍历list的三种方式
    使用@Autowired注解警告Field injection is not recommended
    java中的两种排序工具Arrays和Collections的使用
    java的reflection和introspector
  • 原文地址:https://www.cnblogs.com/meelo/p/5620657.html
Copyright © 2011-2022 走看看