持续更新中…
preface
写这篇文章的主要动机是回顾一下我在USC选的课,以及这些课给我(一个转专业的学生)带来了什么。每门课的介绍不单单会包含课程本身的介绍,中间也会混杂着从这一门课中 我对Computer Science的理解,以及对自己职业发展,还需要什么知识 的想法。
USC的课程质量总体还是不错的,不过目前还没有发现任何一门课上完之后会有所谓 “脱胎换骨” 的奇效。凭借一门课的知识,想在那个领域有所了解(入门)是可以的,但是远远不够促成这个领域的 engineer 或者 researcher(熟练)。想要达到熟练的水准,还需要自己多了解,多练习。
毕业感想
正在去参加毕业典礼的飞机上,码下这段文字,记录一下自己目前的感想。
其实,自己已经不算是一个完全的fresh grad了,离真实地毕业,已经五个月了。这个时候参加毕业典礼,也是有点不太全情投入了。我还记得高中毕业的时候(=高考结束那天),我坐在学校的操场上,靠着围栏,重重地将积攒了许久的紧张感吐了出去,然后就是对未来的幻想,充满着激动和不安。本科毕业的时候,心情已经安宁了许多,但是还是充斥着对美国学习生活的幻想,和对各种目标(找工作/做科研,赚钱)的计划。俗话说的好,一鼓作气,二而衰,三而竭。到了我这第三次毕业典礼,已经基本上没什么太大的兴奋了。
不过这次毕业典礼,要说才是我真正的毕业典礼,从此之后,我才真正意义上,告别了“学生”这个身份。这个身份有多么的重我倒是不知道的,也许以后会感受的更多。
生活
目前已经正式上班四个月,感觉上班生活和学生生活,还是的确相差很多的。一天8个小时,已经牢牢被占据,基本上没什么灵活的余地。之前学生时期,我可以美美的安排自己 吃完午饭,趴一会儿午觉,学一会儿到4点钟,再去健身,然后晚饭。也可以跟朋友基本安排任何一天,出去玩。然而工作之后,不能了,再也不能下午去健身,中午睡觉也基本不可能。听起来好像都是絮絮叨叨的小事,但是整合起来,就让我感到非常的不协调。感觉即使已经上班了四个月,但是还是没有恢复到自己的最佳状态。时常出现睡眠不佳,食欲下降,等等的问题。
说到这里,也是感觉自己年纪也是逐渐变大了。的确已经过了可以随便造的,到了一个需要开始注意保养的时候。运动睡眠饮食不规律,就会感觉精力下降,提不起精神做事或者玩耍。开始能理解为什么,小的时候,看见爸爸妈妈下班之后就躺着看电视,看见许许多多的人上班之后就开始身材走样。才明白,这种才是上班后的常态,而有些人 上班的同时还能保持身材,甚至保持爱好,是多么的不容易。这种保持的背后,是需要一些经济基础,健康的人生观,和好的方法论,才能做到的。希望自己可以成功做到。
经济
工作了,慢慢有一些积蓄,就需要考虑财务管理的事情了。不像在学生的时候,算好各种花销找爸妈要就完了,需要考虑到未来的计划,投资,开销管理,甚至可能得开始考虑父母养老的事情。我还在学习和掌握中。
社交
很明显的一个变化,感觉已经不会交到那种,学生时代一样,整天都泡在一起的朋友了。但这算是一件坏事吗?可能也不是。朋友有很多种类型,不应该自我设限,只想交往同一类朋友。放开心,享受相聚欢乐时光就好了!:)
不过目前,的确蛮希望有一个比较交心,什么都能谈的朋友。
工作&学习
工作中用到的东西,的确跟学校中不太一样,但是又是息息相关的。不过,目前感觉最最是我短板的,还是英语的交流能力。有时候真的感觉如果用中文的话,我可以做到更有效率,更精准,也更讨喜的表达。真的需要好好提高语言能力。
所以这也是学习的方向,不再仅限于书本上的知识,而是各种各样的东西。book smart + street smart。
关于纽约
纽约的确是一个信息量及其庞杂的地方,把我这个刚从乡下学校毕业的年轻人弄的晕头转向:),有时候甚至抓狂。在这里遇到了许许多多的人,形形色色。人呢,有些很美好,有些很优秀,有些不耐烦,更多的是擦肩而过。一座城市有一座城市的风格,纽约的风格就是大熔炉吧。希望可以在这座乱七八糟的城市里,找到自己的节奏,有自己的routine,有自己的舒适区,也有自己的冒险际遇。
第四学期(final)
CS571 - 网页技术(前端)
load比较重,尤其是在后期的三个project,基本每一个的平均耗时都是一星期。
【todo:加别人介绍这门课的链接】
INF558 - 知识图谱
这门课load也比较重,加上对inf的课程套路不太习惯,再加上最后一学期有些懒散的学习状态,这门课妥妥地又拖了我的后腿😢。
【todo:加别人介绍这门课的链接,并且再补充一些】
第三学期
这学期要学习的两门课,都是我之前没怎么接触过的,略兴奋。
CS402 - 操作系统
出名的load重神课。目前只做了第一个warmup proj就感觉的确名不虚传。c的代码有太多小细节需要考虑,而且proj的test cases很全,要求也各种繁琐。
不过能看出来这门课应该是历史悠久了,课程的document很全,第一次的warmup proj的FAQ居然详细到教你如何开始。感觉还是很不错的。
CS585 - 数据库
🌶️🐔课程。感觉啥都没学到,这学期的老师分数还给的贼低,气skr人。
第二学期
CS596 - 科学计算
这门课是一个大而全的scientific computation + visulization
入门,其内容包括:
- Parallel Computing (简化版UCB CS267)
- MPI, OpenMP, CUDA练习
- Grid/cloud scientific computing (停留在介绍层次)
- OpenGL
课程的主线是顺着 molecular dynamics
algorithms进行的。从一开始的单机版,然后开始加入MPI, OpenMP, CUDA并行化,最后出来一个多机多线程的程序。
不得不说内容还是比较浅,练习也都有老师带着做,几乎没有难度了。
CS561 - AI
很喜欢的课!AI方面的overview课程。在上这门课之前我已经有了一些machine learning 和 deep learning (stanford CS229
, stanford CS231n
)的知识。这门AI课带给我的收获就是 AI发展的各个方向整体了解。课程架构如下:
- 从search问题开始讲起。几乎所有的问题都可以化成search型来解,但是有些问题,exp复杂度。于是就有了各种各样的search算法,从complete的,到带heuristic的。遗传算法,以及游戏中用到很多的Minimax。
- Logic学派(符号主义)的东西:constraints,reasoning, inference。Propositional logic,First-Order logic, Fuzzy logic。
machine learning:
- 频率学派的一些各种算法模型,包括neural networks。
- 贝叶斯学派,Bayesian Network, PGM
- 这一部分其实不太清楚该怎么归:EM算法,reinforcement learning。
自己对这三个部分的感受:
第一个部分其实是基本功,必然要去了解的,这门课这一块也讲的不错,个人认为掌握的还行;
第二部分logic,其实就有点分派别的意思了。近些年来大家一提到AI可能就是机器学习深度学习,然而其实是AI漫漫长河的一个分支流派吧,只不过目前兴起。logic算是传统经典AI的流派,也有不少不错的成品:比如theorem solver,能够求解,证明定理。是有其独到之处的(比如这个theorem solver想通过机器学习的方式来实现,至少我感觉不可能)。至于为什么现在不火,我猜极大可能性是因为太精细,100%的正确率是有代价的,然而在实际运用过程中往往太多dirty work,成品不容易deploy到实际生产环境中。
第三部分machine learning。这个近些年来很火,计算量的大幅提升,数据源源不断的世界。而machine learning大概是天生适合data-driven的环境,deep learning更是如此吧。这门课这个部分的笔墨我觉得可能有点太少了,很多地方可能连入门都没有,扔下一堆公式草草带过。最气的是这个部分没有布置编程练习。。
一点对AI的想法:
首先,it is not possible that “AI will rule the world”. 《终结者》《机械姬》这些也就是电影而已,甚至像《西部世界》这种类人机器人,我也觉得应该是不可能出现的(至少在我有生之年hh),除非多年之后AI的发展走上了一条新道路,否则按照现在的道路的话,不可能。
但是未来中,各种AI技术,是很有可能成为“武装”,融入到我们日常生活中,融入到各种传统领域的。比如很多CV技术,人脸识别,图像分割,能够丢到安防,加密,视频处理等环境中。目前的AI市场还处于一个“野蛮生长”的时期,各个公司互相发展,竞争:他研究他的算法,你出你的API,我出我的一体机。市场也还没有一些协议,能够让所有的这些组件有机结合起来。但是发展到一定时期,我坚信会有一些协议的出现,形成一个完善的市场,就像零部件生产以及组装一样。这个时期,AI技术会最大化地融入我们所有人的生活。
现在可以说是AI的“乱世”。当然,作为从业者,“乱世”可能是机会最多的时候。
想参考我的笔记的同学,可以访问这里
第一学期
EE450 - 计算机网络
很全面,然而大部分都是在讲物理层的东西,现在已经很多都不记得了。。叹气
大作业是写socket传输信息。后来在学并行计算的时候,发现MPI的传输MPI_Send()
, MPI_Recv()
,貌似就是把socket传输包了包。
目前感觉有用的部分:
- 整体计算机网络的了解,各种术语,各种技术是在解决什么问题等
- TCP, UDP, HTTP各种协议
- socket编程
CS455 - 编程入门
这门课的全称为Introduction to Programming Systems Design
,内容主要涵盖:
- C++/Java基础语法
- 数据结构算法
- 以及OOD
这门课其实有点过于简单了,以上的几个点都有概括,但都很浅。但是这门课对于一个新手来讲,还是有不少帮助的,除了上述几个点:
- 这门课有很多的编程练习
- 会比较强调coding style和documentation。对养成好的编程风格有好处
- 考试手写代码,对面试也有一定帮助
总的来说就是一门入门课吧,是名课UCB CS61B
这门课的削弱低配版。。
想参考我的笔记的同学,可以访问这里
CS570 - 算法
是我第一学期最喜欢,觉得最有用的一门课了。内容呢其实就是对算法的一个全面介绍,前置要求是懂基本的数据结构算法。
插一句题外话:其实对于无基础的同学,应该要求455上完再上570的。这个我跟学校反应过,但是他们可能也没有办法。所以还是非常建议usc-37的同学,在入学之前把基础补好。比如上掉UCB 61B,觉得这个load太大的话,可以上Stanford CS106B(我当时选择的是这个)。总之就是把编程基础+数据结构补起来。
课程总体偏推导和证明,要说其实对刷题是没有一个直接的帮助的(除了DP这一节,DP真的是个神奇的东西),但是了解一些上层的知识,个人感觉是有潜移默化的作用的。而且说起对计算机领域的整体了解,这门课是必学的(什么东西可解,什么不可以;常用的算法,以及分析;NP之类的概念)
插一句:学了这门课之后,我才能理解自己之前学的一些零零碎碎的知识是用来做什么的,以及它们的局限性是在哪里。 以machine learning为例,比如说,我们有了贝叶斯公式,为什么不直接先验转后验来predict?而常常用naive bayes?就是因为直接从先验转后验是exponential的复杂度,实际运用中常常不可用。因此会有各种assumption来化简问题,降低复杂度,比如用naive bayes。
想参考我的笔记的同学,可以访问这里