我们学校是加拿大本科一个一般的学校
这学期上了门叫智能信息系统的课,编程语言是JavaScript,学完这门课我对前端后端开发都有了全新的认识。我来讲讲这学期都学了什么。
第0周:老师给了很多的链接,基本上是自学nodejs,express还有前端。
第1周: 这学期学的是RESTFUL API,
做了一个很小的电影票系统,实现了基本的get 和 post request 。get 用来前端发送查询电影数据,并且返回内容到前端。post就是添加一个新的电影票。后端是用express.js 写的,前端就是用了一点ajax。前端随便糊弄了一下。
第二周:讲了nosql,用了mongodb,使用了mongoose库。我学会了如何使用nosql数据库。学了async函数的意义(ppt 就六页)老师基本上就是介绍下概念,跑了点sample就结束了,基本上还是自学。
async function - JavaScript | MDN (mozilla.org)
这星期实验是把前端的数据送到后端,然后Data consistency(数据持久化)
第三周:这星期讲了爬虫,讲了pagerank就是搜索引擎对于每个页面的排序,讲了内链和外链的区别。还需要看好几封论文(我嫌多没怎么仔细看,然后找了个清华大学的公开课看的哈哈),讲了Cheerio.js 和 Crawler.js。
pagerank基本上就是比如你在这个网页上停留或者你跳到某一个网页的可能性~
这个pagerank有个弊端就是,当你作为内链的数量越来愈高时,你的权重也就越高。比如某些大网站收录了你的网站,那么这个算法就认为你的比较厉害,然后你的pagerank数值就会变得更高。
据说谷歌已经不再使用pagerank 这个算法了
Effective page refresh policies for Web crawlers | ACM Transactions on Database Systems
208.dvi (najork.org)
ml-matrix - npm (npmjs.com)
prpaperdraft.dvi (stanford.edu)
这周主要时间是学习了pagerank的公式,反复看老师的例子。最后也写出来了。
Pagerank Explained Correctly with Examples (wmich.edu)
第四周: 讲了倒排索引,讲了搜索问题,然后学了elasticlunr.js 库。
自己利用倒排索引完成了elastic search
这周主要学了如何使用nosql,进行自定义搜索。并且将数据返回到前端正确的显示出来。
PageRank传奇-数据挖掘:理论与算法 清华大学(袁博)-EEWORLD大学堂
虽然没考上清华,但我也从清华大学学到了不少知识~哈哈
大作业就是用前五周的东西合在一起做一个自己的小项目。我选择做了个类似于豆瓣的网站。
爬虫这部分觉得比较坑,因为老师不让直接通过api来获取数据,所以只能通过解析网页的html来一个个爬,但是吧,你如果频率太高了会被refuse,但是我当时吧没意识到这个问题,因为老师说需要1000条数据,所以我当时就一直重复爬,但都没有达到我想要的数据,最后我发现每爬一条歇一分钟,这样可以爬到800条。最后800条我终于受不了就停止了。
这个app可以通过名字检索到电影,也可以搜索相关的搜索电影评分,然后每个网站都有统计出来他们的内链和外部链接,然后运用公式算出他们的pagerank值,然后进行排序。
虽然在国外读书,但我获取消息的第一途径还是中文,只有当中文没有我觉得有用的知识我才会看英文文献,文档啥的。虽然习惯不太好,但是没办法。
学期的第二部分学了推荐算法,主要是看论文,读懂公式,并且把公式翻译成JavaScript语言。其实写代码只是这门课很小的一部分,主要就是理解公式
Resolving Cold Start Problem Using User Demographics and Machine Learning Techniques for Movie Recommender Systems (sjsu.edu)
经过一学期的努力我终于学完了这门课,最后拿了a+也还是比较满意的,但是这门课真的让我觉得计算机的天花板根本就不是编程语言,而是你的数学能力。
我拿到的学位也是计算机科学与技术(Bachelor of Computer Science) 。这是一门的必修课,cs专业的选修课。
我感觉本科教学大家每个学校都差不多,重要的还是自学能力吧~
学校也开设了各种不同的课,计算机视觉,神经网络,机器学习,人工智能,分布式计算 这种顾这些课程
我选了神经网络和计算机视觉但发现没有那么喜欢这种比较侧重理论的课程。而且这种课对你的数学能力要求还比较高。
这些课吧都是偏理论知识多一点,(我不喜欢a * search,也不喜欢贪心算法,也不喜欢强化学习也不喜欢动态规划哈哈)而我更享受代码成功运行起来的那种感觉,所以我选了这门课还有多线程编程。
结论:
你是不是发现上面的知识大多数和JavaScript这个语言没有什么特别大的关系,就是你可以能拿JavaScript 写的东西,也能拿python 写出来。除了call-back 方法比较有特点,其他的大部分功能在其他的语言也都有体现。(我最近疯狂痴迷typescript)
我觉得作为一个科班学生,学一门新的语言,应该速度还是蛮快的,大概的语法啥的一两天就能看的差不多了。所以之前课上scheme和prolog觉得还是很受用。
对于我本人来说最有益的一门课是 Programming Paradigm(编程范型)这门课,讲了lisp和prolog。这门课算是改变了我思考编程的方式。哈哈
说了这么多最后还不是StackOverflow(狗头
有人非要说我是大专,水校,啥的我听了真的很不爽啊,我一开始已经说过了我不是麦吉尔,UBC,多伦多大学的本科CS,只是一所中等学校的的CS项目。诚然我的学校不是什么好学校,但我挺喜欢的。
408 的四门考试我们只学了操作系统,数据结构和计算机网络,
计算机网络课程就是和中国科学技术大学 华 蓓 (ustc.edu.cn) 教授讲的一样,只不过我们用英文教课罢了。
操作系统讲了:资源管理,抽象化 ,文件系统, inter-process communication and concurrency, kernel modules, 内存管理, containerization and virtualization(讲了docker啥的)还有一些安全相关的。
感觉和mit的这门操作系统有点相似6.S081 / Fall 2020 (mit.edu)
数据结构是一门大二的课:
计算机组成原理感觉有点偏向ECE,我们科系比较math-oriented,所以没有学这门课。
在某种程度,你的学习能力可能很能反映你日后的工程能力。 |