• 发文
  • 评论
  • 微博
  • 空间
  • 微信

云时代的软件开发

EAWorld 2021-08-11 11:23 发文

转载本文请注明出处:微信公众号EAWorld

随着云计算的发展,软件开发正在发生翻天覆地的变化。2020年,随着新冠病毒在全球的肆虐,更是极大改变了各个行业的形态和运作方式,加速了云计算在各个领域的应用。今天我们就和大家一起来看看后疫情时代,软件开发的新形态和工具。

办公室

公司的意义在于能把优秀的个体聚集在一起,完成超越个体所能创造的价值。办公室的存在,是这些个体合作的一个基础。刚哥经历过各种各样的办公室环境,不论是上海高大上的陆家嘴/人民广场的写字楼,还是张江/五角场创新软件园,亦或是类似共享办公这样的办公室,软件公司的这些办公环境大都不错。当公司高速发展的时候,也曾遇到过办公室座位不够用的情况,三个人挤两个位子,临时征召会议室都发生过。

关于办公室,一个有趣的故事是,当年我在某个存储大厂工作的时候,周末在公司加班,隔壁组的兄弟因为时候,腿受伤了,缠着绷带,但是仍然来公司加班,就坐在我旁边。可是办公室的天花板因为漏水,出现一些问题。正当这位兄弟在自己座位上努力工作(mo yu)的时候,天花板塌了下来,这位兄弟拖着伤腿,躲避不及,场面甚是壮观(大家脑补)。办公室一定要靠谱!

后疫情时代,在家办公成了常态。办公室不再是码农们聚集的场所。硅谷的各大软件厂商已经开始尝到了居家办公的甜头,纷纷取消租赁的办公室,把职位转移到成本更低的城市。对于码农来说,在家工作的挑战并不小,虽然省去了通勤的时间和消耗,但是需要屏蔽家中各种各样的干扰和诱惑,这并不简单。

计算机

刚哥的第一台电脑是一台486,4M内存,66MHz主频,配备有CRT显示屏的杂牌机。当时还配备有先进的光盘驱动器,不过这个驱动器有一个大的问题,就是用用,他的激光头就不太好用了,经常读不出我花5元在中关村买的那些劣质的盗版光盘。我工作后的第一台电脑,是一台Intel CPU的带有CRT显示器的电脑,但是因为我们的服务器需要运行HP的Unix,所以我们还配备有一个小型的HP Unix的工作站,因为要和不同的厂商进行接口的联调,这台小型的工作站随着我走南闯北,去过兰州,武汉,成都等各大城市。我还记得这台工作站的名字,叫“tango”。“tango”的质量很不错,在飞机上托运经常被摔的外壳都移位了,但是从来没有出故障。

在云时代的软件开发,配备笔记本电脑应该算是标准了,苹果的Macbook很受码农的青睐。当然,你的主力计算资源应该要上云了,AWS的EC2,阿里云的弹性计算,华为云的弹性计算服务器取代了我之前提到了虽然还算小巧,但是带着走还是很费劲的“tango”。云计算服务器因为其灵活性,被越来越多的用户所采用,尤其对于创业企业和小型企业来说,可以节省组建IT部分的开销,计算资源按照需要采购,非常敏捷。

会议和协同

你知道码农一天的主要时间花在哪里吗?没错,是开会!

你知道软件公司里最为紧俏的资源是什么吗?没错,是会议室!

我们都熟悉人月神话中的故事,如果一个软件项目需要10个人干10个月,那么给你100个人,是不是一个月就能拿下呢?如果你了解软件开发,你应该知道,如果真的给你100个人,这个项目大概一辈子也干不完。随着更多的开发人员加入到项目之中,协同的成本成指数级别上升,每次开会的内容就变成了确定为什么上次的会议没有解决问题,和下次的会议到底能不能解决问题。

后疫情时代,因为很多人都是在家办公,远程会议成了不可或缺的选择。早期的会议系统有很多,类似CISCO的webex。现阶段,Zoom因为其产品的易用性,发展非常的迅猛。国内的腾讯会议也很好用。开远程会议变得相当的简单。

除了会议,还有很多协同办公的工具。像最近被Salesforce收购的Slack,在硅谷非常流行,你可以理解他就是企业微信。国内的大厂几乎都有自己的协同办公的工具,像华为有welink,腾讯有企业微信,字节跳动有飞书,360有推推。

总之,远程会议系统解决了需要当面交流的情况,而协同办公中的即时通信工具解决了需要离线沟通的情况,交流并没有因为大家不在一起而变少。

设计

设计在软件行业的地位越来越重要,这里不得不提到乔布斯带领下的苹果对设计理念的影响。大家可能觉得苹果公司是一个硬件公司,他的外观设计非常棒。我想说,苹果本质上是一个软件公司,他的硬件确实很不错,但是光有出色的硬件是很难成功的,我们以手机为例,华为,小米,从硬件上来看并不输于苹果,甚至在很多的方面要更强,但是苹果凭什么要卖出远高于竞争对手的价格呢?这里的根本原因是,苹果利用其强大的软件功能构建了一套庞大的生态系统,苹果的软件才是它赖以生存的根本。而苹果的软件的优势就是设计,这里的设计指的是用户交互和体验的设计。

传统的企业软件并不太重视用户体验的设计,但是随着广大的用户被越来越好用的软件使用所培养,企业用户也开始重视软件的易用性,这个时候,设计变得无比重要。

Adobe是设计领域毫无争议的领军者,它的设计套件是广大设计师手中的利器。Adobe在云时代转型也不可谓不成功。但毫无疑问的是,他的领导者地位,正在被云SaaS厂商所挑战。

Figma是一款界面设计协作工具,它会将项目时刻保存在云端,这样一来就可以保证多方用户能对设计进行实时评论或修改。2015年12月,Figma宣布获得1400万美元A轮融资。最近Figma 在其官方博客宣布完成了最新E轮2亿美金的融资,估值达到了100亿美金,而去年5月份 a16z 领投时,其估值才20亿美金,相当于一年时间估值增长了5倍。

国内的跟风者也不在少数,这其中做得比较好的有:即时设计、蓝湖、墨刀、Pixso

云时代的设计软件,大都提供非常方便的协作功能,把构建生态系统作为核心,提供大量的设计素材。刚哥是个码农,不敢对设计软件妄加评论,建议大家选择适合自己的设计工具,我想说的是在云上,这些工具的试用成本都很低,基本都有免费的使用计划,大家可以放心去试用。

知识管理

培根说:“知识就是力量”

程序员是软件知识的所有者,是软件的力量来源。软件行业虽然还是一个非常不成熟的行业,但是这并不妨碍软件知识以惊人的速度发展着,如何管理好这些知识,避免当一位核心程序员离职或者生病,整个公司就垮了的情况,对于知识管理的需要,是非常的墙裂的。

早期的知识管理,通常是使用微软的Word/Excel/PowerPoint这些软件,不得不承认,这些软件非常的强大,以至于今天,仍然在被非常广泛的采用。在我的上一家公司,仍然在大量使用这些工具来管理软件的文档和知识。

云时代的知识管理走向云端是不可逆转的趋势。我们看看有哪些云上的选择。

Notion是一款提供笔记、任务、数据库、看板、维基、日历和提醒等组件的应用程序。用户可以将这些组件连接起来,来创建自己的系统,用于知识管理、笔记记录、数据管理、项目管理等。这些组件和系统可以单独使用,也可以与他人进行跨平台协作。2020年4月,在新冠背景下,Notion凭借400万用戶以20亿美元的估值融资5000万。是云笔记独角兽。

当然澳大利亚Atlassian旗下的Confluence的功能也是非常强大,在企业里非常流行。不过他已经停止了对中国的销售。类似的情况还有谷歌文档,虽然功能强大,但是国内无法访问。微软的Office 365可能算是一个替代产品。

国内的情况,我个人比较推荐蚂蚁的语雀,我的这篇文章,就是在语雀上完成的。当然,国内的玩家很多,还有wolai 我来,石墨文档等供大家选择。

项目管理

软件项目的管理的水平是软件项目成功的关键因素之一,早期的软件项目最为流行的项目管理方法CMM现在已经没什么人提及了。现在,敏捷和Scrum是绝大多数软件项目的管理方式。所以项目管理的工具也从早期的微软的Project到现在最为流行的Jira(同样是上文提到的澳大利亚公司Atlassian出品的)。项目管理的内容也从之前对于大的任务分解追踪的甘特图模式,到新的看板模式。

我记得我在第一家公司工作的时候,我们同事,也是我和一起从北邮毕业的,被我的领导安排做一个项目管理系统,用类似ASP之类的技术搞了几个月,做了一个我感觉也还不错的项目管理系统。也就是说其实做类似这样的系统,大家都有需要,而且技术上,挑战并不大。做类似敏捷项目管理和看板系统的SaaS软件工具非常多,我简单列出一些:

PingCode是简单易用的新一代研发管理工具,覆盖敏捷开发、测试管理、项目集和知识库,让研发管理自动化、数据化、智能化,帮助企业提升研发效能。是国内对标Jira的款产品。

ONES旗下的团队协作工具Tower

国外知名的看板工具Trello。Trello 据说拥有 1900 万注册用户。国际红十字会、谷歌公司都在用。

Asana 是美国宇航局、纽约时报、德勤和红牛信任的项目管理和看板软件。

领歌 leangoo,这个领歌我小规模试用过,我觉得功能简单方便,还不错,大家可以试试看。

代码设计

有朋友会问,架构师写不写代码?不写代码,架构师都干什么?

至于写不写代码,不同的架构师可能有不同的情况,但是当架构师不写代码的时候,他经常需要做的事就是-画画。

各种软件设计的架构图是架构师必须要掌握的,使用简单易懂的图表让原本复杂的软件设计和架构变得一目了然。早期软件设计画图用的比较多的是IBM收购的Rational Rose和微软收购的Visio。Rational背后是基于UML的一套软件设计专用的图体系。而Visio不仅仅能用于软件开发,还可以以用于通用的需要绘图设计的场景。

国内有一个Visio的复制品亿图软件,做得也相当的不错。不过云时代,走向云端是必然。刚哥这里推荐一些云端绘图的替代产品:

Draw.io Diagrams.net/draw.io 是基于开源技术构建的图表应用程序,也是世界上使用最广泛的基于浏览器的最终用户图表软件。他背后的公司是英格兰的JGraph Ltd.这家公司业内并不算知名,但是这个领域应该是大有可为的。

Lucidchart是基于Web的专有平台,允许用户在绘图,修订和共享图表和图示方面进行协作。它背后的公司是位于美国犹他州的Lucid Software Inc.

另外推荐一个轻量化的UML工具 planttext,他的理念是软件架构图及代码。

asciiflow是另外一款我推荐给大家的软件设计绘图工具,它绘制的结果可以转为ASCII代码,可以方便的嵌入到你的代码中。

代码编辑器/集成开发环境

码农,码农,自然要以码代码作为第一要务。不能整天不务正业的画画。工欲善其事,必先利其器。写代码,怎么能不选一款趁手的IDE呢?

抛开Unix/Linux上的Vim/Emacs不说。代码编辑器可谓种类繁多,有专属的,通用的,文本的,所见即所得的等等。Visual Basic作为一个奇怪的语言,能够在编程排行榜上居高不下,微软的Visual Studio功不可没。早年有一款牛逼语言和编辑器,叫Delphi。他是美国Borland旗下的面向对象的Pascal语言的集成环境,一度在程序员中非常流行。我之前在团队会议中,曾经问起我们团队的人,大家知不知道这个Delphi(因为讲到德尔菲神庙的故事)。结果出乎我的意料,没有一个人知道。江湖上,连传说都没有留下。一方面,软件业发展迅速,前浪早早的无隐无踪,另一方面,刚哥太老了,和年轻的码农之间有巨大的代沟。

刚哥用得比较多的软件IDE是微软的Visual Studio Code,之前是SublimeText。然而在云时代,软件IDE上云也是不可避免的。我们一起来看看都有哪些选项。

gitpod,gitpod有点像是在云端的VS Code,它可以直接链接你在github上的代码,在云端上编辑,并给出一个容器化的开发环境。我觉得这个应该是未来软件开发的一般形式。

repl.it , 这个是我比较喜欢的一个代码环境,他可以直接在网上创建开发环境,进行代码的协作,共享,编辑。你可以很方面地把它用于代码的review或者是面试。它支持非常多的语言的类型。之前我学习Rust,都是在Repl上完成的,不需要在本地安装任何环境,真的非常方便。

CodePen是检验和展示用户创建的HTML,CSS和JavaScript代码片段的在线社区。Codepen是我非常喜欢的代码分享的平台,可以很方便的分享前端的代码。我在codepen上发布过不少代码示例。

codesandbox,随着前端开发的越来愈复杂,codepen这样的工具有点力不从心。codesandbox能够提供更完整的工具链和开发体验,它可以看作是VS Code的前端开发网页版。

代码测试

软件测试是软件开发环节中非常具有挑战的一个环节。早期的软件测试基本靠手(码农手工打造),云时代,软件测试必然是走向自动化,规模化和智能化。云时代有非常多的软件测试工具涌现出来。这个会是一个很大的话题,我们可以找时间细说。

持续集成和发布

CICD应该算是云时代的软件的特征,但是对于CICD的需求应该在软件行业存在已久。

Bamboo和Jenkins应该是这个领域里比较老资格的玩家了,其中Jenkins现在还是非常的流行。但是他们还是沿用了旧时代的架构。其中Jenkins是基于Java servlet的架构,比不适合在云上的大规模部署。Bamboo倒是被Atlassian收入旗下,和自家的bitbucket结合,提供一整套云上解决方案。但是同样是基于Java开发的Bamboo也面临着其它新时代的CICD工具的挑战。

CICD本质上是一个自动化的工作流系统,在软件开发的过程中,我们希望任何能够被自动化的东西,都应该被自动化。云时代,我们更多会使用容器作为任务调度的基本单元。例如Gitlab内置的CICD,就是以容器为调度单元,同时和gitlab高度集成,使用起来非常的方便。另外,Codeship这是提供了以容器为核心的调度。这一类的以云原声设计的SaaS架构,应该代表了云时代,CICD的趋势和未来。

总结

“软件会吞噬一切,而云是大部分软件的最终归宿。”

我们看到在软件开发的各个环节上,云化是一股不可逆的潮流,凡是能够SaaS化的软件最终都会走向云端。未来会有更多的云端软件来支撑软件开发,这也使得软件开发的交流,协作变得越来愈容易和紧密,生态越来越活跃。作为一个码农,我觉得这是一件非常有趣而幸运的事,软件开发变得更有趣,更容易,更具魅力。

关于作者:陶刚,Splunk资深软件工程师,架构师,毕业于北京邮电大学,现在在温哥华负责Splunk机器学习云平台的开发,曾经就职于SAP,EMC,Lucent等企业,拥有丰富的企业应用软件开发经验,熟悉软件开发的各种技术,平台和开发过程,在商务智能,机器学习,数据可视化,数据采集,网络管理等领域都有涉及。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    EAWorld

    微服务,DevOps,数据治理,...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码