当前位置: 首页 > 新闻资讯 > 行业新闻 > 关于软件开发,都应该知道的5个常识(上)

关于软件开发,都应该知道的5个常识(上)

发布时间:2020-01-14        阅读:125

    2011年,马克·安德列森(Marc Andreessen)写了一篇文章,预言“软件吞噬世界”。观点主要有两个:第一,许多传统业务正在被软件公司所取代;第二,所有其他公司都发现,他们所提供的价值越来越多地来自软件系统。

在安德森撰写这篇文章时,市值最大的10家公司中,没有一家是从事软件驱动业务的。如今,10家最大的公司中有6家主要由软件驱动,而其他4家也已经准备好了转型。

 

    Stack Overflow和LinkedIn列出非技术公司的软件工程招聘广告超过了科技行业本身。这是经济发展中的一个重大转变,表明公司正在加强他们的软件工程实践。

 

    会计和软件,哪一个对公司更重要?本文没有答案。但是现在许多不认为自己是软件公司的公司也开始发现:软件系统是他们运营的一个关键组成部分。

 

    如果CEO和各级管理人员不了解软件,那么他们将是可有可无的。这要么会限制他们的职业发展,要么会对公司业绩产生负面影响。不管怎样,不了解软件都注定要失败。(据Gartner预测,到2020年,有50%的首席信息官(CIO)将被取代,因为他们没有变革公司的能力。)

 

本文列出了管理者应该知道的5个常识:

  1、软件不是魔术

  2、软件永远不会“完成”

  3、软件开发是团队作战,没有人能做所有事情

  4、设计不是外观,而是工作原理

  5、安全是每个人的责任

 

关于软件,本文认为这是所有管理者都需要知道的5件最重要的事情:

1. 软件不是魔术

 

    软件不是魔术。虽然它看起来像魔术,或者是魔法,但它不是魔法。每一个元素都是由人设计的,都有其数学基础,或者是可以用人类语言解释的过程。

 

    与魔术不同,软件不是凭空变出来的。它需要设计、构建和维护。就像房子有多种系统一起工作(地基、结构、管道、房间、家具等等)那样,软件系统也需要许多层和子系统来创建整个系统。它可以设计得很好,也可以设计得很差,而且快速的设计很少能持久。

 

    如果人们不能用语言来描述它会做什么(包括想要的结果和如何实现),那么计算机也无法做到。“how”被称为算法,这并不神奇。

 

    机器学习和其他人工智能技术也并不神奇。机器学习是基于数据的预测,而不是显式的规则或指令。它一般是用线性代数来做的。如果有100万张已知的香蕉照片和100万张没有香蕉的照片,一个训练有素的机器学习系统看一张新照片,会根据它从之前的照片中学到的知识告诉你它看起来像第一组还是第二组,这不是魔术。使用机器学习根据过去的招聘决定对简历进行排序,即使没有任何故意的偏见,也可能会放大经验主义的招聘历史。

 

2. 软件永远不会“完成”

 

    软件永远不会“完成”,软件是一个迭代的过程,在其生命周期中包含许多修订和更新。我们的工作是创造一个能认识到这一点的环境。

 

    同样,我们从来没有期望市场营销和客户获取是“完成的”,它们也是迭代过程。在每个迭代中,随着我们不断地为业务交付价值,我们也不断地学习和成长。即使已经做了一些成功的发布,我们从来没有打算“停止”做这些事情。

 

    如果软件可以在一个版本中完成就好了,但这不是现实。需求文档充满了模糊性,软件的第一个版本充满了“哦,那是我写的,但不是我的意思”的场景。最好的软件能激发新的想法和功能需求,看到新的销售管理系统更加高效,就会激发出更高的效率。世界在变化,竞争对手提供了新的功能,人们就有了新的想法。另外,总是有一些bug需要修复:可能是在代码中,也可能是在构建代码的底层软件框架和系统中。某些软件可能是完美的,但可以确信的是,随着时间的推移,人们会发现它所构建的平台存在各种漏洞。

 

    我们的工作就是让一个组织能够认识到这一点。

 

    认识到这一点的方法是建立一个有信心定期发布新版本的组织。当完全自动化测试和其他工程规范就位时,我们就建立了信心。这种信心创造了一种能力,可以避免过长的发布周期,而是每季度、每月甚至每周发布高质量的软件。特定的频率并不重要,但是信心很重要,自信能够带来更快的创新。

 

3.软件开发是团队作战,没有人能做所有事情

 

    软件开发是团队作战,开发人员既不是产品经理,也不是UX(用户体验)设计师,也不是质量工程师、分析师、安全专家、技术作家或运营工程师。组织需要所有角色。

 

    没有哪个管理者会建议每个销售(sale)人员都做营销(marketing)及PR,否则就解雇销售团队(因为营销人员了解产品,也能做销售)。营销和销售是相关的,但又是不同的。因此,两者之间存在着分工。

 

    同样,开发团队需要独立的人员来收集需求、质量保证和测试、代码编写等等。

一个开发人员可以“做所有事情”的神话,称为“全栈开发人员”或“10x工程师”,这一般只存在于小公司。是的,一个非常小的公司可能一个人同时做营销和销售,但你可能不会加入这样的小公司。

 

    不要用自己的兴趣去挑战别人吃饭的专业。一个小孩“擅长Facebook”并不意味着他或她会成为下一个扎克伯格;一个小孩对工程学很感兴趣并不意味着他或她可以能够使用微积分;一个小孩能够自己做了一个网站并不意味着这个网站每小时可以处理数十亿的金融交易。

 

4. 设计不是外观,而是工作原理

 

    史蒂夫·乔布斯有句名言:”设计不只是外表和感觉。设计就是工作原理。“ UX设计师不会坐下来决定菜单的颜色,或者决定按钮是圆形还是方形,他们决定工作流和交互是什么。

 

    用户会看到一个有三个选项的屏幕,还是一个屏幕只显示一个选项?这个设计决定需要心理学、对用户的同理心,以及测试、测试、再测试。

 

    UX设计的最大挑战之一是,一旦你熟悉了系统,就失去了预测新用户的能力。设计该系统的人在预测新用户的需求时将自动被取消资格。UX可能很漂亮、优雅,可以与一件艺术品相媲美,但是请UX设计师将背景更改为帆船的图片是没有帮助的。

 

    我们的工作是信任测试数据而不是主观臆测,创建一个环境,在产品发布之前计划进行多次修订,并期望在产品发布之后进行进一步的改进。不要将UX设计人员与图形设计人员混淆。让UX计师设计公司节日贺卡和让技术作家写公司通讯是一样的失礼行为,这些是不同的技能。

 

5. 安全是每个人的责任

 

    不管知不知道,无论愿不愿意,我们都是从事安全行业的。所有软件都有安全需求和潜在的安全漏洞。开发软件所涉及的系统也有安全需求和漏洞。虽然防火墙和入侵检测等安全的基础设施组件是必要的,但它们还不够:还必须使用内置的安全控制来设计、实现和维护软件平台。安全既是好的技术,也是好的流程。

 

    如果认为我们不是被攻击的目标,那就错了。所有的计算机系统都是被攻击的目标,因为攻击不仅是为了其中的信息,而仅仅是它是一台计算机这样的一个事实。例如,一个没有价值信息的系统是网络攻击目标,因为它可以被用来转发对其他计算机的攻击,或挖掘比特币,或存储他人的盗版视频。

 

    安全不是打开/关闭这样按钮,有许多灰色地带。安全性最好从一开始考虑。事后的亡羊补牢是昂贵的,而且往往是无效的。我们不会先造一艘船,然后再“添加”一种让它漂浮的功能。同样,也无法先构建一个系统,然后按下“具有安全性”按钮就安全了。

 

    安全是关于风险和对风险的容忍度。对两个节点之间的通信进行加密并不能保证它的安全性,但它提高了安全性,只有超级算力才有可能破解密码。在一个领域降低风险对其他领域没有帮助。保护网络并不能防止物理安全问题。一个人撑开一扇门,其他人就能偷走你的备份磁带。

 

    正如吉恩·斯帕福德(Gene Spafford)的一句名言:”唯一真正安全的系统,是一个关了电、浇铸在混凝土里、由全副武装的警卫把守在绝缘房间里的系统——即便如此,我还是心存疑虑。“

 

    遵守NIST CSF(国家标准与技术网络安全框架学会)、PCI DSS(支付卡行业数据安全标准)和SOC 2(服务组织控制报告)等安全标准可以量化风险,如果做得合适,还可以降低风险。这些标准并不能保证绝对安全,绝对安全是不存在的。更重要的是,它们为如何负责任地应对和报告不可避免的安全漏洞提供了指导。诚实、直率、公开是良好的建议。

 

    软件,如果不管它,就像面包一样变得陈旧。我们的工作是平衡安全妄想与现实,并适当预算时间和资源。

在线客服

  • 销售客服1: QQ
  • 销售客服2: QQ
  • 027-59761867
  • 17786528309