对数据结构和算法的看法
Eric S·Raymond 在《大教堂和市集》说道:
聪明的数据结构和笨拙的代码要比聪明的代码搭配笨拙的数据结构工作得更好。
对这个描述深以为然。
以前我对数据结构和算法的作用还没有什么深切的感受,我想主要原因是一直在写上层应用,都是逻辑很简单的简单代码,复杂的底层实现都被大牛们用API给屏蔽掉了。但是当我开始阅读一些计算机底层源码的时候(例如操作系统,OC的runtime), 我才开始真正体会到数据结构和算法的巨大作用(尤其是当面对复杂问题的时候)。
- 采用好的数据结构是解决复杂问题的第一生产力。如果面对复杂问题,采用了不合适的数据结构,或者根本没有在数据结构上做深入设计和思考,那这就是噩梦的开始。
- 算法能大幅提高我们代码运行的效率(在时间和空间上)
对LeetCode的看法
我还没能理解刷LeetCode有什么特别的意义。给我的感觉解LeetCode和做高中数学题差不多,通过大量的训练来掌握不同的pattern,然后举一反三,最终能够顺利解题。
LeetCode更像是一种结果检验,如果你很好的掌握了数据结构和算法,那么解起题来应该会容易很多。这也许就是大公司为什么喜欢考察算法的原因吧(另一方面算法也可以用于检验候选人的智力水平)。
但仅通过刷leetCode能否真正提高数据结构和算法素养,提高自己在实际工作中的对它们的理解和运用?这一点我是很存疑的。我还是认为通过阅读大量的优秀代码和切身实践,然后不断反思和迭代,才是提高数据结构和算法素养的最佳途径。
如何提高
- 系统掌握理论。没有系统的理论掌握,上来就码题,是野路子,效率不会高。(给自己准备了一本《算法》第四版 😂)
- 最佳途径:通过阅读大量的优秀代码和切身实践,然后不断反思和迭代
- 取巧途径:刷LeetCode
- 学习下别人的的经验和技巧(看看大神怎么学)
他山之石
- https://books.halfrost.com/leetcode/
我的计划
- 掌握好理论基础。适时总结,写博客
- 以xv6为抓手,深入体会其对数据结构的运用
- 刷leetCode(暂定一周七题,按pattern刷。做好抽象总结,举一反三)
- 在工作中先思考设计(慢启动)。时刻注意提高自我追求,拒绝写垃圾代码