《构建之法》第一、二、十六章 阅读感受
第一章 概论
第一章开篇作者用于引出的第一个疑问,“关于二叉树的遍历算法实现有什么意义”, 第二个疑问“所有的算法都已经被实现了,学习的数据结构和算法有用吗,如何区分好的程序员和不好的程序员”。
这两个却又恰好正是现在的我所面临的问题。已经是大二下学期了,已经一头扎在算法与程序设计中一年多了。起初甚至一直到现在都是抱着一腔热血地去研究算法,去做竞赛。并没有很认真的考虑过这两者能给我带来什么。而这个学期开始接触软件工程导论,系统分析与设计这些课程的时候,发现自己的项目能力确实有些不足,需要提高。而在自己真正着手去做项目的时候,又迷茫地发现自己不知道学的那些个算法能做什么。
在开篇看到了这两个问题之后,很感兴趣地再继续往下阅读,希望能从书上,不是说获得答案,获得一些新的看法建议或者是实例也是好的。而结果颇令我失望。
概论这一章确实让我对软件工程、计算机科学、工程的概念、软件的特殊性有了更深刻的了解。但是我依旧没有找到我目前所热衷的算法能给我自己带来什么。对于这种勾起胃口又不给饭吃的感觉,也是忍俊不禁。
于我本人而言,我也看过许多算法大牛讲的“他们的故事”,也不停地听着别人夸奖算法有多么多么的好,虽然目前我还没有见到什么不错的好处。但是回头想一想的话,我做算法的原因并不是什么长久的规划方面的,而是我的的确确喜欢这个东西,所以我还是会继续下去,然后提升自己。ACM竞赛还蛮有趣的不是吗。我认为我当下看不到明显的价值,原因是因为自己的平台和高度还不够,模拟和暴力的确实能优化的部分有限。那么我就继续坚持自己的兴趣,锻炼自己的代码能力。以期有一天可以将所学致以所用。
所以有没有什么算法对项目有这巨大提高的实例呢。
第二章 个人技术和流程
PSP(Personal Software Pro-cess)个人软件开发流程。在其中最引起我兴趣的是,效能分析部分。而这一部分确确实实对我第一章的困惑又做出了些许的解释。
首先做出自己的部分检讨,做读书笔记这种事情我是经常做的,在csdn的博客上还有自己专门的刷题总结,日常看书在会在板子上记录自己的想法。而我的习惯是一个阶段做一个总结。所以我也没有想到在写完第一张的阅读感受之后这么快的时间里就得到了相当多的解惑。而第一章我会重读一遍,作为第一遍读第一章时的疑惑我会保留下来,作为自己思路历程的记录。
2.2效能分析工具中看到自己特别熟悉的复杂度分析,O(n^2)还是O(n*logn)。那么从复杂度的角度考虑,我想了想我们目前实现的导航软件,如果是用的dijkstra算法的话,ACM告诉我可以用堆进行优化(当然我不知道现在的导航软件是怎么实现的,只是在图论最短路当中,可以提出我自己的想法)。如果是字符串匹配的话,KMP比暴力更优,那么这些优化确实落实的话对于数据处理确实有很大的提高。这也使我感觉到了自己所学是一种切实可用的感觉。-.-
在本章特别有意思的一个点还在于软件工程师和大学生在个人项目上的耗时对比。工程师在“需求分析”和“测试”这两方面明显要比大学生花更多的时间,而具体编码上工程师所花时间更少。这也可以看出,我们需要锻炼的不只是代码的实现能力,还需要我们对用户需求、产品功能进行合理有效地分析与设计,在付诸行动取得成品后,还应该对于产品进行测试和完善。感觉这些和自己做竞赛特别的像,先是对问题进行分析,设计自己的程序,用合理的算法进行优化以降低低复杂度,最自己的程序输入样例进行调试,测试临界值以防溢出和bug。
第十六章 IT行业的创新
这一章的内容让我感觉既近又远。近在于就在昨天还听了学校一个关于创新创业的讲座,里面有这样的一句话:大学生创业是在人生整个创业过程中代价最小的。而大学生谋求创业的同时,是离不开创新的。
手机的发展和铱星计划的手机,让我认识到,软件开发,软件工程这样的一个专业和领域,他不是一个飘在天上的科目。他不仅需要像数学物理这些理论学科一样研究更新的东西,而且我们还需要从实际出发,从应用入手。此时在回头看第一章所讲到的,“软件团队要从需求分析开始,把合理需求梳理出来,进行软件架构、实现、测试、发布”。感触就比第一次读到更深了。
写完这篇之后再回头来看,发现自己的思路并不是作为一个软件开发者的思路,还是以一个做算法的人的角度去处理的信息,做出自己的思考。这可能与自己长期在做的事情有关吧。却也不知道这样的思维模式是好还是不好。