• 博客初体验


    任务1 第一章

    1.1 软件 = 程序 + 软件工程

    程序=数据结构+算法

    ​ 一个复杂的软件是从一个简单的程序,扩展到一个满足各种功能的应用软件,再扩展到一个能保证服务质量的软件服务

    ​ 程序,在这里指的是源程序,就是一行行的代码,是建立在数据结构上的算法。

    ​ 一个复杂的软件要有合理的软件架构(Software Architecture)软件设计与实现(Software Design,Implementation and Debug),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等等。

    ​ 我们还有一系列复杂的工具、流程和文档来保证程序的正确性,这就是质量保障,具体的验证过程叫做软件测试

    软件的生命周期=需求分析+程序理解+软件维护

    ​ 软件企业的商业模式也会影响软件的需求。广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等。所以,一个推论是:

    软件=程序+软件工程

    ​ 一个扩展的推论是:

    软件企业=软件+商业模式

    软件开发的不同阶段:

    ​ 1 玩具阶段

    ​ 2 业余爱好阶段

    ​ 3 探索阶段

    ​ 4 成熟的产业阶段

    1.2 软件工程是什么

    软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

    1.2.1 软件的特殊性

    1. 复杂性(Complexity)
    2. 不可见性(Invisibility)
    3. 易变性(Changeability)
    4. 服从性(Conformity)
    5. 非连续性(Discontinuity)

    1.2.3 软件工程与计算机科学的关系

    计算机科学 软件工程
    发现和研究长期的、客观的真理 短期的实际结果(具体的软件会过时)
    理想化的 对各种因素的折衷
    确定性,完美,通用性 对不确定性和风险的管理,足够好,具体的应用
    各个学科独立深入研究,做出成果 关注和应用各个相关学科的知识,解决问题
    理论的统一 百花齐放的实践方法
    强调原创性 最好的、成熟的实践方法
    形式化,追求简明的公式 在实践中建立起来的灵感和直觉
    正确性 可靠性

    1.2.3 软件工程的知识领域

    软件工程的三大类基础知识领域:计算基础,数学基础和工程基础。

    • 生命周期
      • 软件需求
      • 软件设计
      • 软件构建
      • 软件测试
      • 软件维护
    • 专门领域
      • 软件配置管理
      • 软件工程管理
      • 软件工程过程
      • 软件工程模型和方法
      • 软件质量
    • 理论基础
      • 计算基础
      • 数学基础
      • 工程基础

    1.2.4 软件工程的目标 —— 创造 “足够好” 的软件

    ​ 和软件打交道的专业人士都知道软件有BugBug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。

    ​ 什么是bug呢?简单地说,软件的行为和用户的期望值不一样,就叫Bug

    ​ 是否是Bug,取决于用户、开发者的不同角度。

    1.3 总结

    要通过理论学习和具体项目的练习,做到下面三点:

    1. 研发出符合用户需求的软件
    2. 通过一定的软件流程,在预计的时间内发布“足够好”的软件
    3. 能证明所开发的软件是可以维护和继续发展的

    任务2 P18-2

    初级软件工程师如何成长呢?

    我认为有下面几种成长,1. 积累软件开发相关的知识,提升技术技能。例如:对java、c/c++、c#的掌握;诊断/提高效能的技术;对设备驱动程序(Device Driver)、内核调试器(Kernel Debugger)的掌握,对某一个开发平台的掌握。2. 积累问题领域的知识和经验。3. 对通用的软件思想和软件工程思想的理解。4. 提升职业技能。5. 实际成果。

    文中初软是这样成长的。但是我有个问题,像我们学生,平时自己学习软件方面的知识,偶尔可以自己写个app,搭个小网站练练手。积累一下开发经验,但是一段时间,不做编程的话,就会有所遗忘。再编程的时候,一些东西,就会遗忘了,需要各种百度,期间浪费很多时间。大佬级别的开发者,看一眼,接着就有思路,然后写出大概demo的样子。像我这种菜鸡,百度一点写一点,不会太浪费时间了吗?对于初级开发者,那么平时要怎么样才能不容易忘记呢?

    怎么做到结对编程?

    在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。

    介绍就是这么简单,但是学期末的实训中,基本上项目编码都是组长包揽全活,就算组员有想要帮忙的心,有时候讨论来讨论去,还不如自己一个人开发效率高。比方说,组员想用java开发,但是我不会java,我会C,而组员又不懂C。那么怎么实现结对编程呢?是不是需要双方有差不多的能力呢?

    获取用户需求——用户调研

    1. 焦点小组 2. 深入面谈 3. 卡片分类 4. 用户调查问卷 5. 用户日志研究 6. 人类学调查 7. A/B测试

    是不是只要不是太离谱的需求都能实现呢?

    IT行业的创新

    最近几年,我们整个社会似乎对创新都很感兴趣,媒体上充斥着创新型人才、创新型学校、创新型公司、创新型城市、创新型社会等。

    创新是刻意的改变,还是不经意的发现呢?我们需不需要刻意地去追求创新呢?

    领导力

    在软件开发过程中,有许多平等合作,但是也有上下之分的领导/被领导的关系,即使都是平级的员工之间,也有老师傅/新人、某领域的专家/新手之间的领导关系。

    如果想要成为一名软件行业中优秀的领导人,需不需要自己具有很强的编程能力呢?

    任务2 P18-3

    1. 软件分类

    • 工具软件

      • Magisk Manager
      • 黑域
      • 冰箱IceBox
      • 唐僧藏经
      • 八戒助手
      • Kernel Adiutor
      • Fake Location
    • 社交软件

      • Tim
      • 微信
      • 微博
    • 支付购物软件

      • 支付宝
      • 建设银行
      • 淘宝
      • 饿了么
    • 学习阅读

      • 百词斩
      • 百词斩词典
      • 可可英语
      • 观止
      • 滴答清单
      • 笔趣阁
    • 游戏软件

      • 王者荣耀
      • 王者荣耀助手
    • 影音视听

      • bilibili
      • 腾讯视频
      • QQ音乐
      • 喜马拉雅
    • 简易浏览器

      • via
      • chrome

    2. 分析

    ​ 我选择工具软件的原因:安卓系统的app经常会有启动页广告,通过唐僧藏经上的别人分享热门app的规则,可以跳过广告;还可以通过八戒助手的自动解码,自动解码跳过一些冷门app的启动页广告。magisk获取root权限后,可以通过黑域关闭app后台;还可以通过冰箱关闭一些app的关联启动;还可以模拟定位。这些软件基本都是一些搞机大佬开发出来的。通过一些论坛别人分享下载的。不收费,不过可以选择自愿捐助

    ​ 我选择浏览器的原因:像via浏览器,简洁,轻量,极速,而且支持高度定制,不收费,可以自愿捐助。chrome浏览器虽然不如via轻量,但是界面也比较简洁,速度也快。很多同类型的浏览器比较下载的。无广告,不收费。

    ​ 我选择学习阅读的原因:像百词斩,可可英语,随时随地可以背单词,练听力,他们还有自己的品牌的学习资料,通过出售资料盈利。观止的话,每天推荐一篇优美散文,每天一篇,找回高中的感觉。滴答清单可以每天设置计划,完成以后直接勾掉,方便快捷。笔趣阁是一个可以阅读全网小说的app,完美。无广告,不收费。

  • 相关阅读:
    《R语言实战》读书笔记--第五章 高级数据管理
    《R语言实战》读书笔记--第四章 基本数据管理
    《R语言实战》读书笔记--第三章 图形初阶(二)
    《R语言实战》读书笔记--第三章 图形初阶(一)
    《R语言实战》读书笔记--第二章 创建数据集
    《R语言实战》读书笔记--第一章 R语言介绍
    《R语言实战》读书笔记--为什么要学
    《算法导论》读书笔记--第1、2章课后题
    《算法导论》读书笔记--第二章 2.3 设计算法
    Mysql重复数据查询置为空
  • 原文地址:https://www.cnblogs.com/meethigher/p/11483606.html
Copyright © 2020-2023  润新知