《软件工程之美》学习笔记(2020)

本篇笔记源于学习极客时间的《软件工程之美》

2020.5.14

课前必读里讲的“做中学”和“教中学,不就是通过做一个东西来学,以及学过之后的输出吗
本篇文章正是对“做中学”和“教中学”的实践。

感觉站在软件工程这个视角,就感觉上层的程序员不就是架构这类的吗;什么都不懂,只懂用框架crud的不就是底层的码农吗

基础理论(1-9讲)

  • 第一讲:了解了了一些概念,比如,瀑布模型,已经为了改善其缺点而产生v模型,螺旋模型等,以及后来形成的敏捷开发。
  • 第二讲:everything is project。

2020.5.15

  • 第三讲:通过宝玉的一个以前的真实开发经历,大致对真实公司里的项目开发有了一个整体的认知。也了解了瀑布模型的优缺点和意义。
  • 第四讲:认识了一下各种模型
    1.原型模型:快速做好简单版本,演示,跟客户确认需求。主要解决用户需求不明确和需求多变的问题。(先盖一个彩钢房)
    2.增量模型:模块化,每个模块都应用瀑布模型,分批次交付。(先盖卫生间,再盖厨房,再盖卧室)
    3.迭代模型:每次迭代出一个可用的版本,从简单到完善。每次迭代都是一个完整的项目,都要验收等。(先盖茅草屋,再到小木屋,再到别墅)
    4.v模型:适用于外包项目,基本上就算瀑布模型,但是每个模块都要验收
    5.螺旋模型:基于增量或迭代模型,每次都要做一个风险评估。
  • 第五讲:详细认识了一下敏捷开发(Scrum),敏捷开发是一套价值观和原则,用户故事,sprint,自动化测试,随时发布,持续集成。
  • 第六讲:讲了一下大厂里面用到的敏捷开发的方法,认识了一下看板,Ticket,git,master,branch,PR,CI(自动集成),code review,Docker Image,DevOps。
  • 第七讲:这一讲以一个7人规模小组为例子,描述了实际工作是怎样的,实际中与标准的敏捷开发流程有所不同,但是遵循思想才是最重要的。
  • 第八讲:这个讲最重要的是项目管理金三角,这个以后可以应用在实际开发中,更重要的是这个还可以应用在生活中,用来分析生活中的一些问题。应用这个的时候要把握好,三角形的那些边是固定的,那些边是可变的。
  • 学习状态:本来有时候想过一直学一个东西,比如今天一直学软工,但是学到第7讲的时候心态就烦了,有些不想学了,想着赶紧学完第8讲结束这个小节然后干别的。后来休息了大约有2个小时,然后又来学第8讲,心情就不一样,还可以接着往后学。(每个人的学习方法都不一样,这也算是对自己学习方法的一种探索吧)

项目规划(9-16)

  • 第九讲:听到第九讲的时候突然感觉到思维已经有一些变化,我会在边听的时候边思考这一讲主要讲了些什么,为一会儿的输出做准备。 这一讲首先讲了可行性分析的重要性,然后讲了怎么做可行性分析,从经济(成本,收益),技术(人员,技术,风险),社会(道德,社会影响,法律)三个方面评估。可以把每一件事情都当作一个工程来评估,如果可行性分析并没有给出一个明确的结果,可以先小范围试点,从一个小地方试试看。
  • 第十讲:本片文章主要讲了从如何技术转型管理,管好人和事,可以先从管好一个项目开始,转变思维。
  • 第十一讲:这篇文章里面也提到了大局观,跟开篇词我总结的那个从软件
    的角度从发差不多,我当时可能没想到大局观这个词。这篇文章讲了项目计划的重要性以及如何做计划,任务分解,估算时间,排路径,设置里程碑,虽然还能再学,可是感觉效率已经不高了,今天差不多听了9讲,可以再休息一下,学会其它的。

2020.5.16

  • 第十二讲:流程规范不是约束,而是提高效率,让项目从人治变为了法治。制定流程规范的4个步骤,1.明确要解决的问题,2.提出解决方案,3。达成共识,推广执行,4,持续优化,不断改进。然后尽可能的将流程规范工具化。

2020.5.18

  • 第十三讲:开会是用成本和价值的,就像金三角理论一样,从2个角度出发,尽量减少成本(去掉一些会议,减少开会的人,缩短时间),增加价值(明确目标和主题,停车场,非去不可的会议写博客)。
  • 第十四讲:一切管理问题,都应该思考能否通过管理工具来解决。了解了一下管理工具软件发展史,现在流行的看板和Ticket。
  • 第十五讲:风险,项目中的任务,不能盲目乐观,都思考一下它最坏的结果是什么,如果最坏的结果不能接受,就说明应该有个B计划,考虑风险管理。
  • 第十六讲:写文档可以先从模仿开始,从粗到细,迭代更新,可以先从脑图开始,这个我也发现了这个提纲的重要性,就像我看敖丙的github文章汇总,有一些文章只有一个标题,没有内容,然后我才突然感觉到大佬是先列了一个提纲,然后一篇一篇去写,而不是先写才有目录。

需求分析(17-20)

  • 第十七讲:需求分析,收集需求(头脑风暴,用户调研,竞品分析,快速原型),分析需求(表层需求,深层需求,底层需求),需求评估(可行性,成本,商业风险和收益,紧急性和重要性),需求设计,验证评估(A/B测试)。
  • 第十八讲:原型设计 分析(架构和流程维度,可以用脑图从总体到详细设计,流程图还需要考虑页面之间的跳转) 实施(PR,墨刀等 从能用到好用,好看)
  • 第十九讲:程序员应该有产品意识,包含商业意识,用户意识,数据意识。
  • 第二十讲:正确处理需求变更,提升需求确定性,提高需求变更成本,降低响应需求变更的成本。

系统设计(21-24)

  • 第二十一讲:架构设计
    分析需求 选着相似的成熟的架构设计方案 自顶向下层层细化 验证和优化架构设计方案
  • 第二十二讲: 技术选型
    架构设计的主要目标是低成本满足需求和需求变化,低成本保障软件运行。技术决策受限于时间,范围,成本的约束。要分析可行性和风险,要考虑利益相关人。技术选型先明确目标,然后调研,验证,和利益相关人决策。不要太过纠结,用于决策,坚定执行。
  • 第二十三讲:
    小时候的鸡兔同笼列方程问题,其实也是对问题的一种抽象。
    每一个程序员不一定要有架构师的头衔,但是心中要有大局观,要有架构师思维(抽象,复用,分治,迭代)。
  • 第二十四讲:技术债务
    技术债务不一定都是坏的,技术债务也是有利息的。
    重写,修补,重构(常用)
    今天听了12讲,但是差不多是一整天都干这个了,交了3个实验报告,主要是下午睡的不对,醒来都5点了。

2020.5.19

开发编码(25-30)

  • 第二十五讲:提高开发效率的方法
    积极主动(减少关注圈,扩大影响圈),以终为始(想清楚再开工,经常停下来想目标,制定原则,公开自己的计划),要事第一(把时间用在刀刃上,重要紧急马上做,重要不紧急花最多的时间做,紧急不重要禅模式集中做,不重要不紧急尽量不做)。

  • 第二十六讲:CI CD
    如果公司现在还没有应用持续集成,持续交付,持续部署,建议尽快部署起来。搭建持续交付环境,可以借助Jenkins,Go CD等工具。

  • 第二十七讲:软件工程师核心竞争力
    学习能力 解决问题的能力 影响力

  • 第二十八讲:如何提升自己的核心竞争力
    首先在一个技术领域深耕,要先中一颗大树,而不是一片灌木丛,只有一个领域的知识你真正吃透,才能有效的共享到其它领域,构建一个知识领域的森林,然后向相近的领域逐步扩展。

    如何提高解决问题的能力,明确问题,拆分和定位问题,提出方案并总结。
    如何提升影响力,做事情超出预期,帮助他人,乐于分享。

  • 第二十九讲:自动化测试
    分为 小型 中型 大型测试
    让自动化测试在持续集成上运行,才能最大化的发挥自动化测试的作用。
    写好单元测试代码的基本结构:准备 执行 断言 清理。遵循的基本原则:要验证正确性,覆盖边界条件,验证是否有异常和边界的处理。

  • 第三十讲:源代码管理工具
    小项目,隐私度不高,完全可以直接选择网的托管平台。
    自己搭建可以选择,git gitlab gerrit。网上的可以选择,github,gitlab,coding,码云等。
    如何用好源代码管理工具:原则一,要频繁的提交,不要“憋大招”,频繁提交不意味着提交不完整的功能,而是要将提交的内容拆分,保证其完整性。原则二,每次提交都要跑自动化测试。原则三,提交的代码要有人审查。
    GitHub开发流程:创建一个分支,提交更新,创建PR,讨论和代码审查,部署测试,合并。

软件测试(31-34)

  • 第三十一讲:软件质量
    软件质量分为:功能质量 代码质量 过程质量。
    人人为产品质量负责就要做到组织扁平化,小型化。
  • 第三十二讲:是否需要专职测试
    软件测试的基本工作:发现bug,报告bug,跟踪bug。
  • 第三十三讲:bug跟踪工具
    一个bug信息包括 标题 描述 优先级 指派人 状态 其它,可以方便检索。
    不要把bug跟踪工具当讨论板用。
    bug跟踪工具很好的践行了,把好的实践流程化,把好的流程工具化。
    未来自动化测试占比会越来越多。
    bug跟踪工具 Jira 禅道 云效,Bugzilla,MantisBT,Redmine等。
    自动化测试工具 Selenium,Appium,Macaca.
    压力测试工具 Apache JMeter,LoadRunner,阿里云性能测试 PTS。
    安全学测试工具 HP Fortify On Demand,Sqlmap,IBM Application Security APPScan。
    浏览器兼容性测试工具 Browsera,Browslering。
    测试用例管理工具 TestRail,飞蛾。
  • 第三十四讲:安全问题
    如何应对安全问题 需求阶段就要考虑在内,设计阶段(攻击面最小化,权限最小化,纵深防御),开发阶段(编码规范中加入安全相关内容,要用代码审查,增加安全性相关的自动化测试),测试阶段,上线维护。
  • 有些不想听了,一方面可能是这几讲的内容,我都没有开发经验,听起来没有太多感觉,有点学校上课的感觉。休息一下。

2020.5.20

运行维护篇(35-39)

  • 第三十五讲:软件上线
    版本命名:主版本号 . 子版本号.[. 修正版本号.[构建版本号]]
    比如说:1.2.1、2.0、3.0.1 build-123。
    版本发布前做好版本规划,首先是规划好要发布的功能,再有就是设计好发布策略,最后是综合性版本发布计划。
    规范发布流程,保障发布质量。发布之前要冻结代码,冻结代码后发现的代码要分级,每次修复bug发布新的候选版本,每次部署新的候选版本之后要做回归测试,申请上线发布,部署发布,上线测试。
    软件上线只是一个新的开始,要主动手机反馈,不断完善。

  • 第三十六讲:DevOps
    DevOps可以理解为一种开发(development)和 运维(operations)一起紧密协作的工作方式,从而可以更快和更可靠的构建,测试和发布软件。

  • 第三十七讲:线上故障
    遇到线上故障,新手需要时刻牢记,恢复生产,降低损失是第一要务,修复Bug是其次的。
    大厂处理线上故障的流程,首先对故障进行评级,其次要马上恢复生成,避免进一步损失,另外分析故障原因,修复故障,最后记录故障发生处理全过程,分析故障原因,提出后续改进方案。

  • 第三十八讲:日志管理工具
    ELK :Elasticsearch+Logstash+Kibana

  • 第三十九讲:项目复盘
    做好项目复盘,把经验变成能力。
    如何做哈项目复盘,1回顾项目目标,2评估项目结果,3分析原因,4总结规律,落实行动。

经典案例解析篇(40-45)

  • 第四十讲:小团队如何应用软件工程
    1团队建设:找人,培养人,管理人,开人。
    2流程建设:选着合适的软件开发模型,建立项目开发流程;构建基于源代码管理工具的开发流程;构建外部提交需求和任务的流程。

  • 第四十一讲:业余项目
    业余项目容易失败的原因:想法大,时间少;追求技术,缺少约束;确实产品,运营能力。
    还是建议做业余项目的,通过业余项目可以锻炼大局思维,沟通能力等。

  • 第四十二讲:反面案例
    可以从外部环境,技术管理,项目管理,组织文化4个方面分析。

  • 第四十三讲:vs code
    这一讲应该是我比较感兴趣的,同时听的也是津津有味,心情澎湃,vs code 4 周一个迭代,以及每次vs code的更新提示,让我感受到了vs code的活力,vs code这个大型开源项目真的很好的给大家示范了高效合作,敏捷开发。将软件工程很好是实践。

  • 第四十四讲:大厂应用软件工程
    小规模,自动化,DevOps,但是,大厂对软件工程的应用也是与时俱进的,不是一成不变的。

  • 第四十五讲:从软件工程的角度看微服务,云计算,人工智能这些新技术
    从技术角度看新技术,可能会兴奋或者抵触;跳出技术角度之外,站在技术角度看新技术,会有不一样的收获。
    技术架构等同于组织架构。
    技术是工具,技术服务于架构,架构服务于业务,业务服务于商业。

  • 结束语
    这是这个专栏的最后一篇,作者对专栏进行了总结,万事皆项目,尝试将学到的东西写下来教给他人,把经验变成能力等核心观点。
    一共54篇文章,约15个小时的音频。

2019.5.20中午

接下来说一下我的总结吧,我领取这个专栏到今天是7天,刚好一周,回顾一下学习记录,有一天没有学习,一共学习了6天,对于每一讲,我也按照开头作者说的,“做中学”“教中学”,都写了记录,总体来讲,专栏偏实践应用,不像学校课本那么理论,可能不适合应对考试,但是紧跟业界动态,都是实际应用中的经验,带我了解了一下实际工作中的东西。
最后的测试答对16/20,看来掌握的还行,本来觉得偏向于实际,但是通过出的这20道选择题感觉,还是有些理论的,只不过我可能忽略了吧。

本着对“做中学”和“教中学”的践行写了这篇文章,但是感觉很一般,就是挑了一些值得记录的点,没有自己的加工思考。另外就是对学习方法的一个探索吧,如果大家也不太清楚应该怎么学,那么也可以像这样边学习边记录,然后通过复盘来总结自己的经验,找到适合自己的方法。希望以后可以有更多的动手实践。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值