TLDR
自1月13日飞机从上海直达旧金山,5月15日20春BISP项目结束,转眼已在美帝待了4个月。魔幻的四个月里,认识了一些人,上了一些课,发生了一些事,思考了一些人生,写了一些代码,还有做了一大堆作业,熬了十几年来读书生涯以来最多一个学期的夜(n个凌晨四点的旧金山n>=10)。。。
这四个月大致以春假为分水岭,前两个月发生的零零总总按顺序依次有纠结选课,适应伯克利的节奏,日常上课,参加discussion,挤时间看reading,赶勉强hold住的各种due,联系暑研,去office hour和伯克利教授套近乎blablabla之类的。后两个月形势就急转直下了,先是美帝疫情指数爆炸,寝室开始囤积物资,之后两个室友退出BISP项目(也同时放弃本科之后出国读phd/M.S转而拥抱保研)逃难一般在加州shelter in place政策生效前一天搭飞机回国重新上本校课程。之后便是所有课程转入zoom,校园设施逐步关闭,日常宅家,赶已经hold不住的各种due,挤时间和国内小伙伴吐槽人生不易,缠着某个人说话hhh,然后阿里面试由于自己过菜被面试官嘲讽+看不起,midterm轰炸,project轰炸。然后4月30日,在国内五一劳动节前夕,连续6个小时考了两门高阶课程的final,并且考完之后仍要继续赶作业加上暗无天日的各种连环赶due直至最后一门final exam的5月14日。
To sum up,这四个月要说收获有多大,我也说不上来,可能被大环境和小环境的双重磨盘压榨的抗压能力大大增强外加严重睡眠不足重度黑眼圈?但是客观地说,不论开心还是后悔,好还是坏,这便是我的20SP,大三的最后一个学期,迈出象牙塔的第一步,我的惨淡的21岁人生-。-
学习的体验
来之前,无限神往国外大学CS课完善的基础设施。自己也时常对着CS162,CS61B等等的课程主页以及码量充足的各种project以及spec浮想联翩,上过一个学期之后,我只想说这学期project真的写吐了。这学期在伯克利一共上了四门专业课,略微有点遗憾的是最开始选了CS152计算机体系架构并且也enroll了,但是因为自己前几周经过备胎的10几门课的轰炸之后,感觉自己托大了,不是太能hold住,权衡利弊,还是不得不退掉了CS152,而是选择另一门更偏底层的EECS151数字设计集成电路课,或许不是个太好的选择。。。
CS61B 数据结构
选这门课主要是因为最后一个project是在只给出接口规范的情况下自己写个git出来,而自己之前几乎没有build system from scratch过所以诱惑很大,而且地里总是在吹上完CS61B就能去找工作了,自己当时数据结构也学得一般,甚至还想着可能上了之后对自己面试有一定助力。。。所以选的,最后发现想多了,菜还是照样菜。
上完之后体验是难度不是很大,绩点也挺好看的(貌似有A+?),但是作业是真的多,reading的材料(教授自己写的)是真的难读(看的头秃)。。。感觉值得国内借鉴的是,以java utils库的各种接口、抽象类和数据结构为蓝图,大致把设计思想、架构和基本原理介绍了一遍。那么如果国内用C++的话,是否能以STL为蓝图呢,而不只是抽象教授数据结构的原理,实现一些玩具数据结构类,就算只是浅层次了解一下工业级别的实现还是有很多好处的。。。。另一个体验是作业是真的多,将近十个hw加上十多个lab再加上三个project,最后一个project也确实有1千多行,不过是因为实现了将近10个命令,每个命令和起来代码比较多。其它的收获的话,一是java的语言模型-所有复合数据类型的实例都是匿名的,一切句柄都是指针,只记得当时自己学校老师说,java简单是因为没有指针,其实都是指针hhh。另一个是了解了一波红黑树。
至于最后写的那个git,确实挺有趣的。倒不在于多么复杂的功能,而在于看了一波git内部机制的介绍https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain,知道了原来git底层也是一个文件系统,然后正好操作系统在实现Unix File System,对比了一波content-based fs和location-based fs的分层机制,写了一点笔记有一些收获。
CS151 + CS151LB 数字设计及集成电路导论 + FPGA版实践课
选这门课的话,是因为一直有遗憾没有自己实现过CPU,去年的龙芯杯也没参加,也不会RISCV。而伯克利又是RISCV的诞生地,权衡再三还是放弃了152选了这门课加实践。总的来说,前几周相当于把verilog加数电又学了一遍,中间被电路计算电容折磨的够呛(为什么我们连大学物理都没学过),后期有讲一些硬件的内存单元,并行,加法器、乘法器以及HLS实现深度学习硬件加速的科普性质介绍。可能教授教的稍微有些枯燥,最后一个月的zoom每堂课只有4,5个人在线。。。。很尴尬。。。然后最后的期末考试相当恶心,估计是把教授弄不开心了。。。不过给分超乎寻常的松。。。绩点的话,我拿了一个(A-),不是太好看(⊙﹏⊙)。
收获的话可能主要体现在实践课上lab里的FIFO,uart以及project实现的那个risc-v三级流水线处理器。用的是pynq的板子,分了译码,执行和写回三个pipline stage,然后集成了一个二维卷积加速器挺有趣的,真实体会了一波为什么要硬件加速。。。。软件版本的实现是真的慢,不过我们的cycle counter和instruction counter实现的貌似有点问题。。。给分的话,实践课一般如果project和lab都实现了绩点都很高也不会curve,我们组的分数刚刚中位数(100/110),也拿了A,丢分估计在于最后优化没达到100MHz,然后checkoff有点迟交,然后report有点low之类的(cpu图手画hhh)。。。和队友的合作还挺愉快的,虽然git各个分支整的有点头秃,但比162就。。。。。
感觉国内相关课程也是有不少可以借鉴的,比如risc-v处理器的实现,我们不也是有pynq板子嘛,三级流水线的冒险处理也比五级流水线简单不少。。。像处理器硬件架构、流水线实现、2维卷积加速器、处理器频率优化都各只需要一周的时间来完成,而且国内一个学期有18周,workload也不会像伯克利这么密集。。。。。但值得一提的是,伯克利的研究生助教们都相当厉害,是真正的精英,有啥bug以及实现方面的困难都可以很快帮我们定位和解答、
CS162 操作系统和系统编程
唉,说实话CS162是这学期最想上的一门系统课,也是槽点最多的一门课,估计也是绩点最低的一门课。最开始以为自己enroll不了CS162,因为这门课是CS必修课非常热门,最后选上了激动万分,但结果却颇有点虎头蛇尾(或者室友吐槽的虎头鼠尾。。。)
课程的质量没话说而且教授也超有激情,教授是硬件系统方向出身,mit本硕博,都是满绩毕业(ORZ)。课程分为并发、调度、内存管理、io文件系统、分布式系统几个主题。project用的pintos,包含用户态支持、优先级调度、文件系统三大部分。hw也很有趣,各种word count实现(pintos api,多线程,线程池),http server实现,malloc实现,x86 page table walker软件模拟,pintos可扩展栈、用户态动态内存分配支持,2PC协议go实现。midterm的考题也非常有趣,例如用条件变量实现锁和信号量,实现pintos的单进程多线程支持,如果int指令失效如何实现系统调用等等。
但是说实话(我的)体验真的不能说好,尤其是在付出努力之后达不到自己的预期的情况下。
- 第二次midterm的时候,因为助教写的脚本有bug,导致服务器宕机,而且考题泄露,直接midterm取消。
- 因为助教们太忙,用的discussion的材料以及上课的ppt上标注的日期仍然是19Fa/19Sp或者直接20Fa了。。。更有点悲催的是,最后一次hw的测试结果的输出是“CS162 Fa 19 is the best semester ever”,这实在让喜欢这门课的人有点难受。
- 最后一次midterm,新的脚本还是有bug,导致考试时间缩短10分钟。除此之外,最后一道大题内存分析的页表基地址是错的,在我做了20分钟,离考试结束还有7分钟时,收到了教授的邮件。。。。说是题目有错。。。。于是从第一小题到最后一小题,重新计算。。。。而我在162考试结束之后紧接着就是3个小时的151考试,天知道我心态有多崩…
- project队友滑水严重,尤其是Unix file system的实现。。。。不仅联系不上,甚至连final report里项目分工的部分都懒得写了。。。。严重怀疑他们选择了P/NP。😔
- 值得一提的是,这一学期由于workload过重,我所有课的任何一门考试复习时间都不超过两天,一般是考前一天复习,可能是我选课选的有些问题。。。。
生活的体验
不是很喜欢写生活上的东西。关于吃,对于我这个魔都一个学期900元也能混混的少年来说,饭菜只要能吃就ok,至于是否好吃那就是另一码事了,和国内相比,印象深刻的在于:
- 美帝确实轻工业发达,超市各种吃的东西品种丰富,至于是否好吃(能吃?)也是另外一个故事了。和国内相比,哈根达斯真的便宜不少,但是有的奇怪口味也真的不太能吃。。。
- 美帝确实是移民国家,各国风味的餐馆都有。这学期吃过的有巴西餐,土耳其餐,泰国餐,日本餐,中国餐。。。
关于旅行,很悲剧,自从1月13日在寝室住下,直到今天,我的活动范围都不超过伯克利方圆2公里。。。所以没啥写的,金门大桥没去过,斯坦福没去过,硅谷没去过。。。好吧哪都没去过。。。。
一些人生感想
emmmmm,考完之后,这几天休息就一直在思考人生的意义(感觉好傻)。。。。。回顾自己到目前为止20年的人生里,自从初中开始,到高中,再到大学,基本上都活的很压抑,学的也很压抑。也没啥特别喜欢的,一直是在本能的学习,只是知道好好学习,以后会有一份不太差的工作,承担一个家庭的责任,但很少想过自己到底喜欢什么,想做什么,也不知道未来是什么样,更不知道未来什么样是对,是错。一天天傻fufu的?(hhh)又面临着出国读研和国内读研的dilemma,且无人交流。话说还想从一些书里寻找答案,看了王小波的《黄金时代》,不知道是不是我没有完全看懂,但是感觉跟小黄书一样的。。。
倒是和一位学校心理系的校友聊天时有一些触动,我询问的是怎么样才能知道自己人生的中心思想,因为我感觉自己没有中心思想,这样的话很难持久的努力学习,总是间接性的努力,而且学习的很压抑。。。。所以想知道自己的人生的意义之类的。。。聊过之后莫名发现,或许没有人从一开始就知道自己人生的意义,如果一开始就知道了,岂不才是一眼望到头的人生,或许我们的人生本就是一个寻找意义的过程,就好像我们从来不是先知道走路的意义,然后才去学习走路一样。所以我现在要做的,可能不在于绞尽脑汁思考人生的意义,或许享受这个在寻找中前进的过程就好了。