简洁之美-构建数字世界的统一方程式

问及什么是“美”,每个人都会有属于自己的答案。大自然的美就宛如天上的彩虹与浩瀚的星空,人们对于自然规律的认识最早就源于对大自然的观测,基本的规律体现出的就是自然的美;而那些传世画作以及无数优美的乐章则是由人类所创造出的美。

下载自视觉中国

科学可以很美,技术的发展源自科学,也同样具有美感。搜索一下亚马逊的计算机类图书,我们会发现各类以xx之美命名的书籍,从开发人员关注的“编程之美”到“测试之美”以及“算法之美”,架构师推崇的“系统之美”、“集群之美”……

谈论到技术之美,似乎每个工程师都有自己的见解,每个人都能从自己的视角发掘技术的美感。杨振宁老先生说:“科学⾥终极的美是客观的,没有⼈类的时候就已经有这些美了”。尽管技术中会表现出与科学、艺术相似的美感,可是在技术之美中,人表现出的创造力才是技术之美的本源。软件是由人设计出来的,构成软件的每一行代码都直接或间接的由工程师创造,人们工作、生活中使用的各类软件都运行在由人类工程师搭建的基础设施之上。没有⼈类就没有软件技术,也就没有技术中的美。

下载自视觉中国

开发者都需要亲自感受和体验技术之美

理解并感受技术之美是工程师成长历程中不可或缺的一部分。被誉为技术之美的软件设计与代码实现通常来源于前辈们工作中的最佳实践;被推崇为技术之美的项目管理方法与团队协作模式则是凝聚了无数天才的智慧与经验。技术之美充斥在技术开发与研发创新的每一个角落,和艺术家一样,每一个优秀软件工程师都会用自己的方式从不同的维度去书写技术之美。

要理解、感受并学习技术之美,我们应该从哪里开始呢?我给出的答案是 “简洁之美”。

伴随着各行业数字化程度的不断加深,互联网以及各类软件平台承载的业务也必然会越来越复杂,当复杂到达一定程度,软件产品的开发迭代难度将指数级增加,甚至到无法完成交付。在软件设计与项目管理中运用“简洁之美”则是对抗复杂最有效的办法。

软件的“能力增长”与技术的“简洁之美”相互成就

作为一名拥有长达 24 年码龄的 IT 工程师,一名拥有多个用户超千万的平台架构设计经验的架构师,几乎经历了中国互联网与软件行业发展的所有重大节点与多次技术革命,就由我来带大家看一看软件开发行业是怎样从刀耕火种的蛮荒时代一步步走到现在的云原生时代。

下载自视觉中国

最初的美好

早期的程序设计其实并不复杂,编写代码是只属于少数人的游戏,还记得自己通过编码赚取的第一笔收入是帮人写一个用于数据处理的 Pascal 脚本,而报酬则是客户公司按代码的行数来支付换取程序的版权。整个程序开发一个人就能完成,只需要能精确的描述问题,创造合适的数据结构,编写对应的算法,问题很快就能得到解决。

下载自视觉中国

毫无疑问,这样的工作方式和程序代码都是极其简洁的,也是程序员最初喜爱的编程方式,每一行代码你都知道他是如何执行的,每一个函数你都清楚他做了哪些事情;哪怕只有一个函数,也可以是一个完整的程序;每次修改完程序,代码立刻就可以编译运行得到结果,即便有 bug 也能立刻发现并解决。

这样的程序脚本曾经很流行,这是每个程序员都渴望的工作状态,这就是简洁,是无数工程师一直追求的状态。

软件因何变得复杂

随着软件需求越发复杂,软件项目的编码量,开发周期,迭代次数都在不断的增长,成熟的软件产品很难再由个人独自开发完成。

代码量的不断增长,意味着每一次更新代码后都需要更长的时间去编译和构建项目,等待编译的过程从一个哈欠到一根烟、一杯茶、甚至一整天。

多个人协作怎么分工?各自编写的代码如何整合?或许你很难想象,但手工管理代码的时代确实存在过,每个程序员分一个模块,各自编写代码,最后通过名叫“QQ”或者“飞鸽传书”的软件发送给项目的 leader,再由 leader 去把多个人的代码放到一个文件夹下,手动去一个一个 include 其他人开发的模块,其中还可能遇到各种代码冲突,调用失败,编译错误……搞定一切后,还需要再对项目进行打包存档,然后标注好存档的日期和时间。如此繁琐的工作,大量的精力浪费在了写代码以外的事情上。

因为互联网软件与互联网服务的普及,我们开发的软件再也不是只运行在本地计算机里,我们需要配置好远程环境,需要把代码上传到远程服务器,在代码上传后,还需要去处理本地 Windows 与远程 Linux 之间的差异,环境变量、数据库配置……。每次发布一个新的版本,开发团队通常都会选择深夜,每一次版本上线都是一次战役。

遇到上规模的项目,多条业务线并行是常态,通过 SOAP、RPC 等协议构建面向服务的分布式应用(SOA 架构)是实现服务重用的常见办法,但随着项目运营的不断迭代,服务线的增加,服务间相互依赖、耦合的加深,必然会让服务间相互调用变得极其复杂,如果将服务间的关系图像化,你将看到一堆打结的绳子拧巴在一起,把你绑住让你寸步难行,呼吸困难。

下载自视觉中国

这一切的一切都使得软件开发的过程变得复杂,工程师每天大量的时间花在管理代码,编译软件,更改配置等一系列繁琐的工作之上,我们很清楚我们想要的只是回到最初的美好。

在软件和软件开发本身变得麻烦的时候,不断有天才般的工程师站出来解决问题,因为工程师们都酷爱简洁,希望精力能专注于代码编写之上:

工程师希望代码修改后能立即执行,不需要漫长的等待,因此构建工具被开发出来;

工程师希望多人协作也能足够的自由,并且不再为版本合并和分支管理发愁,因此发明的版本管理工具与代码仓库;

工程师希望本地开发和远程生产环境能保持一致,希望在本地开发应用原生为云设计,希望应用在云端以最佳状态运行,因此容器技术、云原生以及DevOps被创造出来;

工程师希望剥离业务将服务中的能力抽象出来,并且将能力变成服务和组件独立维护和迭代,这样就能实现更小颗粒度的代码复用与更高级别的抽象,因此微服务设计迅速崛起,Serverless架构也为更多项目提供了更好的选择。

这些技术的诞生源于工程师对简洁的执恋,而这些技术的普及和发展就要归功于开源社区以及众多技术厂商的交流与协作。

说到这里,不得不提当下引领技术发展方向的重要力量之一:亚马逊云科技(Amazon Web Services),作为云计算行业的先驱,早在20年初就开始布局云计算业务的亚马逊云科技,他们从无数的客户现场获得反馈,他们很清楚开发者遇到的难题。

尽管让复杂的开发过程变得简洁的各个工具都已经被发明出来,但想要通盘使用依然有较高的门槛。

通过开源的Gitlab,开发者能获得一个属于自己的代码托管平台,但Gitlab需要至少一台主机,而且内存不少于8G,哪怕只有一个项目要托管,哪怕项目只编写了一个函数,托管主机的费用都省不了,除此之外,还需要开发者安装配置好ruby环境,安装好数据库,下载好软件源码……,哦,别忘了,Gitlab有更新时,开发者还需要考虑是否要同步去更新自己的Gitlab。

就像你们看到的,事情又又又变得复杂了!!!

除了版本仓库,其他工具也一样,比如容器的镜像仓库,CI/CD 等一系列工具,完整的搭建起开发平台并规范团队的工作流程已经成为一件极具挑战的任务。

技术厂商给予的支持

如果开发者只需要托管代码,那么 Amazon CodeCommit,直接给你一个安全、高度可扩展的托管型源代码控制服务;

将应用容器化,你可以直接将镜像推到 Amazon ECR,拥有一个 docker hub如此简单;

搭建 K8s 集群,从来都不是一个轻松的事情,无论物理主机还是云主机,作为日后软件服务运行的基础,我们不得不全勤投入,Amazon EKS,让我们可以轻松的获得 k8s 集群,Amazon EKS Anywhere 让我们可以通过默认组件配置帮助简化本地 Kubernetes 集群的创建和运维,实现随时随地 K8s 集群管理自动化。Amazon App2Container 能把你多年前部署的传统应用直接打包为容器镜像,应用的部署与集群的管理再次被简化。

厂商给予的支持仅此而已吗?当然不是,如果说有些复杂很难被彻底根除,那么就把这些复杂留给厂商,把简洁重新还给开发者。

上面提到的各类应用已经能解决很多团队当前面临的众多棘手问题,但厂商做到的比我们预想的更多。

DevOps工具链,现代化应用开发“简洁之美”的最佳体验

Amazon CodePipeline,可以实现快速而可靠的应用程序和基础设施更新,只要代码发生变化,CodePipeline 便会构建、测试和部署代码;

Amazon CodeBuild 是完全托管的生成服务,可编译源代码、运行测试以及生成可供部署的软件包。反复配置、管理和扩展生成服务器将成为历史;

Amazon CodeDeploy 可将代码自动部署至任何实例,快速发布新功能,从此告别凌晨三点的版本发布日常活动。

Amazon CodeStar 提供一个统一的用户界面,您可以在此界面轻松管理您的软件开发活动,面对复杂的项目集群,项目运行与开发情况了然于胸。

作为独立的服务,上面提到的这些产品已经十分出色,但这还不够,因为在开发过程中管理和使用一堆产品本身就会增加项目的复杂度。既然我们将发布作为我们的目标,那么按设定的动作自动的逐个使用这一系列软件完成项目的发布将是一件轻松愉快的事情,而这一系列的软件就构成了 DevOps 工具链。

下载自视觉中国

拥抱简洁,我们应该行动起来

类似亚马逊云科技这样的企业,他们服务了无数的技术团队,无数的技术团队又反馈给他们最真实贴切的需求,当这些需求演变成相应的技术产品和服务以后,引领了技术的发展再次回馈开发者。

文章中所提到的技术创新和产品只是众多大厂产品和服务中的很小一部分,从大厂的产品和服务中,我们能看到当前技术的最前沿成果和发展趋势,获得行业沉淀下来的成果,汲取最佳实践,如果此刻你还没有尝试过我所说的这些产品和服务,还没有体验过现代化的应用开发,没能真正感受过简洁之美,那么你应该立刻行动起来,亲身投入到应用现代化的大潮之中。

报名开启 | 自由构建 探索无限

亚马逊云科技2022 Dev Day重磅来袭,不容错过!

多位大咖现身说法

如何用充满“技术美感”的方式

帮助开发者

实现更简单、自由、高效的开发

此外,还有大量专家观点碰撞

技术展、创新赛、动手实操等环节

精彩不断,干货满满

携手大家一起“自由构建,探索无限”

原文地址:https://www.toutiao.com/article/7136024853366178342/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340