Q&A
今年遇到两个不错的professor(Drew & Tyler), 也有很棒的mentor(Mike)带我ramp up, 下半年面试都遇到几个很牛逼的面试官, 有前辈给了学习上的指点, 有大佬愿意带我读书读paper读源码。我果然是欧皇哈哈哈。话说我一直觉得一些high-level的问题挺难说清楚的, 比如“你是怎么学习system相关知识的” 要不是关系特别熟的、特别了解的谁回答的上来。。尽量把这些问题具体化了。这里就当archival了。
Q: 学完这门课后怎么继续学习storage?
A: 自己在家搭个storage server, 做好backup

Q: 怎么学习新的概念?
A: 在新技术出现前老技术是什么 - 老技术的弊端(一般都是performance的需求, 或者hardware的发展造成变革) - 新技术是如何解决的
Q: 课后怎么继续学习?
A1: You need to do something with the knowledge, not just read. I think this ties directly into question three---how to think of what to do.
Thinking of good projects is not always easy. I'd say for this, pick something that can use the technologies you want to learn and don't worry about if its actually useful. E.g., make your own version of Dropbox---you can use a lot of distributed storage technologies in that.
A2: Pick several technical books to read every year, and think out some side projects, say, I made a temperature monitor for my garage. Also, sharpen your linux skills. One more thing, don't burn yourself out.
Q: 是否需要读源代码, 怎么读?
A: Reading code written by others is hard. The first thing to know is that you don't need to read it all. If you are working on a project with 80,000 lines fo code, reading and understanding them all is not needed. This is the joy of abstraction---you only really need to know the part of the code you are working in and how it interacts with other parts of the code. You might gain understanding of more pieces at a time as you work on larger and different tasks. For example, when I started at IBM, I had a new unfamiliar simulator to work in. However, my first task was on the load/store unit, so I only had to understand that code, and some that it interacted with. Over time, I became familiar with much of the processor core logic in the simulator, but I didn't know (or have to know) about a lot of the uncore (the stuff outside the core, like interconnect networks) or other parts. If you can have someone help you get acquainted with the code, that can be a huge help. One thing that I have found can be very good is trying to write your own comments to explain it. The other is trying to do something. Anytime someone says they are "looking at the code and studying it" without doing something to it, they aren't making progress.
Q: 工程师最重要的素养?
A: descipline under pressure
Q: 职业上的建议?
A: (1) 不要为了薪资的高低选择自己不喜欢的工作(Mike举他自己第一份工作的例子)
补充: 但我的确觉得第一份工作遇到什么样的mentor/manager, 分到什么样的project大部分取决于运气。。let's see...
(2) build connection, learn how to do ask questions in the slack channel, how to do public talking and presentation
(3) Don't burn yourself out.
(4) 隔几年试着换工作, 或者去不同的组 => (2)的重要性
补充: Mike自己第一份工作做了四年,之后在Dell EMC五年, NetApp四年, Nutanix两年
(5) open-minded(举他在EMC反对用C++重构C代码的事情)
notes: time scheduling
Drew: Part of the goal of this assignment was to plan carefully. Did you do that? It sounds like no. I'll also say that we took out multi-dimensional arrays (made them extra credit) which was probably about 15% of the work on this assignment.
For those saying "we had something due in another class"---you knew that when the assignment came out. You could have planned for that. You could have even requested 2 late days then for only 9 points.
When I was an undergrad, I took compilers, networking, advanced operating systems, and theory all in one semester.
I'd say the workload for that was 50% more than what you all have with 650, 651, 568. I got through with careful management of time.
I know many of you started on this late. Hopefully you learn an important lesson from this. If we extend the deadline, you learn the opposite (wrong) lesson that when you arent done someone will save you.