程序员:软件开发是变魔术?
点击上方“阿拉奇学Java”,选择“置顶或者星标”
优质文章第一时间送达!
参考链接:https://queue.acm.org/detail.cfm?id=3325792
Netscape创始人、硅谷著名投资人马克·安德森(Marc Andreessen),在华尔街日报上发表过《软件正在吞噬整个世界》文章称,当今的软件应用无所不在并且正在吞噬整个世界。这篇文章分析了目前科技行业发展趋势和原因。StackOverflow和LinkedIn列出非技术公司的软件工程招聘广告超过了科技行业本身。这是经济发展中的一个重大转变,表明公司正在加强他们的软件工程实践。现在许多不认为自己是软件公司的公司也开始发现:软件系统是他们运营的一个关键组成部分。如果CEO和各级管理人员不了解软件,那么他们将是可有可无的。这要么会限制他们的职业发展,要么会对公司业绩产生不好影响。不管怎样,不了解软件都注定要失败。(据Gartner预测,到2020年,有50%的首席信息官(CIO)将被取代,因为他们没有变革公司的能力。)
本文列出了管理者应该知道的10个常识:
1.软件不是魔术
2.软件永远不会“完成”
3.软件开发是团队作战,没有人能做所有事情
4.设计不是外观,而是如何工作
5.安全是每个人的责任
6.feature大小并不能预测开发时间
7.伟大来自于成千上万的小进步
8.技术债很讨厌,但不可避免
9.软件不会自己运行,需要运维
10.复杂的系统需要DevOps才能良好运行
1.软件不是魔术
软件跟魔术不同,软件并不是凭空捏造的。它需要设计、构建和维护。就像房子有多种系统一起工作(地基、结构、管道、房间、家具等等)那样,软件系统也需要许多层和子系统来创建整个系统。它可以设计得很好,也可以设计得很差,而且快速的设计很少能持久。软件是无形的,没有物理形态,只能通过运行状况来了解功能、特性、和质量。软件渗透了大量的脑力劳动,人的逻辑思维、智能活动和技术水平是软件产品的关键。简单的说软件就是程序加文档的集合体,所以说软件不是魔术。
2.软件永远不会“完成”
在软件开发过程中,我们不可能一开始就实现软件系统所需要的所有功能。初期的产品可能并不完美,会出现各种bug或体验不完善的地方,但后期会通过客户或者用户的反馈信息,慢慢对其进行完善。在互联网的时代,服务和产品都在消费者需求的不断变化中成长,成功的产品就像一场蝶变,在蜕变的风暴中越显完美。某些软件可能是完美的,但可以确信的是,随着时间的推移,人们会发现它所构建的平台存在各种漏洞。世界上根本没有能一劳永逸的产品,更没有所谓的正确产品(软件永远不会“完成”)。
3.软件开发是团队作战,没有人能做所有事情
社会分工可以促进生产力的发展,同样,一个开发团队做好分工就可以很好地完成任务,提高效率。如果一个开发人员可以“做所有事情”的话,会被称为“全栈开发人员”或“10x工程师”,这一般是小公司。一个非常小的公司可能一个人同时做很多事情。但你应该不会去这样的公司。当今社会,各种知识、技术不断推陈出新,但仍然需要团队合作,众人拾柴火焰高。单靠个人能力是不能有效的完成任务的。共同合作,提供效率,依靠团队合作的力量创造奇迹。
4. 设计不是外观,而如何工作的
史蒂夫·乔布斯有句名言:“设计不只是外表和感觉。设计就是工作原理”。用户对产品的使用就是人与产品交互,这种交互通常是各式各样的按钮、外形、颜色和布局,人们通常所谈论的用户体验,就是着眼于这些交互的细节。具有良好用户体验的产品,能让用户在没有说明书的情况下流畅使用产品。用户体验的最终状态需要技术来实现,技术包括硬件和软件两个方面,用更好的技术给用户带来更流畅的体验。
5.安全是每个人的责任
无论我们从事什么行业,网络安全都是与我们相关的。所有软件都有安全需求和潜在的安全漏洞。开发软件所涉及的系统也有安全需求和漏洞。虽然防火墙和入侵检测等安全的基础设施组件是必要的,但它们还不够:还必须使用内置的安全控制来设计、实现和维护软件平台。
正如吉恩·斯帕福德(Gene Spafford)的一句名言:”唯一真正安全的系统,是一个关了电、浇铸在混凝土里、由全副武装的警卫把守在绝缘房间里的系统——即便如此,我还是心存疑虑。”
安全是全社会共同责任,需要政府、企业、社会组织、广大网民共同参与,共筑网络安全防线”。关心网络安全,就是关心个人的安全。
6. feature大小并不能预测开发时间
feature大小(用户感知到的)与创建feature所需的时间完全无关。小feature可能需要几天或几年的时间,大feature(用户感知到的)也可能需要几天或几年的时间。我们的工作是创建并支持一个软件开发过程,该过程接受这个事实,并且不是拍脑袋评估工程量。工作量评估本身可能需要很长时间。同时预测不了精确的未来。当前的架构大多只能支撑一段时间的需求,时间一旦变长,架构就会支撑不了,从而出现一些奇怪的实现。所以在没有与工程部门协商工作量的情况下,永远不要承诺某个feature。
7. 伟大来自于成千上万的小进步
谷歌浏览器大家都知道,但是谷歌也不是一天建成的。谷歌的搜索引擎是数百万个人改进的结果。搜索质量小组每周开会一次,工程师们走上讲台,提出他们的修改建议。他们展示了在模拟的环境中会有多大的改进,委员会进行辩论并投票表决。几周后,将对测量结果进行评审,并决定保留或回滚更改。谷歌搜索是迭代开发战胜“数据大爆炸”思维的胜利。谁都不可能在一开始就做出一个好的搜索引擎。
托马斯爱迪生声称在制作灯泡的过程中测试了1000根灯丝。当一位记者问道:“1000次失败感觉怎么样?”他回答说:“我没有失败1000次。灯泡是1000步的发明。”
同样构建软件的过程和使用软件的过程也是如此,一步一的改进才能达到人与软件更好的交互。
8. 技术债很讨厌,但不可避免
技术债务是将来需要做的工作,因为我们现在选择了一个更简单的解决方案,而不是使用一个需要更长时间的更好解决方案。任何合理规模的软件项目都有技术债务。技术债务让所有的进步都变得更慢,越忽视它,它就越像滚雪球一样越滚越大。就像设计系统架构时,选择了比较简单快速的,导致目前的架构大多只能支撑一段时间的需求,时间一旦变长,架构就会支撑不了。
9. 软件不会自己运行,需要运维
软件自己并不会运行。任何基于软件的系统(特别是网站和web应用程序)都需要运维人员和运维流程。运维(通常称为非功能需求)对用户是不可见的,除非作为二级需求。数据备份是非功能需求中一个很好的例子。没有用户请求数据备份,但是,用户要求恢复已删除的数据。如果,没有备份就没有恢复。备份就是一种运维(非功能)需求。软件维护阶段覆盖了从软件交付使用到软件被淘汰为止的整个时期。软件的开发时间可能需要一、二年,甚至更短,但它的使用时间可能要经历几年或者几十年。所以说想让软件运行就需要运维。
10. 复杂的系统需要DevOps才能良好运行
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。他们必须跨职能团队进行协作。DevOps这个名字来自于移除开发人员和运维(IT)之间的隔阂,这对于实现快速的发布是绝对必要的。然而,优秀的DevOps环境将其扩展到跨所有职能团队的端到端工作。
String没那么简单!
Java Robot:女友的小暴脾气
------长按二维码关注程序媛------