对于转专业的同学来说,系统设计永远是个内心深处的痛点,特别是在没有工作经验的情况下准备系统设计。
刷题和准备系统设计的区别
现在谈一谈笔者眼中刷题和准备系统设计的区别。
他俩的差别就在于实时反馈系统,或者通俗说就是进度条。
刷题虽然辛苦,但是因为有online judge在,你可能知道自己提升到什么水平了。
就像游戏里的进度条一样,可以看着自己每天的进步。
一个有实时反馈的系统对于提高水平帮助是巨大的。
然而系统设计,就是一个夸夸其谈吹牛showoff的过程,没有online judge,没有feedback。我闭门静静的练了一阵子,然后我不知道我过去的一段时间有没有提高。一种feedback的办法是去外面面试然后通过面试结果知道水平怎么样了,不过这个成本还是很高的。
我相似的经历在于我以前学习量子力学和电路设计的时候。这两门都是很难的课。电路设计虽然难,但真实设计几个放大器之后根据仿真结果和别人的芯片的比较就知道自己的水平是什么样子还有哪些地方需要提高的然后抓住短板提升就好了。然而量子力学这种课你把书看了好多遍,好像是懂了。看看下一章节发现前面的内容好像理解的不对,又回去看前面的章节。关键是习题量很少还没有答案。所以一直都在一种似懂非懂的状态不知道自己到底明白没有。
没有工作经验的同学到底能不能准备好系统设计?
答案是必然可以
答案是必然可以
答案是必然可以
我整篇文章最重要的三句话就是上面三句。你时间忙的话可以忽略下面的话了。
1.有工作经验的同学学习系统设计上手得确会快很多。但没有工作经验的话,只要你多花时间一定可以准备的一样好或者更好。
2.没有工作经验不是你的借口。你系统设计答不好只有一种可能是你准备的不够充分。
3.相比于算法来说,系统设计是一个更不考验智商的环节。这对于聪明的同学是个劣势,对于勤奋的同学是个优势,对于聪明又勤奋的同学更是一个很大的优势。 你有多聪明我不知道,但只要你勤奋你的系统设计完全比算法更容易出彩。 你可能准备算法一年还做不出一道新的三维DP或者猫鼠游戏这种算法题,但是你准备三个月系统设计,对于所有的系统你都可以给出很漂亮的解决方案。
在没有进度条的情况下如何准备系统设计
这里有一个九章某学员的总结, https://www.jiuzhang.com/article/XKJvqs/ 他列了一些参考资料在这里。
下面是我的步骤
1。 把九章设计/LaiOffer的系统设计资料看三十遍
如果你没有进度条,那就把学习的遍数做为你的进度条吧。
2。把九章和来offer的系统设计的例题每道题做十遍。
一定要自己分析自己写。每一遍和之前写下来的比较准备一下。
3。 看别人博客,看其他技术资料。
a. Grokking System design
b. https://github.com/donnemartin/system-design-primer
c. 一些相关论文和知识点, gfs, hadoop, big table, hbase, i18n, tcp/ip
- 多写多总结
我这个博客其实是写给我自己看的。用来总结我的学习进度的。
没有工作经验的和有工作经验对这些资料的吸收能力是完全不一样的。如果你像我一样没有经验,就用笨办法多看几遍多写几遍吧。没有工作经验不是你学不好系统设计的借口,好好学习一定是可以搞定系统设计的。
还有一点很重要
就是要写总结。
比如写博客。 读是一个被动吸收的过程,写作时候是一个主动思考的过程。
能把一个东西漂亮的描述出来才证明你真正理解了这个问题。
所以一定要写。根据笔者写作学术论文的经验,写文章的时候是真正学东西的时候,很多新的idea往往在写作的时候冒出来,很多不懂的地方也会在此时呈现出来。真的很有帮助。
参考文献
网友评论