【阅读】软件工程

2019/07/17 ARTS reading

原文

Software Engineering is different from Programming

概述

  1. 知道如何码代码并不足以让你成为一名软件工程师;
  2. 程序大家都会写,但是软件工程师不是人人能当;我们可以在学校里学习数学与写作,但是不是都能成为数学家与作家。会煮菜并不能说你就是个厨师,是吧。
  3. 编程,说白了,就是给计算机予指令,让其对输入做操作,从而得到输出;软件工程,是为大多数用户解决问题,通过设计,编写,测试以及维护程序的方式,得到一个健壮安全的解决方案,能承受时间的考验,对于某些未知的问题也能正常工作(这是说方案不仅仅考虑当下的这个场景,对于相关场景也要一并考虑)。软件工程师需要知道他们解决的问题,问题的解决方案,方案的限制,隐私以及安全的影响等等。
  4. 解决方案的心智
    1. 软件想的不仅仅是写代码,而是满足需求与解决问题(解决问题可能不需要你码代码,嘿嘿)。要把问题想通透,再考虑是否码代码。
    2. 智者解决问题,天才预防问题。
  5. 代码质量
    1. 清晰,可读,可扩展,可维护。相信大家都遇到&&喷过各种垃圾代码(有时候可能是自己喷自己,嗯,你懂的),所以代码质量怎么吹都不为过,别扯什么deadline,走什么捷径。
    2. 维护代码是慢慢长路,用户会要求更多的功能,更易于使用的方式。没有考虑可扩展性的代码是没有未来的。
    3. 代码首先是人读的,然后才是机器执行的。如果连以后的自己读代码都难受,那现在就要好好考虑可读性问题。
    4. 代码可读性很重要,但是目前都没有好的准则。好的软工在长期实践中会依靠经验和直觉。对于代码清晰性而言,就像知道一大堆词汇并不能帮助你一片简练清晰的文章一样,记住一些好的软件模式和实践并不是足够的。
    5. 问题发生在所难免。所以做好错误记录至关重要,理想情况是能快速清晰定位。
  6. 环境与测试
    1. 软工码代码,需要考虑代码会在不同的环境下运行,如不同的机器,不同的时区等。软件会在不同的屏幕大小和方向下运行。也许只能使用有限的内存与CPU资源。软工需要考虑所有可能的场景,并对这些场景进行测试。TDD也许是个不错的实践方式。
    2. 需求经常是模糊与不完整的。要考虑不仅仅是如何实现方案,而是鉴别方案哪些是必需的。
  7. 代价与效率
    1. 大多数情况下,软工都能够更快的解决问题。越有经验的程序员,越能提供健壮,准确,可靠以及可维护的方案。雇佣有经验的码农代价更高?emmmm,你再好好想想,想长远点……除非你想干一票跑路。
  8. 可用性
    1. 用户体验,主要是人机交互,把自己放在用户的角度考虑,减少自己想出一些奇葩的方案出来。
  9. 可靠性与安全
    1. 可容错,可应对恶意输入。考虑如何保护用户抵御攻击。不要傻傻地把敏感信息明文保存或传输了。
    2. 再好的软件也无法预防所有的问题,好的工具事半功倍。
  10. 拥抱工具
    1. 好的工具,如虎添翼,用了再也回不到从前!
  11. 软件工程进化
    1. 软工路漫漫,吾将上下而求索;
    2. 创造更好的工具,解决更大的已知问题,探索预防未知的问题。

看法

大家很少说自己是软件工程师,都是码农,都是程序员。软工涉及的东西比较多,编程只是其中的一个环节。我们都是从编程开始,向上了解需求,向下做测试做支持。一步一步成长。

Search

    Table of Contents