软件工程冰山一角

 

初生牛犊

对于年轻的、刚入行的计算机学生来说,代码在他们眼中是这样的:

稍有小成

当然,实习生们都很聪明,他们知道学术界和工业界的代码有哪些不同,他们会花点儿时间给代码加上注释,做点测试,code review…… 但是,他们依然不会意识到这座冰山有多深。

  • A11Y: accessibility,是指设计和创建可以被所有人,包括那些有残疾的人,使用的网站和应用程序。例如让盲人通过语音方式使用软件。

  • l10n : localization(本地化), 类似的还有i18n (国际化)。

  • GDPR:General Data Protection Regulation(通用数据保护条例),这是一项在2018年5月25日生效的欧洲联盟立法。GDPR 的主要目标是保护个人在网络上的数据安全,给予个人对自己的个人数据更多的控制权。

重要的是,冰山海面下的部分依然涉及到代码,也就是说,程序员的代码只有一小部分被用户使用,大部分都在用户的视线之外。

但是在海面以下的部分提供了真正的冰山浮力:

没有测试,系统的功能早晚会被发现问题,没有可靠的开发工具,程序员很快就会失去动力。

没有针对和解决客户问题的流程,客户很快就会抛弃你,把业务搬到别的地方。

不是所有的新产品都会触及冰山的所有部分,但很多项目都会触及大部分冰山。

即使是个最简单的活儿,也会慢慢变成一个大项目,例如,你想把一些用户数据保存在服务器上,在你开始之前,就得考虑这些事情:

🗄 确保数据得到备份,数据丢失了,用户可受不了

🗑 允许用户随时删除他们的数据,包括备份中的数据

📲 允许用户下载他们自己的数据和元数据,以符合GDPR的要求

📚 设计你的存储系统以符合HIPAA,FISA和欧盟的数据本地化政策等法律

🚂 随着存储系统的改变,迁移现有的用户数据

📊 监控后端,处理停机事件,配额使用情况和安全漏洞

👮 控制和审计客户允许的代理对用户数据的访问

如果有实习生在一个夏天就完成这么一个完整的项目,那就非常让人惊讶,印象深刻!

拨云见日

但是,你以为这就完了吗?

不!

我们在冰山之下还有一个完整的冰山:

这个元冰山依然是由代码构成的,只是和你的项目代码关联不大。

你需要用IDE来编写代码,用编译器来编译代码,用调试器来调试代码,用Git来管理代码…..

你需要用到各种操作系统,数据库,框架,编程语言,流程图,安全扫描工具,静态分析工具,自动化脚本……

你还需要白板,视频会议,电子邮件,Slack……

它们不会影响你应用的工作方式,但是会影响你的工作效率和应对问题的能力,不好的、不适合的工具会让程序员付出高昂的代价。

最终,软件质量是由用户看得见的功能,看不见的代码,以及帮助编写代码的代码工具组成的。

只有当所有这一切都完美融合,才会创建出高质量的软件和服务。

返璞归真

吃透基础技术是为了更好地理解程序的运行原理,并基于这些基础技术进化出更优化的产品。吃透基础技术,有很多好处,具体来说,有如下几点。

  1. 万丈高楼平地起。一栋楼能盖多高,一座大桥能造多长,重要的是它们的地基。同样对于技术人员来说,基础知识越扎实,走得就会越远。

  2. 计算机技术太多了,但是仔细分析你会发现,只是表现形式很多,而基础技术并不多。学好基础技术,能让你一通百通,更快地使用各种新技术,从而可以更轻松地与时代同行。

  3. 很多分布式系统架构,以及高可用、高性能、高并发的解决方案基本都可以在基础技术上找到它们的身影。所以,学习基础技术能让你更好地掌握更高维度的技术。


  • https://medium.com/source-and-buggy/why-does-software-engineering-take-so-long-77a3f1832739
  • 左耳朵耗子