听听哈佛大学是怎么教PHP的

之前在准备面试的时候,在Hired in Tech上看到了对于Harvard Summer School CS 75的最后一节课Lecture 9 Scalability的推荐。觉得这个课程讲的非常的赞,面试之后,就把整个系列都听了一遍。

CS 75一共10节课,每节一个半到两小时,我花了一周的时间才听完,听上半个多小时就会烦躁,然后要休息好久,不过想想,Harvard的课程标准如果和KAUST的一样的话,暑假一共两个月,要选两门课,也就是说一门课要用一个月的时间去上,我一周把Lecture听完也已经很效率了呢。另外,还是要多休息才能听好课吧,午睡起来听一整节课都没有大问题,但要是为了听课中午不睡觉,那真的是只能听一点点了,因为这位老师说话比较快,听起来很容易累。另外,虽然看的是课程视频,可以不停的暂时回放,但这样听的就太慢了,个别单词没听懂也是可以接受的,猜一猜也就过去了。北京某学校的同学告诉我,从外校好不容易考研考到他们学校的同学,上课时会录音,课后和考试之前再整个回放一遍,非常的刻苦。但别人听一遍自己听三遍的话,也太花时间了。

也许是因为Harvard的条件比较好,这门课可以全程录像,然后配字幕,配课件和Tutorial,整体上感觉非常的用心。这门课非常的偏应用,课程中的三个项目也是做网站。印象里做网站这么体力活的事情,不应该出现在Harvard这么高大上的学校里,但这门课讲的很好,比我以前听到的任何类似的课程都要好。课堂上讲了很多代码级别的细节,而且是那种切切实实写网站很有用的细节。此外,对于必要的理论也涉及了不少,比如说DNS之类的查询,这些我记得在哈工大的.Net和JSP课堂上并没有讲到,而是在专门的网络课程里讲的(当然我本身也没怎么去上过课就是了...)。课程Project的设计也比较好玩,不像工大,一个"学生成绩管理系统"能从大一做到毕业设计。整体上工大的课程更偏向大型网站的设计吧,一个中规中矩的ERP之类的网站,一定要实现数据库的增删改查之类的,要有UML的设计,毕竟专业的名字也是软件工程。而Harvard的更偏向应用吧,上完这门课就能自己实现各种idea,当然PHP本身也是种轻快的语言(世界上最好的语言?)。

这门课解决了我很多的疑惑,比如说:

  • HTTPS的证书的体系,我之前只知道可以去买证书,这门课上说,有一个Trust Chain: 浏览器的厂商,比如说做IE的Microsoft或者做Chrome的Google,他们会在游览器里预置一些他们信任的发布证书的网站,然后我们在这些网站上买证书,这些网站会调查我们的背景,确定我们是买证书的那个人,而不是别人冒名的(其实大部分时候应该只是发封邮件让我们确认一下),之后我们就能得到证书了。之前我一直不知道在浏览器里有预置的受信任的网站列表。我在学校里学到的只是有这么一套证书系统,但课上老师并没有时间去一一演示在哪里买,什么价钱买。另一方面,找到的教程大都也是怎么去买,买完怎么用,但没有讲这个证书的信任体系是怎么运作的。

  • 以前课堂上老师多次强调过,动态网站和静态网站的区别是有没有用数据库,当时我还不理解这句话,现在看来,具体的区别网站生成是否动态,用户要跳转到某个页面,这个页面要是之前已经生成好了的话,就是静态,如果是收到用户请求,再去生成这个页面,就是动态。数据库与否并不是重点,我可以链接一个数据库但根本不用它,也可以不把数据保存到数据库里而是保存到一个个文件里,前者用了数据库但还是静态,后者不用数据库但是动态。

  • 之前老师讲过有的数据库有transaction功能,但我从来没看到过具体的语句,这门课直接把MySQL的transaction的语句写出来了,很直观。

  • Linux下的文件系统的权限。之前只会chmod +x ...,这里讲到了关于-rwxr-xr-x中的每个字符是什么意思,怎么去改变它。我当时一直没搞明白chmod 755之类的数字是什么意思,这里也讲到了。其实这些知识真是听了很多次,但没有老师在课堂上具体的展示下怎么在生产环境里用它们,我要做的也只是在课件上看到它,记住它,考试的时候能答上题目而已。

  • 如何写网站的代码。之前写的代码都比较简单,直接几个函数就下来了,不用太多的设计,但对于一个网站,如何去复用代码,如何去设计接口,甚至更简单的,如何去建立放代码和其它资源的文件夹,这里面都有很多值得探讨的地方。以前觉得关于system design的工作,看到设计完的成品,比较直观比较简单,现在觉得,能设计成直观简单的样子,才是最高的水平。我去设计肯定没有这么简洁明快。具体见Lecture 3。

  • 最重要的,当然也是我听这门课的初衷,也就是如何设计一个大型网站的构架(system architecture)。从简单的一台服务器,到HTTP服务器和MySQL服务器的分开,再到MySQL的服务器的读写分开,wordload balance。直接看最后的架构图觉得好复杂,其实拆开一点点看,就觉得很简单了。具体见Lecture 9。

最后说一点关于搭网站的感想吧。读本科的时候听各位学长说做网站做到吐,做网站没前途,自己大二上了几门做网站的课以后也是觉得好没意思,.Net到JSP再到数据库再到各种课程设计,每门课都是差不多的网站。但听完Harvard的课我一下子觉得能做的东西好多好多,毕竟网站只是一个界面而已。有些时候也是自己给了自己太多限制,一定要做成类似“学生成绩管理系统”的网站,但其实用些心的话,也可以做的很不一样,做的很出色。只可惜自己当时并不怎么用心。记得大二暑假在大连实训的时候,大家无聊的时候都在刷Facejoking,这个网站的点子非常的老,就是从社交网站上扒头像,然后大家评比校花,也就是电影Social Network或者说Facebook最初的故事。具体要用的技术也并不难,只是,别人做出来了,而自己并没有哪怕去试一试的念头。除了具体的技术细节,或许我应该多培养一些关于产品的意识,去做一些更好玩更有用的东西。

links

social