野生程序员初长成 记北大程序设计与算法专项课程

《程序设计与算法》是北京大学在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的专项课程。不知不觉,我也能够写上千行的代码,完成一个像模像样的项目了。一点一滴的学习,一步一步的成长,回过头来,才发现原来我收获了这么多。感谢精心设计专项课程的四位老师,以及帮助过我的助教们。

时间: 2024-08-06 08:28:16

野生程序员初长成 记北大程序设计与算法专项课程的相关文章

野生程序员初长成——记北大程序设计与算法专项课程

欢迎转载,博客中的文章均为meelo原创,转载请务必以链接形式注明本文地址:www.cnblogs.com/meelo/p/5595306.html <程序设计与算法>是北京大学在Coursera上开设的一个专项课程.专项课程由6门课程构成,分别是计算导论.C程序设计.C++程序设计.算法基础.数据结构基础.高级数据结构与算法,外加一个编程毕业项目.专项课程没有假定任何先修知识,如果你对编程感兴趣或者羡慕程序员的高工资,你都可以学习这个专项课程来感悟编程的滋味.教授这些课程的老师都是北大的教授

北京大学-程序设计与算法 专项课程

程序设计与算法专项课程 https://www.coursera.org/specializations/biancheng-suanfa 计算导论 https://www.coursera.org/learn/jisuanji-biancheng C程序设计 https://www.coursera.org/learn/c-chengxu-sheji C++程序设计 https://www.coursera.org/learn/cpp-chengxu-sheji 算法基础 https://ww

coursera 北京大学 程序设计与算法 专项课程 完美覆盖

#include <iostream> using namespace std; /*int wanmeifugai(int n){ if(n%2){ return 0; } else if(n==2){ return 3; }else if(n == 0) return 1; else return (2+ 3*3)*wanmeifugai(n-4); }*/ //下面是参考网上的程序 /*思路:引自:http://m.blog.csdn.net/blog/njukingway/204518

野生程序员眼中的Linux系统

            我是一名后端开发者,从一个啥都不知道的小白,跨专业自学了PHP,江湖人称--野生程序员,所幸也算勉强混的一口饭吃.众所周知,计算机专业和非计算机专业其实是有很大的区别,计算机专业的课程大多是底层的原理,而我这个门外汉对此一窍不通,我投机取巧,在前辈们造好的轮子上开发.由此,对于Linux,我可谓是小白一个,我不懂计算机原理,不懂数据结构,自然对Linux的许多概念不理解.直到现在,我对Linux的底层架构还是懵懵懂懂.下面我想谈谈这两年来我眼中的Linux. 我的第一份工

程序员需谨记的8条团队开发原则(转)

当你从学校出来,找到第一份软件开发工作的时候,你就不再是一个单独作战的程序员了,你将会有一个团队,你的一举一动也将直接影响团队的效率和产出.下面这8条团队开发的基本原则,作为团队的一员,你必须谨记在心,这会对你和你的团队带来非同凡响的效果. 1.提交(签入)代码需要填写备注说明 团队开发中必定会使用一些类似svn的代码管理工具,在提交代码时填写备注,这个好处是不言而喻的.它可以帮你记录这次修改完成了哪些功能.修复了哪些bug,包括的团队的其他成员,也可以看到你这次提交代码所做的贡献. 2.每天汇

野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人(转)

本文摘自:<Web 全栈工程师的自我修养> 野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人.野生程序员有很强大的单兵作战能力,但是在编入“正规军”之后,可能会不适应新的做事方法. 遭遇“野生程序员” 腾讯公司内部的团队很多,在团队管理上有项目和专业两个维度.也就是说,有些团队是项目维度的,整个团队共同维护一个产品,成员来自不同的职业岗位:有些团队是专业维度的,比如一个组都是前端工程师,维护不同的产品. 因为前端组是设计部最接近后台技术的团队,所

野生程序员的故事

本文摘自:<Web 全栈工程师的自我修养> 摘自:http://kb.cnblogs.com/page/528495/ 野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人.野生程序员有很强大的单兵作战能力,但是在编入“正规军”之后,可能会不适应新的做事方法. 遭遇“野生程序员” 腾讯公司内部的团队很多,在团队管理上有项目和专业两个维度.也就是说,有些团队是项目维度的,整个团队共同维护一个产品,成员来自不同的职业岗位:有些团队是专业维度的,比如一个组

野生程序员的故事,不错,看后有一些感悟

本文摘自:<Web 全栈工程师的自我修养> 野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人.野生程序员有很强大的单兵作战能力,但是在编入“正规军”之后,可能会不适应新的做事方法. 遭遇“野生程序员” 腾讯公司内部的团队很多,在团队管理上有项目和专业两个维度.也就是说,有些团队是项目维度的,整个团队共同维护一个产品,成员来自不同的职业岗位:有些团队是专业维度的,比如一个组都是前端工程师,维护不同的产品. 因为前端组是设计部最接近后台技术的团队,所

【转】程序员需谨记的8条团队开发原则

当你从学校出来,找到第一份软件开发工作的时候,你就不再是一个单独作战的程序员了,你将会有一个团队,你的一举一动也将直接影响团队的效率和产出.下面这8条团队开发的基本原则,作为团队的一员,你必须谨记在心,这会对你和你的团队带来非同凡响的效果. 1.提交(签入)代码需要填写备注说明 团队开发中必定会使用一些类似svn的代码管理工具,在提交代码时填写备注,这个好处是不言而喻的.它可以帮你记录这次修改完成了哪些功能.修复了哪些bug,包括的团队的其他成员,也可以看到你这次提交代码所做的贡献. 2.每天汇