老师的问题和《构建之法》笔记

谈构建之法之前,先回答老师的几个问题~

  1.我本科专业是物联网工程,四年间的学习内容一直处于软硬件间摇摆,一度使我怀疑人生。这种学习方式最大的好处是可以从底层理解整个计算机的运作,循序渐进,而最大的缺点是,体系太过于庞大,低效,冗杂。当我到了大三的时候,我依然不能够独立编写一些软件,也不能处理有意义的硬件问题,所以当务之急便是做出取舍,否则我的大学可能就止步于C语言和单片机了。几经周折,最后还是选定了偏向软件的方向,原因众多,硬件的学习难度和深度让我苦不堪言,对数模电,通信原理,高频电路亦有较高要求,而周边同学也大多偏软,大环境下,软件是占有优势的,所以最终还是选择了偏向软件的计算机专业读研。自认为本人资质普通,但对生活兴趣高涨,有生之年如若再有机会,还是愿意将丢掉的硬件知识再次捡起,毕竟当年学的很痛苦...

  2.在做出一个大方向的转折之后(选择偏向软件方面),问题依然重重,一个具体的专业是很重要的。计算机发展史虽短,但也体系庞大,门类众多。兴趣任然是生活的导向,本科实习期间有过一个Unity的小的项目,让我对图像,游戏方面有兴趣,最后读研也是选择了图形图像方面。至于擅不擅长计算机领域,怎么说呢,我学了四年物联网,也算是计算机相关吧,加上平日的一些积累,相比于其他的技能,应该是蛮擅长的吧...

  3.对一名合格的计算机专业的硕士研究生,我们的培养方案里是这样说的:

关于差距,我自己的看法是,在专业知识方面不够深入,目前还不具备独立从事计算机应用工程的开发能力,对专业前沿的信息不够清楚,外语能力也需提高。相信通过三年的学习情况会大为改善。

  4.初来不久,同学们卧虎藏龙,我对他们还是不够十分的了解。只能谈谈我的自以为是,我本科期间我还算兴趣广泛,学习过C/C++,写过几个小的项目,用Unity做过简陋的游戏,了解一点C#,写过静态网页HTML/css,了解一点js,但没有用过,毕设开发一个APP,所以懂点Java和Android,用Python写过内涵网的爬虫,看过鸟哥的Linux私房菜,能简单操作Linux系统,能在Linux在进行简单的网络编程,和多线程/进程编程。若日后能用到这技能,那可能也是我的一点小小优势,然而劣势是,我会的都不太深入,与有深入学习的同学相比,我可能还没有入门。。。

  5.三年规划:学习所需课程;完成一些项目,延伸学习项目中的一些技术;多读一些前沿论文,发表论文,顺利毕业;找个实习,毕业后找到个回报好点的工作。。。

以上信息纯手打(图片除外),真实可靠,人艰不拆,不喜勿喷,谢谢!

《构建之法》笔记

  诚实守信是科学严谨和求真务实,这书我没全部看完。

  从简单的编写一段代码,到一个软件工程,隔着一本《构建之法》。软件工程的目标是创建“足够好”的软件,在开发流程中又有5点特别的难题:复杂性,不可见性,易变性,服从性,非连续性。

    复杂性:现代软件的规模都非常巨大,动辄超百万行代码,上万个文件,用以满足大规模用户的不同的复杂的要求和良好的用户体验。软件的各个模块之间有各种显性或隐性的依赖关系,随着系统成长和模块的增多,这些关系的数量往往以几何级数的速度增长,而理解这些复杂性的人却没有太大变化。软件团队的成员每天都在修改各种源码,在维护软件修改过程中维持和提高质量是一个很大的挑战,需要高效的源码管理和软件测试。

    不可见性:软件以机器码的形式在计算机上运行,还可能在多核上运行,工程师是根本无法看到自己的源码是如何被执行的,一旦出现错误,只能看到出错的一瞬间留下的蛛丝马迹(错误代号,目标代码的大致位置,错误信息等),几乎无法完整重现程序的错误。

    易变性:软件的更新迭代速度也在随着用户需要快速改变而进行,同事软件还要适应新的硬件基础,正确的修改软件也十分的困难。

    服从性:软件并不独立,它必须服从于系统,硬件,用户甚至行业要求。

    非连续性:人们比较容易接受连续性系统,增加输入,就能看到相应的输出增加。但要保持这样的特性越来越困难,大多时候,输入上很小的变化,就会引起输出上极大的变化。

  在个人开发中,必须要遵循一定的流程来管理开发活动,这也是软件工程师在软件生命周期所做的工作流程。软件是由各种模块组成的,各个模块之间需要定义尽量明确,模块内部的改变不会影响其他的模块。单元测试是这些模块的质量稳定的,量化的保证。单元测试是指对软件中最小的可测试单元进行测试和检查,在最基本的功能上验证程序的正确性。好的单元测试标准为:由程序作者来编写测试代码;测试过后,机器状态保持不变;测试过程要快;测试结果为一致的,可重复的;保持独立性;测试覆盖所有代码路径。在单元测试的基础上,就能够建立这一模块的回归测试。当模块在构建一个新的功能时,有时会出现从稳定状态到不正常工作的“退步”,在一个模块功能完善的同时,与此的测试用例也在完善。而一个模块的单元测试便是这个模块最初的基准线(Baseline)。例如模块A的123测试用例通过了,打在新的版本中,改测试用例失败了,这便是一个“退步”,工程师们应该在新版本上测试所有已通过用例,验证是否“退步”。这个过程便是回归测试。然后便是软件的效能分析,以使自己的程序更加的高效。在效能分析中,通常采用抽样和代码注入来检测和分析代码在运行中的各项参数(运行时间,运行次数,内存开销等),对代码进行优化。
  在多人合作中,代码的规范变得很重要,在开发的初期,便要代码风格,设计规范做出详细讨论,最后还需代码复审来增强程序的鲁棒性。在开发流程中我推荐也是普遍采用的敏捷流程,敏捷流程的开发原则是:

    尽早持续的交付有价值的软件满足客户需求

    欢迎需求变化,以此调高竞争力

    经常发布可用的软件

    业务人员和开发人员共同工作

    项目核心为有进取心的人

    面对面交流

  步骤为:找出产品的当下所需,冲刺所需解决的问题,然后冲刺,最后得出软件的一个增量版本。

  一款真正的软件,要经历需求分析,确定项目经理,确定典型用户和场景,软件设计与实现,用户体验设计,然后通过软件测试进行质量保证,直到稳定然后发布。这一整套的流程当需依据确定的项目来进行设计和调整。而这些思路正是《构建之法》教给我们的。

时间: 2024-10-29 10:48:12

老师的问题和《构建之法》笔记的相关文章

构建之法笔记5

在以前编写代码并没有感觉到平时会出现的一些小错误小细节,看了<构建之法>这本书之后,才忽然明白原来一些小错误也会造成大的问题.这本书给了我们学生一个全新的学法,以前学习软件工程总觉得太多理论的东西在里面,但是在这本书打破常规的教学方法,阅读了构建之法后,我对软件工程及软件有更专业的认识,软件工程+程序=软件.而软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上的过程.软件工程还包括:软件需求分析,软件设计,软件构建,软件测试和软件维护.软件工程不单单是一项工程,更是一项计算

构建之法笔记

团队绩效是指团队实现预定目标的实际结果,主要包括三个方面:①团队生产的产量(数量.质量.速度.顾客满意度等):②团队对其成员的影响(结果):③提高团队工作能力,以便将来更有效地工作. 在至今众多的有关团队绩效的研究中,关于团队绩效的定义最为流行是团队绩效主要包括三个方面:团队对组织既定目标的达成情况:团队成员的满意感:团队成员继续协作的能力.绩效管理的主要目的是:协调企业内部运作,使企业发挥最大能力:激发员工的使命感:识别人才并确定培训方向:奖优罚劣,使员工感到自身价值得到企业认可.如果我们把整

构建之法笔记1

一开始,书中就给出了一个观念,软件=程序+软件工程,程序=数据结构+算法.程序我倒是有点体会,从入学到现在,就是不停地在程序中度过,先是初步的学习算法,然后数据结构,但是这些东西让我觉得没什么用处,都是别人实现的东西,自己无法创造什么.软件应该是程序的放大版,程序是一行行的代码,而一个复杂的软件不但要有合理的架构.软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系.编译参数.链接参数等等,这些都是构建的过程.软件工程的核心部分有:构建管理.源代码管理.软件设计.软件测试.项目管

构建之法笔记3

未来是什么样的,我们谁都无法知道,所以我们应该把握当前,为自己努力."软件工程师的成长"让我明白了未来的路应该怎么走.尽管第三节讲解了如何成为一名优秀的软件工程师,如何检测自己是否成为了合格的软件工程师.书中介绍了软件工程师的成长,我反思自己怎么才能做到书中所说的.到底怎样才是一个合格的软件工程师,从软件最顶层的程序员到初级软件分析师再到软件工程师. 现在我只是culver的了解了软件工程的只是谈不上任何的实际.但是不断的学习会使量变引起质变.不断的学习,才能知道自己想要的是什么.

构建之法笔记4

敏捷流程与一开始的理解不同,没看书之前以为只是说一个开发团队在开发过程中应该秉持"快速.有效"的合作理念,一起为团队努力.看完后才知道"敏捷流程"是指价值观黑人方法论的集合.书中详细介绍了"敏捷流程",例如流程.的问题和解法等,而作为一个敏捷流程团队有怎么做呢.敏捷不是万能的,有时候也会出现很大的错误像用敏捷的方法开发登月火箭的控制流程,挂了很多的宇航员.这时候就要求不同的思想. 第七章是介绍微软公司的msf,这让我们对微软又有了更深一步的了解,

构建之法笔记2

大部分软件是多人合作的,每个程序员负责自己的模块,我们要学会对自己负责的模块做单元测试,测试自己写出的代码:也要对自己的代码进行效能分析,一个程序越快越好,所以要对自己的代码进行优化,个人开发流程也是一个工程师应该具有的能力. 个人能力对一哥工程师是重要的,个人能力的衡量:项目大小,花费时间,质量和按时交付:  发展:软件开发的技能和相关知识,积累问题的经验,对通用的软件设计思想和软件工程思想的理解,提升技能,实际成果.我们还需要对团队负责,交流说到做到,接受团队的任务,全心投入并及时完成.

《构建之法》阅读笔记01

这一学期,开始了健民老师的软件工程概论课,早就听闻健民老师的软件工程概论课很牛,听了两节课下来,果然如此. 老师引用了<构建之法>书中的理念,认为软件不是靠着理论堆积而成,而是一个个实发的项目组成的,在课上,老师引用了书中的例子来形容学生和老师的关系. 1.餐馆服务员/食客 2.老板/雇员 3.保姆/幼儿:像保姆一样操办一切 4.哥们/哥们:一起混吧 5.路人甲/路人乙 6.狱警/犯人:想法点名/想法逃课 7.健身教练/健身学员:鼓励成长 当然,大家都更加喜欢7,希望能够获得更多的编程技能和知

初读构建之法

 以前对软件工程没有特别详细的看法,有些模棱两可.经老师介绍购买了构建之法,初步看了构建之法的   第一章.第五章以及十七章,对软件工程有了一定的了解,下面想要说一说我的个人看法.         百度中有这样的定义,软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学   科.又或者说,比较认可的一种定义认为:软件工程是研究和应用如何以系统性的.规范化的.可定量的过程   化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法  

观《构建之法》有感

大学这三年,说实话很少去真正看一遍书,最近老师要求老师要求写个构建之法的读后感,本想是应付下任务.不过,在我阅读了十几页之后,渐渐对这本书产生了兴趣,特别是里面的讲解例子让我更加枯燥的软件书籍第一次有了改观.虽然本人学的是软件工程专业,但是说来惭愧,对于学习了三年的软件工程,软件工程这四个字的含义,我自己却也没能其真正理解.别人问我什么是软件工程专业,我只会通俗的解释就是设计软件的,敲代码,做程序的.阅读了构建之法后,我对软件工程及软件有更专业的认识,软件工程+程序=软件.而软件工程是把系统的,

《构建之法》阅读有疑 与 个人Week1作业

<构建之法>阅读有疑 在用将近五节课的时间将邹欣老师的书<构建之法——现代软件工程>第二版大致看完.虽然全书是以轻松的口吻与”移山公司”员工的一些趣味谈话来传输一些理念和思想的,但是读完并理解依旧不是一件很容易的事情,并且在这过程中我对书中的一些看法抱有怀疑的态度,现将问题所在列在下面. P68页:我不是很认同邹老师的“精通”魔方的判定方法.就好像在软件工程开发中,一个人解决了一个bug.解决了bug却不算是“精通”,还得能恢复bug,再现bug才算是懂得各中原理吗?我觉得作为一个