关于软件开发:我正在使用React-Native-Expo-开源一个精美的电商购物应用

<article class=“article fmt article-content”><p>https://www.bilibili.com/video/BV1XK42147Mo/?aid=1701456280&c…<br/>应用技术</p><ul><li>React Native</li><li>Redux Toolkit</li><li>RTK Query</li><li>Expo Router</li><li>NativeWind</li></ul><p>开源地址:https://github.com/huanghanzhilian/c-shopping-rn</p></article>

March 4, 2024 · 1 min · jiezi

关于软件开发:如何选择科技公司或者技术团队来开发软件项目呢

最近有客户问咱们为什么同样软件我的项目不同公司报价和工期差别很大,咱们给他解释良久才讲清楚,明天整顿一下打算写一篇文章来总结一下,有须要开发敌人能够参考,咱们下次遇到客户也能够间接转发文章给客户本人看。咱们依据咱们本人报价时参考的参数来剖析,有的可能因素可能是咱们没有作为参考,其余公司可能会拿来做参考,所以咱们以下的参数仅当一种思路参考:1.公司技构架,科技公司应用的技术栈决定了投入开发成本,同样的软件抉择不同技术栈须要的人员和配置硬件设施反对不同。如果您找的公司的技术框架是从大厂进去的,他大概率会在大厂施行规范给你设计,服务器就得有运行服务器、备份、一级二级容灾服务等等。不是说这些不好,只是这样搞下来老本你顶不住,所以找开发公司要你须要做的我的项目级别对应。2.技术栈即抉择开发语言,比方java尽管是说他开发资源、应用广。可它可发速度,内存耗费,保护等老本比拟高,php就开发速度快,可他不可编译、性能差等不不倡议抉择。从咱们这几年技术抉择中咱们找到Go语言能兼顾开发效率和软件性能。3.公司开发治理,公司研发管理制度也会影响软件开发效率,有一个好的研发流程治理流程及我的项目激励机制治理会间接进步开发速度。比方华为花重金请对手IBM公司为其打造研发管理制度。4.公司规模,公司规模大小也间接影响其公司经营产生老本,比方公司场地费、公司人员配备、公司软根底投入(广告、文化、培训)。5.公司领导是否懂技术,这个不是百分百会影响,但很多公司领导不懂技术导致我的项目周期长是常产生的,所以咱们把他当成一个因素。6.公司技术实力,一个公司或者团队的技术能力可间接影响到我的项目开发效率和品质。抉择一个技术能力强的团队能够保障我的项目高效交付、软件品质也不当心。7.公司股东或合伙人,不同公司性质须要的利润点不一样,比方上市公司和小公司利润点相差就大。这里能够依据您实例抉择对应公司实力。以上使咱们目前思考到的几个因素,后续咱们会持续补充。有须要的敌人能够持续关注gofly团队,咱们持续给您分享更多软件开发教训。

February 27, 2024 · 1 min · jiezi

关于软件开发:华为云软件开发生产线CodeArts前端DevOps实践

原文链接:https://support.huaweicloud.com/reference-devcloud/devcloud_r... 本文次要以CodeArts产品本身为背景,简要介绍一些在前端性能优化方面的优良实际办法和常见问题。 在开始本文的内容之前,先简略介绍一下华为云CodeArts。CodeArts是华为云一站式云端DevOps平台。简略来说,就是在云端提供了从需要到运维的端到端DevOps工具链。CodeArts的目标是为研发团队进步研发效率,升高研发老本。 本文的主题是前端的性能优化,而性能优化的解决过程与一个希腊神话故事非常相似。这个故事讲述一个名叫西西弗斯的国王,因为犯了谬误,被惩办在一座山坡上不停的推石头。这位国王不停推石头的过程,与咱们继续的进行性能优化的过程很像,而石头就是咱们要不停优化的问题,发现有问题又要从新来,或者一步一步来。简直所有大型网站在做性能优化的时候,可能都是在反复的推那个大石头。 咱们为什么要做性能优化?上面让咱们来看几个数据: 第一,40%的用户如果在一个网站加载时长超过三秒之后就会来到这个网站。<!----> 第二,用户转换率和网站的响应工夫进行关联的后果根本是,响应工夫越高,性能越差,转换率越低。之前在知某乎上有一个很闻名的探讨,有集体分享他把网站的响应工夫从10秒进步到2秒,效率进步500%的心得和过程。过后很多人评论他讲得好,但还有更多人批评这个问题,起因就是为什么你最后可能容忍一个响应工夫为10秒的产品上线?其实很多团队都存在这样的问题,每天聚焦在做优化的事件,反而疏忽了第一次的10秒是怎么产生的。就如同西西弗斯的那个故事里的大石头,它为什么会呈现?比方忽然有一天咱们被告知,用户说网站性能太差,无奈承载响应的需要,这个时候团队外部才决定痛定思痛,好好做网站性能优化的事件。第一步往往是对网站进行剖析,看是否找到其中的问题是什么。而后通过这些问题逐渐去剖析,并且做大量的技术验证,去定位并确定问题,这一步帮忙咱们晓得这个石头是怎么来的。在这个阶段,让咱们来看看有哪些好的实际。 首先,尽量利用一些第三方的平台工具,例如谷歌的Page Speed和YSlow、Lighthouse。这些工具提供了很多对于繁多利用的查看项。用好第三方平台工具,可能疾速对你的网站进行测验,去发现这里是否有问题,而后给咱们某一个维度的检查报告。咱们不能也全副依赖于工具的测验后果,也须要基于业务自身去一个一个验证,得出一个优化的论断,每一环验证好打上勾,最终的后果呈现出性能的晋升。咱们在晋升的过程中往往发现,很多问题是标准方面的有余,这时就须要思考为什么在开发过程当中会犯这样的低级谬误。 基于后面的过程,团队往往会组合出适宜本人的工具链。但当咱们一次次的开始推咱们的这个大石头时,会发现石头特地大、特地累。于是咱们心愿前端工作人员可能宁静独立的尽快解决这个事,不被打搅;咱们会想团队要求是否少点需要,在这各阶段大家都停一下,一起把这个工作过了,让网站失去一些晋升。 咱们可能通过一个月的攻关,确保每个团队把本人的工作做好了,发上线了,客户失去了好的反馈,网站性能晋升了,团队很快乐终于把这个石头推向山顶。然而过一两个月,又有人说页面速度变慢了,有些模块的响应速度齐全不能忍耐。问题的起源可能很多,咱们的开发人员要专一于交付,我的项目过程中会呈现人员的变动,很多之前在我的项目中积攒的好实际会失落掉。然而这些问题是无奈防止的,可性能的晋升也是迫不及待的,难道团队要每隔一两个月就要做一次这样的攻关,又去推一遍超级大的石头吗? 在CodeArts的开发过程中也呈现过这样的问题,而CodeArts团队针对这个问题的思考是不推这个石头了,为什么肯定要积攒到这么宏大的问题,而不是把石头敲碎,每次带一点呢。于是CodeArts开始基于这个角度思考如何进行性能优化,不要做任何专项的改良,而是把问题敲碎,放在每一个迭代当中。 回到开始,咱们想一下之前要做的性能优化的事件,简略来说能够分为两个局部。第一个局部是固化的局部,包含CDN的建设、所有Web上的容器设置。CodeArts应用的是前端的安哥拉框架,对于安哥拉框架自身的演进与优化,再到基于业务实际本人抽取的或者实现的主权库以及公共的局部,咱们把它看做是固化的局部。固化的意思是说在组织过一次集中的攻关之后,教训和成果很容易被传承下来。它的改变不波及业务,所以它的变动频率自身比拟低,而且个别这种公共的货色会有专门的架构师去看护。对于这部分内容,做了一部分优化之后就会有很好的成果。这其中还有网站劣化的局部,有可能每一个个性就是100到几百毫秒的差异,然而一个不留神,积攒到肯定水平之后,就会呈现咱们最开始所说的10秒页面。对于这部分问题CodeArts前端团队会怎么做?这就要回到DevOps的三步法,从左到右的流动,从右到左的反馈,以及继续学习的迭代。 这里的要害是第二步,从CodeArts面临的问题角度来看,就是咱们怎么晓得产品的每一个服务,每一个页面在什么时候开始产生了性能的劣化,就像那个石头一样是缓缓长大的。咱们是否在每天,每个月,每个迭代随时发现它的变动,而后把石头敲碎,前提就是是否及时失去反馈。如果团队本身都不晓得产品的性能是怎么样,靠外界,靠用户,靠其他人理解,到那个时候一看,石头就曾经十分宏大了。所以外围的第一点是反馈,那么如何建设这个反馈? 第一,要有被动、实时的、前端定制化的监控。这里有几个十分要害的方面: 前端定制化。这种监控伎俩十分多,有各种各样的监控工具,大部分的实现原理是源于浏览器的要害节点。CodeArts自身基于开源的我的项目做了定制化的监控,一是将浏览器外面所有对于监控的指标细化了。依照框架的要求,定义一些对产品要求更适宜的指标,并且监控数据是实时的,并不是采样。监控的数据会提供给开发人员,每一个前端的开发人员会隔几天察看一下页面服务的现状体现如何,监控生成的后果高深莫测,会帮忙他们晓得问题是因为网络还是因为根底框架、业务写法、效率、接口,通过前端被动化、定制化的监控,能够疾速辨认,且升高交付老本。 第二局部是被动的例行的性能验收。CodeArts团队会从测试验收的维度思考问题,有的团队的确忽略了,或者初期没有建设起被动的意识,就须要靠被动的性能验收去给团队展现,让大家晓得网站目前的状况,看到每一个页面产生的变动。 有了这两个被动的和被动的监控数据存在,让整个前端团队可能掌控到网站在性能上的实时变动,晓得当初产生了什么问题,哪一块是咱们的弱点,哪一块须要咱们的开发人员去留神,哪一块须要公共架构成员去关注,这些都是十分重要的须要可视化的货色。 建设了相干的数据可视化当前,要怎么推广它?正如上文所说,要防止以前的那种专项的静止,因而要把每一次的性能优化放在每一个迭代,实际上隐射的就是DevOps的第三步,每一个小迭代的疾速优化和疾速学习。这并不是一个技术活,这个问题的解决不依赖于某个技术手段或工具,因而这才是最麻烦的问题,它要求参加的每一个人有这方面的意识,提供了自动化工具和监控的可视化数据,然而不去施行,那么后面所做的所有致力就都徒劳了。针对这个问题最好的解决办法就是沟通,每一次的站会、周会,整个团队高低要有一个沟通的机制。在团队外部建设起良好的沟通气氛,所有数据可视化,且进行展现,团队的成员能够自发认领,且对于工作不惩办,多被动激励,造就团队成员的主观能动性,在一次一次迭代过程中,让大家可能被动的去承当,去找到这些问题。最初很要害的一点是及时的激励或及时的反馈,每一个迭代都要看到主观数据的变动。因为后面曾经建设了被动的和被动的监控数据,每次的迭代中你做的致力,或者你的松散,会间接在下一周,或者下一个迭代会议外面产生相应的数据变动。这种可视化的反馈数据会产生及时的激励,让团队看到付出的所有致力都是值得的,那些被动思考问题、解决问题的团队肯定会在可视化中怀才不遇,而不违心改的问题肯定会被放大进去。 最初回到原点,上文中始终吐槽西西弗斯,但换一个角度看他,还有一部分十分值得咱们去学习的中央,就是始终向上不停歇,无论怎样,他永远在那个死循环外面推石头,也像CodeArts的精力,就像迭代一样,一直晋升本人。一千个读者眼中有一千个哈姆雷特,心愿本文中基于CodeArts分享的所有前端性能优化,以及实际上的尝试,能给各位开发者带来肯定的启发,也心愿文中提到的内容也可能为你日常的工作和实际提供帮忙。

February 22, 2024 · 1 min · jiezi

关于软件开发:DevOps-VS-敏捷的区别是什么

原文链接:https://support.huaweicloud.com/reference-devcloud/devcloud_r... 当咱们面对麻利和DevOps的时候,总会不可避免的思考上面这些问题: 麻利是什么?DevOps是什么?两者有什么区别?继续集成不是XP外面的么,怎么DevOps也有继续集成?咱们团队之前在做麻利转型,当初又开始DevOps转型,这两者有什么区别?其实这些问题并没必要太过纠结,因为麻利和DevOps两者都在一直演进,两者也确实越来越像。 这个话题注定探讨不清,也注定会有不同的意见。本文也仅从方法论和实际的角度,为开发者简略阐述麻利与DevOps。心愿每位读者都会从本文中失去本人的了解与启发 ,帮忙大家在麻利与DevOps这两条路上走的更远。 先说本文的观点: ▪ 麻利与DevOps初衷、目标是为了解决问题,而不是为了树碑立牌,更不是为了霸占地盘。 ▪ 两者并非若明若暗,也没有一条线可能划进去,说哪边是麻利,哪边是DevOps。 ▪ 探讨麻利与DevOps,目标是为了理解两者之间的内在联系,而不是为了划清界限。 ▪ 常常被探讨的,是广义的麻利与DevOps概念,而狭义的麻利与DevOps,曾经趋同。 ▪ 两者都是试图去解决雷同,或相近的问题,只是还没有能一招解决所有问题的方法呈现。 接下来, 让咱们从广义的角度看二者的区别。 传统的麻利是为了解决业务与开发之间的鸿沟。通过麻利宣言中强调的个体和互动、可工作的软件、客户单干、响应变动,以及12条准则中的尽早的以及间断的高价值交付、自组织团队、小批量交付、团队节奏、可改善可继续的流程、放弃沟通等,以及包含Scrum、Kanban、XP在内的泛滥治理和工程实际,来实现开发与业务之间的频繁沟通,疾速响应变动。 而DevOps的呈现,是为了解决开发与运维之间的鸿沟。前端的麻利确实是快了,却发现因为Dev与Ops之间的隔膜,无奈真正的将价值继续的交付给客户。 开发侧很快,运维侧太稳,这个就是咱们常说的开发与运维之间固有的、根因的抵触,即下图中的凌乱之墙。开发(尤其是“麻利”后),求的是疾速响应变动;运维,求的是稳固、平安和牢靠的服务。更重要的,两者的KPI度量指标,绩效考核激励机制不同,决定了如果为达成各自的部分指标,势必存在无奈和谐的根因抵触。 DevOps的呈现,就是为了突破开发与运维之间的部门墙,从这点上来说,“DevOps是麻利在运维侧的延长”这一说法也不无道理。只是,麻利与DevOps,都曾经不再是原来的那个麻利和DevOps了;世界变动太快,问题域产生了变动,解决方案域天然也要随之变动。 麻利的益处是,有一个麻利宣言,宣告其诞生。麻利的毛病,兴许也是因为有麻利宣言。麻利宣言并不应该被拿来束缚和限度麻利的范畴,麻利宣言也说拥抱变动,宣言诞生于2001年,时至今日,也会与时俱进,只是起初再没有这样的一个标志性的事件来做申明。 DevOps的不好之处,是没有一个明确的定义。DevOps的益处,却也正是因为没有一个明确的定义做限度,所以拿来主义,所有好的货色,都能够为我所用。 DevOps是个筐,什么都能够往里装,麻利又何尝不是呢? 通常人们对DevOps的了解有两方面,即D2O和E2E。D2O,Dev to Ops,即经典、广义的DevOps概念,解决的是Dev到Ops的鸿沟。E2E,End to End,即端到端、狭义的DevOps,是以精益和麻利为外围的,解决从业务到开发到运维,进而到客户的残缺闭环。DevOps的6C概念,即Continuous Planning、Continuous Integration、Continuous Testing、Continuous Deploy、Continuous Release、Continuous Feedback,也是端到端狭义的DevOps。 维基百科中总结到,DevOps的呈现,有四个要害驱动力: 互联网冲击要求业务的麻利虚拟化和云计算基础设施日益广泛数据中心自动化技术麻利开发的遍及从种种概念能够看出,业务麻利、开发麻利、运维侧自动化、以及云计算等技术的遍及,简直打穿了从业务到开发到运维(包含测试),所以尽管字面上是Dev到Ops,事实上,曾经是BizDevTestOpsSec了,即从广义的D2O,前后延长到E2E,端到端狭义的DevOps了。 多位DevOps巨匠曾基于多年DevOps现状报告,汇聚进去了一个DevOps能力成长模型。在DevOps能力模型中,DevOps的最终的目标是组织效力,软件交付和运维效力是麻利与DevOps独特的指标。 继续交付是广义DevOps的核心理念,横跨了架构、开发、测试、运维等角色。继续交付的外围开发实际,也涵盖了架构治理、版本治理、分支策略、测试自动化、部署公布、运维监控、信息安全、团队受权、数据库治理等多个维度,其中不乏咱们常说的传统的麻利相干实际,尤其是下图中XP极限编程的很多实际,半数以上在DevOps里都能找到。 能力成长模型,除了继续交付,还包含精益领导力、精益产品开发、精益治理、组织文化与学习气氛。DevOps已远远不是CI/CD那么简略,CALMS 准则也横跨了文化、治理、精益与技术。 麻利宣言的十二条准则、SAFe的九大准则、以及DevOps的CALMS准则,也是彼此互相交融。SAFe有借鉴DevOps的理念和办法,DevOps又驳回麻利的思维和实际,大家又都以精益为思维外围。那么谁蕴含谁,谁比谁大,彼此的界线在哪里呢? 由此可见,办法也好,实际也好,其价值应该由客户价值来体现。对客户而言,须要解决的问题,是端到端的,是全局而不是局部优化。 所以,是什么,不重要。能解决什么,要解决什么问题,很重要。 DevOps是集大成者,是各种好的准则和实际的交融,麻利又何尝不是如此。2001年的17位雪鸟巨匠,各自在践行着不同的麻利框架和实际。麻利宣言和准则,本来就是一次交融。2003年Mary Poppendieck和Tom Poppendieck的精益软件开发办法,即使是曾经有麻利宣言的前提下,也一样纳入麻利开发的领域。麻利也是在一直前行,DevOps与麻利必由之路,是同一问题的不同分支,最终会集到同一个指标。 一个好的方法论,应该是与时俱进,兼容并蓄的;应该是凋谢的,演进的而不是固化的。 方法论如此,学习和实际方法论的人,更应该如此,以一颗凋谢的心态,接收所有正当的存在。 本文参考资料: 《DevOps explained》  Jérôme Kehrli《Accelerate》本文更新于2022年,如有谬误欢送斧正

February 21, 2024 · 1 min · jiezi

关于软件开发:CodeArts开发者实践CodeArts开发者八件套开发者的进阶宝典

华为云软件开发生产线 CodeArts是一站式DevSecOps平台,集华为多年研发实际,前沿研发理念,当先研发工程能力于一体,笼罩软件开发全生命周期,开箱即用,为您提供软件开发的所有。为帮忙开发者疾速上手CodeArts,咱们汇聚了精品视频课程、在线入手试验、职业认证及丰盛示例代码,助您扫平产品应用的所有阻碍,玩转DevOps!

February 18, 2024 · 1 min · jiezi

关于软件开发:反思软件开发知识流动下

本文来说说在企业中让常识流动起来的大体思路。 数字员工在以互联网或软件及服务为谋生的企业中,各个层级、分工的人和解决各类事务的应用软件是办公与业务运作的两大因素;企业中的绝大部分人是员工这很天经地义,但为何不能把工作中所用到的各种应用软件看成整体,也当作一名员工来对待呢? 将这名非凡的「员工」称为「数字员工」,与其余员工不同的是,它是纯虚构的、数字的,没有物理层面的状态,但与其余员工一样能够解决工作上的事务。 兴许一开始啥也不会,但在像训练动物或教诲小孩般对其加以训练,某些方面能够做得比人更杰出,尤其是机械重复性工作!再加上该「员工」没有七情六欲,不知疲倦,比人更加稳固牢靠且经济实惠。 如同人类员工会被依照能力和职责等进行职级划分,数字员工同样也存在等级—— 解决各类事务的能力七零八落,像精神分裂般没有整体感,像智障一样没有一点智能;不具备任何常识,即使有,相互间也是割裂的——简直就是像锤子那样的工具。 局部能力之间互相买通,一些常识能够小范畴内流动起来,造成更为无效的零碎;缩小人类员工间的沟通,进步机械重复性工作的效率——算是繁难流水线了。 绝大部分企业中的数字员工都是这两个级别的,绝对(非常)低能,须要人类员工手把手操控;人类员工与数字员工之间是从属关系,或者说是主奴关系。若以「人」的规范要求,这两类数字员工就是残疾。 而更高级些的数字员工,与人类员工之间该当是伙伴关系,是强有力的助手,让人类员工能够根本解脱机械重复性工作,转而将工作重心从事创意性内容——从膂力密集型转向脑力密集型。 智能助手能够说,智能助手是最高级别的数字员工了,是企业外部的「万金油」,承当这一角色的非智能工作台莫属,其外围为—— 常识治理在当下这个时代,无论是集体还是企业,常识都是最为重要的资产;但如何无效地积淀常识,并让它们像活水一样流动起来,这是很多集体与企业都面临的一个难题。 对于企业而言,常识更是推动翻新所须要的原料,无奈翻新的企业只能坐吃山空,进而被时代所淘汰;企业常会以人员的频繁换血来谋生机,但这根本是有效的,自上而下地推广常识治理才是邪道。 无效的常识治理必须先以《反思软件开发:常识流动(中)》中论述的那几个基本原理为根底,打造出企业内专有的、集中式地中心化治理各类常识的宏大知识库。 企业员工脑中与企业无关的常识,不仅是员工集体的,也能够转化为企业的,因此企业常识来源于一个个员工的集体常识;所以,如何让员工迫不得已并难受地将他们脑中的隐性常识显性化为企业常识,是每个企业高管该用心思考的。 企业常识虽来源于集体常识,但并非集体常识间接就成为了企业常识,而是通过肯定范畴内多人探讨后变换得来,这也算是「共识」;是共识就该当尽可能地固化进工具或流程中,加重并脱离对人的意志等的依赖。 没做好常识治理的话,企业的成绩会高度依赖于员工集体,存在于员工脑中与企业相干的隐性常识将随着员工的到职而失落;若这部分常识数量较多或(潜在)重要性较高,那企业将会蒙受较大损失。 大多企业都有常识治理,但很多是将常识散落在多个利用上,如 Confluence、禅道等;这些利用间自身就是较为割裂的,常识间的关联性弱到简直没有。 如果常识治理不是基于「惟一可信起源」(下文称「SSOT」)的中心化形式,如同人心涣散,跟没有也没啥区别;听从「SSOT」进行中心化治理的知识库就是智能助手的「大脑」,使其具备「记忆」能力,可将常识作为后续行为的原料。 智能助手的其余能力理论是输送常识的管道或变换其状态的转换器,人类员工的最终产物(工作成绩)皆由数字化的常识通过各局部能力所连成的管线推导而来。 产研一体化这里说的「产研一体化」就是将企业的数字产品相干的常识主动推导生成为利用成品的管线,其核心理念仍然如《聊聊中后盾产研一体化:引子》中所说。 在我所构想的「产研一体化」中,「(业务)利用」是「需要 + UI & UX + 低代码框架」,疏忽一些细节后能够形式化表白为 App = Render(Extract(需要, UI & UX))。 其中,「需要」是「某一版本的常识集」,Render 是低代码框架的一部分,而 Extract 则是知识库与在线设计器。 在传统的产研合作模式中,需要治理,或者说业务知识治理很容易凌乱——常识以不同的模式分布在不同平台、IM 中,并且常识之间没有关联;常常口头产生或更改需要,没有落实为数据存留下来,导致常识失落。 在产品经理出了 PRD、原型之后,UI & UX 设计师出设计图,后端建表、写业务代码,前端再依据产品经理、UI & UX 设计师及后端的产物去编写页面代码——他们的工作是绝对割裂的,各环节产物之间没有理论的关联关系,改个需要要别离更改。 但在我所构想的产研合作模式中,将「需要」形象为「常识」,所有需要变动都要先更新常识数据,而后主动将变更反馈到「利用」这个最终产物上——这便是以「常识」作为「SSOT」的「产研一体化」。 产品经理整顿各类需要,形象并积淀/更新与本身业务相干的业务概念,明确它们之间的关系和作用规定,这些会留存在知识库中,可能以文章、流程图、常识图谱等模式查看;筛选几个固定版本的常识创立一个汇合,这就是一个「需要」,能够认为是「PRD」。 产品经理在做这些事件时实际上就是在本体建模或领域建模,其产物能够转化为供低代码框架生产的元数据,用于后端解决业务数据和前端对数据进行校验等解决。 产品经理再在在线设计器上通过可视化的形式从畛域模型中选取字段,从已有的交互模式库中选取适合的 UI 组件,通过一系列利落拽操作后就产生了「原型」,与传统模式不同的是,这个「原型」公布后就是页面的最终成果。 如果 UI & UX 设计师对「原型」的某局部视觉效果不太称心,也能够在在线设计器上进行微调。 以下为大略的示意图(一年前画的,但整体思维差不多): 总结下新的模式与传统模式的不同点: 「常识」驱动,以「常识」作为「SSOT」,强制使常识放弃最新,不会呈现常识扩散与失落的情况;「代码」与「需要」间建设了关联关系,依据由「常识」衍生的元数据自动化生成/更新业务利用(的性能);「代码」与「设计」间建设了关联关系,UI & UX 设计师在平台上微调产生的配置数据会生成前端页面的款式代码。「产研一体化」这条主动推导管线的关键点是要形象出数量起码、可组合性最高、可解释性最强的几个原子化概念,就像物理中的「粒子」、「力」等一样,它们之间的互相组合与作用可演化出万物。 人工智能作为区别于其余更低级别数字员工的要害,智能助手必须搭载 AI 以让它领有「智力」,从而具备自主学习的能力,可能理解企业并了解人类员工的需要,进而在被动承受指令执行工作之外还能被动进行揭示与倡议等。 ...

September 24, 2023 · 1 min · jiezi

关于软件开发:反思软件开发知识流动中

在上篇文章,即《反思软件开发:常识流动(上)》中,我激情高昂地陈说了日常工作中常会遇到的比拟宜人的几个问题,并从惯例视角简略阐明了问题所在,本文将会从常识的角度指出它们产生的起因为何。 基本原理在剖析并解决问题之前所必须理解的一些事件。 常识定义在《主观的事实世界》中讲「DIKW」(即「data」、「information」、「knowledge」和「wisdom」)时,我简略地解释了「常识」是什么—— 通过「数据」和「信息」只能理解到「实体」的外表出现,这些是不牢靠的,对人的流动根本没有指导意义,人们须要的是可能尽可能正确地反映「实体」的「性质」与「逻辑」的「常识」。 「常识」能够通过建模的形式获取,行将「信息」分门别类后抽取雷同特色并简化为「模型」。「常识」不肯定是真的,人永远也无奈确切地晓得其到底是不是真的,只能通过一直的验证使其有限靠近于真。 欧雷《主观的事实世界》 为了不便论述和了解,本文将默认不严格辨别「数据」、「信息」与「常识」这几个概念,能够长期把它们看作是一回事——都是「常识」。 这样一来,在本文的语境中,职业、业余、业务等畛域常识是「常识」,语言、文字、图形、代码等符号零碎也是「常识」。 将「常识」依据是否被符号零碎外化分类的话,已外化浮现并记录下来的叫它「显性常识」,未经外化仍存在于某个人的意识中的称为「隐性常识」。 基于「万物皆可形容」的理念,任何「隐性常识」都可被适当的模式形容进去,即使会有肯定水平的失真,这就是「隐性常识显性化」——同时也是让常识流动起来的基本前提。 常识封装简略来说,「封装」就是用一个符号去压缩或者说包装一些有所关联的常识,就像打包好的快递包裹一样。这样做的目标是为了不便常识的组合与传递,进步其流转效率。 日常生活和工作中有很多常识封装的例子,如:语言、文字中各种类型的词汇;软件开发时定义的常量、变量、函数、类等。 既然要封装,就不应该呈现一个海纳百川的符号——如果它什么都是,那它就什么都不是,理论不会起到任何真正有价值的正向作用。因而,要管制符号语义的边界,尽量恰到好处。 管制边界就是限度符号所封装的常识的复杂度以及流传路径—— 遵循关注点拆散、繁多职责等准则进步符号的内聚性,如:软件的模块拆分、分层架构;工作岗位的横向、纵向职责划分——专人专事,别给某个岗位的人提不相干的要求,且拿那些不合理要求作为考核指标。 起码化输出/输入(I/O)通道以限度符号间的通信,升高并克制混沌产生的概率——软件程序单元的 API 和参数要尽可能地少;某个小组或部门只让尽可能少的人(最好是只有一个)成为「必须晓得(简直)全副细节的人」。 这里有个可能比拟容易纳闷的中央——人怎么就是「符号」了? 这是一个波及到哲学、社会学、心理学的问题,就不在这里严肃认真地探讨了,简略阐明就是—— 一个人在认知别人时,会不可避免地依据对方体现出的特色、状态等进行标签化,进而聚合造成一个本人所认为的那个人的符号化形象。 并且,在与别人合作时,一个人的身份更大程度上不是他本人,而是他所处的蕴含且代表他的专业知识与技能、部门职责的工作岗位,这更加是符号了——某个职业、某个业余、某个部门、某个岗位等都是封装了特定常识的符号。 常识流传假如常识被恰到好处地封装,以此为前提,大胆地掏出奥卡姆的剃刀—— 用尽量准确且简略的符号去表白常识——「准确」是为了防止歧义,「简略」是为了易于了解,从而缩小认知偏差,让合作的人之间在脑中所设想出的是同一个事物;在软件开发方面,则会缩减代码量,节俭资源开销。 用尽量短的门路到达终端——门路越长,达到终端的工夫就越长,损耗失真得就越多,对时效性、完整性要求高的话会对终端产生很大影响。 常识保护基于「惟一可信起源」(英文为「Single Source of Truth」,下文简称「SSOT」)思维对常识进行保护,其外围就是只认可某一个起源的常识,尊其为权威,不承受并忽视其余起源,有种一神教的感觉。 这须要联合肯定的强制性措施保障其可能执行到位,以杜绝同一常识呈现多个版本;建设某种反馈管制机制,令所有生产了常识的环节都能在源头变了时响应式更新,并反向促成常识源头时刻放弃最新。 若不听从「SSOT」,定会呈现同一常识有多个版本存在的状况——在合作时不仅会减少了解和沟通老本,促成拉锯扯皮甚至是争吵谩骂的情况;还会进步常识同步时的修改老本和保护老本,让人逐步失去更新常识的能源。 听从「SSOT」的常识是群体智慧的结晶,相对来说会进步常识的正确性和有效性。就算错,也是一错到底,要追责的话,不是某(几)集体的责任,而是常识保护的所有参与者的责任。 除了上述特点,听从「SSOT」的常识总体上是采纳中心化的治理形式,并能缩小甚至防止显性常识扩散与隐性常识失落的情况,从而进步常识的完整性、可观测性。 问题剖析上面将用上文论述的对于常识的基本原理去从常识的角度剖析并解释在上篇文章中形容的那几个日常工作中的常见问题—— 业务反对、岗位职责和跨部门合作中的问题次要是常识封装得不好,并且未被无效、顺畅地流传;测试左移的问题则在于常识保护上,在跨部门合作中也存在此类问题。 小结本文总结了对于常识的几个基本原理,并基于它们从常识的角度解释了日常工作常见问题的起因。在下篇文章中,我将在本文所述的基本原理之上畅想解决那些常见问题的计划。 本文其余浏览地址:集体网站|微信公众号

September 23, 2023 · 1 min · jiezi

关于软件开发:反思软件开发知识流动上

「提效」这个话题很大,波及了很多方面,尽管会和技术等工具无关,但它们相对来说不是重要的,由参加流动的人的认知、意识及其所决定的行为更为重要! 在《反思软件开发:人为因素(上)》与《反思软件开发:人为因素(下)》中尝试论述了「人」对「效率」的影响,本文和下两篇文章我将试图从「常识」的角度阐明「效率」问题。 常见问题咱们在日常工作中遇到的问题很大水平是以分工协作及沟通交流为核心的——不仅是人与人之间,还包含人与机器之间和机器与机器之间。 业务撑持在撑持业务性能时,前端是如何做的? 当今前端开发的支流做法就是在根底组件(顶多再加上所谓的「业务组件」)之上新建个相应业务性能的「页面组件」,一顿操作猛如虎之后,至多几百行代码进去了,如果布局和交互略微简单点,破千行微微松。 设计师和产品经理验收后很快乐,不仅还原度高,还没什么「八阿哥」。可过了几个月甚至一两年,在须要加点新性能或做些调整时,关上代码文件,傻眼了—— 过后的业务逻辑是啥来着?这个中央当初为啥这么写?怎么一个小调整要改这么多中央?!这中央太简单了,不敢改啊,改出问题又得背锅…… 有教训的人都能看出问题次要出在哪,以及该如何防止,包含当初写下那些代码的人—— 对代码和逻辑进行适当切割,拆分出文件;语义化命名,以将局部隐性常识显性化,并缩小无意义正文;形象出具备高内聚性和可复用性的模块;遵循各种「准则」,应用高大上的「模式」…… 然而,真正有能源去做这些事件的人并不多,代码写得好又不会升职加薪,并且咱们大部分人没有什么「正当理由」要求别人写出好代码——除非这成为带有行政属性的制度。 前端在业务撑持时的支流模式加上人的惰性,在人与机器的沟通交流中造成很大的阻碍。 岗位职责有些人对前端从业者抱有「不切实际」的冀望和要求——前端应该懂业务——我感觉这很荒谬,这是他们的「空想」。 以后个别意义上属于「前端」的工作有网站开发、函数库、组件库、CLI 工具、开发框架等专一于「前端」这个畛域且与企业「业务」不相干的;与「业务」有所关联的,根本只有利用开发。 在以软件及服务为谋生的企业中,波及到「前端」的职业、岗位有前端工程师、前端负责人、全栈工程师、(Modern.js 所提倡的)利用开发者/产品开发者、业务架构师以及产品经理。其中,是「纯前端」(专一于「前端」这个畛域)的只有前端工程师。 如果一个人,他的工作内容与职责不局限于「前端」,那他实际上不是一个前端工程师,并很大可能也不会自称为「前端工程师」;那些自称「前端工程师」且说本人「(要/该)懂业务」的人,极有可能是被动的——在应聘或被安顿工作时如此要求,或者是为了 KPI 和升职加薪。 「前端」理当是做「业务无关」工作的「前端工程师」——以此为前提,前端专一于展现与交互,代码中不应有业务语义,与前端沟通时的语言也是业务无关的,转化为与展现、交互强相干的用语——从「前端」的世界中剥离所有「业务」强相干的事物。 然而,利用开发中肯定会有业务相干的事物,该如何解决呢? 在用适合的架构和框架将业务语义的逻辑、状态等从 UI 组件中剥离进来之后,由非前端人员(通过 Handie 类的工具)去实现畛域模型定义、业务相干的状态管制等。 「非前端人员」是指除做「业务无关」工作的「前端工程师」之外的人——前端负责人、全栈工程师、利用开发者/产品开发者、后端工程师、业务架构师、产品经理等。 那些对前端抱有「不切实际」的「空想」的人,预计是认为这会进步合作效率或价值产出?他们应该是想多了…… 当一个人对「业务」只知其一;不知其二且有本人想法时,沟通合作中产生摩擦的概率和次数会更高,不仅不会进步价值产出,还会升高合作效率。这个人,无论是不是「前端」。 在这方面,「设计」与「前端」实则属于一类人——着眼于展现与交互,不须要去理解和背负「业务」上的事件。要求「前端」和「设计」去懂业务,从「人」的角度看,这也算是一种压迫行为。 测试左移在软件开发流程中,「测试」是在「开发」之后的,也就是在性能开发实现后才进行性能上的测试。这样一来,只是程序单元上的问题还好说,但若是架构甚至是业务上有问题,返工的老本可就很大了。 为了尽早发现问题,并在没造成什么理论影响时解决掉,测试人员或行为须要染指到上游环节中,如测试人员参加需要评审、设计稿评审、软件设计评审,开发阶段进行单元测试等——这就是「测试左移」。 虽说这样在肯定水平上可能达到预防的目标,但仍然会存在信息同步上的问题—— 在开发过程中发现了评审时没意识到的问题,与产品、设计私下沟通后做了批改,但没同步更新相干文档也没告知测试人员,这时就很容易会在不知情的状况下漏测,进而导致线上故障。 跨部门合作总的来说,跨部门合作是很烦的事件,比同部门合作烦上几个等级。究其原因,就是兽性导致的利益冲突,思考更多的是本身利益,而非共同利益;并且思维狭窄、目光短浅,做一锤子买卖,而非长期单干。 一个比拟广泛的问题就是—— 业务部门在性能迭代时须要用到中台/平台部门的服务,倘如此时中台/平台部门的根底服务还不欠缺,无奈「开箱即用」,那么就面临「业务方的个性化逻辑代码写到哪和谁保护」的抉择: 各自部门的人在各自的代码仓库中开发调试各自的逻辑代码;中台/平台部门在开发根底服务的同时,在业务部门的代码仓库里开发调试业务方的逻辑代码;长期放在中台/平台部门的代码仓库里,根底服务欠缺后将业务方的逻辑代码迁出去;写到中台/平台部门的代码仓库里,并且前期变动和保护也持续由中台/平台部门的人做。失常状况下,无论如何不可能也不应该选最初一种,这是最根本的部门定位和职责划分问题。然而,兴许也会存在比拟无奈的情景,比方:当不够强势的中台/平台部门遇到比拟无赖的业务部门时。 更蹩脚的是,业务方的逻辑比拟绕,开会讨论时曾经各方自认为达成了共识,并依照本人的了解去开发了;但在测试时业务部门的人却说中台/平台部门的人实现得不对,业务逻辑有问题,甚至还颠覆了之前开会讨论时所达成的共识…… 由中台/平台部门去保护业务部门的逻辑代码,这自身就是一件很扯蛋的事件!这对中台/平台部门来说简直是无利可图,反而容易惹得一身腥! 小结本文述说了咱们在日常工作中常会遇到的几类问题,并针对它们各自非常简略且通俗地表白了我的观点。 这几个问题尽管看起来形形色色,它们之间貌似没有什么关联,但正如文章的题目和结尾说的一样——它们的背地都与「常识」有莫大关系! 具体是什么将在下篇文章中揭晓,在那之前各位有趣味的话能够先想下~ 本文其余浏览地址:集体网站|微信公众号

September 23, 2023 · 1 min · jiezi

关于软件开发:反思软件开发人为因素下

在《反思软件开发:人为因素(上)》中,我简略论述了集体的局限性以及组织该有的意识形态中的次要方面。正所谓「思维决定行为」,组织在运作时成员的理论行为受那篇文章所述意识形态影响。 沟通合作既然要一起做「小事」,既然要单干,就防止不了分工协作和沟通交流。这部分根本是个人修养,组织中每个人的涵养都晋升一点点,综合起来的叠加成果是不容小觑的。 上面以软件生产为例来聊聊我的相干观点—— 在之前写的《反思软件开发:软件生产》中有提到软件生产中会有的一些分工,咱们每个人都会承当其中的一个或多个。 身处其位,要先搞清楚职责边界和所需资质,达到相干资质指标并在边界内尽职尽责,可能给出本人所处环节体现专业性的解决方案或倡议。 不是光做好本人这一摊子事儿就能够了,还须要相熟上下游环节甚至是整条链路的相干内容,这样有助于大家劲儿往一处使,对齐并共享背景常识/上下文,缩小沟通交流中的摩擦,把握事件走向,让本人做出更接地气更能解决问题的决策。 把与本人沟通交流的对象当人看,要有最起码的尊重。每个人都有本人的立场和情绪,立场能够表白,但情绪要克服,以解决问题为导向,感性地交换、探讨。 当立场有抵触时,先不要急着认为对方愚昧且无知,无妨试着把本人看成如此,以「升高身段」代替「抢占高位」,尽可能地理解对方立场的造成起因,尝试去了解,向着合乎共同利益或组织利益的方向促成共识。 虽不能把他人当白痴,但能够当作小白来对待,尤其是跨工种交换时——对本人来说天经地义的事件,在别人看来很可能是生疏的,不明所以的。交换时尽量用通俗易懂的语言和合乎直觉的符号——遵循常规和最佳实际,防止生造概念,新瓶装旧酒。 就拿编程来说,有的人犯懒或者炫技,就会写出一些让人摸不着头脑的代码—— 编程语言是程序员之间交换的另一种语言,关键字就是语言中的特定动词,变量/常量是名词或形容词,函数调用就是一句话,整个文件就是一篇文章。 合格的代码就是正常人的语文程度,看的过程不须要太多思考,靠直觉就懂其中含意。优雅的代码就是文笔优美的文章,不仅容易看懂,还难受,并且能学到些什么。差的代码就像语文没学好或者精力错乱的人写出的,很容易让人摸不着头脑。 无论是写代码还是写文章,需思考下读者的浏览体验。 欧雷的想法 综上所述,影响沟通合作晦涩度的次要有两点,一个是思维态度,另一个就是信息差。对于后者,在《事实世界中的交换》中有更为深刻的探讨。 管理手段尽管要「以人为本」,尽管要尊重集体的意志与需要,但放任自流组织迟早完蛋——任何事物都会朝着凌乱的方向去倒退,放到有自我意识的人身上,这种景象只会加剧;自然界中有本人放弃秩序的法则,人类组织中需靠治理去保护秩序。 我认为,「治理」是为了零碎失常运行、熵减而进行资源调控,在「组织」这个语境中次要就是对人调控,这里的「人」既是普通员工又是管理者。因而,一个组织中不仅有上对下的治理,又会有下对上的投诉。 管理者手里的势力代表责任,势力越大责任也就越大。势力是把双刃剑,虽说能够随时斩向上级,但不到万不得已最好不必,否则容易反向伤到本人。鉴于此,个别状况下管理者会利用各种指标工具去管制上级以满足本人的利益。 下面的表达方式看似在贬,实则是个中立的表述,具体如何需看管理者应用指标工具的理论用意和度。做事要看成绩,但也得看办法;要有套路,更得有良心。那些只抓绩效、指标的管理者不是合格的管理者,身在其位,不具其德。 最现实的治理,应该可能激发出上级的激情,唤起风雨同舟的使命感、成就感,让他们感觉工作不只是维持生存、生存的伎俩,同时也是自我实现的形式,最终达到自驱动、自组织、自治理的成果;最现实的组织状态,是基于独特愿景的去中心化或弱中心化组织。 利益之争法学中有「应然」与「实然」,即「应该的、现实中的样子」与「理论的、事实中的样子」——在上文和上篇文章中所论述的内容都算是「应然」,这就来大抵说说「实然」是什么。 人是自私的,做事会优先满足本人的利益,这外面有由基因遗传来的为了生存的动物本能成分,由人所形成的组织亦是如此。 然而,组织架构就是人为地、公开地划分出多个利益集团,就像人员分工难以分出十分明确的职责边界一样,部门、小组之间也会呈现职责内容重叠的局部,从而引起利益冲突。 「坦白」是个难能可贵的品质,一个人很难做到真正的纯正,他背负的越多越难纯正,为了私人或所背负的利益费尽心机寻找借口,初心、真谛什么的都靠边儿站! 就拿技术选型这种事来说,什么「从部门乃至公司的技术久远倒退角度着想」、「为了进步程序性能与晋升团队效率和成员程度」的都是政治正确的掩护,理论重点思考的是满足本人的利益,只有选的货色不是破绽百出,就能想到千百种理由让它落实——两个旗鼓相当的相同观点的持有者,没什么办法可能压服对方,除非一方用权势去压抑另一方。 理论状况就是,无论是集体与集体之间,集体与组织之间,还是组织与组织之间,通常优先思考的是己方利益而非共同利益或(更高层面的)组织利益,相互之间产生摩擦,升高整体运行效率,熵增。 总结提效的外围是组织自上而下遵循「以人为本」和「单干共赢」的思维去口头,造成相应的组织文化,单从方法论、工具层面去提效只是隔靴搔痒,治标不治本,很容易遇到瓶颈。 本文其余浏览地址:集体网站|微信公众号

September 22, 2023 · 1 min · jiezi

关于软件开发:反思软件开发人为因素上

本文内容(分上、下篇)实际上跟软件生产没什么关系,尽管在生产中方法论、工具等很重要,但更重要的是组织和人的问题,然而这类问题并不局限于软件生产。 工具带来的提效只实用于无需智慧的机械性低价值重复劳动上,工具带来的效率晋升是主要的,最先应该解决的是组织和人的效率问题——这是件十分难的事件。 这个话题很大,在此仅仅论述我对此浅显的了解。 集体的局限之所以有组织的存在,是因为集体的能力是无限的,靠集体能够做成事,但都是些小事,要做大点的事就得依赖别人—— 「能力」是指「善于的事」,也就是「技能」。 绝大部分人只能善于一两件事并在那方面成为所谓的「专家」,因为技能是须要长期训练、练习能力达到「善于」的水平,要做成一件大点的事须要有不同「能力」的人单干,光靠一个人不太行。 「能力」是指「精力」、「工夫」和「效率」的总和。 要做成一件事须要固定的工作量,并且往往要在某个工夫期限之内做完才无效,也就是「窗口期」——过了这个村就没这店了。 最小工作量固定,deadline 已知,接下来就是资源调配问题了。 一般来说,除非有相对的把握,否则一个人很可能无奈实现,因为人们总是低估一件事的复杂性,即使看起来是很简略的一件事—— 侯世达定律:做事所破费的工夫总是比你预期的要长,即便你的预期中思考了侯世达定律。 侯世达《哥德尔、艾舍尔、巴赫:集异璧之大成》 除去事件自带的复杂度,参加其中的人自身就有很多不确定因素——姨妈了,要陪产,家里有事,情绪不好,诸如此类。 意识形态组织中人的思维和认知是影响整体效率的重中之重,企业所谓的基因、文化和价值观等就是这个组织意识形态的体现。 以人为本组织是由人形成的零碎,要想失常且高效地运行,就要管制好作为形成因素的每个人——了解「人」,理解他们,用好他们。 作为一起做某事的一份子,他们尽管是资源,但他们是「人」,而不是「工具」和「牲口」,理当被尊重,被了解,被关照,被用心看待——组织须要人文关心。 除了组织的创建者(们),其他人退出的起因无非是为了生存和在想要倒退的方向上锤炼本人。这些人的根本诉求,组织的领导者们该当器重起来,给予他们与能力及发明的价值相匹配的回报,而非千方百计地去在各方面进行压迫。 除了组织的创建者(们),其他人都是打工的,即便有层级之别,但相互之间仍然是平等的。别被本人的头衔和手里那点儿「势力」所蛊惑,掉进官僚主义的陷阱,不然本人可能一时爽了,但影响了整个组织的气氛,升高组织效率。 纵然组织能够是一个有情寒冷的机器,但若形成组织的每个人都感触到了组织的和煦,他们会抱着更为踊跃的态度去工作,从而使整个组织领有良好的气氛,进而晋升组织效率,毕竟人是有感情的。 人是形成组织这个零碎的因素,人心则是影响组织效率的最重要的因素。 愚昧的组织会为了创建者(们)的利益用尽伎俩去压迫;聪慧的组织即便就义点创建者(们)的利益也要尽可能对其他人偏心;而「精明」的组织则会爱护占据外围位置的领导层,其他人就是螺丝钉,不行就换。 为什么把「精明」加上引号?因为看起来聪慧,实则愚昧——助长官僚主义之风,制作阶级矛盾,不把占据组织大多数的民众的利益当回事。 单干共赢人是自私的,做事会优先满足本人的利益,由人形成的组织更是如此,这都无可非议。然而,如果只想着满足本人的利益,甚至成心去侵害别人的利益,那么本人的道路会越走越窄,很难做成小事。 因而,无论是集体与集体之间,集体与组织之间,还是组织与组织之间,要想做成事或使所处组织变得高效,须要有单干意识。 单干的前提是参与者之间要有独特的「大指标」——各自「小指标」的交点,也就是利益结合点。如果一件事对参与者中的一个或几个人来说收效甚微,那他们不会抉择单干。 鉴于此,我认为所谓的「单干意识」次要是指两方面:一是理解集体的局限,晓得要与别人形成组织协同工作能力做成小事;二是懂得与别人分享独特获得的成绩,尽量去满足合作者的利益,有时甚至要为了本人更大的潜在利益而就义眼前利益。 人与人之间的绝大部分关系本质上都是单干关系,无论是员工与企业、婚姻还是敌人等,应该致力共赢,将各自的利益最大化,而非盘剥、压迫这类零和博弈。 小结组织是由集体所形成,尽管组织的意识与智慧凌驾于集体之上,但不能漠视并遗记集体的意志与需要,这相当于否定组织的基本。 组织是由集体所形成,因此组织的理论运作会像人一样由其思维、意识形态所决定——本篇内容着重讲述意识形态的次要方面,下篇将阐明该如何口头。 本文其余浏览地址:集体网站|微信公众号

September 21, 2023 · 1 min · jiezi

关于软件开发:反思软件开发软件生产

用人话说,「生产」是从无到有发明人们所须要的物品,能够是实物,也能够是虚构的;软件就是那个被发明的「物品」,从无到有去发明软件就是「软件生产」。 先提了个问——软件生产是膂力密集型劳动还是脑力密集型劳动? 流程只管细节各不相同,但任何物品的生产流程都可能形象为需要、设计、实现、测验与保护这几个环节,视状况能够进一步简化为需要、实现与保护,并在此基础上周而复始直至产品或厂商的生命完结。 依据行业、畛域等的不同,会在上述几个环节中各自退出一些细分环节。 以我所处的以 Web 相干技术为根底提供软件及服务的行业、畛域为例,以后业内支流的生产流程为—— 在接到需要后,要先对其进行剖析,论证是否为伪需要以及概念、逻辑的完整性、严密性,若没问题就进入设计环节,包含产品设计、UI & UX 设计和软件设计。其中,UI & UX 设计也可被认为是产品设计的一部分。 不像单机利用那样只有客户端,当今的应用软件根本都蕴含客户端和服务端两局部,即前端和后端。因而,软件的设计与实现都要同时思考这两局部。 软件设计次要包含软件的结构设计,即软件架构,以及技术选型。在进行结构设计时,要有肯定的前瞻性,具备一些弹性,可能较为轻易地应答将来肯定工夫内的变动。 应该留神的是,软件架构受行业趋势和规定、组织战略目标和客户需要影响,技术选型受软件架构、团队布局和人员素质限度,而不是反过来。 以此为分界线,需要与设计是脑力密集型劳动,剩下的实现、测验与保护根本是膂力密集型劳动。 在这整个流程中,须要辅以行政治理和项目管理伎俩进行资源调节与过程管制,以保障产品如期交付并符合要求。 分工一般来说,不思考管理人员,软件生产相干的分工是依照生产流程来的,以下就是依照软件生产流程的上下游关系排序的次要分工: 产品设计——产品经理、交互设计师;外观设计——UI 设计师;软件开发——软件工程师;软件测试——测试工程师;部署保护——运维工程师。在不同企业或部门中,依据理论状况,可能会呈现同一岗位的人会参加到多个环节中去,如一家企业或部门没有专门的测试工程师和运维工程师,产品经理、交互设计师和 UI 设计师会去兼做软件测试相干工作,而软件工程师就去做些部署保护的活儿;也可能会在某个环节中细化出更多的岗位,如软件开发这个环节细分出架构师、前端工程师、后端工程师等。 那么,由特定工具或场景所催生的岗位,如 Java 工程师、Go 工程师、微信小程序工程师、H5 工程师等算不算是分工细化呢?我认为不算——这类岗位受企业业务等变动影响太大,易变性高,随时随地会隐没。 影响本人所处岗位稳定性的是解决本人所处环节的问题的能力,而不是本人所用所相熟的工具是什么。如果你是通过「Java 工程师」的身份进的某个企业,某天该企业决定将 Java 全副替换成 Go,你是被动辞职或者等着被解雇,还是学习 Go? 分工细化的前提是流程环节比较复杂,并且因操作规范化水平不够或其余什么起因导致不能自动化,无奈用机器取代人工,因此要拆分出子环节并找到对应的人去解决。 交付从软件的交付形式上来看有我的项目型软件和产品型软件,会对流程细节和开发心态等方面产生影响。 我的项目型软件相当于一次性交易,须要先招标或通过市场销售人员拉客户,与客户议论具体需要后签合同。进入研发后,大家的心态就是——尽量早日实现,能用就行,可维护性、优雅什么的都靠一边儿去! 做这类软件,会被 deadline 倒逼着从一开始就集中火力,就像晓得本人哪天要死,但在死之前肯定要做完某件/些事一样,顶着微小的精神压力尽全力、拼膂力。 以我的项目型软件为主的企业或部门,若是我的项目需要多的话,在一个我的项目做完还没怎么喘息就要进入下一个我的项目,开启对集体来说的恶性循环——精力与精神资源的耗费大于补给,在业余能力上成长甚微——只有我的项目不多、工夫短缺或人员足够这三个条件至多满足一个时才可能终止循环。 产品型软件则绝对更加秉承长期主义,须要继续迭代、不断改进,不像我的项目型软件那样交付完就差不多等于完结了。 这类软件的需要次要是由产品经理来开掘与把控,相比我的项目型软件,大家的心态更偏向于把软件做好,也更在乎各层次设计的美感、可维护性等。 从企业角度来说,产品型软件个别是对外的 XaaS 在线服务;但从部门角度来看,就是对内的中台服务。在这样的企业或部门中,集体在业余上的成长什么的也自不用说,开启良性循环的概率比做我的项目型软件为主的企业或部门更大些。 相较之下,产品型软件的生产是脑力密集型劳动,我的项目型软件的生产则是膂力密集型劳动。 优化为何要优化?因为—— 「降本增效」是人们在生产过程中永恒不变的话题、永远的谋求。 欧雷《聊聊中后盾产研一体化:引子》 除非能找到像虫洞那样进行「跳跃(leap)」的伎俩,让想法刚一呈现就曾经实现,否则优化一件事的极限就是实现这件事所需的最小信息量/工作量—— 要做成一件事须要固定的信息量/工作量,就看这部分信息/工作是做到哪里;要做好这件事就得达到这个信息量/工作量,少了就做不好,多了就是无用功。 欧雷的想法 然而,这个「最小信息量/工作量」只能是理论值,就像从一个地点去另一个地点的理论间隔肯定会大于它们之间的直线间隔一样——影响一件事的因素超过一个时必定会或多或少地做「无用功」。 优化就是针对特定问题在特定场景下从工夫和空间上寻找综合的最优解——像不像算法?就是算法! 生产流程中的需要、设计、实现、测验与保护这几个环节是必须的,就算在某些状况下看起来是打消了某(几)个,但理论并没被打消,只是被转移了。 比方以后企业或部门在生产时没有设计环节,并不是软件生产没有设计这个环节,而是设计这个环节被开源软件提供者或其余上游供应商做掉了。 软件生产的参与者往往有很多人,因而而产生的岗位分工重叠、信息传递失真等会导致做很多「无用功」,造成工夫和空间上的资源节约。 这么一看,优化方向很明确——削减分工的重叠局部,缩小信息传递的环节等——以使面向业务的生产流程进行增员为指标进步生产力。 我感觉「以常识作为全链路的惟一可信起源(Single Source of Truth)」是一种形式,日后会在「聊聊中后盾产研一体化」系列文章中具体论述。 以我短浅的眼光看来,至多近五年支流的分工模式不会有什么变动。但随着低代码开发平台的成熟,分工必然会发生变化。 当初的软件生产,简直还是由一家企业或部门一条龙地从最根本的单元做起(疏忽开源工具),逐步变成残缺的软件产品。若低代码开发平台比拟成熟了,那些面向业务的企业齐全能够在洽购低代码开发平台后裁减大量本来用来开发、保护零碎的人员,只留下不几个基于低代码开发平台配置或开发满足业务需要的性能的人员即可。 这种状况下,面向业务的企业就像那些传统企业一样,人员构成绝大部分是解决业务问题或维持公司失常运行的,只有一个由多数人员组成的 IT 部门负责零碎性能的开发和保护,不须要很高的技术能力。 ...

September 21, 2023 · 1 min · jiezi

关于软件开发:反思软件开发软件本身

作为软件开发人员,常会听到「技术服务于业务」这句话,也常被问到「你做的事件有什么业务价值」这类问题。听得多了,被问得多了,天然就会想要给本人做的技术工作找点「合理性」,否则在阶段考评或降职问难时都不知如何表白本人做的事件是「有价值的」。 然而,就像很多情理一样,「晓得」与「了解」之间有着微小鸿沟,仅有其形的话很容易就被揭穿。 本文是我对「软件」从新思考后的了解,有了绝对正确的认知后能力做出更好、更实用的软件——软件从来不是单纯的技术成绩,技术也不是软件最外围的局部。 软件是什么对于这个,比拟接地气且教科书式的说法是—— 软件是一系列依照特定程序组织的电脑数据和指令,是电脑中的非无形局部。电脑中的无形局部称为硬件,由电脑的外壳及各整机及电路所组成。电脑软件需有硬件能力运作,反之亦然,软件和硬件都无奈在不互相配合的情景下进行理论的运作。 一般来说,计算机软件划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机应用提供最根本的性能,然而并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件依据用户和所服务的畛域提供不同的性能。 软件包含所有在电脑执行的程序,和其架构无关,例如可执行文件、库及脚本语言都属于软件。软件不分架构,有其共通的个性,在执行后能够让硬件执行依设计时要求的机能。软件存储在存储器中,软件不是能够碰触到的实体,能够碰触到的都只是存储软件的整机(存储器)或是介质(光盘或磁片等)。 软件并不一定只包含能够在计算机上运行的计算机程序,有些定义中,与计算机程序相干的文档,个别也被认为是软件的一部分。简略的说软件就是程序加文档的集合体。软件被利用于世界的各个领域,对人们的生存和工作都产生了深远的影响。 维基百科《软件》 然而这种书面式的定义并没什么价值,有价值的是更为形象点的了解,也就是软件是事实世界的映射,源于且不会高于事实世界—— 就像《圣经》里形容的——上帝依照本人的样子发明了亚当这个世上第一个人类,又从他身上取下一根肋骨发明了夏娃这个世界上第二个人类。在这里,上帝将本人作为参照提取特色形象出祂所认为的「人」的模型,并依据这个模型发明出「亚当」和「夏娃」。 人在打造数字世界时必然会参照本人所存在的并且是本人所认知的世界,因为人不可能想像出本人无奈认知的事物。人们所形象的事实世界的事物的模型,就成了建设数字世界的根底,而数据则为结构数字世界的根本单元,数字世界成了事实世界的映射。 欧雷《我来聊聊模型驱动的前端开发》 若「道生万物」是「正确」的,借由软件底层的二进制「理当」可能完满结构出事实世界的映射,但这受限于人们对事实世界的认知以及事实世界中硬件、网络等撑持性技术与设施的倒退。 就算在由软件所结构的数字世界中可能呈现事实世界所不存在的事物,但仍然是事实世界中已有事物的「缝合体」,而不是其形成在事实世界中齐全没有参照。因而,不会高于事实世界。 对于咱们所存在的事实世界,有个观点是——就像咱们用软件结构了数字世界一样,事实世界也是「上帝」这个/些「程序员」用「计算机」结构的,咱们人类就是终极的「人工智能」。一个能够类比的直观例子就是《刀剑神域 爱丽丝篇》。 软件的意义对于人们的生存、生存来说,软件是必须的吗?废话,当然不是!那为什么要有或者说要用软件呢?这还用说?是为了更好地达到目标,满足需要呗! 下面的两组自问自答曾经得出了论断——软件存在的意义是为了解决特定畛域问题,大白话就是「满足用户需要」——能够摘出四个关键词:畛域、问题、用户、需要。 确定的「畛域」是产生软件的先决条件。往大了说,是软件提供者要面对的行业,如金融、医疗、教育等;往小了说,是日常工作生存中的某个环节,像理财、看病、上课之类。 畛域必然是软件提供者所感兴趣、相熟的,这样才可能做出好的软件,才有心愿取得收益。对某个畛域没趣味、不相熟的人,他能做出有用且好用的软件?他能看到潜在的商机? 软件的「用户」是人,所面向群体的特色决定了软件要做成什么样以及如何获益。 即使最终应用软件的是一个一个的人,但软件所处理事务的影响范畴是不同的,据此可将用户分为集体和组织两大类。组织就是多集体所组成的个人,因为产生的目标不同又会分为很多种,常见的有家庭、社区、企业、政府等。 「需要」是人在生理或心理层面的须要。集体需要可参考马斯洛需要档次实践,组织需要就是落在盈利、效率、资源等几大方面。 软件所要解决的「问题」不间接等同于用户需要,是对「需要」这个外表出现进行剖析而失去的。问题不肯定就是指标用户的,也可能是行业整体的。 软件的伦理人类的任何科技倒退、工具创造都避不开伦理问题——科技、工具自身是无所谓善与恶的,它们给人们带来的是福还是祸取决于发明和应用它们的人。 大的不说,就拿社交软件来举例——社交软件的性质决定了它逃不开以人际关系为核心的一些问题,如:约炮、骗炮、欺骗。 约炮暂且不说,骗炮和欺骗在广泛观点中都是恶。虽说这来源于用户的需要,看起来与软件提供者毫无关系,他们甚至能够说:「咱们只是提供工具、平台的。」 那么,真就不关软件提供者什么事么?关!然而不是作恶要看状况。 我自己是不支持软件提供者对内容进行监管,但须要有内容举报与解决的反馈机制,若这部分有所缺失,不肯定算作恶。 但有些社交软件,为了抢夺用户流量和抢占市场份额而去打擦边球,从一开始就是去歹意利用兽性,放纵那些事件的产生,这类软件提供者就齐全是在作恶! 就像已经诺基亚的广告词「科技以人为本」那样,咱们该当科技向善而非向恶——从人登程,为人着想,使人幸福——能够把「人」替换成「用户」。 总结软件是事实世界的映射,通过二进制实践上能够完满复刻事实世界,充斥有限可能,但依赖且受限于人们的认知与事实中的条件;对人们的失常生存、生存来说软件不是必须的,软件的存在是为了让人们变得更好;软件提供者不应为了一己私利去歹意利用兽性,对用户和社会造成负面影响。 回到结尾提到的「技术服务于业务」和「你做的事件有什么业务价值」,这两句话理论在说——要先从业务畛域和用户需要中剖析出问题的确切所在,再依据问题的性质、特点等制订解决方案——毋庸置疑,技术计划是其中的一部分。 本文其余浏览地址:集体网站|微信公众号

September 20, 2023 · 1 min · jiezi

关于软件开发:只需3步用华为云CodeArts快速搭建一个网上商城

华为云软件开发生产线CodeArts是面向开发者提供的一站式云端DevSecOps平台,其提供的10多个子服务笼罩了需要下发、代码提交、代码查看、代码编译、验证、部署、公布等软件交付全生命周期环节,提供软件研发流程的端到端反对。 华为端到端(HE2E)DevOps施行框架,是联合了华为30年研发教训并汇合了业界先进的实际所造成的一套可操作可落地的麻利开发方法论,明天咱们就将通过一套汽车零部件配件电子商城示例代码“凤凰商城”介绍如何应用软件开发生产线实现HE2E DevOps框架。 在实际前,咱们须要先实现账号注册及实名认证、收费开明CodeArts套餐、创立DevOps全程流程我的项目(倡议在PC端操作)。 第一步,注册华为账号并实现实名认证如果之前曾经注册并实名认证过,间接登录即可,无需再次注册。注册地址:https://auth.huaweicloud.com/authui/login.html#/login 第二步,登录CodeArts官网收费开明0元套餐登录CodeArts官网地址:https://www.huaweicloud.com/devcloud/?utm_content=phoenix_mall ,在首页抉择套餐包,点击收费开明。 第三步,创立DevOps全流程我的项目点击“创立我的项目”,抉择示例我的项目中的“DevOps全流程示例我的项目”。 至此,凤凰商城的我的项目就创立实现了。 具体练习流程能够参考华为端到端DevOps实际的施行步骤: https://support.huaweicloud.com/bestpractice-devcloud/devclou... 通过此流程,你将能够学会: 如何应用CodeArts进行麻利我的项目布局如何应用CodeArts治理我的项目配置如何应用CodeArts进行麻利测试治理如何应用Git代码托管撑持麻利团队继续交付如何应用动态代码查看确保变成标准的无效落地如何应用继续集成,放慢代码品质反馈速度如何应用继续公布,在代码更新后主动实现利用部署如何构建继续交付流水线,串接代码托管、代码查看、编译构建和自动化公布话不多说,连忙口头起来吧! 华为云CodeArts已正式上线官网https://www.huaweicloud.com/devcloud/?utm_campaign=codearts&u...

September 12, 2023 · 1 min · jiezi

关于软件开发:828-B2B企业节ROMA-Connect探究数字化转型之道

2023年9月5日,第二届“828 B2B企业节--企业快成长PaaS与大数据技术创新论坛”在天津揭幕。 在数字化时代,企业正面临着强烈的竞争和一直变动的市场环境。为了应答挑战,越来越多的企业开始关注云计算、大数据等技术。 PaaS作为一种新兴的软件交付模式,为开发、部署和管理应用程序提供了灵便高效的形式。而大数据技术则通过对海量数据的剖析开掘,为企业提供更有价值的商业洞察。 论坛汇聚了来自行业的专家、企业和技术首领,独特围绕PaaS与大数据技术的交融和翻新开展,探讨将来发展趋势、翻新利用及市场前景。 华为云ROMA Connect产品专家马兵东在会上做了“数字化转型之道:数字化 全联接 多云协同”的主题分享。企业的数字化转型可大大晋升获取技术和资源的效率,加强感知和响应市场的能力。尤其进入到软件2.0时代后,软件和AI将会以数据为核心,数据成为企业竞争力的要害生产因素。同时,数据也呈现出起源泛在化、智能化、指数级增长的特色。 另外,组装式交付也将成为策略级技术趋势,到2025年,全社会须要构建5亿个企业新利用,超过前40年软件数量总和,是以后业余开发者可交付能力的5倍,其中70% 的新利用将由全民开发者通过低代码平台实现。组装式交付具备IT可编排能力,再造价值流,按需而变的劣势,可实现业务能力模块化,疾速响应业务变动,给用户带来体验多样性的目标。 然而在企业数字化转型过程中,90%的遗留零碎须要持续应用,数据孤岛解放了数据价值开释,企业业务的复杂性和多样性要求企业具备“多云协同”的能力。在这一背景下,ROMA Connect应运而生,源自华为10年+数字化转型实际,可帮忙企业疾速、简略的买通并治理遗留零碎与云原生利用,联接多云,打消数字鸿沟,构建业务敏捷性,驱动数字化转型。 华为云ROMA Connect是新一代的企业级集成即服务平台。它交融了企业数字化转型罕用的集成场景,包含利用及服务集成、数据集成、音讯事件集成、IOT设施集成。ROMA Connect自研智能集成引擎,通过机器学习和AI算法,咱们可能在肯定水平实现集成自动化,繁难化,智能化。整体进步集成开发的用户体验,准确率和开发效率。 ROMA Connect自2019年在华为云正式商用以来,曾经笼罩数千家企业级客户。目前也实现了全新降级:“积木”式组装+智能化生成,效率10倍晋升。 新一代连接器:丰盛的预置连接器、处理器,凋谢可扩大 内置丰盛的连接器,笼罩数据库、音讯零碎、ERP、办公协同、即时通讯、邮箱、DevOps平台、EDI等行业协定、MQTT等物联协定凋谢自定义连接器能力,用户和ISV搭档可灵便定制扩大,丰盛集成资产目录,共享共用新一代积木式组装:预置行业模板,开箱即用 预置丰盛的开箱即用模板,升高集成开发起步门槛服务集成、数据集成、音讯集成、设施集成、事件集成5大集成办公、财务、营销、研发、生产等各畛域系统集成新一代部署状态:分布式部署,云边端一体化,多级互联 匹配企业组织和IT架构的部署架构,反对私有云、混合云、边缘云灵便部署,跨云、跨地区互联互通,实现多级互联从不同的地区,多种业务零碎多种异构数据源采集数据的同时,不毁坏企业的平安边界新一代商业模式:灵便调配,企业可依据RCU按需付费 基于Serverless技术,对立集成组件运行时,算力以RCU(ROMA计算单元)单元化治理,用户灵便按需调配 ROMA 智能助手:智能创立,随心而动;极简创立,极智体验 唤醒人工智能,通过自然语言形容生成集成业务流通过提醒语,关键字预测, 进步用户输出效率 华为云ROMA Connect源自华为云数字化转型实际。以华为为例,目前须要联接2100个利用,50+SaaS和PaaS,100+生态搭档,50万+设施,20+个区域,170个国家,总结了六大实际: 实际一 新老兼容,使能华为实现安稳、疾速数字化转型和上云 双模式集成平台:ESB+新集成平台ROMAESB作为传统集成平台,稳固为主持续负责传统利用和软件包集成ROMA作为新集成平台,灵便和效率优先,联接云、搭档、SaaS、物联网数据,并实现寰球互联互通实际二 非侵入革新,现代化legacy利用,与云上利用无缝集成 要害计划:以高效、轻量的形式实现软件包服务化革新,具备与云通信能力(1)对软件包进行非侵入式革新,利用数据转换传输能力,通过配置式plugin,提供音讯及API化能力。 (2)API Gateway寰球跨网路由和编排,以及音讯集成能力。 实际三 实现API平台归一治理,实现“度量衡”对立 技术架构归一:技术栈和架构设计准则保持一致,用户体验及API保持一致服务经营归一:实现“度量衡”的对立,标准、指标、规范、术语保持一致组织团队归一:产品团队对立运作,对立指标,公共能力建设归一化实际四 华为外部IT零碎寰球跨云跨网互联互通 要害计划:(1)API 和消MQS音讯,云上对立治理,云上、云下分布式运行,无缝买通企业公有云与私有星散成数据、音讯、API通道。 (2)跨云跨网多级互联,可能运行在公有云、私有云、混合云多云环境。 实际五 买通OT与IT,向智能制作转型 基于ROMA、大数据分析、多IoT平台构建多零碎、设施的数据集成平台,制作资源数字化,资源信息实时可视,撑持资源动静调配和异样解决。 撑持产线单板RFID数据采集及指令管制撑持车间人员、周转车基于UWB的高精度室内定位撑持车间设施、传感器(温湿度)的数据上报实际六 碎片化的园区配备对立治理,使能园区高效作战 买通多协定设施:提供硬件网关和多种软件SDK,适配MQTT、HTTP、Modbus、OPC UA等多设施和数据协定买通多级物联网络:提供多级转发能力,买通从边缘计算、制作专网、物联专网、再到企业DMZ、Intranet等各种隔离网络买通多地区和网络环境:ROMA云上对立治理,云上、云下分布式运行,可能运行在公有云、私有云、混合云多云环境,适配DMZ等多种网络环境买通多园区工控平台:ROMA通过API集成等形式,对接企业外部因为历史起因可能存在的多园区工控平台协同搭档生态,曾经集成10多家搭档的设施 华为云是亚洲惟一、间断两年进入Gartner“企业集成平台”魔力象限的厂商。华为云ROMA Connect也取得“可信云用户案例最佳实际奖”及“API全生命周期治理可信云先进级认证”。 华为云ROMA Connect以后曾经在多个行业成功实践,笼罩制作、智慧城市、社区、能源、交通、政务、教育、智慧园区等9大行业,积淀了华为长期服务政企客户的教训,聚焦数字化资产治理、使能行业和大型政企资产复用和数字化转型。在政务畛域,华为云ROMA Connect助力江苏财政数字化转型,实现外围业务零碎省级利用“大集中”,无效解决扩散建设造成的业务标准不对立、技术标准及数据结构不兼容等问题,构建全省财政信息化一盘棋倒退“新模式”;在电力行业,华为云ROMA Connect助力国家电网数字化转型,打造全域物管平台。国家电网数字化平台现在可接入12万台智能终端,交融28个App,100万网关子设施集中管理和运维。此成功实践也失去大力推广应用,现在已复制到其余9个省市。 面向未来,华为云ROMA Connect会在全域交融集成、组装式交付、智能集成和自动化等畛域继续翻新,为开发者带来更智能、更高效、更灵便的集成体验,助力客户打造数字化“信息枢纽”基础设施,实现企业应用现代化。 理解ROMA Connect 体验链接: https://www.huaweicloud.com/product/roma.html

September 6, 2023 · 1 min · jiezi

关于软件开发:2个视频教你正确使用华为云部署服务CodeArts-Deploy

随着互联网、数字化的倒退,公司机构与各类企业往往须要进行大量频繁的软件部署,部署设施类型多样,如:本地机器、云上裸金属服务器、云上虚拟机与容器等。面对多种部署模式、分布式简单运行环境,如何用最短时间、高质量、安全可靠的进行软件部署,这曾经成为一个广泛关注的课题。 华为云公布继续部署服务CodeArts Deploy,通过模块化自在编排部署流程,实现软件的自动化部署,帮忙企业软件产品的疾速、高效、高质量交付。 为了让您更好地理解并应用CodeArts Deploy,本文将通过2个短视频为你介绍CodeArts Deploy的个性实际操作。 01 主机资源池创立CodeArts Deploy部署服务用于托管行将部署的主机集群、Kubernetes集群等根底资源,将资源导入到利用下用于部署。指标主机作为最终部署的对象,将制品等资源部署到环境内,代理主机可为其余无公网IP的指标主机提供拜访通道能力。https://www.bilibili.com/video/BV1HV411G7yC/?aid=404289111&ci... 02 部署形式介绍CodeArts Deploy部署服务提供了15个部署模板,40+个部署步骤插件,涵盖根底软件装置、文件操作、软件部署等方面;提供了疏导式创立及模板创立,针对新用户采纳决策树的疏导形式,使用户疾速上手,升高应用老本。 https://www.bilibili.com/video/BV1p8411d7cK/?aid=231789891&ci... 目前华为云CodeArts Deploy已服务华为外部以及宽广私有云客户,笼罩金融、物流、能源、汽车等多个行业,帮忙用户实现利用的高效迭代和疾速部署。 例如,华为外部应用CodeArts Deploy后,利用部署一次性成功率直线晋升超过80%;某头部大型物流企业,其全副产品线100多套零碎平台应用CodeArts Deploy进行部署交付,效率较之前晋升超过30%,大大缩短软件交付周期。 将来,华为云CodeArts Deploy将打造提供可灰度、可回滚、可监控、可追溯的轻量化软件公布上线能力,助力企业实现利用的高牢靠疾速公布。 华为云CodeArts Deploy服务已上线:https://www.huaweicloud.com/product/cloudpipeline/board.html?...

September 6, 2023 · 1 min · jiezi

关于软件开发:开箱即用3个视频教你玩转华为云CodeArts-Board

华为云CodeArts Board看板服务为企业管理者、项目经理、团队Leader、开发者提供面向DevSecOps畛域端到端的研发效力度量能力,提供从需要、缺点、代码、构建、测试、部署、公布到经营等研发各阶段作业数据的剖析洞察能力,笼罩交付品质、交付效率、交付能力、交付老本、交付价值,同时集成了华为先进的方法论和优良实际,助力企业数字化转型和数据驱动经营及治理,晋升企业软件能力可信和研发效力。为了帮忙您更好地应用CodeArts Board,本文将通过3个短视频带你走进CodeArts Board! 01 驾驶舱介绍驾驶舱为企业提供了一站式的数据决策治理服务,企业的不同角色能够在驾驶舱实现治理作战,从而无效撑持企业数据驱动经营及治理。 https://www.bilibili.com/video/BV1c8411B7v3/?aid=233094304&ci... 02 指标库介绍提供了100+的指标库,开箱即用,涵盖工作项、测试用例、代码查看、部署、代码合入、构建及工时主题畛域,波及组织、团队、我的项目、集体视角,可能满足企业罕用的研发效力度量场景。 https://www.bilibili.com/video/BV1i94y1s78j/?aid=363076661&ci... 03 权限设置和团队治理介绍基于企业研发效力的分层治理机制,撑持企业建设面向组织的权限管理体系,反对不同角色权限设置和团队治理。 https://www.bilibili.com/video/BV1Hu411P7ky/?aid=533100610&ci... 过来30年来,华为云公司一步步经验了软件研发过程的可视化、软件交付的可治理可跟踪可量化的效力研发的倒退历程,华为云联合本身在研发效力度量畛域积淀的优良方法论和最佳实际,造成丰盛而残缺的研发效力体系,实现数据驱动研发效力晋升,助力企业研发数字化转型。 将来,华为云CodeArts Board将持续外溢更多华为云在研发效力晋升上的优良个性和实际,如研发数据的智能洞察、智能预警、智能体检报告等,助力企业研发数字化转型。 华为云CodeArts Board服务已正式上线官网,点击下方链接即可体验https://www.huaweicloud.com/product/cloudpipeline/board.html

September 4, 2023 · 1 min · jiezi

关于软件开发:开箱即用教你如何正确使用华为云CodeArts-Pipeline

软件继续交付流水线是一个可视化的自动化工作编排调度平台,串联编译构建、代码查看、自动化测试、部署公布等工作,承载软件从代码提交到公布上线全自动化流程。一次配置后即可反复触发执行,防止频繁低效的手工操作。 华为云流水线服务CodeArts Pipeline,旨在晋升编排体验,凋谢插件平台,以及提供标准化的DevOps企业治理模型,将华为公司内的优良研发实际赋能给搭档和客户。为了让您更好地理解并应用CodeArts Pipeline,本文将通过5个短视频为你介绍CodeArts Pipeline的五大个性实际操作。 体验地址:https://www.huaweicloud.com/product/cloudpipeline.html 01企业级CICD策略管理能力CodeArts Piipeline流水线服务提供基于规定和策略的流水线阶段准出条件治理能力,用户可基于插件创立适合的规定,设置基于插件输入的阈值比拟条件,并在策略中进行援用,最终配置到流水线准出条件中进行利用。流水线服务反对租户、我的项目分层策略管理,助力高效项目管理保障产品交付品质! https://www.bilibili.com/video/BV1Cm4y1s7v5/?aid=701551473&ci... 02微服务与变更流水线CodeArts Pipeline流水线服务提供了基于微服务DevOps的麻利变更开发模式,能够实现疾速主动合并代码,做到个性按需公布,减速企业价值变现。同时提供变更承载微服务需要的开发、测试、公布、上线全过程,全流程e2e可追溯。 https://www.bilibili.com/video/BV1Vp4y1V7n5/?aid=956721897&ci... 03 变更的创立与公布CodeArts Pipeline流水线服务提供了基于微服务DevOps的麻利变更开发模式,依照开发中、待发布、公布中、已公布的阶段状态进行更新,微服务能够通过变更公布流水线,公布一个或多个变更来实现我的项目的疾速交付,同时变更作为研发交付的载体,能够在变更下面增加门禁等流程来管制变更的品质。 https://www.bilibili.com/video/BV1fk4y137t6/?aid=744161578&ci... 04自定义插件的注册与应用CodeArts Pipeline流水线服务提供了一套规范的流水线扩大插件接入形式,让企业可能疾速将已有工具链接入插件平台,或基于本身业务须要疾速开发和公布插件,并在企业内实现共享共建减速企业上云。通过打造可视化、低代码、凋谢的插件市场,充分利用企业内的开发能力及需要打磨插件生态,实现高复用低定制DevOps插件市场。 https://www.bilibili.com/video/BV1TX4y177Xo/?aid=359214370&ci... 05 流水线的创立与编排CodeArts Pipeline流水线服务提供了灵活多样的工作编排能力,内置阶段、工作、步骤三级编排模型,反对阶段内工作串行、并行混合编排,反对代码实时、手动、变更等多种流水线触发执行策略。 https://www.bilibili.com/video/BV16841127w1/?aid=231661871&ci... 基于以上五大个性,华为云CodeArts Pipeline能够帮忙企业建设高效的、可扩大的流水线自动化作业系统,并且通过DevOps研发策略管理,继续规范化客户流水线建设,助力企业高效高质量交付。现在,华为流水线服务曾经反对华为公司云计算、ICT、终端等多个产业的软件继续交付,撑持超过6万软件开发人员日常工作,每日执行高达百万次。将来,华为云CodeArts Pipeline将在平台的开放性,研发数字化治理上继续发力。反对跨workflow的编排、跨平台的交互能力;继续外溢更多企业策略管理模型。CodeArts Pipeline始终以帮忙企业建设自动化、标准化和规范化的流水线作业系统为指标,继续为客户发明价值。

August 23, 2023 · 1 min · jiezi

关于软件开发:如何科学地利用MTTR优化软件交付流程

谷歌提出的掂量 DevOps 品质的 DORA 指标让 MTTR(均匀复原工夫) 名声大振。在本文中,你将理解到 MTTR 的作用、为什么它对行业钻研很有用、你可能被它误导的起因以及如何防止 MTTR 产生的弊病。  MTTR 到底是在测量什么?MTTR 指均匀复原工夫,既是 Mean Time to Recovery,有时也是 Mean Time to Restore。它是指在产生故障后使零碎复原运行所需的工夫,它是 DORA 指标的一部分,目前曾经成为软件交付性能的规范。  当你的所有 DORA 指标都体现良好,那么就会领有疾速交付的高质量软件、更称心的员工,从而在所处的行业中获得竞争劣势。  如何计算 MTTR收集 MTTR 须要收集每个故障从开始到完结的持续时间,而后将这些工夫相加,并用总数除以数量。一些团队会对所有事件进行排序,并抉择两头值来计算复原工夫的中位数。  软件交付过程会影响复原工夫,尤其是: 软件架构文档可观测性部署流水线性能 当你能够疾速复原,事件的影响就会升高,客户也会更称心。因而,企业应该检查和调整流程以疾速复原并升高危险。  为什么 MTTR 对行业钻研很有用?DevOps 钻研和评估(DORA)将考察作为钻研办法的一部分。须要各类数据和性能程度不同的企业对问题进行答复。DORA quick check 将 MTTR 问题表述为:  对于您开发的次要应用程序或服务,当产生影响用户的服务事件或故障(例如,计划外中断、服务受损)时,通常须要多长时间能力复原服务? 超过6个月1-6个月之间1周到1个月之间1天到1周之间小于1天小于1个小时 大多数从事软件交付工作的人对故障持续时间都有大略的感觉,因而在考察中应用宽泛的选项能够让人们很容易抉择答案。钻研人员利用这些信息来寻找数据中的性能组,他们还寻找各种实际之间的关系以及对业务成绩的影响,并利用这些发现搭建 DevOps 构造方程模型。  为什么 MTTR 数据可能误导你的团队?尽管 MTTR 在钻研中对性能组有帮忙,但这并不是你在团队中应用故障信息的形式。你应该利用这些信息从服务中断中学习,并改良今后的解决形式。最终目标并不是与其余团队或组织进行攀比。  如果要继续优化软件开发和交付流程,只关注平均数可能疏忽了一些重要信号。因而须要更细化的信息来理解故障解决的状况,并找到其起因。  Verica 事件数据库(VOID)蕴含了由近600个组织共享的超过10000个事件,他们在 VOID 报告中剖析了这些事件。在2022年的报告中对 MTTR 做出如下评论:  MTTR 不是掂量简单软件系统可靠性的可行指标,起因有很多,其中突出的起因是其存在潜在的差异性。  当数据量很大时,平均数所带来的差异性会变得平缓,但一般而言企业的故障频率不太可能会达到每月数千起(即在这个数量级才使平均数无效)。如果事件数量较少,平均数则成为一个不稳固的指标。甚至只管在事件治理方面有所改进,但平均数仍旧在减少。  VOID 数据库还发现,大多数事件在2小时内失去解决,但存在一些长尾数据导致平均值被推高或推低,进而无奈代表客户对待系统可靠性的形式。  组织能够通过排除异样值来打消这种差异性,但那样就会暗藏一些有价值的信息。因而须要一个更好的办法应用这些数据来改善整个流程。  复原时长的用武之地与其把事件复原工夫压缩成一个平均数,不如把每个持续时间绘制在图表上。应用散点图或箱线图(Box-and-whisker chart),在不失真实性的状况下将持续时间可视化。这能够显示趋势和异样值,这比平均数更有价值。    你当初能够清晰地理解修复时长的趋势,看看是否随着工夫的推移而改善。还能够辨认出异样值,并充沛探讨如何更好地解决它们,进而利用它们来改善事件治理和零碎稳定性。  如果事件须要代码修复,复原工夫取决于部署流水线的性能。可能疾速、平安地部署软件新版本也有助于进行事件治理。另外,引入监控和告警工具有助于帮忙企业在影响客户之前发现问题。  ...

May 30, 2023 · 1 min · jiezi

关于软件开发:Scrum进入疲惫期三点帮你走出困境

《麻利软件开发》中提到: “Scrum能够帮忙团队更好地应答变动和不确定性,以及更快地响应客户需要。通过继续的反馈和改良,Scrum能够进步团队的适应性和灵活性。”  然而,有些团队在应用Scrum后,却呈现了工作工作越来越多、加班越来越重大、迭代总是完不成的状况。明明Scrum能进步团队的效率,那为什么会呈现这些问题呢?    1、团队不足对Scrum的了解和反对团队成员对Scrum的基本概念、角色、典礼和工具等不足理解,在Scrum实际过程中无奈正确的利用,导致在实际变得十分凌乱。 构想一下,明明很多工作曾经安顿好了,想要应用Scrum就必须将这些工作从新拆解成一个个迭代。如果团队成员没方法了解这样做的用意,一旦呈现问题,团队成员会呈现显著的抵触情绪,Scrum就会难以推广,这也会造成一个恶性闭环。 2、团队不足无效的沟通和合作Scrum强调团队单干、迭代开发和继续反馈,团队之间不足无效沟通很可能呈现以下状况: 开发人员没有及时告知测试人员他们所做的更改,测试人员就无奈及时测试这些更改,导致我的项目进度延误;设计人员没有与开发人员充沛沟通,开发人员没有正确理解设计人员的用意,导致设计上的谬误。 每日站会、迭代打算会议的初衷是为了让团队成员之间更加理解我的项目与彼此,肯定水平上防止因为信息差、了解失误等造成我的项目推延。 3、团队不足对工作量和进度的掌控一种状况是团队成员高估了本人能力,导致呈现单个工作工夫估算谬误或整个迭代周期估算谬误。另一种状况是成员低估了需要工作量,明明须要两个个迭代实现的工作仅仅只安顿在一个迭代中。 无论是哪一种状况,想要工作在规定工夫内胜利交付就须要团队成员加班加点。因而,团队不足对工作量和进度的掌控也是导致Scrum应用疲乏的起因之一。 在Scrum履行过程中,难免会有团队呈现上述情况。当然,这所有并不是Scrum自身的锅。那如果团队呈现这些问题,咱们该采纳如何解决呢? 1、增强对Scrum的了解和反对团队成员须要理解Scrum框架的具体介绍,包含角色、典礼、工具等,踊跃地参加Scrum流程中。只有真实感受到Scrum带来的益处,团队成员才会从心底接收它。 同样地,团队负责人要提供必要的反对和帮忙,来确保团队可能充分发挥Scrum框架的劣势,进步我的项目的效率和品质。 2、建设无效的沟通和合作机制团队成员应积极参与每日站会、迭代打算会议、团队回顾会等,及时分享本人的停顿、问题和需要,以确保团队成员之间有充沛的沟通和合作。 举个例子,梳理会是PO向团队成员阐明将来迭代要做哪些需要的流动,开完梳理会再开打算会议,团队成员会对需要有更好的了解。梳理会尽管不是Scrum规范流动,但理论生产中,很多Scrum团队都会在迭代中插入梳理会,帮忙团队对需要达成共识,确保下一个Sprint顺利进行。 这里还要留神一件事件:防止团队外部无意义的内卷。 每日站会会汇报做了什么、要做什么、须要什么帮忙,这难免会呈现成员之间互相比照,很容易造成无意义的内卷。 3、采纳适当的工具和技术来掌控工作量和进度如果团队成员对需要了解到位,可每个迭代还是被一大堆工作压着,那就有可能是打算会议上工作领多了,这就须要对团队速率以及每个需要的工作量有一个很好的估计。 应用项目管理软件是很必要的!如看板、燃尽图等可视化工具能帮忙团队成员更好地掌控工作量和进度。这有助于团队成员理解他们的工作进展和需要,并及时调整计划和工作量。 除此以外,建设良好的团队文化、造就团队成员的技能和能力、关注团队成员的衰弱和幸福感等都能够帮忙团队走出Scrum疲乏的窘境。 写在最初麻利十二准则提到过:“麻利过程提倡可继续开发,责任人、开发人员和用户要可能独特维持其步调稳固连续。”  咱们不难看出,Scrum 提倡精益思维,其初衷是进步团队效率,开发投合市场的产品。一旦团队呈现各种状况,Scrum Master 就应该进行反思,及时疏导团队做出调整,从而促成团队继续高效地倒退上来。

May 19, 2023 · 1 min · jiezi

关于软件开发:2023年汽车软件行业趋势分析安全性是汽车软件开发的重大挑战2023年汽车软件开发

随同电动化、主动驾驶和混合能源车辆的倒退,汽车行业正正在经验重大改革,面临着新的市场需求和挑战。浏览本文,您将理解到《2023年汽车软件开发现状》报告中强调的值得注意的汽车软件开发趋势,还可在文末获取残缺报告。 汽车软件畛域的新趋势过来,咱们只须要把引擎盖关上、察看一下,就能对汽车的工作原理有一个根本的理解。但当初曾经没那么简略了。古代的车辆上装备了大量软件,为了进步用户体验,并为驾驶员提供平安和便当性能。所有的这些软件都必须思考到平安和防备性。 电动汽车的减少 依据《华尔街日报》的数据,2022年销售的新车中电动汽车占了10%。所以,咱们一点也不奇怪此次考察的汽车专业人士中有45%示意,电动汽车在很大水平上促使他们在设计方面投入更多,同时还有45%的人示意它带来了肯定的影响——比去年减少了7%。 尽管关注的重点更多地向电动汽车转移了,但汽车专业人士最关注的依然是车辆的平安。因为目前还没有专门针对电动汽车的性能平安规范,所以对传统车辆来说至关重要的规范,对电动汽车来说同样实用,其中最重要的是就是ISO 26262。 随着电子元件数量的减少,ISO 26262对电动汽车越来越重要,因为它实用于车辆中的所有电动和/或电子系统。 《2023年汽车软件开发情况报告》的次要内容该报告对寰球400名汽车专业人士进行了考察,以更好地理解他们遇到了哪些挑战,并理解他们如何跟上一直变动的行业和客户需要。考察问题还包含他们应用了哪些最佳实际和工具来应答这些重大变动。 这些答复的残缺后果可在2023年汽车软件开发情况调查报告中查看。 强调最大化利用资源和人才 往年,对汽车企业影响最大的市场情况就是寰球经济。通货膨胀、近程/混合式办公、供应链和芯片短缺等条件也是排名前列的问题。 只管汽车行业增速在2022年放缓,但预计往年车辆销售数据将反弹。ABI Research预测,2023年新消费者和商用车销售将增长5%。制造商和供应商须要明智地利用本人的资源,进步生产程度,满足消费者需要。 为了放弃增长,38%的受访者示意他们将专一于放弃行业竞争力,26%的受访者将最大限度地利用现有资源。 作为商业策略的一部分,17%的受访者示意他们将专一于教育现有人才。为现有团队成员提供所需的培训,以及雇用和留住适合的人才,是往年的报告中出现的总体趋势。 汽车软件防备与平安等同重要 依据网络安全和数据管理平台Upstream最近的一份报告,从2021年到2022年,对车辆的API网络攻击数量减少了380%,占攻打事件总和的12%。随着汽车软件平安危险的降级,受考察的汽车业余人员最放心的平安问题是施行平安编码实际的艰难。 然而,正是这些担心在激励开发团队采纳更弱小的平安实际。事实上,有73%的受访者曾经或正在施行“左移”策略,这意味着他们采纳了在软件开发生命周期的晚期进行测试的办法。通过更早地进行测试,能够更轻松地辨认和解决软件安全漏洞、谬误和缺点。 此外,绝大多数汽车专业人士示意,他们须要恪守ISO/SAE 21434,这是一项汽车规范,次要针对车辆电子系统中的网络安全危险。尽管这个平安规范大多是客户的要求而不是市场强制性的规范,但它对于汽车开发来说仍旧很重要,因为以后的平安要害规范不足以涵盖网络安全危险。 规范合规性依然很要害 汽车软件开发过程的一个要害局部是确保软件合乎行业标准和准则。如前所述,汽车性能平安规范ISO 26262对于所有汽车软件开发都是必不可少的,有高达80%的受访者都必须恪守该规范。 此外,依据受访者的说法,证实合规状况的次要挑战在于难以满足所有平安要求,以及提供必要的证据证实所有合规要求已失去满足。 再加上证实和验证软件的挑战(受访者普遍认为这是最耗时的工作),执行必要的规范可能是一项艰巨的工作。 施行和验证性能规范的最无效办法之一是应用动态剖析工具,比方Helix QAC和Klocwork。 理解无关2023年新兴汽车软件开发趋势的更多信息随着越来越多的硬件组件被软件所取代,保障汽车软件的防备和安全性变得至关重要。通过查看行业钻研,您不仅能够跟上往年的趋势,还能预测将来几年的发展趋势。点击下方按钮,下载《2023年汽车软件开发情况报告》,其中蕴含70多页的剖析、数据图表以及次要挑战、最佳实际和新趋势等内容。 立刻下载

May 17, 2023 · 1 min · jiezi

关于软件开发:如何降低电动汽车软件的开发成本和风险

大多数的汽车制造商无奈从销售电动汽车(EV)中取得利润,但打算疾速进入市场的电动汽车初创公司是无奈承当这样的损失的。 因为飙升的电池价格、昂扬的组件老本和低迷的销量减弱了盈利能力,电动汽车初创公司必须将眼帘转到软件开发,从估算、进度和人力投入程度等方面提高效率。初创公司要想找到解决以上问题的路径,就必须要理解电动汽车软件开发面临的次要挑战。 正如本文所论述的观点,降低成本并不一定意味着须要进步车辆售价或裁员,你能够在高度简单且受监管的软件环境中找到更加智能的解决方案。 电动汽车软件开发的范畴每辆电动汽车都是一个车载软件平台。因而,设计、编写和验证代码是进步开发效率的第一步。汽车部件能够被合成为不同的软件畛域,以帮忙您理解其对人力投入、估算和进度的影响。 这些电动汽车的软件畛域包含: 底盘(例如制动和悬架)——因为这个畛域历史悠久且存在多个供应商,电动汽车初创公司必须思考为新性能改装现有技术,如高级驾驶辅助零碎,简称ADAS;动力系统(例如电机、逆变器)——须要开发大量的新软件,来治理电气化组件和主动驾驶零碎;电池——电池治理和爱护,以及平安运行,是对软件团队的要害要求;主动驾驶零碎——主动驾驶汽车须要与现有底盘和能源总成零碎进行简单的集成。连贯——车内互联网、无线(OTA)更新、车载信息娱乐零碎(IVI)等将给软件开发带来对于可靠性和安全性的微小挑战。对于电动汽车初创公司来说,这些畛域更多地偏向于新的、前沿的软件组件,且对性能平安和安全性有很高的要求。与传统的汽车制造商不同,初创公司必须从头开始构建这些组件,同时还要应答投资者信念、开发人员招募和监管合规等商业事实方面的挑战。 电动汽车初创公司应该关注的三大挑战除了上市工夫和供应链问题外,以下是影响电动汽车软件开发的三大挑战,以及开发团队应该如何解决这些问题。 通过规范合规来爱护消费者和业务有些开发人员可能感觉恪守汽车行业的平安和防备规范会妨碍翻新和公布的速度。但事实的状况是,规范和指南提供了一个预约义的框架,可能爱护业务不呈现重大的故障或问题。 有三个常见的汽车规范: ISO 26262 ISO 26262标准规定了性能平安流程,以缩小对车辆乘员的危害,它基于一个危险分类零碎,被称为汽车平安完整性级别(ASIL),并通过验证开发制品库来证实合规性。 MISRA 由制造商、部件供应商和工程征询公司开发和保护,MISRA提供C和C++编码指南,帮忙确保代码平安、牢靠和可移植。 CERT CERT是由软件开发和软件平安业余人员社区共同开发的C、C++和Java指南,帮忙人们确定违反特定规定或倡议可能造成的结果。 对于电动汽车初创企业而言,规范合规是一个辣手的工作:布局、测试和报告必须从一开始就纳入开发流程中。如果疏忽了合规性或是流程前期才考它,公布工夫就会越来越紧凑,并且在推出产品前要给监管机构提供证据,以证实产品合规。这将威逼到原型车的生产和交付给消费者的工夫。 尽量减少通货膨胀的影响通胀压力正在打乱汽车供应链中已有的定价模式,并限度消费者的购买力。电动汽车初创公司不能期待无利的市场条件,但在其软件团队中能够寻找机会,创立具备老本效益且可继续的实际。 初创公司的益处在于,开发人员想要测试和采纳新工具来简化工作的时候不用花工夫征求许可。他们踊跃地钻研任何工具和技术,只有可能帮忙他们交付稳固且合规的代码。开发团队的领导者能够通过梳理以下内容来进步这种敏捷性: 所有以后开发流程中的应用程序和工具能缩小手动操作并进步工作效率的新工具每种工具的所有权和负责人谁能拜访它们以及拜访频率每个用户/团队的每个工具的老本工具和流程中的冗余许可条款和续订日期采纳无效的自动化技术尽管大多数的科技守业公司都偏向于雇佣那些自发解决问题的人(通常还要身兼数职),但电动汽车软件团队不能把危险管制的责任交给运气,这个赌注太高了。所以,您须要通过动态剖析工具(如Helix QAC和Klocwork)主动执行简单而繁琐的工作,这样能够升高危险并帮忙开发人员专一于交付价值。思考到规范和平安合规要求的严格性,以下是电动汽车初创公司能够利用动态剖析工具等自动化技术的畛域:编码标准的合规性——辨认是否违反了平安和防备规范中的规定和准则;代码覆盖率的合规性——满足ISO 26262代码覆盖率要求,如语句、分支和MC/DC;问题优先级排名——依据危险对问题进行排名,避免浪费工夫或让开发人员产生“问题疲劳”。应用动态剖析工具升高电动汽车初创公司的翻新老本是时候缩小节约了。随着通货膨胀造成的供应链稳定,以及市场监管的壁垒越来越高,电动汽车软件开发团队当初必须优化开销,并建设灵便和可适应的工具和流程,以便应答将来的不确定性和变动。 Perforce的动态代码剖析和SAST工具让电动汽车软件开发团队可能轻松晋升开发的效率。这些工具应用精准确切的动态代码剖析性能来帮忙您确保代码在品质、可靠性、安全性和防备性方面继续合乎相干规范和要求。从概念验证到移植到新车型,Helix QAC和Klocwork帮忙您高速开发,并升高市场危险。 文章起源:https://bit.ly/3M3ovKR

May 10, 2023 · 1 min · jiezi

关于软件开发:低代码感觉很能打可视化搭建系统把格局做大

有人说「可视化搭建零碎」说到底只是反复造轮子产生的玩具; 有人说「可视化搭建零碎」实质是组件枚举,毫无意义。 全面的认知必有其产生的情理,但咱们无妨从更高的角度登程,并真切落地实际,兴许你会发现:咱们能做的事件还有更多。 我对低代码的了解低代码开发,是一种开发模式,通过图形化用户界面来配置和创立应用软件,而不是像传统模式那样次要依附手写代码。对应的,提供给开发者的这类低代码开发性能实现的软件,称为低代码开发平台。  低代码开发模式的开发者,通常是不须要具备十分业余的编码技能,或者不须要某一专门畛域的编码技能,而是能够通过平台的性能和束缚来实现业余代码的产出。 举个例子:Photoshop是一个十分驰名的图片编辑软件,业余而且简单。PS高手能够用这个软件实现十分牛逼的图片编辑操作,追根溯源,其对图片的每一步操作的背地都有着非常复杂的图像处理算法,也会波及到大量编码。但使用者不须要写这些简单的算法和代码,只有依据PS软件内现成的编辑模块进行操作即可。所以说,如果有适合的工具,即便不写代码,也能够干很多的事件。  从下面的定义中咱们能够看到,低代码开发的工作形式次要依赖操作图形化的用户界面,包含拖拽控件,以及批改其中可被编辑区域的配置。这种可视化的开发方式,能够追溯到更早的 Dreamwaver 期间。而随着前端我的项目的日趋简单,这种形式已不再适应古代我的项目的需要,于是慢慢被更业余的工程化的开发模式所取代。  基于可视化操作平台的低代码开发可视化的低代码操作平台能够把编写 JSON 的过程变成拖拽组件和调试属性配置,这样的交互方式对用户来说更直观敌对,开发效率也会更高。 JNPF疾速开发平台的根本应用形式官网:https://www.jnpfsoft.com/?sifou 和市面上绝大部分可视化操作平台一样,将界面布局分为3个区域:左侧的控件抉择区,两头的浏览交互区和右侧的属性编辑区。这三个区域的排列所对应的也是用户生成页面的操作流程。 首先,在左侧面板中抉择控件; 其次,拖拽至两头的预览区域,并搁置到适合的容器块中; 最初,调试右侧面板中的组件属性。 调试实现后,进行下一个组件的循环操作,直到整个页面搭建实现。  可视化操作平台生产效率的影响因素很多时候,可视化操作平台并非逆风逆水。 第一,平台反对的性能间接决定了用户产出的下限——开发者不可能在平台内应用没有控件区显示的控件,也不可能创立编辑区不存在的属性。这就迫使平台开发者需尽可能残缺地排列所有类型的组件,以及通过定义组件类型形容,来获取所有能够被编辑的属性和办法。包含用户交互和数据对组件的影响,这些都须要平台以适合的应用形式提供给用户。例如JNPF反对50余种控件,这和市面上仅反对10余种控件的产品相比,相对远超。 第二,平台提供的源码影响用户的施展——没有源码的低代码产品,犹如无水之源,无木之本,用户无奈齐备理解本人开发我的项目的底层逻辑,一旦呈现非凡状况便会难以解决。有了源码,你能够通过剖析源代码,理解开发者思路,学习开发者如何通过奇妙的形式、算法解决业务问题,基于源码还能自在进行二次开发,丰盛现有的零碎性能等等。 市面上的低代码产品有很多,既有包含商用的产品,也有开源类的,最重要的是有的产品会采纳全源码交付机制,这的确很难做到,但JNPF疾速开发平台就是其中一个。这边就不再介绍了,感兴趣的,你能够进一步理解。

April 23, 2023 · 1 min · jiezi

关于软件开发:代码质量与安全-一文了解高级驾驶辅助系统ADAS及其开发中需要遵循的标准

高级驾驶辅助零碎(ADAS)有助于进步车内每个人的安全性,帮忙他们平安到达目的地。这项技术性能十分重要,因为大多数的重大车祸都是人为谬误造成的。 本篇文章将探讨什么是高级驾驶辅助零碎(ADAS),提供高级驾驶员辅助零碎的示例,以及哪些编码标准对于高级驾驶员辅助零碎的开发来说至关重要。 什么是高级驾驶辅助零碎(ADAS)?高级驾驶辅助零碎是为了进步驾驶员及乘客安全性而设计的技术性能。这些零碎应用人机界面(human-machine interface),通过晚期预警和自动化零碎来进步驾驶员的安全性,并减少反应时间。高级驾驶辅助零碎(ADAS)示例 一些高级驾驶辅助零碎性能曾经成为了汽车的标准配置,包含主动制动零碎(ABS)和自适应巡航管制(ACC)。另外也有一些附加组件能够应用,例如主动泊车、盲点监视器和防撞监视器等等。 为什么高级驾驶辅助零碎(ADAS)如此重要?高级驾驶辅助零碎十分重要,有数据显示,约94%的重大车祸是由人为谬误造成的。侥幸的是,即便是最根本的高级驾驶员辅助零碎(如ABS),也能够帮忙进步车内每个人的安全性。 哪些规范对高级驾驶辅助零碎(ADAS)很重要?为了使高级驾驶辅助零碎安全可靠地运行,它们须要依照正确的性能平安和安保规范进行开发。反过来,这些又要求执行安全可靠的编码标准。 ISO 26262认证 ISO 26262是一项基于危险的性能平安规范,实用于车辆中的电气和电子系统,包含ADAS组件。该规范概述了汽车设施和零碎生命周期每个阶段的具体步骤,以确保从晚期概念开始就放弃安全性。 汽车平安完整性等级(ASIL)是ISO 26262的要害组成部分,因为它们掂量了汽车设施和零碎组件的危险程度。设施或零碎越简单,产生系统性或硬件故障的危险就越大。 SOTIF(ISO 21448) SOTIF(ISO 21448)是一种性能平安规范,为设计、验证和确认措施提供领导,以实现预期性能的安全性。它思考的是非系统故障造成的安全隐患的状况。 它实用于正确感知事态的零碎,这种零碎对于保障平安来说很重要。尤其是紧急干涉零碎(例如紧急制动零碎)和1、2级高级驾驶员辅助零碎(ADAS)。它仅思考了其余规范尚未涵盖的故障,并且不适用于动静稳固管制(DSC)零碎或安全气囊等现有性能。 ISO 21448是对ISO 26262的补充,因为它涵盖了非系统故障引起的故障,以及原始设计造成的技术缺点引起的故障。其中一些措施实用于以前性能的翻新更新。 ISO 21434认证 ISO 21434 是一项汽车规范,重点关注路线车辆电子系统中的网络安全危险。该规范将有助于确保将网络安全思考因素纳入每个汽车设施和产品中。 CERT C CERT是一种平安编码标准,反对C、C++和Java,所有的这些语言都用于汽车软件开发。该规范有助于在编写代码时就辨认和打消软件安全漏洞。  MISRA MISRA为开发平安要害零碎(包含用C和C++语言编写的汽车软件)提供了编码指南。强烈建议恪守这些规范,因为它有助于确保汽车安全可靠。  AUTOSAR AUTOSAR为联网和主动驾驶汽车的AUTOSAR自适应平台提出了C++14编码标准。这有助于确保汽车软件的平安、巩固和牢靠。 动态剖析如何帮忙确保高级驾驶辅助零碎 (ADAS)安全可靠要确保高级驾驶辅助零碎中的软件安全可靠,最无效的办法就是应用动态剖析软件,如Helix QAC。动态剖析软件可能帮忙执行汽车编码指南(如MISRA和AUTOSAR),并通过了性能平安规范(如ISO 26262)的应用认证。 通过应用Helix QAC,您将利用编码指南来验证您的软件是否满足必要的要求。此外,Helix QAC还能够通过以下形式进步软件品质: 执行编码标准并检测规定抵触;在开发晚期检测合规性问题;减速代码审查和手动测试工作;随时报告所有产品版本的合规性。作者简介: 吉尔·布里顿(Jill Britton),Perforce合规总监 吉尔·布里顿在多个行业领有超过30年的嵌入式软件教训。她曾负责电信、汽车、国防和教育软件等畛域企业的软件工程师和管理者。 吉尔当初是Perforce的合规总监,同时也是MISRA的委员会成员。吉尔领有纽卡斯尔大学计算机科学和统计学学士学位,以及伦敦布鲁内尔大学计算机科学硕士学位。 文章起源:http://bit.ly/3Xyqycr 如需理解Helix QAC如何帮忙您交付平安、巩固和牢靠的汽车嵌入式软件,请分割,请分割Perforce受权合作伙伴——龙智: 官网:www.shdsd.com电话:400-666-7732邮箱:marketing@shdsd.com

February 20, 2023 · 1 min · jiezi

关于软件开发:桌面软件开发框架大赏

*本文基于海康威视桌面端技术专家刘晓伦在「RTC Dev Meetup • 杭州站丨大前端时代的业务架构和跨端实际」流动中分享内容二次整顿。 以下注释: 明天要与大家分享 19 款桌面软件开发框架,我将它们分了四类,而后别离就每个类别做相应的介绍,心愿通过明天的分享,帮忙大家在开发的过程当中少走一些弯路。 01 传统桌面软件开发框架 首先咱们来聊一聊传统的桌面软件开发框架。这个类别中蕴含大家常见的 Qt、wxWidgets、GTK、FLTK、Swing 和 JavaFX。这六个框架有一些共同点:它们的历史都很悠久,应用的开发者也很多,并且相应的社区也很成熟,其中蕴含了丰盛的材料。此外,它们的性能都很弱小,有大量成熟的案例,框架也很稳固。 然而它们用到的都是相对来说都是比拟成熟的技术,所以跟新兴技术之间还是有所差距,所以应用起来比拟艰难。 1、Qt Qt 的长处大家都能够在官网上看到,这里不再赘述,其中有一点是 Qt 对各操作系统都做了很欠缺的封装,比方网络、文件剪切板等,如果要用零碎级的 API,Qt 能够提供的十分丰盛的 API。 对于 Qt 的问题这里介绍一下我的感触,我认为 Qt 目前的问题是倒退方向不太专一,无奈提供某些较大的模块,在开发过程中可能会逐步发现应用的模块不太适合,进而废除这个模块,包含很多 API 也是这样,我之前用过的 Qt script 当初就曾经被标记为废除了。 另外,Qt 的商业受权是不太敌对的。如果要开发一个商业利用,可能这里要留神一下,有很多国内的公司都是收到过 Qt 的律师函要求免费的。Qt 还提供了很多组件,其中有一些简单的组件对于管制 UI 的细节是比拟难的,这里就不再举例了。 Qt 还有很多的动态链接库,如果要做动态链接也是比拟难的,当然社区中提供了一种方法,就是能够编译 Qt 的源码做动态链接,然而这就又要波及版权的问题了。 2、GTK GTK 框架比拟偏 Linux,在 Linux 中有很多桌面利用都是用 GTK 开发的,在 Windows 下 GTK 绝对较少,并且在 Windows 零碎下的动态链接也是比拟难的,甚至搭环境都比在 Linux 零碎下要难得多。 另外,GTK 在 Windows 下也做了零碎 API 的封装,然而在 Windows 下的封装比在 Linux 零碎下的封装要少一些。也就是说,有些 API 在 Linux 下能用,而在 Windows 下是不能用的,这样的 API 不在少数。最初 GTK 的商业受权是十分敌对的。 ...

July 29, 2022 · 3 min · jiezi

关于软件开发:打造软件供应链安全平台安势信息完成数千万元天使轮融资

36 氪获悉,专一于软件组成剖析(SCA: Software Composition Analysis,以下或简称 SCA)的「安势信息」已于日前实现天使轮融资。据理解,本轮融资金额在数千万元级别,投资方为晨壹投资。 「安势信息」成立于 2021 年 6 月,专一于打造软件供应链平安平台,以后次要心愿帮忙企业客户应答开源软件中存在的平安以及合规问题。软件产品的生命周期包含设计、生产、交付、部署、应用及经营、进行等阶段。因而这一生命周期中所波及的平安问题(尤其是生产、交付等环节的平安问题),是软件供应链平安关注的重点对象。 具体而言,软件的生产阶段波及产品的开发、集成、构建等,此阶段的供应链平安问题次要包含三类:第一类是针对软件生产因素的攻打,即攻击者利用安全漏洞等批改编码环境、源码库等开发工具,或软件本身植入恶意代码,并在用户下载应用后产生平安危险;第二类是开发者未经平安测试而间接应用第三方软件,特地是开源组件,这会在给产品带来平安危险的同时引入法律危险;第三类是软件产品构建时,开发人员在编译和链接、产品容器化、打包等过程中,应用的工具或产品对象自身被净化或歹意批改而带来平安危险。按平安行业内的细分,软件供应链平安首先关注软件在构建时的平安问题,属于利用平安。同时其在更细分的畛域也属于开发平安,也和时下探讨较多的 DevSecOps 有所关联。 尤其在最近,开源软件的平安问题随着去年年底产生的 Log4j2 破绽事件而更引起世界级范畴的宽泛关注,「安势信息」的第一款产品亟心愿从软件组成剖析(SCA)的角度切入,帮忙企业解决应用开源软件/组件时可能存在的平安威逼和合规问题。 公司创始人兼总裁薛植元向 36 氪介绍,过来国内已有不少大型企业器重软件供应链中开源组件的平安和合规问题。不过出于市场产品成熟度方面的思考,它们会次要洽购国外公司(如 Synopsys、Snyk 等)的产品。但近年来随着国内宏观环境的变动,软件组成剖析(SCA)工具也产生了国产代替趋势,「安势信息」的定位即是适应这一需要,为客户提供能满足其业务诉求的高端 SCA 类产品。 谈及打造产品和解决方案的具体思路,薛植元示意,其将开源软件供应链治理的难点总结为三点——People、Process 和 Technology(简称 PPT)。其中,技术是影响产品打造的一个重点。在这个方面,首先开源软件的庞杂性较强,「安势信息」须要收录数量宏大、高时效性的开源软件打造本人的数据库;第二,公司还须要打造全面且深刻的扫描引擎,用以辨认以各种模式被引入软件中的开源组件。 具体在数据库的积攒形式上,以后「安势信息」应用专门的团队进行开源软件信息的爬取、数据的荡涤及检索,以此在源头上保障引擎所需数据的准确性。而在扫描引擎的打造过程中,其还须要尽可能辨认出简直所有模式的开源引入——比方残缺援用开源组件进行批改后进行二次散发,和复制开源组件中的局部代码,以及开源组件彼此之间相互依赖的引入等,这些不同的引入形式须要的是不同细粒度的扫描引擎。 以后,「安势信息」的重心会放在代码片段级别的、相较细粒度较高的引擎构建上。而构建代码片段级别的引擎,须要做到精准度与效率的联合。首先,因为代码片段细腻的细粒度,检测时可能会检测出不少因为简略调整字符串、大小写、正文等起因呈现的疑似引入,这意味着引擎匹配规定要尽可能准确、剔除烦扰项,同时须要依赖尽可能全面、精准的代码片段的数据库,从而中进行精准的开源组件匹配。 另一方面,因为代码片段较多,所以须要检测的内容也会十分多,如何晋升检测效率也成为第二个须要解决的问题。目前在这两点上,「安势信息」的数据库曾经笼罩 2 万亿行开源代码、2000 种许可证类型、17 万破绽信息、1.4 亿组件信息等。而针对效率问题,其也通过打造相干算法的形式,达到扫描单个文件只需 20 微秒的成果。 在具体落地场景上,通过代码片段级别的扫描引擎联合全新的构建依赖辨认扫描引擎,能够造成包含我的项目许可、组件许可证、版本、破绽、间接依赖和间接依赖组件关系的软件物料清单(SBOM),既能够用于防备软件供应链中存在的破绽、后门等,同时也能进行开源许可合规治理。 能够看出,「安势信息」以后的 SCA 产品至多能够用在上述两个场景中。但薛植元从长期的从业经验中发现,对 SCA 类产品体现出器重的客户,往往更重视这类产品的知识产权合规作用。尤其在出海场景下,高科技企业往往须要满足 Global 市场的合规性要求,开源软件的正当应用就是其中一个不可避免的考量点。具体而言,开源软件的批改、散发常常波及不同许可证的不同要求,不恪守这些要求会使企业的产品和业务陷入不合规的微小危险之中。比照之下,尽管开源软件曾经在国内广为应用,但不少开发人员法律方面意识较为单薄,企业也短少开源合规方面的专业人才,这时就会体现出企业采买 SCA 类产品的价值。 并且薛植元还强调,尽管眼下不少企业的出海业务因为环境因素而受到更多挑战,但也正因而,包含开源软件平安在内的合规需要也成为刚需。以后,「安势信息」一方面将继续增强合规剖析引擎的技术冲破,同时踊跃推动与大型企业、国内外权威行业机构、律所以及相干组织的单干,进行开源软件协定的合规性钻研和解读,让本身的产品更能满足企业日益增长的合规性需要。 总体而言,「安势信息」所主打的客户对象,正是具备强烈合规诉求的高科技、互联网等客户群体。另外,随着金融业对开源软件的应用日趋规范化,银行等金融客户也将是公司的次要客户类型。 在商业化过程上,公司的 SCA 产品「清源 CleanSource」于去年 10 月底公布,现在已有多家来自互联网、半导体及汽车等行业客户的合作意向,其中一些已进入具体商务洽谈阶段。 团队方面,「安势信息」总裁薛植元曾任 Checkmarx 大中华区总经理,也是原 Synopsys SIG 大中华区业务负责人,参加国内各项 DevSecOps 规范制订。「安势信息」的外围团队成员次要来自华为、中兴、OPPO、Synopsys 等企业,均具备多年行业背景,在软件平安畛域经验丰富。 本轮融资之后,公司将继续进行产品打磨和相干人才梯队的建设,同时减速商业化落地摸索。 对于此次投资,晨壹投资董事姜晓山示意:软件正在吞噬世界,而开源正在吞噬软件。越来越多企业开始关注如何解决混源开发模式下的软件供应链危险问题。安势信息以 SCA 技术切入,围绕 DevSecOps 流程打造具备肯定特色的端到端的解决方案。凭借团队多年的技术和教训积攒,取得多家头部企业认可,作为天使投资人,咱们将和安势一起继续输入高质量产品及解决方案。 ...

June 14, 2022 · 1 min · jiezi

关于软件开发:如何写出高性能代码之优化数据访问

 同一份逻辑,不同人的实现的代码性能会呈现数量级的差别; 同一份代码,你可能微调几个字符或者某行代码的程序,就会有数倍的性能晋升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差别;十倍程序员不是只存在于传说中,可能在咱们的四周也亘古未有。十倍体现在程序员的办法面面,而代码性能却是其中最直观的一面。 本文是《如何写出高性能代码》系列的第四篇,本文将通知你数据拜访会怎么样影响到程序的性能,以及如何通过变更数据拜访的形式晋升程序的性能。 数据访问速度为什么会影响到程序的性能? 程序的运行的每一个能够简化为这样一个三步模型:第一步,读数据(当然也有局部数据是别的地办法发过来的);第二步,对数据做解决;第三步,将解决完的后果写入存储器。这里我将这三步骤简称为 读算写。 实际上实在的CPU指令执行过程会略微简单有些,但实际上也是这三个步骤。 而一个简单的程序蕴含无数个CPU指令,如果读取或者写入数据太慢,必然会影响到程序的性能。 为了能更直观一点,我这里将程序执行的流程比作是大厨做菜,大厨的工作流程就是取原始食材,而后对食材进行加工(煎烤烹炸煮),最初出锅上菜。影响大厨出菜速度的因素除了加工过程之前,获取食材的耗时也会影响到大厨出菜速度。有些食材就在手边,能够很快获取到,但有些食材可能在冷库、甚至在菜市场,获取就很不不便了。 CPU犹如大厨,而数据就是CPU的食材,寄存器里的数据就是CPU手边的食材,内存的数据就是在冷库的食材,固态硬盘(SSD)上的数据是还在菜市场的食材,机械硬盘(HDD)上的数据犹如还在地里成长的菜…… 如果CPU在运行程序时,如果拿不到所须要的数据,它也只能等在那儿浪费时间了。 数据访问速度对程序性能有多大影响? 不同存储器数据读取和写入的时延相差极大,鉴于大多数场景下,咱们都是读取数据,咱们就只拿数据读取为例,最快的寄存器和最慢的机械磁盘,随机读写的时延相差百万倍。可能你没有直观概念,咱们还是拿厨师做个类比。 假如厨师要做一道西红柿炒鸡蛋,如果食材都有人备好的话,只须要十来秒食材就能下锅炒制。 咱们把这个工夫比作是CPU从寄存器里取到数据的工夫。然而如果是CPU从磁盘获取数据的话,所消耗的工夫相当于厨师本人种出西红柿或者养小鸡下蛋了(3-4个月)。由此可见,从谬误的存储设备上获取数据,会极大影响程序的运行速度。 再说一个咱们之前在生产环境遇到的理论案例,咱们在生产环境也出过故障。起因是这样的,咱们有个服务容器化革新的时候,和上游服务没有部署在同一个机房,跨机房尽管只会减少1ms的时延,但他们服务代码写的有问题,有个接口批量串行调另外一个服务,串行累加导致接口时延减少上百ms。 原本没有性能问题的服务,就因为迁徙了机房,导致性能呈现了问题…… 各存储器性能差别 实际上在编码的时候,遇到的存储设备多种多样,寄存器、内存、磁盘、网络存储……,每种设施都有本人的特点。只有意识到各种存储器之间的差别,咱们能力在正确的场景下应用适合的存储器。以下表格就是各类常见存储设备的随机读时延参考数据…… 备注:以上数据在不同硬件设施会有出入,这里只是为了展现其差异性,不代表精确值,精确信息请参考硬件手册。 尽管日常咱们感觉内存的读取速度曾经很十分快了,日常写代码的时候遇到啥数据获取比较慢,加个内存缓存速度几乎就腾飞了。但内存的访问速度绝对于CPU运行速度来说还是太慢,读取一次内存的工夫,都够CPU执行几百条指令了,所以古代CPU都对内存加了缓存。 如何减小数据拜访时延对性能的影响? 缩小数据拜访时延对性能的影响也很简略,那就是把数据尽可能放到最快的存储介质上。然而,存取速度、容量、价格三者之间有着不可和谐的矛盾,简略来说就是 速度越快容量越小但价格越贵,反之容量越大速度越慢而价格越便宜。 世界总是那么巧秒,好像所有早被安顿好,咱们并不需要把所有的数据都放在最快的存储介质上。 还记得咱们在第二篇(巧用数据个性)[https://blog.csdn.net/xindoo/article/details/123941141] 提到的数据局部性吗! 局部性分两种,空间局部性和工夫局部性。 工夫局部性: 如果一份某个时刻数据被拜访过,那不久之后这份数据会被再次拜访到。空间局部性: 如果某个存储元被拜访过,大概率那不久之后,其左近的存储单元也会被拜访。 总结下这两点就是,程序大部分工夫只会集中拜访很小的一部分数据。 这意味着咱们能够用较小的存储空间笼罩到大部分被拜访的数据。 说间接点就是,咱们能够加缓存。 实际上,不论是计算机硬件、数据库、还是业务零碎,到处都充斥着缓存。甚至你写下的每一行代码,在机器上运行时都用到了缓存,不晓得大家有没有关注过CPU,CPU有个参数,就是缓存大小,咱们以intel酷睿i7-12650HX 为例,它就有24MB的三级缓存,这个缓存就是CPU到内存之间的缓存。 只不过古代计算机将底层的细节屏蔽掉了而已,咱们日常不太可能次要的到。 在咱们本人写代码的时候,也能够加缓存来晋升程序性能。举个最近的咱们在零碎中遇到的例子,咱们最新在做数据权限相干的性能,不同的员工在咱们零碎中有不同的权限,所以他们看到的数据也应该是不同的。咱们的实现形式是每个用户申请零碎的时候,首先获取到该用户所有的权限列表,而后把所有在权限列表中的数据展现进去。 因为每个人的权限列表比拟大,所以权限接口的性能不怎么样,每次申请耗时也比拟长。所以,咱们间接给这个接口的数据加了缓存,优先从缓存里取,取不到再调接口,极大晋升了程序性能。当然因为权限数据也不会常常变动,所以也不必太思考数据滞后导致的结果。另外,咱们缓存数据只加了几分钟,因为一个用户单次应用咱们零碎时长也就继续几分钟,过几分钟后数据过期缓存空间也会主动开释,达到节俭空间的目标。 我在上大学那会,笔记本电脑还是标配机械硬盘的年代,那时候电脑永恒了会很卡,起初理解到换装SSD会晋升电脑性能,那个时候SSD还挺贵的,一般笔本都不会标配SSD起初我攒半个月的生活费给本人笔记本替换了一块120g的SSD,电脑的运行速度就有显著的晋升,实质上还是因为SSD的随机拜访时延比机械硬盘快上百倍的起因。 之前某大厂号称将mysql性能晋升了上百倍,其实也是基于SSD做的很多查问优化。 缓存不是银弹银弹(英文:Silver Bullet),指由纯银质或镀银的子弹。在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具备驱魔效用的武器,是针对狼人、吸血鬼等超自然怪物的特效武器。起初也被比喻为具备极其有效性的解决办法,作为杀手锏、最强杀招、王牌等的代称。 这里特地揭示下,缓存不是万能的,缓存其实是有副作用的,那就是数据的有效性很难失去保障。缓存其实外面放的是旧数据,以后时刻数据是不是还是这样的?不确定,兴许数据早就变了,所以应用缓存时必须要关注缓存数据有效性问题。如果缓存工夫过久,数据生效的可能性能,数据不统一导致的危险也就越大。 如果缓存工夫过短,因为常常须要获取原始数据,缓存存在意义也就越小。所以在应用缓存必须要做出数据不统一和性能之间的衡量(trade-off),你须要正确评估数据的时效性,对缓存设置正当的过期策略。 上文说到其实咱们写下的每一行代码都用到了缓存,当初大家曾经都晓得这个缓存其实就是CPU的Cache。CPU的Cache也是有显著的副作用的,咱们在写多线程代码的时候也不得不关注到,那就是多核CPU之间数据一致性的问题。因为CPU Cache的存在,咱们写多线程代码时不得不思考数据同步的问题,导致多线程的代码很难编写,出了问题也很难排查。 有个面试八股文题目其实就很容易阐明这个问题——多线程计数器,多线程去操作计数器,累加统计数据,如何保证数据统计的准确性。如果只是简略应用cnt++实现,这里就会遇到多核CPU缓存导致的数据不一致性,具体原理这里不再解释,反正后果就是统计进去的数据会比真是数据少。 正确的做法就是,你必须在累加的过程中加多线程同步的机制,保障同一时刻只可能有一个线程在操作,操作完之后也能保证数据能写回内存,在java中必须应用锁或者原子类实现。而这对于编程老手而言又是一道门槛。 总结 数据拜访是任何程序不可或缺的一部分,甚至对大多数程序而言工夫都消耗在了数据拜访的过程上,所以只有优化了这部分的耗时,程序的性能必然能失去晋升。 本文全部内容就到这了,下一篇,咱们将持续探讨下性能优化到极致该怎么做,敬请期待!!另外,有趣味也能够查阅下之前的几篇文章。 ...

June 5, 2022 · 1 min · jiezi

关于软件开发:软件开发中的上游和下游

What is Upstream and Downstream in Software Development的中文翻译版本。在最近一段时间,我开始在软件开发环境中接触到 “上游” 和 “上游” 这两个词,经常疑惑不解。每次我都必须查一下它的含意,因而决定将它们写成blog来帮忙了解。 生产过程中的上游和上游让咱们从一个简略的生产过程开始,只管它与软件开发无关,然而咱们能够在此基础上定义软件开发的上游和上游。 在下面的例子中,咱们有三个步骤: 收集整机组装整机绘制拆卸体下面的生产过程与河流十分类似,因而很容易了解 随着流程从一步到下一步,逐渐向"上游"挪动 咱们能够推断以下规定: 依赖规定: 每个以后的我的项目都依赖于上游的所有我的项目增值规定: 在向上游挪动的过程中,每一步都为产品减少更多价值当初,让咱们尝试将这些规定利用于不同的软件开发环境。 软件依赖中的上游和上游大多数软件组件都依赖于其余组件。那么什么是上游依赖和上游依赖呢? 如图所示: 组件 C 依赖于组件 B,而组件 B 又依赖于组件 A。 利用依赖规定,咱们能够必定地说组件 A 是组件 B 的上游,而组件 B 是组件 C 的上游(即便箭头指向另一个方向)。 在这里利用价值规定有点形象,但咱们能够说组件 C 领有最大的价值,因为它“导入”了组件 B 和 A 的所有特色,并将本人的价值增加到这些特色中,使其成为上游组件。 上游和上游开源我的项目另一个常常应用“上游”和“上游”这两个词的环境是开源开发。它实际上与下面探讨的组件依赖关系十分类似 思考我的项目 A 和 B,其中 A 是原始我的项目,B 是 A 的分支: 这是开源我的项目中相当常见的开发格调:咱们创立我的项目的分支,修复谬误或在该分支中增加性能,而后向原始我的项目提交补丁。 在这种状况下,依赖规定使我的项目 A 成为上游我的项目,因为它能够在没有我的项目 B 的状况下很好地生存,但如果没有我的项目 A(原始我的项目),我的项目 B(分叉)甚至不会存在。 价值规定在这里也实用:我的项目 B 增加了新性能或谬误修复,它为原始我的项目 A 减少了价值。 ...

May 25, 2022 · 1 min · jiezi

关于软件开发:广州程锦堂新零售系统开发

程锦堂新批发零碎开发【征询开发加Ruanjiankaifa5】,程锦堂新零售商城开发,程锦堂新批发APP开发 生产习惯扭转对本地流通渠道经营能力造成影响,品牌方对于经销商的能力要求,包含经销商必须建设一个笼罩指标市场的营销和物流服务网络,繁多的品牌销量很难撑持,越来越多的经销开始通过减少代理品牌数量来减少销售额。 169元购买产品,即可代理,开辟全国市场。 自购一单169元成为会员 直推40元。 直推5单 团队20单,成为经理 直推40元,团队见点10元 直推10单 团队100单,成为总监 直推40元,团队见点20元,七代永不超过奖每代3元 直推20单 团队300单,成为合伙人 直推40元,团队见点30元,平级奖:2、2元?七代永不超过奖每代3元(同时享受) 中国农产品泛滥,是农业大国,将来要走向农业强国,不能单单只靠农民。在这个过程中,以数据和技术为撑持的物流和渠道,施展了很大作用。心愿越多越多的新模式能在农业赛道呈现,让越来越多的地区小众美食带到了全国,也令消费者的餐桌四季常“新”。 酒类新批发倒退将投合酒水生产降级趋势,精品化新批发连锁品牌更具备竞争劣势。具体来说,酒业批发品牌将朝着产品精品化、体验品质化和客群中高端化三个方面倒退。产品精品化是指酒业新批发在产品端体现精品化趋势,精品化并非高端化,体现在产品品牌、产品特色、产品轻奢审美等方面。体验品质化是指酒业新批发强调终端生产体验,生产空间的品质化体验出现“多场景、深互动、高黏性、强链接”特色。客群中高端化是指酒业新批发更适宜中高端客群,因为中高端生产客群器重商品和服务的性价比,重视生存品质和效率,生产具备个性化、多元化特点。 新批发市场投资前景如何?将来新批发将实现什么样倒退指标?批发商业将来线上线下交融的“新批发”业态,无望成为互联网时代下零售业改革次要方向。新批发即企业以互联网为依靠,通过使用大数据、人工智能等先进技术手段,对商品的生产、流通与销售过程进行降级革新,进而重塑业态构造与生态圈,并对线上服务、线下体验以及古代物流进行深度交融的批发新模式。 为了满足新一代消费者的生产习惯,泛滥百货商场纷纷转型。传统线下批发凭教训供货、备货,分区域、多层级的传统线下经销体制弊病凸显;电商买通消费者反馈链路但体验欠佳,双渠道并行难以为继,亟待线上线下交融新模式诞生。

March 11, 2022 · 1 min · jiezi

关于软件开发:好吉色商城APP开发

好吉色托依挪动互联网技术【Ruanjiankaifa5】、5G新媒体渠道建构,搭建技术壁垒,伙合人通过台后可能清晰查看、管所理有数据。好吉色商业模式是什,么商业模式和策略什有么不同?能帮业企解决什么问题?交易构造具体括包哪几点?如判何断一个企商业业模式的优劣?如何优化和计设企业商模业式? 在目前挪动互联时代的驱动下,用翻新商业模式发明新价值的新批发,曾经成为十分显性的趋势。王老吉好吉色依靠挪动互联网技术、5G新媒体渠道构建,搭建技术壁垒,合伙人通过后盾可能清晰查看、治理所有数据。王老吉、蒙集牛团、娃哈集哈团、仁和药业等,在前目挪动互联时的代驱动下,用翻新商业模创式造新值价的新批发,已成经为十分显性趋的势。 好吉色收益举例:每个区县础基批发终端20000个起,均匀按1万终个端计算每,个终端1天销售2瓶一,年720瓶=30箱,每赚箱补贴7元,一终个端210元1万计家算=210万每,年一tian4瓶就是420万;4款产品210万=1680万,按铺货率20%计算,也能事实每年336万的益受小编!业从社交电行商业6年工夫,注专帮忙业企策动交社新批发,供提社交电商具工及商业模式设计,案全经营陪跑等好吉色立足大衰弱+新批发的蓝海风口,传承百年民族品牌的国货责任,打造中国快消品市场冉冉升起的新晋潮牌,为气血亏损的熬夜人群带来贴心“喝”护,也为宽广创业者提供一个更好的创富平台。

March 11, 2022 · 1 min · jiezi

关于软件开发:软件外包公司优势在哪对企业有什么好处

深圳作为我国IT软件产业基地,是全国最顶尖的IT软件公司聚集地,软件业务服务范畴遍布世界各地。软件外包服务作为互联网行业不可或缺的局部,在整个IT生态中扮演着极其重要的作用。现在,很多企业会抉择将整个软件我的项目或我的项目的某一部分外包给第三方软件外包公司代为开发,节俭了人力与物力等不必要的开销。 抉择软件外包公司的益处,软件外包对企业有什么益处 一、节俭费用开销 一个软件我的项目须要多种业余人员,包含项目经理、技术主管、架构师、需要分析师、程序员、测试员、环境工程师等,如果不寻求软件外包,公司则须要长期领取这些岗位的薪水。家喻户晓,软件外包行业利润已越来越薄,IT软件相干的岗位薪水又广泛较高,所以软件外包是最优的抉择,为企业节俭了用工老本与额定费用收入,甲方只需关注我的项目整体进度即可。 二、省时省事更高效 企业组件一个IT软件我的项目部门,波及到招聘、培训、治理、团建、激励、绩效等各种人事管理费用。作为甲方来说重视我的项目短期收益,关注的是我的项目的产出,而不是造就一个业余的团队。项目管理和我的项目交付过程极其繁琐,甲方将软件我的项目交付软件外包公司后,只需关注后果,无需关注软件开发过程,省时省力更高效。 三、危险转移给第三方 我的项目交付存在很大的不确定性,过程充斥危险,而我的项目外包能够将我的项目交付中的问题责任转移到软件外包公司,最大限度的躲避不必要的经济危险。 软件外包为企业很好的实现了降本增效,省去了团队与人员治理等方面的投入,最大限度的晋升企业收益,升高了我的项目交付危险,让甲方能够更省时省心,只需做好软件开发工夫节点跟进即可。顺元年软件外包公司作为寰球IT软件服务企业,IT软件外包业务遍布寰球,领有丰盛的软件外包教训与超高的性价比劣势,备受青眼,欢送大家前来征询与洽谈。 【原文链接】http://shunyn.com/news_v_12_290.html

January 13, 2022 · 1 min · jiezi

关于软件开发:Martin-Fowler-高质量的软件是否值得付出代价-IDCF

前言软件开发我的项目中的一个常见争执是花工夫进步软件品质还是专一于公布更有价值的性能。通常,交付性能的压力在探讨中占主导地位,导致许多开发人员埋怨他们没有工夫钻研架构和代码品质。 贝特里奇的题目定律是一句格言,它说任何题目或题目以问号结尾的文章都能够用“否”来概括。意识我的人不会狐疑我想要颠覆这样的法律。但这篇文章比这更进一步——它颠覆了问题自身。这个问题假如了品质和老本之间的衡量。在本文中,我将解释这种衡量并不适用于软件——高质量的软件实际上生产成本更低。 只管我的大部分文章都是针对业余软件开发人员的,但在本文中,我不会假如你理解软件开发的机制。我心愿这篇文章对任何参加思考软件工作的人都很有价值,尤其是那些作为软件开发团队客户的商业首领。 咱们习惯于在品质和老本之间进行衡量正如我在结尾提到的,咱们都习惯于在品质和老本之间进行衡量。当我更换智能手机时,我能够抉择处理器更快、屏幕更好、内存更大的更低廉的型号。或者我能够放弃其中一些品质来领取更少的钱。这不是相对的规定,有时咱们能够买到便宜的优质商品。更常见的是,咱们对品质有不同的价值观——有些人并没有真正留神到一个屏幕比另一个更好。但大多数时候这个假如是正确的,更高的品质通常会破费更多。 软件品质意味着很多事件如果我要议论软件品质,我须要解释它是什么。这是第一个复杂性 - 有很多事件能够算作软件的品质。我能够思考用户界面:它是否能够轻松疏导我实现我须要实现的工作,使我更有效率并打消挫折感?我能够思考它的可靠性:它是否蕴含导致谬误和挫折的缺点?另一个方面是它的架构:源代码是否划分为清晰的模块,以便程序员能够轻松找到和了解他们本周须要解决的代码? 这三个品质的例子并非是详尽的清单,但它们足以阐明一个重要的观点。如果我是该软件的客户或用户,我不会观赏咱们称之为品质的某些货色。用户能够判断用户界面是否良好,主管能够判断该软件是否使她的员工的工作效率更高,用户和客户会留神到缺点,尤其是当它们损坏数据或使零碎无奈运行一段时间时。然而客户和用户无奈感知软件的架构。 因而,我将软件品质属性分为内部 (例如 UI 和缺点)和外部(架构)。区别在于用户和客户能够看到是什么使软件产品具备较高的内部品质,但无奈辨别外部品质的高下。 乍一看,外部品质对客户来说并不重要因为外部品质不是客户或用户能够看到的 - 那么外部品质重要吗?让咱们设想一下 Rebecca 和我编写一个应用程序来跟踪和预测航班延误。咱们的两个应用程序都执行雷同的基本功能,都具备同样优雅的用户界面,并且简直没有任何缺点。惟一的区别是她的外部源代码组织得东倒西歪,而我的则是一团乱麻。还有一个区别:我的卖我的卖 6 美元,她的卖 10 美元。 既然客户素来没有看到过这个源代码,也不影响应用程序的运行,为什么有人会为 Rebecca 的软件多付 4 美元呢?更一般地说,这意味着不值得为更高的外部品质领取更多的钱。 换另一种说法,用老本换取内部品质是有意义的,但用老本换取外部品质是没有意义的。用户能够判断他们是否违心领取更多费用来取得更好的用户界面,因为他们能够评估用户界面是否足够好以值得额定花钱。然而用户看不到软件外部的模块化构造,更谈不上判断它的好坏。为什么要为没有成果的货色付出更多?既然是这样——为什么任何软件开发人员都要花工夫和精力来进步他们工作的外部品质呢? 外部品质使软件加强更容易那么,为什么软件开发人员会因为外部品质而提出问题呢?程序员大部分工夫都花在批改代码上。即便在新零碎中,简直所有的编程都是在现有代码库的上下文中实现的。当我想向软件增加新性能时,我的首要任务是弄清楚该性能如何适应现有应用程序的流程。而后我须要更改该流程以让我的性能适应。我常常须要应用应用程序中已有的数据,因而我须要理解数据代表什么,它与四周数据的关系,以及我能够应用哪些数据须要为我的新性能增加。 所有这些都是对于我对现有代码的了解。然而软件很容易让人难以了解。逻辑可能会变得凌乱,数据可能难以了解,用于指代事物的名称在六个月前对托尼来说可能有意义,但对我来说就像他来到公司的起因一样神秘。所有这些都是开发人员所说的cruft 的模式——以后代码与现实状况下的差别。 cruft 的一个常见比喻是技术债权,增加性能的额定老本就像领取利息,清理垃圾就像领取本金一样。尽管这是一个有用的比喻,但它的确激励许多人置信 cruft 比在实践中更容易测量和管制。 外部品质的次要价值之一是让我更容易弄清楚应用程序的工作原理,以便我能够理解如何增加内容。如果将软件很好地划分为独自的模块,我不用浏览所有 500,000 行代码,我能够在几个模块中疾速定位到多数的几百行。如果咱们全力进行清晰的命名,我能够疾速理解代码的各个局部的作用,而不用费解细节。如果数据明智地遵循根底业务的语言和构造,我就能够轻松了解它与我从客户服务代表那里失去的申请之间的关系。Cruft 减少了我了解如何进行更改所需的工夫,也减少了我犯错误的机会。如果我发现了我的谬误,那么就会损失更多的工夫,因为我必须理解谬误是什么以及如何解决它。如果我没有发现它们,那么咱们就会呈现生产缺点,并且当前会花更多的工夫来修复问题。 我的扭转也会影响将来。我可能会看到一种疾速增加此性能的办法,但它与程序的模块化构造南辕北辙,减少了 cruft。如果我走这条路,我明天会做得更快,但会减慢在将来几周和几个月内必须解决此代码的其余所有人的速度。一旦团队的其余成员做出同样的决定,一个易于批改的应用程序会迅速积攒到每一个小的变动都须要数周的致力的境地。 客户的确关怀新性能很快交付在这里,咱们看到了为什么外部品质对用户和客户很重要的线索。更好的外部品质使增加新性能更容易,因而更快、更便宜。Rebecca 和我当初可能有雷同的应用程序,但在接下来的几个月里,Rebecca 的高外在品质使她每周都能增加新性能,而我却被困在尝试剔除繁琐程序,只推出一个新性能。我无奈与 Rebecca 的速度等量齐观,很快她的软件就比我的功能强大多了。而后我所有的客户都删除了我的应用程序,取而代之的是 Rebecca,即便她的价格更高。 可视化外部品质的影响外部品质的基本作用是升高将来改革的老本。然而编写好的软件须要一些额定的致力,这在短期内的确会带来一些老本。 将这一点可视化的一种办法是应用以下示意图,我绘制了软件的累积性能与生成它的工夫(以及老本)的关系。对于大多数软件工作,曲线看起来像这样。 这就是外部品质差的状况。最后停顿很快,但随着工夫的推移,增加新性能变得越来越艰难。即便是很小的改变也须要程序员了解大范畴的代码,那些难以了解的代码。当他们进行更改时,会发生意外损坏,导致测试工夫过长和须要修复的缺点。 专一于高外部品质是为了缩小生产力的降落。事实上,一些产品看到了相同的成果,开发人员能够加快速度,因为能够通过利用以前的工作轻松构建新性能。这种欢快的状况很少见,因为它须要一支技术娴熟、纪律严明的团队能力实现。但咱们偶然会看到。 这里的奥妙之处在于,有一段时间,低外在品质比高外在品质更有效率。在此期间,品质和老本之间存在某种衡量。当然,问题是:在两条线穿插之前的这段时间有多长? 这一点也是为什么这是一个示意图的起因。咱们没有方法掂量软件团队交付的性能,因为无奈掂量产出,因而无奈掂量生产力,因而无奈对低外部品质(这也难以掂量)的结果给出牢靠的数字。无奈掂量产出在业余工作中很常见——咱们如何掂量律师或医生的生产力? 我评估线路交叉点的办法是征求我所晓得的纯熟开发人员的意见。而答案却出乎很多人的预料。开发人员发现低质量的代码会在几周内显着升高他们的速度。因而,外部品质和老本之间的衡量实用的跑道并不多。即便是小的软件工作也受害于对良好软件实际的关注,这当然能够从我的教训中证实。 即便是最好的团队也会发明出cruft许多非开发人员偏向于认为 cruft 仅在开发团队大意并犯错误时才会产生,但即便是最优良的团队在工作时也不可避免地会产生一些 cruft。 我喜爱用我与咱们最好的技术团队负责人之一聊天的故事来阐明这一点。他刚刚实现了一个被宽泛认为获得巨大成功的我的项目。客户对交付的零碎感到称心,无论是在性能还是构建工夫和老本方面。咱们的员工对我的项目的工作教训持积极态度。技术负责人大体上很快乐,但抵赖零碎的架构并不是那么好。我的反馈是“这怎么可能——你是咱们最好的架构师之一?” 他的答复是任何有教训的软件架构师都相熟的:“咱们做出了很好的决定,但直到现在咱们才明确咱们应该如何构建它”。 许多人,包含软件行业的不少人,将构建软件比作建造大教堂或摩天大楼——毕竟咱们为什么要对高级程序员应用“架构师”?然而构建软件存在于物理世界未知的不确定性世界中。软件的客户对他们须要产品中的哪些性能只有一个粗略的想法,并在软件构建过程中理解更多信息——尤其是在向用户公布晚期版本之后。软件开发的构建块——语言、库和平台——每隔几年就会产生很大的变动。事实世界中的等价物是客户通常会在建造和占用一半的建筑物后增加新楼层并更改平面图。 DORA精英团队钻研品质和速度之间的抉择并不是软件开发中惟一具备直观意义的抉择,而是谬误的。还有一种强烈的想法表明,在疾速开发、频繁更新零碎和牢靠的零碎之间存在双模式抉择,不会在生产中中断。DevOps情况报告中的粗疏迷信工作证实这是一个谬误的抉择。 几年来,DORA应用考察的统计分析来梳理高绩效软件团队的实际。他们的工作表明,精英软件团队每天屡次更新生产代码,在不到一个小时的工夫内将代码更改从开发推向生产。当他们这样做时,他们的变更失败率显著低于速度较慢的组织,因而他们能够更快地从谬误中复原。此外,这样的精英软件交付组织与更高的组织绩效相干。 鉴于这种水平的变动,软件我的项目总是在发明一些新鲜的货色。咱们简直素来没有发现自己在解决一个以前曾经解决的很好了解的问题。天然地,咱们在构建解决方案时对问题的理解最多,所以我常常听到团队只有在他们花了一年左右的工夫构建软件之后才真正最理解他们的软件架构应该是什么。即便是最好的团队在他们的软件中也会有缺点。 不同之处在于,最好的团队不仅创立的垃圾要少得多,而且还删除了足够多的他们创立的垃圾,以便他们能够持续疾速增加性能。他们花工夫创立自动化测试,以便他们能够疾速发现问题并花更少的工夫来打消谬误。他们常常重构,这样他们就能够在多余的货色沉积到足以障碍他们之前去除它。继续集成最大限度地缩小了因为团队成员在不同目标下工作而造成的麻烦。一个常见的比喻是,这就像清理厨房的工作台面和设施。做饭时不能不弄脏货色,但如果不疾速清洁货色,污垢就会变干,更难去除,所有脏东西都会障碍下一道菜的烹饪。 高质量软件的生产成本更低总结所有这些: ...

December 3, 2021 · 1 min · jiezi

关于软件开发:区块链软件开发NFT系统开发物联网人工智能开发智慧零售

区块链软件开发NFT零碎开发物联网人工智能开发智慧批发这款智慧批发软件是独自作为门店小程序的治理后盾,更好地改善门店后盾治理性能,进一步优化用户应用体验。以后智慧批发门店零碎与多个门店共用一个H5治理后盾,构造凌乱,基于此背景,这款零碎,独自作为门店治理后盾,更好的改善门店后盾治理性能,进一步优化用户体验性能。商户信息块,店铺信息和扫码核销放在顶部,便捷客户日常操作,店铺数据展现,商户能够疾速理解数据统计,每日凌晨实时更新显示。

November 18, 2021 · 1 min · jiezi

关于软件开发:区块链软件开发艺术品交易平台开发

领有、交易、游玩和赚取您独特的 NFT 角色——每个角色都有本人的表面、工作和共性。每个 VOX 都是独特的 ERC721,具备可证实的随机特色,合乎其性情。首个系列将只有 8,888 个字符,每个人都能够用 0.0888领有一个 VOX。当 VOX 到 50% 时,罕见度将开始显示,当您领有 VOX 时,您将取得 FBX 文件,以便您能够在 Metaverse 中制作动画并与它们一起玩。每个 VOX 都从抉择一个类开始,而后迭代适宜该类的特色。而后将数据与所有其余现有 VOX 进行比拟以确保它是惟一的。

November 15, 2021 · 1 min · jiezi

关于软件开发:NFT交易平台开发NFT艺术交易所APP定制教育软件系统开发

NFT交易平台开发NFT艺术交易所APP定制教育软件系统开发教学管理系统这是一款学校应用的教学辅助管理系统,为所有学员提供一个正当的教学环境,辅助学院并为学员提供便捷,帮忙学校治理学生的一款产品。这款产品零碎次要性能包含学生作业,教学课件治理,从问题治理、作业及课件治理、日常缺勤等几个方面开展。详情请看下图:

November 13, 2021 · 1 min · jiezi

关于软件开发:软件开发的-201-个原则中译本-出版了

起源:章老师说 前后历时近 2 年,软件工程畛域的经典著作《软件开发的 201 个准则》(201 Principles of Software Development)终于在国内正式出版了。 在此,感激组织和参加翻译的 15 名百度同学,大家做了一件十分有意义的工作。同时,大家也一致同意将本书翻译的稿酬全额捐献给希望工程。 在此,要感激百度和电子工业出版社博文视点的反对。大家在“打造精品”这个指标上有十分统一的共识。在这个工作中,我感触到了情怀和责任。 本次很荣幸失去原书作者 Alan Davis 两次专门撰文。软件巨匠的业余风范在其中有十分充沛的展示,十分值得咱们学习。 本次也十分荣幸的邀请到来自清华大学及多家公司的专家和老师撰写举荐序。非常感谢大家对于本书出版所提供的反对。 有趣味的同学,能够间接点击本文最初的“浏览原文”或扫描下图的二维码到京东购买。 上面是我在去年夏天代表翻译团队所写的译者序,请大家斧正。 译者序其实我不是译者,而仅仅是一名“校对者”。大家让我来写这篇译者序,盛情难却,无奈推卸。 《软件开发的 201 个准则》是我于 2017 年至 2020 年在百度举办“代码的艺术训练营”时应用的指定教材。这本书的内容深受训练营学员的好评。因为之前没有中文版,对于局部英文根底不太好的同学来说浏览有些艰难。终于在 2019 年底,有十多名“代码的艺术训练营”的毕业生自发组织起来,开始了此书的翻译。我从 2020 年 5 月初退出校对工作,实现全副的校对,我大概破费了 80-100 个小时。由此推断,负责翻译的同学破费了数倍于此的工夫。非常感谢这些同学的自私付出! 初识《201 个准则》是在 20 年前。过后我还在清华大学读书,在老师的领导下做一个有肯定规模的软件研发我的项目。在我的项目的研发过程中,遇到了不少软件工程方面的问题。于是在那一年,我浏览了大概 10 本软件工程方面的书籍,包含《Code Complete》(代码大全)、《Rapid Development》(疾速开发)、《ProgrammingPearls》(编程珠玑),等等。《201 个准则》是我过后在清华图书馆中发现的一个“宝贝”。我必须说,这本书对我的影响十分深,很多我当初常常提起的软件工程准则,其实都源于对这本书的浏览。 2006 年我来到清华,到目前曾经在工业界工作十多年,经验了多家公司。我发现,尽管咱们的软件研发规模曾经和 20 年前有了很大的倒退,然而在软件研发的理念方面的提高还是太慢了。有太多的软件从业者,即便曾经工作多年,但对于软件研发的根本理念和准则还是理解不多。以我屡次的考察,浏览超过 2 本“真正的”软件工程书籍的人是十分多数的。很多软件工程师,依然在应用十分低效的、甚至是谬误的办法在工作! 于是在 2015 年,我在百度停办了“代码的艺术”面授课程,其中就重点举荐了《201 个准则》。而在 2017 年做“代码的艺术训练营”的时候,这本书就成了指定教材。为什么要抉择这本书?因为它对软件工程的内容笼罩全面,且篇幅短小。对于一个短期培训班来说,如果抉择相似《Code Complete》这样的书籍,浏览所须要的工夫有些太多了。在这个场合,《201 个准则》是一个性价比更高的抉择。另外,我经常感觉,对于一个软件工程师,把握正确的意识是比把握具体常识更重要的。如果有正确的意识,即便不记得具体的知识点,还能够在须要的时候进行查阅。而反过来就不是这样了。 必须要说,《201 个准则》写于 1995 年,距今曾经有 25 年工夫。这也成为很多人放心的起源— 计算机技术的倒退如此之快,这本书是不是曾经过期了?然而,正如我在“代码的艺术”课程中所述的“常识、办法、精力”三者的比照,办法的变动速度远远慢于常识。尤其是在本次校对过程中,我惊奇的发现,本书中真的能够说是“过期”的准则还不到 5 个!是软件研发的办法变动太慢,还是本书的内容太粗浅?我想两者兼而有之。在此,我必须要对本书的原作者 Alan M. Davis 致敬,并对《201 个准则》中所有准则的贡献者和历史上所有软件工程畛域的巨匠们致敬! ...

October 26, 2021 · 1 min · jiezi

关于软件开发:Git工作流中常见的三种分支策略GitFlowGitHubFlow和GitLabFlow

摘要:聊一聊Git中的工作流——分支策略。本文分享自华为云社区《Git工作流中常见的三种分支策略:GitFlow、GitHubFlow以及GitLabFlow》,原文作者:麻利的小智。 前言版本控制系统是指对软件开发过程中程序代码、配置文件、文档等产生的变更进行治理的零碎,它能够帮忙团队更好的沟通合作,从而更好的进行交付,常见的版本控制系统分为集中式版本控制系统(如SVN)和分布式版本控制系统(如Git)。 之前访问一家企业,企业内的开发团队应用Git治理日常开发工作,在开发过程中遇到一个问题:分支策略应用很凌乱——最后开发团队从骨干分支拉出一条个性分支,但新性能实现后,该个性分支没有合入主干分支,而是作为下次开发的骨干分支,从新拉出一条新的个性分支,导致骨干分支始终形同虚设,团队没有一条稳固的代码分支。 这个问题很大水平上源于团队对分支策略的不理解,本文就简略聊一聊Git中的工作流——分支策略。 常见的分支策略上文中提到的团队应用分支策略很凌乱,这种分支策略也并不是支流的,应用支流的分支策略则会防止以上问题。 常见的分支策略有以下三种:GitFlow、GitHubFlow以及GitLabFlow。 Git FlowGitFlow是这三种分支策略中最早呈现的。 GitFlow通常蕴含五种类型的分支:Master分支、Develop分支、Feature分支、Release分支以及Hotfix分支。 Master分支:骨干分支,也是正式公布版本的分支,其蕴含能够部署到生产环境中的代码,通常状况下只容许其余分支将代码合入,不容许向Master分支间接提交代码(对应生产环境)。Develop分支:开发分支,用来集成测试最新合入的开发成绩,蕴含要公布到下一个Release的代码(对应开发环境)。Feature分支:个性分支,通常从Develop分支拉出,每个新个性的开发对应一个个性分支,用于开发人员提交代码并进行自测。自测实现后,会将Feature分支的代码合并至Develop分支,进入下一个Release。Release分支:公布分支,公布新版本时,基于Develop分支创立,公布实现后,合并到Master和Develop分支(对应集成测试环境)。Hot fix分支:热修复分支,生产环境发现新Bug时创立的长期分支,问题验证通过后,合并到Master和Develop分支。通常开发过程中新个性的开发过程如下: 从Develop分支拉取一条Feature分支,开发团队在Feature分支上进行新性能开发;开发实现后,将Feature分支合入到Develop分支,并进行开发环境的验证;开发环境验证实现,从Develop分支拉取一条Release分支,到测试环境进行SIT/UAT测试;测试无问题后,可将Develop分支合入Master分支,待发版时,间接将Master分支代码部署到生产环境。 可参考下图: GitFlow的长处是每个分支都有明确的定义,严格依照GitFlow治理我的项目代码的话,很难呈现代码凌乱;其毛病是:如果个性分支过多的话很容易造成代码抵触,从而进步了合入的老本;因为每次提交都波及多个分支,所以GitFlow也太不适宜提交频率较高的我的项目。 应用华为云 DevCloud 实现 Git Flow1.创立分支华为云DevCloud的代码托管性能反对端到端的GitFlow,咱们在代码仓库中可新建分支,如图,目前已有次要分支:Master分支和Develop分支,和两个个性分支:Feature-Bill和Feature-Score分支。 2.为分支创立流水线流水线性能须要在华为云DevCloud的流水线性能中进行配置,基于“Feature-Bill”分支新建一条流水线。 在流水线中配置构建、部署工作,以便于对Feature-Bill分支代码的构建、部署进行验证(构建、部署等工作须要提前在对应模块下创立)。 3.Feature提交代码并验证Feature-Bill分支开发实现后,提交代码即可触发流水线进行验证。 4.代码合入 Develop 分支进行验证同理还须要为Develop分支创立一条流水线,当Feature-Bill分支通过merge命令合入到Develop分支之后,因为Develop分支的代码产生了变动,也会触发流水线进行验证。 Develop分支验证没问题后,团队能够拉取Release分支,创立并启动Release分支的流水线进行测试环境验证。若发现缺点,可间接在Release分支进行批改、验证。当测试环境验证通过后,将代码合入Master分支,创立并启动Master流水线进行生产环境降级与验证。 GitHubFlowGitHubFlow看名字也晓得和GitHub无关,它来源于GitHub团队的工作实际。当代码托管在GitHub上时,则须要应用GitHubFlow。相比GitFlow而言,GitHubFlow没有那么多分支。 GitHubFlow通常只有一个Master分支是固定的,而且GitHubFlow中的Master分支通常是受爱护的,只有特定权限的人才能够向Master分支合入代码。 在GitHubFlow中,新性能开发或修复Bug须要从Master分支拉取一个新分支,在这个新分支上进行代码提交;性能开发实现,开发者创立Pull Request(简称PR),告诉源仓库开发者进行代码批改review,确认无误后,将由源仓库开发人员将代码合入Master分支。 很多人可能会问,提交代码通常是commit或者push,拉取代码才是pull,为什么GitHubFlow中提交代码提出的是“Pull Request”。因为在GitHubFlow中,PR是告诉其余人员到你的代码库去拉取代码至本地,而后由他们进行最终的提交,所以用“pull”而非“push”。 GitHubFlow长处是绝对于GitFlow来说比较简单,其毛病是因为只有一条Master分支,万一代码合入后,因为某些因素Master分支不能立即公布,就会导致最终公布的版本和打算不同。 GitLabFlowGitLabFlow呈现的最晚,GitLabFlow是开源工具GitLab举荐的做法。 GitLabFlow反对GitFlow的分支策略,也反对GitHubFlow的“Pull Request”(在GitLabFlow中被称为“Merge Request”)。 相比于GitHubFlow,GitLabFlow减少了对预生产环境和生产环境的治理,即Master分支对应为开发环境的分支,预生产和生产环境由其余分支(如Pre-Production、Production)进行治理。在这种状况下,Master分支是Pre-Production分支的上游,Pre-Production是Production分支的上游;GitLabFlow规定代码必须从上游向上游倒退,即新性能或修复Bug时,个性分支的代码测试无误后,必须先合入Master分支,而后能力由Master分支向Pre-Production环境合入,最初由Pre-Production合入到Production。 GitLabFlow中的Merge Request是将一个分支合入到另一个分支的申请,通过Merge Request能够比照合入分支和被合入分支的差别,也能够做代码的Review。 华为云DevCloud也反对GitLabFlow的合并申请,以爱护骨干分支不收烦扰。 1.设置爱护分支仓库管理员在代码托管的“设置”中,抉择“爱护分支治理”,而后将Master(或Develop)分支设定为爱护分支,一般开发者不可向Master分支提交代码、也不容许合入代码,只有仓库管理员才能够向Master分支提交代码或合入代码。 2.创立合并申请在代码仓库的“合并申请”中,创立一条合并申请,申请将Feature-Bill分支合入develop分支。 并指定评审人员和执行合入操作的人员。 3.Review代码并通过合并申请相干人员收到合并申请后,能够通过“文件变更”,比对文件前后的变动,确认无误后,可执行合入操作,如果有抵触可线上或线下解决抵触。 除了执行合并操作,还能够对代码进行评论打分,为Feature-Bill分支的合入提供倡议。 总结分支策略不同,研发效率也不同,没有最好的分支策略,只有最适宜团队的分支策略,各分支策略的优缺点在下面曾经列出,大家能够依据团队状况,抉择适合的分支策略进行开发。 点击关注,第一工夫理解华为云陈腐技术~

July 15, 2021 · 1 min · jiezi

关于软件开发:软件开发的22条黄金法则

编程实质上是一门手艺活,既然是手艺,外面就会有很多集体技巧和教训。 “破窗实践”,DRY(Don't repeat yourself),曳光弹,正交性,这些词的意思是什么你还记得么? 《程序员修炼之道》这本书在我看来就是一本徒弟写给师傅的开发哲学指南。 外面既讲了一些软件开发的哲学,比方破窗实践,它解释了你的代码为什么很快就会变成“屎山”。也讲了一些有用的技巧和工具,比方如何利用好shell,晋升你的编程效率。 这本书没有简单的代码,没有艰涩难懂的原理,你齐全能够当作一本闲书来看。 这本书里提到的看似人人都懂的情理,恰好是很多码农们平时工作中最不器重,却应该去恪守的理念。 我提炼了一些书中我感觉至今依然没有过期的观点(毕竟本书有肯定的年头了,读起来很有年代感),和大家分享下,这两头也夹杂着一些我的认识和思考。 一、开发的哲学作为开发,你须要对本人说的话负责。对于不可能做到,危险太大的事件,你有权不去为之负责。不要给做不到找借口,在你说做不到的时候,要提供你的想法,通知大家,做不到的起因是须要重构,还是须要工夫做原型,还是须要额定的资源反对。破窗实践:一扇破窗户,只有有那么一段时间不修理,就会慢慢给修建的居民带来废除感。于是窗户就会一个个破碎,人们开始乱丢垃圾,乱涂乱画。所以不要容忍你的代码有“破窗户”。 这一点大家必定也深有感触,在你写代码的我的项目里一旦看到了一些乌七八糟的构造和设计,你也会不盲目地开始往上面写凑活的代码,缓缓就变成屎山了。温水煮青蛙,代码是会缓缓腐烂而不被觉察的。要继续一直的察看你我的项目的变动,而不要只是专一于本人的那一块代码。器重你的”常识“,这是你的资产。既然是资产,就要定期投资(一直学习),多元化地学习。并且要定期的评估你的技术方向,毕竟开发是个动荡的行业,当初吃香的技术过几年就会过期。要一直地调整你的方向。在做需要时,要像用户一样去思考需要的合理性,而不是一味实现产品下发的需要。做的软件,要温和的超出用户的冀望。给他们的货色要比他们的冀望多一点,给零碎减少个性时,多做一些额定的致力,能够给你带来很大的美誉。当你在的开发团队人员宏大时,能够指定每个人负责工作的各个方面。围绕性能,而不是工作职务进行工作的调配。比方有人要探讨日期解决,就去找Mary,有人要探讨数据存储,就去找Fred。二、开发的准则不要反复你本人:DRY(Don't repeat yourself)零碎中的每一个组件都要繁多,没有歧义,并且权威的示意进去。放弃我的项目的零碎正交性:不要让零碎间相互耦合,非正交的零碎意味着你批改这边的零碎,会影响到其余的零碎。非正交的一个典型体现是前端的CSS,网上有很多调侃CSS的段子,CSS的一个批改常常会影响到别的中央,这也是CSS很让人苦楚的一个中央。在后端开发里,咱们要尽量让零碎间不要相互影响,这对系统的挫伤是很大的,并且在排查问题时十分苦楚。保障代码设计的可撤销性:如果你的想法是这个问题的惟一解,那么这会是一个很危险的事件。用户的需要变动的很快,你的决策很可能只在当下是正确的,不存在最终的决策,或者说,时刻要留神和反思,如果当初这个办法行不通,是不是就没法挽回了。做好资源的估算:这里的资源指的是很多代码相干的资源,比方数据库,存储,性能等。在开发前,肯定要做好估算,在设计良好的代码构造,保障再将来可能应酬变动。把文档尽量多的做在代码里,而不是游离于代码之外。否则,过了一段时间后,你这些文档就没有什么作用了。你不可能写出完满的软件:作为一个开发,你要有这种盲目,本人也不要置信。所以要对本人可能犯的谬误,做防御性的编程。异样解决:如果我删掉所有的异样解决代码,这些代码是不是还能运行?如果你的答复是”不能“,那么阐明你的异样代码正在被用在非异样的情景中。这样不好。利用好元数据:这里的元数据能够了解为配置文件。将形象放进代码,将细节放进元数据。咱们日常开发中常常应用配置文件和分布式配置核心,把可能放入配置文件的数据尽量放入,这样不仅不便保护和批改,也可能实现不重启利用批改利用行为的性能。代码中应该只有咱们对业务的形象。思考好零碎并发:要为并发做好周全的思考。这个要求是不是看起来很稀松平时,大家都会?其实很多大型零碎,尤其是老的零碎,都没有思考并发问题(去问问传统软件企业做的软件,你就晓得了)。并发其实能够算作是互联网公司最常遇到的问题,也是各种技术面试会问的很深的问题,要好好把握。不要靠偶合编程,要弄清楚程序为何可能运行。咱们接触变成初期,常常会有些代码调着调着就跑通了,然而连本人也不晓得为什么。这种代码真正用于线上危险很大。毕竟,他兴许不是真的能工作,他兴许只是看起来能工作!什么时候该重构:当你发现这四个事件呈现的时候,就是你该重构的时候。代码违反了DRY法令有非正交的设计需要变动后代码过期了性能有很大问题重构时的准则:不要试图在重构的时候同时减少性能。在开始重构前,确保你领有良好的测试,这样你才敢放开手脚改变。采取短小,三思而行的步骤。在测试的时候,要去做状态笼罩,而不是谋求代码覆盖率。好好学习shell:通常咱们喜爱用各种带界面的软件,他们的特点是所见即所得。然而也带来了毛病,所见即全副所得(what you see is all you see)。这对于效率的晋升是一个瓶颈,有很多GUI下面须要很多操作的事件,在shell上只须要一行代码。所以只管它有点难入门,然而学好了,会大幅度提高效率。关注我我是一名奋斗在互联网一线的后端开发工程师。 平时次要关注后端开发,数据安全,欢送交换。 微信公众号:后端技术漫谈Github:@qqxx6661CSDN:@蛮三刀把刀知乎:@后端技术漫谈掘金:@蛮三刀把刀腾讯云+社区:@后端技术漫谈博客园:@后端技术漫谈BiliBili:@蛮三刀把刀原创文章次要内容: 开发实战技术面试算法题解/数据结构/设计模式程序人生集体公众号:后端技术漫谈 如果文章对你有帮忙,请各位同学 点赞 转发 珍藏 三连,你的反对是对我莫大的激励~

July 12, 2021 · 1 min · jiezi

关于软件开发:CMU-副教授发文2021-年或将迎来软件开发人员短缺潮尤其是资深开发者

2021 年将迎来软件开发人员短缺潮?近期《ACM 通信》杂志上呈现了这样一篇文章,称上游 IT 劳动力供给正在收紧,对高技能人才的竞争加剧,软件开发人员短缺潮剑拔弩张。 在 COVID-19 疫情影响下,寰球经济受到重大影响,但信息技术 (IT)公司挺过了难关,这很大水平上要归功于其过来在分布式 IT 开发、近程 IT 经营和近程保护方面的胜利。疫情期间,IT 公司要求员工在家工作,工作内容和坐班无异,因此公司运行并未受到太大影响。此外,为了满足在家工作的需要,批发、娱乐、教育和医疗等其余市场对 IT 服务的需要有所增长,从而使得 IT 市场取得了更多倒退空间。 上游 IT 劳动力供给趋紧这对 IT 公司来说是好消息,但新冠风行也对 IT 劳动力(特地是软件开发人员)的上游供给造成了损失,这些影响可能会在将来两到三年外在人才招聘和翻新方面显现出来。因为旅行禁令、取得教育贷款的机会无限以及学生签证解决提早等问题,美国高校往年的计算机和信息科学研究生退学人数大幅降落。这一下降转化为一年延期,意味着 2021 年毕业率会呈现临时但显著的降落。 2019 年,美国高校为超过 136,000 名学生授予计算机与信息科学 (CIS) 学士、硕士和博士学位。其中 35,200 个学位授予了非居民外国人,包含 27,200(77%)个硕士或博士学位,这些毕业生领有更高的技能。 然而美国教育理事会 (ACE) 近期报告显示,依据最近的考察,大风行期间国内学生入学率降落了 43%,导致 2021 年 CIS 毕业生缩小了 11,700 名,并将极大地影响具备两年以上行业教训的高技能毕业生的数量。卡内基梅隆大学(CMU)副教授、软件工程硕士我的项目负责人 Travis Breaux等示意,据此能够预感将来 IT 劳动力市场将更加缓和,尤其是高技能技术岗位。 高技能 IT 劳动力竞争加剧在疫情暴发前,美国劳工统计局 (BLS) 预计,2019 年约有 1,469,200 名全职软件开发人员在美国工作,平均工资为 107,510 美元;将来 10 年,美国劳动力市场将减少 31.6 万个软件开发人员职位,增长率高达 22%,均匀每年新增约 3.1 万个职位。相比之下,到 2029 年,低技能程序员职位将缩小 9%,少于 193,800 个,这表明美国劳动力市场持续向技能较高的 IT 职位转移,包含软件设计、软件构建和保护等工程实际类职位。而 CIS 毕业生缩小将带来数千个职位空缺。 ...

June 23, 2021 · 1 min · jiezi

关于软件开发:企业管理软件开发新模式抛开旧思维轻松做系统

随着互联网的倒退,各类以信息化为指标的管理系统层出不穷,逐步成为企业继续倒退中不可漠视的弱小助力。 以OA零碎为例,从最后简略的办公自动化管理软件到注入协同办公理念,最终将企业业务流程和审批流程互相买通,使得企业治理更加便捷,也越来越收到团体组织管理层的青眼,企业员工享受着部门与部门、信息与信息、数据与数据等多个层面的沟通,突破了孤岛效应。 当然,随着业务的精细化倒退,除了OA之外,ERP、CRM、MIS、HRM等一些细化治理类软件也逐渐进入了人们的视线。然而,面对如此泛滥的需要,每一个都定制开发,工夫上不容许,老本也太高。 那么,有没有一种模式能够笼罩泛滥的开发需要呢? 疾速开发平台将会是一个适合的抉择。 疾速开发平台是一种配置型软件疾速开发工具,目前次要基于java和.net平台。在此平台上进行开发,不须要大量编程,甚至反对无代码模式,以缩小开发过程中的人力和工夫老本。 如力软疾速开发平台,通过此平台通过简略的业务参数配置和SQL语句即可实现OA、ERP、CRM、BI、挪动APP、微信公众号/小程序等泛滥企业零碎的开发工作。 目前,此类平台的发展势头十分强劲,许多大型软件企业逐步进入这一市场,市场竞争更加强烈,但同时也促成市场标准,迫使从业者不断创新,以晋升产品质量。 以前,零碎的实现受制于简单的编程,开发一个合格的零碎须要投入大量的人力物力,而疾速开发平台将反复开发的底层性能代码组件化,开发者在开发中只须要专一于逻辑即可。 当然,这些工具的呈现,并非为了颠覆开发者,而是加重和升高开发者的“工具属性”,让开发者尽量减少重复劳动。 对于集体来说,软件中不必写代码当然是最不便的,然而对于企业来说,每个企业的需要应该有很大水平的“自定义化”,所以这才是疾速开发平台的意义所在。 当思考应用此平台的时候,企业可能正面临以下状况。 1.速度和效率优先的时候 尽管疾速开发平台不能代替经验丰富的开发者,然而一些简略、纯正的,能够在平台上用无代码或低代码的形式解决,这样开发人员就能够做更高阶的事件了。 如果企业正被一款不好用、须要始终以来开发人员、跟不上业务倒退的软件,那么这个时候,应用一款平台软件,能够说是十分好的抉择了。 2.开发工作沉积的时候 开发人员/IT部门每天都会收到来自业务部门的很多很多很多需要。那么这时候,一款疾速开发平台,将会是企业IT部门的得力助手。 有很多国内的企业,没有成熟的IT部门,信息化都交由一个固定人员来做一些简略的运维,零碎还是交给第三方软件公司。然而一旦有新的需要,就须要分割软件方二次开发,无论是金钱老本还是工夫老本上,都是一笔继续而且十分大的收入。所以这时候,通过疾速开发平台,加重IT的压力,也减速了业务需要的满足。 说了那么多,咱们总结一下疾速开发平台能做什么。 1.进步生产力 根底业务流程间接搭建,个性化性能交给IT部门即可,以将企业管理者的业务流程治理需要进行线上化。 2.节省成本 优良的开发者的高薪早已不是机密,所以开发资源不能节约在一些通用而且易于实现的需要。疾速开发平台能够以非常低的老本,来代替开发人员的局部工作内容。 3.缩小IT依赖 业务人员一旦有需要,就会向IT部门求助。而且很多状况下,如果解决不过去这些需要,IT部门也会寻找一些第三方解决方案。调研、分割,甚至是招投标,整个周期十分漫长。找到的供应商也是“我的项目制”,不可能保障产品的性能。然而对于疾速开发平台,一切都是公开而通明的。您能够间接去测验这些平台的能力,进而疾速决策它是否对企业的胃口。 4.晋升开发速度 无论如许经验丰富的开发者,代码实现的速度都不可能追赶上一种低代码解决方案。因为这种解决方案通常状况下就像是一种智能机器的行为,主动编写相应的代码。而且无论如许有教训的开发者,也无奈防止开发所引入的BUG,然而通过检测的疾速开发平台,BUG数量会被降到最低。 5.易于保护 对于传统的应用程序,保护和降级都须要投入很大的人力老本。开发人员急须要解决新的feature需要,也要修复历史的bug。低代码平台甚至不须要咱们保护服务器,就可能实现新性能的减少,而且不须要额定思考兼容性。 论断 毫无疑问,疾速开发平台将是将来软件开发的趋势。作为企业,越早启动越早受害,免得日后更换平台过程麻烦且要付出更高的老本。

June 7, 2021 · 1 min · jiezi

关于软件开发:想做测试工程师这7件事你必须先知道

摘要:写代码归开发攻城狮,测试归测试攻城狮,大部分状况下单方处于“红蓝相持”状态。一、“开发者测试” 就是“开发者来测试”开发者测试是古代软件工程中十分重要的一环,麻利开发、骨干开发这些先进的项目管理办法和流程都基于欠缺的开发者测试。当每个月甚至每周都要交付一个版本时,不可能投入大量的测试工程师来进行大规模的零碎级别测试,这时候就须要把整个测试金字塔中的绝大部分测试通过自动化来实现。 咱们明天谈开发者测试,什么是“开发者测试”? 我司有清晰的开发与测试之分。写代码归开发攻城狮,测试归测试攻城狮,大部分状况下单方处于“红蓝相持”状态。这与我10多年前的研发团队情况十分类似。而当初的软件工程,专职的“测试攻城狮”非常少,很多公司开发测试比例大于10:1,甚至一些部门没有测试攻城狮一说。 而测试攻城狮的角色不再是手动跑测试用例的“苦力”,而是治理产品的测试零碎,对产品测试进行布局、剖析演绎功能测试思维导图、设计测试用例及率领研发团队进行测试工作,更像一位“测试专家/测试教练”。举个简略的例子,我之前做的产品是在线视频会议合作产品。咱们每天的线上例会就是用本人做的产品,而且会应用本人开发的新功能测试站点来开“站会”。除了花大量的工夫做dialy update,而后就是测试专家率领团队(包含PO、架构师、SM、Dev)依照打算来进行集中(半个小时)的测试。所以说“开发者测试”就是“开发者来测试”,而咱们传统的泛滥测试工程师面临三种前途:成长、转型、淘汰。“测试专家”在我的项目中的话语权也很高,我之前的公司应用骨干开发,有个“一进一出”的评审,团队的这种类型的“测试专家”有一票否决权。甚至在公司有PE级别的测试专家(相当于我司20-21级的技术专家)。 一进:对于一个性能是否可能进入release branch,在release branch关上feature toggle进行公布级别的测试。一出:在engineer release时,该性能品质合格,容许feature toggle进入产线。二、没有什么测试不能够“自动化测试”回到测试金字塔,从测试的"开发成本"、“执行老本”、“测试覆盖率”、“问题定位”四个维度来看,基于代码级别的白盒测试是及其重要的。 开发成本: 实现测试用例的老本。执行老本:运行一次测试用例的老本。测试覆盖率:咱们通常所说的line coverage和branch coverage问题定位:测试呈现问题,定位问题的效率通过测试金字塔及其四个测试维度评估,咱们能够得出: 尽可能地多做Low Level Test :因为他们的执行速度相较于下层的几个测试类型来说快很多且绝对稳固,能够一天屡次执行。一般来说,LLT灰做到继续集成构建工作中去,甚至在MR中执行,保障进入代码仓库的代码品质。在自动化保障的状况下,执行肯定规模的IT、ST、UI Test:因为他们的执行速度较慢,环境依赖较多,测试先对不稳固。通常在夜里执行一次,阶段性的查看代码品质,反馈代码问题。尽可能地少做大规模的手动测试:因为他们的执行速度相较LLT且不够稳固,人力老本较高,也无奈做到一天屡次执行,每次执行都要等很久能力取得反馈后果。然而,他们更贴近实在用户场景,所以要确保肯定周期内或者要害节点工夫执行以下这几个测试以确保软件品质。当初很多公司曾经迭代公布的周期越来越短,甚至做到了2周。手动测试显然无奈适应这种开发模式,而把手动测试的用例通过各种技术计划自动化是惟一路径。代码层面,从底层业务代码到UI代码,只有架构设计正当,都是能够做UT。最顶层的UI交互测试,测试用例也是能够自动化运行(大部分UI框架都能够通过accessibility的接口进行UI自动化测试),试想连咱们手机硬件都能够自动化测试“摔手机”这种极其测试,软件有啥做不到?至多有些业界技术大牛公司的某些产品,从代码提交Merge Request,到产品上产线是能够以天来计算的。这种产品的测试是不会也不可能通过手工测试来实现的。 三、开发者测试”利在当下“,”博得将来“很多人都认为底层的开发者测试,花了大量的工夫,写了大量的代码,而后来保障性能的正确性,然而每次代码性能或者构造的的变更都要批改测试代码。我手动调试和验证效率更高。确实通过UT,API测试来调试代码与本人手动运行调试区别不大,然而通过开发者测试对代码进行调试,从而保障以后我的项目迭代的品质;然而其更重要的作用不是这个。 咱们在bug分类中有这样一些名词 : Build Regression Bug, Release Regression Bug。 Build Regression Bug : 开发中同样的性能在新版本呈现一个bug,然而在之前的版本没有这个问题,咱们叫做Build Regression Bug.Release Regression Bug : 产线上同样的性能在新版本呈现一个bug,然而在之前的版本没有这个问题,咱们叫做Release Regression Bug.咱们每次commit到产品中的代码,没有人能够保障其100%不会呈现问题,在麻利开发的这种疾速迭代下,不太可能进行全功能的手动测试,所以开发者测试,特地是底层的UT、API测试、集成测试,可能很容易的辨认发现这类问题。所以说开发者测试”利在当下“,”博得将来“。 四、TDD不是必须先写测试代码对于TDD,大家的认知是先写测试代码,再在写实现代码,这个说法对也不对。概念上没错,然而如果严格这样做,效率未必最高,这也是TDD很难推广的起因之一。咱们把编码实现分成3个局部:实现代码、测试代码、调试代码。依照TDD的概念时先写测试代码、而后编码,最初调试。咱们通常在代码实现时,一开始不大可能思考的十分清晰,把接口定义的齐全精确,如果严格依照测试、编码、调试来做,测试代码要随着编码频繁批改。 当然这自身不是什么大问题,在理论执行过程中,很多人习惯先搭好代码框架、测试框架,而后在编码,测试。等测试实现后在进行调试。所以从华为灰度治理的角度上来说,只有单元测试在调试之前,都能够称作TDD开发模式。BTW,当然当初开始风行BDD,这里想说的是如果连我说的TDD都做不到的团队,就不要思考BDD了。 (Behavior-Driven Development:BDD将TDD的个别技术和原理与畛域驱动设计(DDD)的想法相结合。 BDD是一个设计流动,您能够依据预期行为逐渐构建功能块。 BDD的重点是软件开发过程中应用的语言和交互。 行为驱动的开发人员应用他们的母语与畛域驱动设计的语言相结合来形容他们的代码的目标和益处。 应用BDD的团队应该可能以用户故事的模式提供大量的“性能文档”,并减少可执行场景或示例。 BDD通常有助于领域专家了解实现而不是裸露代码级别测试。它通常以GWT格局定义:GIVEN WHEN&THEN。) 五、UT覆盖率100%真的很不好于单元测试,咱们都会关注一个指标“覆盖率”。不论模块、函数、行、分支覆盖率,必须要有肯定比例的覆盖率。然而每一项你都做到了100%,那么会给你打“差评”。不是说你做到不好(这里不谈是不是用了正确的形式),而是老本和性价比问题。以最难达到的分支覆盖率(branch coverage),如果要做到100%的覆盖率,有些内存调配或者容错爱护的分支都必须测试到,那么你的测试用例思考要翻倍,然而并没有带来的相应价值。甚至一些代码条件分支在程序运行的生命周期内都没有被执行过。 模块覆盖率:业务模块代码通过UT,架构模块代码通过IT;就从UT的覆盖率的角度下来看,不须要去测试架构代码。函数覆盖率:不要为一些无任何逻辑的代码去写UT。比方咱们有些函数就是get/set一个属性,外部实现就用一个变量来赋值保留。这种函数写UT就是为了覆盖率而写,没有任何真正的意义。行覆盖率:通常来看平局80%高低的行覆盖率是一个正当的指标,有些能够为0%,而有些须要100%,如果全副代码都超过90%,其老本较高,效率较低,不倡议这样做。分支覆盖率:越简单的业务逻辑,越要写更多的测试用例来笼罩,而一些内存调配出错逻辑判断能够不须要测试。六、用测试来驱动架构和代码品质这里谈测试驱动架构和代码品质,次要说的是让代码具备欠缺的可测试性,什么是代码的可测试性?简略的说就是类与类之间,模块与模块关系解耦,类与类,模块与模块通过接口编程。依赖的接口通过被动注入式传入,而不是被动获取式。对于程序失常运行时,所传入的接口参数是实在的业务对象,而做测试时,能够传入fake的模仿实现。当然不是所有的依赖模块都这样做,一些与业务无关的Utility Library,或者一些特定的数据对象实现,能够间接调用。 这里咱们讲到了fake与mock,对于Test Doubles,基本上的概念如下,具体每种代表什么意义,大家能够自行上网搜寻 虚构对象(dummy)存根(stub)特务(spy)模仿对象(mock)伪对象(fake)以后我司大家在做开发者测试时,基本上都在用Mock Object(实际上在用的过程中,很多是在用入参返回值管制的Stub)。抛开概念上的问题,尽管通过Mock的形式也是能够测试代码,然而实际上用Mock基本上意味着咱们的代码关联性较强,模块显示依赖较重,模块移植性较差,特地是C语言编程这种问题特地多。以至于当初很多模块根本无法发展单元测试,更多的是在做集成测试。 为什么会呈现这种状况? 咱们的高级别的架构师更多的在思考零碎级别的架构设计,把零碎模块,各个利用之间的关系梳理的十分清晰,通常状况下,高级别的架构师能够把零碎模块或利用之间的关系设计的较为正当。然而到了具体的利用业务外部的设计与实现,交给了低级别的架构师来实现。实际上这些模块外部的代码量并不小,很多都是几十万行甚至上百万行的代码量。这时候架构师的程度决定了代码的Clean Code品质。我司目前代码上的问题很多不是零碎架构的问题,而是具体业务实现中,短少严格的要求和正当的架构设计。如果在利用级别有一套架构计划来标准,那么至多在模块的接口以及模块与模块之前的交互上也能达到和零碎设计一样较为清晰正当。那么不确定的局部就时每个子模块外部几千上万行的代码局部。 之所以提出用测试驱动架构和代码品质,当给测试提出一个很高的规范时,大家不得不从架构下来解决测试的问题,当测试的问题解决时,Clean Code L3自然而然就达到了。 ...

May 17, 2021 · 1 min · jiezi

关于低代码开发:低代码正在改变软件的开发方式

摘要:低代码平台是需要和技术倒退的必然产物,从开发方式、开发门槛、开发效率各层面上,跟传统的开发方式有基本区别,是业界已达成共识的新技术方向。本文分享自华为云社区《HDC.Cloud2021|低代码:正在扭转软件的开发方式》,原文作者:灰灰哒 。 从2016年开始,低代码忽然进入疾速倒退阶段,市场容量不断扩大。依据支流分析师和市场机构的观点,到2025年低代码市场产值将达300-500亿美元。 国外的支流厂商,曾经纷纷入局。国内低代码的倒退,热度比国外的更高。据不齐全统计,在市场上主打“低代码”进行推广的厂商就达30个以上,其中大部分始终都是行业软件厂商,这些厂商在服务客户的过程中,发现低代码是解决行业客户问题的一个更好形式,转型为低代码平台提供商。 低代码平台是新的发展趋势,正在扭转软件的开发方式低代码平台的疾速倒退,得益于以下几个起因: 1、需要的迅速增长,Gartner预计2021年新增利用需要将5倍于业余IT开发产能。在这种需要暴发的背景下,用低代码去解决产能有余问题,是以后最合适的解决方案。需要的快速增长,源于以下的几个起因:2、根底技术的倒退,特地是云时代的云原生、DevOps等技术的倒退,助推了低代码平台的倒退。以后支流的低代码平台,首先是一个云平台,架构如下所示: 云化低代码平台典型架构 在这种云化的架构上,能够依附云原生和DevOps的技术红利,加强低代码平台弹性扩大、平安、网络互通等方面的能力,让开发者更专一在业务自身,不必过多关注技术和架构。 3、新技术的倒退(5G、AI、IoT等),利用开发的难度大大晋升,应用低代码能够升高开发门槛。低代码平台首页会预置罕用的组件和能力,让开发者疾速的开发利用。然而,低代码平台不可能理解足够多的业务,把各行各业须要的组件都预置好,所以要须要提供资产积淀的机制,通过资产市场,让千行百业的从业者,奉献资产。资产越多,低代码平台能力越强,开发的门槛就越低。 典型低代码平台的资产 4、支流厂商和资本的驱动。支流厂商和资本的嗅觉都十分灵活,低代码平台的次要产品,近几年产生了很多的并购事件: 支流厂商和资本的推动,不是低代码倒退的根本原因。但正是支流厂商和资本参加进来,对近几年的疾速倒退带来了十分弱小的助力。 综合上述起因,能够看进去,低代码平台是需要和技术倒退的必然产物,从开发方式、开发门槛、开发效率各层面上,跟传统的开发方式有基本区别,是业界已达成共识的新技术方向。 低代码平台面临的问题和挑战低代码平台尽管在疾速倒退,但对次要的平台来说,以后一些问题和挑战,还没有失去很好的解决: 1、低代码还是零代码?低代码和零代码是低代码平台提供的两种不同开发方式,以后支流的平台,很少单纯的提供低代码或者零代码的开发方式,基本上两种开发模式都蕴含在外面。但因为低代码和零代码,不论是在应用场景、开发人员、性能要求等各个方面,差别都很大,低代码平台很难在这两方面都兼顾好。 低代码平台面临两个比拟大的挑战: 首先,平台很难同时满足零代码和低代码对体验和能力的要求。低代码开发要求足够简略,可能满足无开发教训的业务人员;同时又要足够业余,满足业余开发者通过代码和开发的思维,灵便开发业余利用。在同一个平台里,两者的兼容,对低代码平台的设计带来很大的挑战 其次,低代码开发模式,特地是用来开发外围业务零碎,对平台自身的能力,包含弹性、平安、可靠性、可运维等能力,都会带来很大的挑战。须要低代码平台具备足够的业余技术能力,足够多的实际和积攒。 2、低代码平台须要跟其它的业务零碎进行连贯。支流的低代码平台,要么提供“连接器”的能力,要么提供API调用等能力,跟其它业务零碎进行交互。 低代码平台典型连接器 这种连贯形式,有两个比拟大的挑战: 首先,须要对接的零碎,协定是十分繁多的,比方SAP这种业余厂商的零碎,或者是RPC协定的微服务,这些零碎对接的难度和业余度要求都很高,低代码平台厂商没法把每种业务场景的连贯都能预置到平台,须要有能力构建生态; 其次,除了连贯,还有其它的数据接入形式。比方要对接一个IoT设施,是IoT设施被动推送数据到平台,这须要平台提供除被动连贯之外的数据接入形式。数据接入形式的简单和大量数据接入带来性能问题都是很大的挑战。 3、如5G、AI、IoT等,新技术的倒退,给低代码平台带来新的挑战。低代码平台要作为企业的外围业务平台,或者企业数字化平台,都须要新技术的加持。比如说,AppSheet被Google收买当前,提供语音助手和RPA等AI能力,让这类型的利用开发门槛极大升高。但对大部分的低代码平台,对新技术的跟进和反对是有余的。 低代码开发平台-华为云利用魔方AppCube华为云利用魔方AppCube是华为云近期商用的一个低代码平台,这个平台尽管在华为云上露面的工夫还很短,但曾经倒退了5年工夫: 2015-2017年,开始研发,产品诞生,用于解决电信软件的定制化问题。电信软件高度类似,但每个运营商都会有定制化需要,低代码平台十分好的解决了这个问题; 2018年,平台开始作为智慧园区等大型解决方案的根底开发平台,通过平台积淀行业资产,作为解决方案的外围载体,取得成功后,这两年在智慧城市、教育等解决方案推广; 2019年,低代码平台利用于华为外部流程与IT零碎,一个月全面代替A国的流程引擎,开发IT电子流; 2020年,利用魔方AppCube上线华为云公测; 2021年,利用魔方AppCube华为云商用。 在倒退过程中,低代码平台通过大量的打磨,曾经成为一个成熟平台: 成为智慧园区的外围业务开发和运行平台,可反对大型园区每天百万级的数据申请;3天开发华为外部流程与IT电子流,反对10万+员工的应用;中软国内某项目组的数十人,基于华为云AppCube开发我的项目:开发效率进步70%,我的项目交付效率晋升40%,人员投入缩小30%华为云利用魔方AppCube致力于提供一个更好的低代码平台: 低代码开发能力曾经成熟的状况下,倒退好零代码开发模式,做好零代码和低代码的体验与能力兼容,同时服务好全面开发者和业余开发者;别离提供连接器和数据接入能力,可对接简单周边零碎,能交融IT和OT,可用于构建外围业务零碎;集成华为的新技术、新能力,反对5G音讯开发,对接华为云的AI和IoT能力,为利用增加新的能源欢送拜访华为云官网理解更多,或申请收费试用。华为云AppCube也会于2021年4月24日~26日在深圳西丽大学城举办的华为开发者大会2021(Cloud)通过展台、开发者训练营、线上CodeLabs与大家交换,期待遇见。 预约与参会形式: 登录HDC.Cloud2021官网:https://developer.huaweicloud...顺次抉择菜单“大会议程”-“分论坛”-“利用现代化”预约“北方科技大学&华为云AppCube:开发出入校园申报和审批利用”、“华为云低代码开发高校训练营-北方科技大学&华为云AppCube联结出品”开发者训练营 点击关注,第一工夫理解华为云陈腐技术~

April 20, 2021 · 1 min · jiezi

关于安全漏洞:提升漏洞修复率DevSecOps真的很有一套

摘要:在业务利用交付规模不断扩大、交付速度一直进步、开发经营场景一体化的大环境下,平安问题你真的器重么?本文分享自华为云社区《HDC.Cloud2021 | 晋升破绽修复率,DevSecOps真的很有一套》,原文作者:技术火炬手 。 近些年来,随着云计算、微服务和容器技术的疾速遍及,不仅IT基础架构产生了微小的变动,政企组织的业务交付模式也迎来微小变迁,传统的开发模式向麻利开发和继续交付模式迁徙,在业务利用交付规模不断扩大、交付速度一直进步、开发经营场景一体化的大环境下,平安问题你真的器重么? “破绽”带来安全隐患近年来,随着软件开源化趋势成为支流,开源软件曾经成为软件供应链的重要环节,是软件生态不可或缺的组成部分,可开源软件的平安问题却是很多组织所疏忽和不通晓的。 Gartner的考察显示,99%的组织在其信息系统中应用了开源软件。Sonatype公司对3000家企业的开源软件应用状况开展过考察,结果表明每年每家企业均匀下载5000多个开源软件。随着开源技术疾速造成生态,企业用户引入开源软件已成大势所趋,无奈防止,不仅如此,随着大型软件开发过程中,开源组件的占比越来越高,加之软件开发人员往往只关注本人开发的那局部代码的安全性,漠视了采纳的开源组件的平安品质,最终导致成型软件产品的系统安全问题越来越多。 所以在这样大时代背景下,开源软件和工具曾经影响到了整个软件行业,一旦具备大规模用户根底的开源软件存在安全漏洞,结果和影响是无奈设想的。 在非100%自研发的明天,开源软件的破绽未然成为了软件生态中安全漏洞的“罪魁祸首”! 安全检查,没那么简略随着安全漏洞问题的一直爆出,越来越多的组织也开始意识到平安问题的重要性,可随着产品的开发生命周期越往后,其性能、接口、代码量、数据、外部关联等越发的宏大和简单,平安问题排查的难度、引发的修复老本也显著增高。统计数据表明,随着产品的开发,生命周期越往后,平安问题引发的修复老本也成倍数增长。(如下图)如果到了公布阶段,再去修复平安问题,那么带来的老本将是毁灭性的。 那么问题来了,咱们该怎么办呢? 晋升破绽修复率- DevSecOps实际在以上背景下,DevSecOps应运而生。 DevSecOps又是什么呢? 简略来说,DevSecOps能够了解为在DevOps根底上嵌入了平安Security,即DevSecOps是糅合了开发、平安及经营理念以创立解决方案的全新办法——一套由策略驱动的体系化方法论,一套流程与工具撑持,将平安能力嵌入到整个软件开发体系中,在保障业务疾速倒退的状况下实现平安保障,即快又平安的公布可运行的软件。 DevSecOps这个概念最早是2017年美国RSA大会上提出的——DecSecOps是一种全新的平安理念与模式,它从DevOps的概念延长和演变而来,其核心理念是:平安是IT团队中(包含开发、运维及平安团队)每个人的责任,须要贯通从开发到经营整个业务生命周期的每一个环节,只有这样能力提供无效的平安保障。DevSevOps通过增强外部平安测试,被动搜查安全漏洞,及时修复破绽、管制危险,实现与业务流程的良好整合。 DevSecOps的外围DevSecOps的平安实际次要集中于以下两个方面: 平安工作前移采纳平安在软件开发后期染指的形式,升高解决平安问题的老本,后期染指的内容包含对开发、保护人员的安全意识培训、平安开发标准的培训、平安需要(非性能需要)的导入、后期的代码审计工作、基于白盒的平安测试、浸透测试等内容。在经营阶段减少的内容与后期开发阶段相似,次要内容集中在对新平安需要实现状况的验证以及软件整体平安评估。 平安工作与现有工作无缝对接为了防止平安工作(例如:测试与评估、安全策略的部署等)成为开发瓶颈,使得利用零碎在最短周期内实现其应有的价值和平安属性。DevSecOps采纳疾速迭代的开发方式,这就须要实现平安与开发工作实现无缝对接,将平安工作导入现有的开发工作流程和工具中,包含将平安需要导入至对立需要治理流程与工具、平安测试工作与继续集成/继续部署(CI/CD)对接、平安测试后果导入至缺点管理工具等诸多环节。 这实际上就是对自动化提出十分高的要求。 DevSecOps实施方案DevSecOps通常是将平安嵌入到DevOps的流程阶段中,所以一般来说,DevSecOps的工具通常也是基于编码、构建、测试、配置、部署、监控这六个阶段嵌入的,如果要自行搭建DevSecOps的流水线须要至多在以上环节中退出相应的工具并实现自动化,具体分析如下: 1)开发阶段 良好的编码习惯更易于代码自身的了解和更改。 DevSecOps通过增加用于编写良好和平安代码的安全检查来扩大这些实际。 传统的单元测试,代码审查,动态代码查看等实际能够扩大到该阶段的安全性查看。为了不影响开发人员的工作效率,能够在代码提交至代码仓库之前查找并修复常见的平安问题。 2)构建阶段 将代码提交到代码仓库后,将执行应用程序的构建和根本自动化测试,以确保代码始终可编译可构建。 同样,须要在此阶段增加安全性查看,以检测重大和高危安全性问题。如果发现重大问题,则须要进行安全控制,设定构建为失败并发送警报告诉。 3)测试阶段 胜利构建后,通过抉择生成的工件并将其部署到容器或者测试环境来触发测试阶段。这些测试包含功能测试,集成测试,性能测试,高级SAST,安全性和DAST。 这个阶段通常须要更多的工夫和资源来执行,并且遵循疾速失败办法优先准则,即更吃力和耗时的测试要尽可能后延,只有在其余测试都通过时才执行。 4)配置阶段 配置管理工具能够轻松地重复大规模部署和创立平安基础架构。通过标准化配置,配置管理工具能够缩小与补丁治理相干的问题,最大限度地升高黑客能够利用未修补的服务器的危险,并有助于缩小不同环境之间的差别。值得一提的是,应用配置管理工具能够在地方代码库和版本控制下跟踪配置信息。 5)部署阶段 如果上述所有阶段胜利运行,则须要筹备投入生产环境运行。该阶段指标次要是验证在配置或部署工夫内是否存在任何谬误,这些谬误是否会升高零碎的可靠性和弹性,是否能够在故障状况通过这些进行攻打。 该阶段应用自动化运行时检查和测试中施展重要作用的中央,特地是发现平安违规和破绽的平安问题,并突出了危险,如拜访控制策略或防火墙规定的变动。 6)监控阶段 零碎投入生产后,安全性不会终止,而是真正开始。在DevSecOps中,主动安全检查和监督反馈循环迭代是生产操作的根本局部。 继续监控能够深刻理解应用程序正在接管的流量类型,并帮忙辨认歹意用户的攻打模式。 总结综上,DevSecOps的工具次要是基于编码、构建、测试、配置、部署、监控这6个阶段嵌入的,如果要自行搭建DevSecOps的流水线,须要至多在以上环节中退出相应的工具(参考工具如下图),并实现自动化。如果自行搭建较为艰难可借助平台提供DevSecOps的能力,比方华为云DevCloud软件开发平台来进行流水线的配置与开发。 当你遇到平安问题或者想要预防平安问题产生,DevSecOps是一个很好的解决方案,心愿您看完本文,对DevSecOps有所理解。 作为华为ICT基础设施业务面向寰球开发者的年度盛会,华为开发者大会2021(Cloud)将于2021年4月24日-26日在深圳举办。本届大会以#每一个开发者都了不起#为主题,将汇聚业界大咖、华为科学家、顶级技术专家、天才少年和泛滥开发者,独特探讨和分享云、计算、人工智能等最新ICT技术在行业的深度翻新和利用。智能时代,每一个开发者都在发明裹足不前的奔流时代。世界有你,了不起! 理解大会详细信息,请点击https://developer.huaweicloud.com/HDC.Cloud2021.html。 点击关注,第一工夫理解华为云陈腐技术~

April 7, 2021 · 1 min · jiezi

关于软件开发:今天你打到车了吗滴滴突然崩了司机接不到人乘客付不了钱…

明天一大早“滴滴崩了”的话题就冲上了热搜,滴滴呈现了乘客公布的行程看不见、司机无奈开启订单、达到后无奈完结订单等多种异常情况。 有网友吐槽说:“平时只有 10 块钱的途程,明天因为无奈完结订单,硬生生花了 50 多。”还有乘客因为无奈领取订单被滴滴司机留在车上 8 分钟,直到订单复原。 今早开始曾经有网友陆续在滴滴官微下留言反馈状况,有的说本人的行程曾经完结半个多小时了,但订单无奈完结而且始终在计费。还有的说因为司机和乘客显示的订单信息不同,本人叫不到车早退了很久。甚至有不理解状况的乘客和司机产生了争吵,争执“到底是谁勾销了订单”。 截至目前,滴滴官网尚未对此事作出回应。

February 25, 2021 · 1 min · jiezi

关于软件开发:统一软件开发框架对企业信息化的影响

现在,互联网的倒退逐渐颠覆了传统的行业模式,使得越来越多的企业在新开拓的业务中一直向其聚拢,大部分人的生存简直曾经无奈来到互联网了。 借着互联网的大潮,越来越多的新鲜业务模式开始呈现,一些新兴企业在短时间内超过诸多传统公司,成为互联网时代的宠儿。不过,尽管新兴企业的业务倒退走在了前列,然而信息化的建设很多却走了传统公司的老路,运作形式老旧,堪称形新而神不信,制约着企业策略的施行。 上述情况的呈现,有多方面起因,新兴企业在成立之初,防止不了受以前教训的影响,以至于进入疾速发展期之后,其外部运作模式仍然无奈解脱传统教训的影响:有我的项目新增 —> 招揽外围人员 —> 围绕外围人员组建团队 —> 该团队全权负责新我的项目,最终造成一个运作闭环。当我的项目须要拓展,须要与其余业务交融时,通常由外围人员解决,一旦我的项目负责人呈现异动,则该我的项目可能会难以持续。 所以,在互联网新时代仍然沿用传统,会产生多种弊病。 一.管控壁垒 新开拓业务在倒退过程中必然有新人源源不断的退出,长此以往便会造成一个新部门。而部门领导为了保护外部利益,通常会想方法缩小对其余部门的依赖,包含技术选型,标准建设,组件选取,运行环境等。 二.断崖效应 当这样的技术气氛一旦造成,成员对整体我的项目的影响会变的十分微小。我的项目开发工作可能会因为个别外围人员的异动而进行,重大时将不得不推倒重做。 三.资源节约 当有多个团队在试图构建本人的研发流程时,其研发老本便会产生叠加,这时就会产生资源节约。 四.难以考核 当初的企业,KPI无处不在,但很多时候难以做到迷信考核。如当不同团队别离应用各自的技术栈时,其实用标准和保护形式也会有天壤之别,这时将无奈从生产效率来判断绩效,那么通用考核规范也就难以设立。 那是否有解决的方法呢? 互联网企业在倒退初期,为了减速拓展业务,通常对老本的管制会很宽松,经营保护及技术积淀都是以倒退业务为主,以求尽快的占得市场先机,取得更多用户。 不过,当倒退到肯定体量时,市场会逐渐趋于稳定。此时的增量市场开始转为存量市场,蓝海变红海,企业也开始暴露出晚期扩张时留下的问题。如果后期可能防患未然,刚起步就能造成企业级的对立开发框架,会在很大水平上缩小不必要的麻烦,从而节俭开发成本,取得最大效益。 相比传统软件开发模式,对立开发框架有如下劣势。 一.节约隐性老本 采纳对立的开发框架,项目组就能在业务中投入更多精力。在项目组内构建对立架构平台,能提炼出有技术共性问题,交由固定团队对立负责,可防止各我的项目独立解决技术难题,无效优化工作流程,节约隐性老本。 二.提效增质 框架的最终目标是要千人一面。采纳了对立开发框架后,在技术栈、技术组件、技术计划、甚至在代码标准上,都能造成标准化的技术输入模式,其带来的不仅是产品开发效率的晋升,还有对品质和稳定性的保障。 三. 继续的技术积淀与积攒 技术的提高来源于一直的积攒和积淀,高效的工程师都是站在他人肩膀上实现工作的。以我的项目为导向的团队,会以实现业务需要为最大指标,技术只是实现业务的一种工具。基于此,业务开发者就不会器重技术积攒。核心成员构建出的根底平台工具,往往会随着核心成员异动,而将之前积攒的技术全副抛弃,且在某些时刻可能将导致整个我的项目无奈持续。 当存在企业级的对立开发框架(平台)时,开发团队可基于该平台进行本身我的项目的研发,无需苦恼于底层技术实现,只有实现性能即可。如产生外围人员异动,新加入者可在承受培训后疾速顶替,不会导致青黄不接。开发者还可对开发平台一直的改良,更好的满足项目组的技术需要,相干开发技术也失去积攒和积淀。 四、 清晰的研发投入,可量化的考核规范 当基于对立开发框架(平台)的标准化技术规范建设起来后,就可对开发者进行无效的评估和考量,可防止因技术差别而呈现的问题。 对立开发框架的定位和指标 对立开发框架定位于技术层面,其次要作用是帮忙企业在产品研发和我的项目施行时,对立技术架构和开发工具。有助于造成继续的技术积攒,晋升开发者工作效率并解脱对特定人员的依赖。 码糖糖.

January 6, 2021 · 1 min · jiezi

关于软件开发:年轻人不讲武德竟然想白嫖我的开发神器

大家好,我是白码王子,糖糖。 明天有个同学问我:公司要开发一个流程,没有思路,问我有没有比拟好的办法而后啪啪给我一张图。 大略相似于这样式儿 我一看,哟,财务审批流程,这一点一点儿写的话须要挺久,因为是.net程序员,我举荐他应用ccflow框架,性能强,写起来还算不便。 然而,这小子居然说我的项目比拟急,有没有马上能做进去的货色,因为本人不足以在这么短的工夫写进去。 小样儿,有想法,看样子是时候拿出我的开发神器了。 来来来,瞅一瞅,看一看。 这个怎么用? 这个简略,代码都不必,间接把流程拖进去就能够。 咱们找到流程模块-流程设计 这是自身工具带的一些流程,既然是自定义的,咱们就新建一个好了,就做同学要的流程。 当初就进入设计界面了,依据须要配置SQL语句 接下来是权限,为了节省时间咱们就全选了 最初是流程具体走向设置,这里把同学须要的流程用右边的工具拖出来就好了,实现。 当我把这些配置好之后,同学眼睛都睁大了。 糖哥糖哥,这个好,给我用一下呗? 什么? 这是要白嫖我的开发心血啊。 年轻人,果然不讲武德! 一个省着奶茶钱去买工具的老人家,都不放过! 我劝你们这些年轻人要讲规矩! 一顿烧烤都不请,耗子尾汁。 再见,谢谢!

November 26, 2020 · 1 min · jiezi

关于软件开发:玩转华为云开发|老板万万没想到刚入职的我一人就搞定人脸识别开发

摘要:程序猿小Hi入职公司不到三个月,就被老板独自叫到了办公室……初创公司R:刚刚创建,致力于通过信息化技术,帮忙中小企业数字化转型,富丽转身。 公司成员:老板、程序猿小Hi、… … 程序猿小Hi入职公司不到三个月,就被老板独自叫到了办公室。小Hi情绪既冲动又不安,冲动的是老板是不是要给本人升职加薪,不安的是不是本人体现不好,老板要炒鱿鱼,毕竟疫情是一个很好的借口。 来到了老板的办公室,不等小Hi谈话,就单刀直入,说:小Hi啊,你来公司挺长时间了(还没到三个月,老板健忘?),你的工作做得挺好(心里开始爽歪歪),明天有个重要工作要交给你(凉了一半,升职加薪忘了吧)。 小Hi:好的,老板你有啥就间接嘱咐,保障高效实现(心里开始有点忐忑)。 老板:昨天有个新客户,提了个需要,他们是在XX高新区,公司多切人员杂,在目前疫情状况下,想在门岗处减少门禁,辨认外来人员,增强疫情管控。这是他们的需要文档,公司的其他人都出差了,这个工作就交给你了。记住,要做成模块化,不便后续客户利用。 小Hi:是,老板,我好好看看他们的需要文档。 …… 小Hi来到老板办公室,关上需要文档一看,六个大字映入眼帘:咱们要人脸识别(不对,是七个),心里翻滚着五味杂陈,“模块化”和“人脸识别”,这就是需要。 第一次接到了老板的工作,小Hi陷入了“沉思”(吃鸡游戏中…) 第一个需要是“模块化”,模块化就是要求封装外部细节,精简对外交互,实现高内聚低耦合。小Hi第一工夫就想到了通过提供API来保障本身的独立性,以及清晰化的对外交互界面,大学里学的那点API相干的常识开始在脑海里爆发: API的定义:利用程序接口(Application Programming Interface)是一组定义、程序及协定的汇合,通过 API 接口实现计算机软件之间的互相通信。用来提供应用程序与开发人员基于某软件或硬件得以拜访的一组例程,而又无需拜访源码,或了解外部工作机制的细节。 常见的API类型有:1)RESTful API:基于HTTP、URI和XML等的常见的Web服务接口标准,形容了一个架构款式的网络系统,其外围是面向资源的。 2)SOAP接口:简略对象拜访协定,简略对象拜访协定(SOAP)是一种轻量的、简略的、基于 XML 的协定,它被设计成在 WEB 上替换结构化的和固化的信息。 3)RPC接口:近程过程调用 (RPC) 是一种协定,程序可应用这种协定向网络中的另一台计算机上的程序申请服务。 4)RMI接口:近程办法调用RMI是针对于java语言的, RMI 容许您应用Java编写分布式对象。 API的设计准则,好API的6个特质:1)极简:极简的API是指对外裸露的尽可能少,这样的API更易了解、记忆、调试和变更。 2)齐备:齐备的API是指用户冀望有的性能都蕴含了,满足用户的需要,是齐备的。 3)语义清晰简略:接口、参数、帮忙等的语义清晰简略,应用常用语和缩略语,不实用生僻语,尽量减少意外。 4)合乎直觉:教训不很丰盛的用户不必浏览API文档就能搞懂API,而且程序员不必理解API就能看明确应用API的代码。 5)易于记忆:为使API易于记忆,API的命名约定应该具备一致性和精确性。应用易于辨认的模式和概念,并且防止用缩写。 6)疏导API使用者写出可读代码:代码只写一次,却要屡次的浏览(还有调试和批改)。写出可读性好的代码有时候要花费更多的工夫,但对于产品的整个生命周期来说是节俭了工夫的。 注:源自Qt的API设计准则,_详见__https://github.com/oldratlee/translations/blob/master/api-design-principles-from-qt/README.md_ API相干概念1)API网关:服务与服务之间通信的中介或桥梁,提供服务接入和鉴权、API注册、流控、治理等API托管服务。 2)API全生命周期治理:笼罩了API的设计、开发、测试、公布、订阅、应用和剖析的端到端、全流程的治理。 第二个需要是“人脸识别”,小Hi没有AI相干技术积攒,开始捉急,突然灵光一闪,想起来前两天华为云专家过去交换,有提到华为云的AI能力,于是冲动的关上了浏览器。 输出https://www.huaweicloud.com/,关上华为云,抉择“开发者”=>“资源工具”下的API Explorer,查看华为云所有凋谢API: 在API Explorer下面,能够疾速查看对应云服务的凋谢API: 在搜寻框输出人脸识别,搜寻相干的云服务: 关上人脸识别服务,有人脸比对、人脸检测、人脸搜寻、人脸资源管理、人脸库资源管理等,挺多API的,太棒了。 急不可待调试一把,登录华为云(没注册的连忙注册下),抉择到人脸识别控制台页面(https://console.huaweicloud.c...),开明人脸比对服务: 在API Explorer上抉择人脸比对API(FaceCompareByFile),查看此API具体介绍信息,包含接口阐明、申请参数、示例、返回参数、错误码等,此API反对比照两张人脸图片信息,判断是否同一个人的置信度: 咱们间接能够抉择要比对的图片,在API Explorer上点击调试按钮来在线调试这个API: 点击调试后,能够失去比对后果,类似度94.699%(代表同一个人的概率很大): 再调试了多个API接口,查阅了人脸识别服务介绍后,小Hi心里有着落了,一张“蓝图”在脑海中绘制: 小Hi登时信念爆棚起来,这下能够在老板背后好好体现下了。 你认为这就完结了吗? 图样图森破,小Hi还是太年老,按以往教训,蓝图和落地至多还差个河汉的间隔,期待小Hi的是怎么疾速实现这个公共服务,未完待续 …… 点击关注,第一工夫理解华为云陈腐技术~ ...

October 31, 2020 · 1 min · jiezi

关于软件开发:软件开发必修课你该知道的GRASP职责分配模式

简介: 软件开发为什么须要职责驱动设计(RDD)?职责应该如何调配?如何联合架构模式在理论开发中实际落地?本文介绍一种通用的职责分配模式——GRASP,通过举例详解GRASP的几大准则,并分享两个理论使用的案例。 软件在实质上是简单的,软件自身的复杂性在于除了要解决问题域,还要解决非功能性需要和软件域特有问题:安全性、可用性、可维护性、可扩展性、性能、一致性、容错性、稳定性、可重用性、幂等、兼容等等,软件开发者的工作就是制作“简略”的假象。如何组织简单的零碎?把简单的事物合成到不同的档次中,档次代表了不同级别的形象,一层构建于另一层之上,每一层都对下层屏蔽外部复杂度。 一 为什么应用RDD?在RDD中,咱们认为“软件对象具备职责”,这个定义很合乎人在社会群体中分工协作的形式,软件也是人编写的,所以依据职责思考设计的软件系统合乎人的行为习惯,同时更易于了解和治理。在微服务架构中不同零碎由不同的组织和人负责,把零碎当作对象(人),零碎提供的接口就是对象(人)的职责。 职责驱动设计的外围是思考怎么给对象调配职责,其实用于大到零碎、小到对象等任何规模的软件。职责调配的实质是分工,劳动分工是劳动生产率进步的次要起因。 熟练度的进步,专一于某个畛域(升高复杂度)。工夫的节约,同一个人在不同工作来回切换须要消耗大量工夫。人工创造的机器和利用(特定畛域的工具)。二 如何给对象(元素)调配职责?调配职责该当从清晰的形容职责开始,对于软件畛域对象来说,畛域模型形容了畛域对象的属性和关联,对应类的属性和援用,用例模型蕴含一系列的行为流动,对应类的办法。畛域模型创立形式可参考《UML和模式利用》、UDD、DDD。 应用GRASP(General Responsibility Assignment Software Patterns)模式调配职责,GRASP是通用职责分配模式,是对一些根本的职责分配原则进行了命名和形容,共9种模式(一些GRASP准则是对其余准则和设计模式的演绎,设计模式有上百种,只是记住GoF 23种设计模式就曾经很艰难了,更别提还要记住每种模式的细节,因而须要对设计模式进行无效的归类。GRASP中的准则形容了模式的实质,除了有助减速设计模式学习之外,对发现现有设计存在的问题也更无效,这就是演绎的价值)。 当议论低耦合、高内聚时,咱们具体是在谈什么?问题不在于耦合度高、内聚性低,而是在于其产生的负面影响,负面影响往往是在发生变化时体现进去的,这些负面影响会影响到咱们开发的效率、稳定性、可维护性、可扩展性、可复用性等等,整个GRASP的外围是如何避免变异(变动)。 在学习过程中发现GRASP短少结构化的展现演绎后果,通过我本人的了解把开发中罕用的GoF设计模式、面向对象设计准则、架构设计准则和GRASP进行关联: 三 GRASP职责分配模式1 避免变异该模式根本等同于信息暗藏和开闭准则。如何做到在不批改原来性能的前提下对变动的局部进行扩大?辨认不稳固因素是特地艰难的,也决定了咱们是否做出合乎开闭准则的设计。 问题:如何设计对象、子系统和零碎,使其外部的变动或不稳定性不会对其余元素产生不良影响。 解决方案:辨认预计变动或不稳固之处,调配职责用以在这些变动之外创立稳固接口。 相干准则和模式: GRASP:间接性、多态GoF:大量模式其余:接口、数据封装2 低耦合、高内聚耦合是对某元素与其余元素之间的连贯、感知和依赖水平的度量,内聚是对元素职责的相关性和集中度的度量(这里的元素指类、零碎、子系统等等),耦合和内聚是从不同角度对待问题,他们相互依赖的相互影响的(以下两点也能够反过来说): 内聚过低,相干性能扩散在不同模块中,须要减少额定的耦合使这些性能聚合在一起,产生变更时影响多个模块。内聚过高,不相干的性能汇集在一个模块中,耦合度高,产生变更时会产生意想不到的影响。 低耦合 耦合是对某元素与其余元素之间的连贯、感知和依赖水平的度量。这里的元素指类、零碎、子系统等等。 问题:怎么升高依赖性,缩小变动带来的影响,进步重用性? 解决方案:调配职责,使耦合尽可能低。利用这一准则评估可选计划。 相干模式或准则: GRASP:避免变异留神:耦合不能脱离专家、高内聚等其余准则独立思考。 严密耦合的零碎在开发阶段有以下的毛病: 一个模块的批改会产生涟漪效应,其余模块也需随之批改(通常是内聚低引起的)。因为模块之间的相依性,模块的组合会须要更多的精力及工夫,可复用性低(通常是耦合高引起的)。解读:耦合示意元素之间存在依赖,当议论“耦合高”时,咱们具体是在议论什么呢?是依赖产生的负面影响,所以低耦合的外围是解决不良依赖。高下是度量并不是评判耦合后果好坏的规范,应用“不良耦合”、“松耦合”形容的更为精确。不良耦合产生的负面影响次要有两点: 依赖关系自身盘根错节难以保护和了解,很容易产生脱漏和问题(这点针对人,人解决复杂性事物时能力是局限的)。与不稳固元素产生依赖时很容易受到变动的影响(通常无奈防止不依赖)。那么如何做呢?先对依赖关系的好坏进行评估:依赖形式、依赖方向、依赖链路。 方向: 双向依赖(差)相互依赖的两个元素不能独立口头,在微服务零碎架构的零碎中类级别不会产生特地简单的问题,然而在模块 or 零碎级别就特地容易受到变动带来的影响。举例:A <-> B,A调用B的b接口,B的b接口依赖A的a接口,如果a b接口都要变更,两个零碎如何公布?A依赖B先公布,B也依赖A先公布,相互依赖的两个元素不能独立口头。循环依赖(更差)循环依赖比双向依赖的的链路更长,影响的范畴更大。单向依赖(好)链路: 深度B调用A.getC().getD().getE().getF() 获取到F。广度在链路变宽的过程中不加以束缚和治理很容易产生大杂烩的元素,也很容易产生双向和循环依赖。形式: 内容耦合(高)当一个模块间接应用另一个模块的外部数据,或通过非正常入口而转入另一个模块外部。共享耦合/公共耦合(高)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程度随耦合模块的个数减少而减少。管制耦合(中)指一个模块调用另一个模块时,传递的是控制变量(如开关、标记等),被调模块通过该控制变量的值有选择地执行块内某一性能;特色耦合/标记耦合(中)指几个模块共享一个简单的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;数据耦合(低)指模块借由传入值共享数据,每一个数据都是最根本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。非间接耦合(低)两个模块之间没有间接关系,它们之间的分割齐全是通过主模块的管制和调用来实现的。耦合度最弱,模块独立性最强。无耦合(无)模块齐全不和其余模块替换信息。解决不良依赖: 治理简单的依赖关系依赖方向:应用单向依赖,去除或弱化双向依赖,不应用循环依赖。依赖链路:恪守起码认知准则。依赖形式:尽量应用数据耦合,少用管制和特色耦合,管制公共耦合的范畴,不应用内容耦合,如果依赖的对象不稳固应用非间接耦合来弱化耦合严密水平。调配正确的职责缩小不必要的依赖:专家、创建者。通过其余准则和模式缩小不稳固元素带来的影响:高内聚、纯虚构、控制器、多态、间接性、起码认知。高内聚 内聚是对元素职责的相关性和集中度的度量。 问题:怎么样放弃对象是有重点的、可了解的、可保护的,并且可能反对低耦合? 解决方案:依照相关性调配职责,可放弃较高的内聚。 长处: 合成后的元素更加简略易于了解和保护。依照相关性拆分能够进步重用性。相干准则和模式:繁多职责准则、关注点拆散、模块化。 低内聚的毛病:内聚性较低的类要做许多不相干的工作,或须要实现大量的工作,这样的类会导致以下问题: 难以了解难以复用难以保护常常会受到变动影响 例子:A的变更影响从3个模块变为1个。 小结 通过结构化治理来放弃低耦合、高内聚。 3 创建者创建者领导咱们调配那些与创建对象无关的职责。如此抉择是为了放弃低耦合。 问题:谁应该负责创立某类的新实例? 解决方案:满足以下条件之一时,将创立类A的职责调配给类B(当满足1条以上时,通常首选蕴含或聚合)。 B“蕴含”或聚合A。B记录A。B频繁应用A。B具备A的初始化数据,该数据将在创立时传递给A。长处:反对低耦合,因为创建者和被创建者曾经存在关联,所以这种形式不会减少耦合性。 相干模式或准则: GRASP:低耦合GoF:具体工厂、形象工厂其余:整体-局部注:蕴含(作者在这里标注了“”,因为蕴含在uml是表白用例关系的,用来阐明对象关系也能够)、聚合、整体-局部 看UML定义;蕴含强调了强依赖(A是B的子集,A属于B,短少了A时B不是整体),聚合是弱依赖(B由A组成,A不属于B)。 ...

October 22, 2020 · 2 min · jiezi

关于软件开发:论软件工程师的自我修养角色重构与质量

摘要:在本文中,咱们将探讨软件开发过程中对于角色、重构和品质的问题。“每天都会有更多的技术产生,每家公司都在互联网上,每家公司都将成为一家科技公司。”OKTA首席运营官兼联结创始人Frederic Kerrest说道,因为他们必须找出应用该软件的更好办法。软件不仅成为了一个必需品,更成为了一个竞争劣势。因为泛滥公司围绕软件而竞争,软件开发相干的事宜显得越发重要。开发软件的人——软件工程师正显得越发重要。 “对于常识,要求知若渴;对于本人,要不耻下可。”优良的软件工程师肯定是在软件开发的路线上前行者。自学是其成长的一个重要伎俩,在自学的过程中,咱们是能够通过考试的形式来收敛思路,督促本人学习,从而进步本人的基本素质。诚然,准则和模式是软件工程品质的基石。但技术是工具, 是为人服务的,而不是相同的。咱们不能为了投合某种技术而束手束脚,让本人特地好受。与此同时,要让本人的能力施展到极致,良好的心情是必须要有的,因为软件工程中的一个外围因素是人的因素。 诚然,在软件开发过程中,咱们不仅要将本身内功修炼好,更应该 “用产品谈话”。那么,在这个过程中,咱们该如何保障开发的品质呢?在开发的过程中如何专一于本人善于的事件呢?在本文中,咱们将探讨软件开发过程中对于角色、重构和品质的问题。 角色咱们常常提一句话:反动工作只有分工不同,没有高低贵贱之分。这里的分工其实就是角色的划分。角色划分是为了让个体承当的工作量最小化,从而能够把咱们从繁文缛节中解放出来,专一于本人善于的事件。那么,在软件工程当中,这样的理念应该如何贯彻呢? 软件工作外面的脏活儿、累活儿个别是指技术老旧而不得不保护的一些工作。还有一些重复性强的工作也被称为脏活儿、累活儿。 对于这种活儿,个别工程师都想推脱掉。次要起因是认为做这类活儿技术进步的空间很小,再加上技术古老,这些技巧学会了当前也用不上,同时也比拟干燥。 这类工作的工程师个别是指派的。须要对相干的工程师进行一些必要的技术培训或者间接招收懂得相干技术的工程师退出工作。 效率和价值次要体现在帮忙客户解决现有软件系统中的问题,或者增加新的性能。客户可能很少违心购买一套簇新的零碎,因为价格绝对比拟高,所以他们宁愿少花点钱去做些修修补补的工作,可能解决当务之急就能够了。 运维工作的价值是把曾经开发进去的组件和系统集成起来对立的工作。是推出面向用户的软件系统产品的重要一步。我不认为是边角料的活儿。 运维相干的工作越简洁越清晰越好。这部分相干的文档个别是read me markdown的模式寄存在软件系统的repo中。通过查看这些文档,应该能够自行部署整套零碎。 零碎部署个别会分几种类别,开发模式,qa模式,staging模式和生产模式。 业界对于软件开发过程中的角色有不同的了解和认识。笔者观点如下: 1.我的项目产品经理负责业务需要的解决,负责跟客户与开发团队打交道。 2.我的项目开发组长肯定是全栈,须要统筹规划,与项目经理一起探讨需要剖析,与开发组成员一起探讨开发设计,任务分配与开发实现。 3.前端工程师负责网络页面程序开发,手机端利用开发,桌面端利用开发等等。 4.后端工程师负责API设计与开发, 数据分析解决与音讯推送。 5.运维工程师负责部署环境的搭建与看护。 6.针对具体的业务需要,还会有更细分的角色类别,比如说大数据工程师,算法工程师,AI工程师,机器学习工程,深度学习工程师, 中间件工程师。 7.测试工程师负责系统集成后的业务需要案例测试。这一部分的输出跟开发团队的输出是一样的,都是用户的需要。输入则是需要案例对应的测试报告。而开发团队的输入就是整个软件系统。 重构为什么咱们须要对代码和设计进行重构?次要是因为咱们发现了更好的做法,如效率更高,更容易保护等等。 简略的代码重构咱们都比拟相熟,比如说你通过工具就能够做一些整顿。 一般来说,重构是为了解决复杂度的问题。 当初比拟头疼的一个话题就是对老产品的重构,一些老产品波及到上千万行,上亿行的代码。 对于老产品整改的问题。如果只是缝缝补补的话,可能起不到化繁为简的目标。其实做相似这种工作的话,有一个比拟可行的计划。就是把现有的产品当做一个成型零碎也就是现有运行的产品,不要做大的改变,顶多就是批改bug。 而后以这些成型的零碎为基准,去写新的零碎。相当于参照一个大的白盒就写一个小的白盒,这样新的小的白盒品质上必定比大的白盒性能上要有劣势。 这样子循序渐进去做的话,就会比拟靠谱。 有敌人会说下面的做法是重写,字面意义上没错的。 实际上不矛盾。区别就是重构的形式应该从下往上还是从上往下。比如说咱们当初大部分的重构都了解为从下往上来做。也就是感觉这个文件外头有坏代码的滋味,而后就改这个文件,这样做是没有问题的。前提是这项工作的上下文比拟单纯,无技术债权。 很多状况不是如此侥幸的,比方当初有些人遇到的问题,就是发现上下文不是很清晰,这个代码为什么要这么写?为什么一个文件有1万行或者3万行,这个前因后果不是很分明。 这个时候可能就须要从整个子模块来进行一个自上而下的剖析。梳理出这个子模块的性能需要是怎么的,须要有多少个公共接口?外部公共接口的实现形式是不是应该像目前这样的? 一个文件可能写成1万行或者3万行,必定是有肯定历史起因的,绝大水平是因为全局把握的编程能力不够造成的。 像这种状况,如果从这个文件自身去做重构的话,难度十分之大,然而如果从上往下,从模块的整个设计角度来做重构的话,可能就容易一些。 对于这样的硕大无朋,最好的方法就是分而治之。首先要确定零碎的性能逻辑点,针对这些逻辑点,要编排好对应的检测点,也就是说等咱们实现了重构当前,咱们得确保咱们的重构是没有问题的,这些检测点就是做这个的,咱们能够了解成集成类的测试。 这些集成类的测试肯定要确保能够在以后未重构之前的零碎上失常运行。 有了这个设施当前,咱们就能够发展咱们的重构工作。重构的办法有很多,比方采纳比拟好的工具,函数和变量的命名扭转,调用形式的扭转等等。这些是在现有代码的根底上进行的重构。这里咱们重点说一下重写的形式来实现重构。所谓重写呢,就是另外开拓一套代码底座。甚至能够选用不同的编程语言。 这种状况下重构首先要重用已有的业务逻辑,实现针对业务逻辑集成测试100%的通过率。 具体不论采纳哪种形式都要一个模块一个模块的进行推动。验证实现一个是一个,千万不能急于求成,试图一次性的把某些问题搞定。如果呈现很屡次失败,有可能会消磨掉你的自信心。所以肯定要一点一点的往前推动,始终是在提高当中。采纳了这种形式当前,不论以后的零碎有如许的宏大,你只有保持做上来,就肯定可能把重构工作彻底实现。 这个时候须要做的具体步骤能够参考如下: 1. 依据性能需要定义公共接口。 2. 依据公共接口写出测试案例代码。 3. 这个时候能够依照测试驱动开发的理念去填充代码。 4. 代码能够从现有的代码中抽取进去。 5. 在抽取的过程中进行整顿重构。 这样,这个子模块实现当前,就能够尝试去代替现有的子模块,看看能不能在整个零碎中平安的运行。 对于整个零碎来说,咱们又能够分成很多个子模块。而后又能够对各个子模块各个击破,最终实现对整个零碎的重构。 如果一开始对整个零碎进行重构的话,也是能够从自上而下的角度来看的。 比如说开始的时候先把所有的子模块看成一些占位符,假设他们曾经实现他们的接口了。那对于整个零碎来说,它自身就是一个子模块,属于提纲挈领的那个模块。 这个过程,从字面意义上能够了解成重写,实际上,它也是一个重构的过程,因为咱们必定会重用这个零碎自身的一些现有代码和现有的逻辑。 下面咱们是假设零碎在曾经实现的状况下进行的重构,其实重构能够贯通于软件开发的始终。软件开发的首要指标是实现业务逻辑,可能解决客户的问题。这个指标实现当前,咱们就要谋求代码的洁净度,复杂度可能降到最小,以后的技术可能用到最先进。 所以只有有机会,咱们都应该对代码和设计进行重构。 品质品质间接关系到客户是否对咱们的产品称心。那咱们应该如何保障软件开发的品质呢? 要遵循整个开发团队的共识能力保证质量。共识是一个可大可小的术语,大到现实、哲学、人生观;小到软件设计准则,设计模式,代码格调。如果是打造一个团队那就是长期的指标,共识肯定要从大的方向上动手。如果仅仅为了开发一个我的项目,共识能够从具体的细节着手。 软件品质的保障,须要整个团队造成共识,大家都遵循这个共识。这个共识体现在开发准则,设计模式和代码上,具体表现在架构代码和模板代码上,在我的项目最后的开发阶段,开发速度肯定要慢,就是为了通过重复的斟酌夯实,把代码的共识局部建设起来。 格调上的指标是,不论这个团队有多少集体,写进去的代码,就像一个人的代码一样,格调是统一的。 ...

October 10, 2020 · 1 min · jiezi

关于软件开发:本地ftp工具本地ftp工具教程

ftp工具是什么工具,可能有人会答复说不晓得,因为个别只有从事网站治理的工作者会应用的多一点。但不是每个人生来就会的,所以刚开始必定都会学习怎么应用。 以IIS7服务器管理工具为例 这款本地ftp工具的性能除了批量治理,还有很多别的性能,次要也是性能也比拟全面,置信大多数应用的网站工作人员都比拟相熟了。它外面还可能定时上传下载、定时备份和自动更新。把你花在更新上的工夫都省了。 除了在ftp下面有这么多的性能以外,它别的性能也都是比拟实用的。实用在Windows和liunx操作系统。还反对Vnc和Ftp批量操作。同时它还具备同步操作、到期揭示、数据安全和定期执行的性能。我是挺喜爱的,应用比拟便捷。

September 20, 2020 · 1 min · jiezi

关于软件开发:企业为什么要上管理系统软件

管理软件有很多种,针对不同的业务场景有不同的零碎举例来说,办公治理须要办公自动化软件,也就是OA;企业资源打算治理则须要ERP(Enterprise Resources Planning)零碎,而车间自动化治理须要MES(Manufacturing Execution System)零碎,人资源管理须要HR零碎,项目管理则须要PM(Project Management)零碎,供应链治理须要SCM(Supply Chain Management)零碎,等等。能够说只有企业有治理上的需要,市场上就能够找到相应的软件及解决方案。自己对于ERP和MES零碎比拟相熟,上面就说为什么企业要上ERP和MES零碎。 ERP是企业的最外围零碎ERP次要有几大功能模块组成,别离是财务,销售订单,洽购,制作,库存,人力资源,产品研发,等。这些模块将企业的物流,信息流,资金流,三个最重要的信息对立在一个治理平台上。为什么企业要上ERP呢?不同的企业有不同的诉求,然而独特的诉求是进步企业整体管理水平,提高效率,实现信息透明化,进步决策速度。只管在后期调研的时候企业不同部门会提出成千盈百条的具体需要,然而站在企业高层的角度,这四个方面的诉求简直是每个企业抉择上ERP的终极目标。 MES是制作企业车间治理的外围零碎MES次要性能有车间打算,车间物料追踪,制作过程品质施行检测和追踪。一般来说抉择上MES零碎的企业都是上了肯定规模的制作企业,而且自动化水平比拟高的制作企业,因为MES零碎只有和车间的自动化设施集成才能够施展它的威力。企业上MES零碎起因,次要在于进步车间治理的自动化程度,从而进步生产效率,降低成本,疾速应答市场需求变动。 JNPF专一开发企业管理系统,残缺的零碎框架一体化平台 集开发、组织、流程、表单、报表、门户、挪动等全方位性能于一体,不须要再额定找素材模板。 一站式APP开发 JNPF在PC端框架开发的同时APP挪动端也同步生成,可轻松搭建出IOS和Android零碎的挪动端利用,实现各类性能一站聚合、多端接入,能够疾速获取各类数据同步。 低代码开源二次开发 操作便捷只需把握根底技术语,且反对在已有框架下进行二次开发。采纳支流的两大技术Java/.Net开发,可视化开发环境,有拖拽式的代码生成器,灵便的权限配置、SaaS服务,弱小的接口对接,随心可变的工作流引擎,一站式开发多端应用Web、Android、IOS、微信小程序,并且有以构建业务流程、逻辑和数据模型等所需的性能;为企业我的项目节俭80%的重回工作,让开发者将重心放在业务逻辑,不用懊恼底层架构设计,可短时间开发出如ERP、OA、CRM、HR、MIS以及电信、银行、政府、企业等各行业的企业应用零碎。 总结不管企业抉择什么样的治理系统软件,外围的诉求还是在于通过软件进步企业整体管理水平和效率,实现信息通明,为疾速决策提供撑持。当然,当初曾经进入SaaS时代,企业在抉择管理系统时,应该从久远登程,尽量抉择SaaS,而非传统的本地部署的软件。

September 16, 2020 · 1 min · jiezi

关于软件开发:软件开发丨关于软件重构的灵魂四问

在软件工程学中重构就是在不扭转软件现有性能的根底上,通过调整程序代码改善软件的品质、性能,使其程序的设计模式和架构更趋正当,进步软件的扩展性和维护性。 摘要 在本文中,您会理解到如下的内容: 先增加新性能还是先进行重构? 重构到底有什么价值? 如何评判这些价值? 重构的机会是什么? 如何进行重构? 1. 先增加新性能还是先进行重构?问题:官网材料,重构剖析1.0版中。 有两顶帽子,一个是增加新性能,一个是重构 增加新性能时,你不应该批改既有代码,只管增加新性能,重构时你就不能再增加性能,只管改良程序结构。 一次只做一件事件。 这两个是否有矛盾,以哪个为准?后面有些可信资料版本不一,有的还要相互打架,是否能够对立一下? 回复:对于增加新性能和重构是否矛盾的问题,是先增加新性能还是先进行重构? 咱们要做的是察看这两个事件哪个更容易一些,咱们要做更容易的那一个。 就是你不能一下子同时做这两件事件。因为同时做两件事件,会导致你工作的复杂度晋升,容易出错。 一般而言,重构会改变程序的设计构造改变相对来说比拟大。然而因为没有性能方面的增加,所以对应的测试案例咱们不须要进行批改,那对咱们来说,只有可能使得现有的重构批改可能满足咱们的业务测试案例就能够了。 增加新性能意味着咱们要增加对应的测试案例,以保障咱们新的性能是可测的。这部分的批改个别会依靠现有的程序结构,改变起来绝对比拟少,并且批改容易甄别。 在绝大多数失常状况下,咱们个别是先增加性能,提交实现当前,再新的批改需要中对代码进行重构。 从大的方向上来说是分两步走的,这两个工作不能一概而论。 一次只做一件事件,一次提交只蕴含一个工作,这是为了防止在工作中人为的减少复杂度,这个复杂度蕴含代码批改,审查,测试等各个方面。 防止复杂度的回升,是咱们在软件开发过程中时刻要谨记的一个准则。 俗话说,一口吃不成瘦子,心急吃不了热豆腐。做事件要一步一个脚印,操之过急,步步为营。 2. 重构的价值和评判成果问题:哪种类型的代码重构是高价值的? 1. 在网上跑了这么多年也没啥问题,为什么要动他? 2. 重构前后性能又没啥变动,以后收益是啥? 3. 若是进步可维护性,可扩展性的话,怎么评判成果呢? 回复:这是对于重构价值和评判后果的问题。 这几个问题问的都很好。 咱们来看第1个问题,就是"在网上跑了这么多年也没啥问题,为什么要动"的问题? 这里的关键点就在于到底有没有问题。是不是说在客户那边客户看不到问题,就算是没问题。 当然不是的,在咱们软件开发当中,在交付给客户当前,客户那边看到的是黑盒,他不晓得咱们外部的逻辑存在多少的破绽。 如果咱们的外部逻辑存在很多的破绽。假如偶尔某一天,某个客户发现了一个破绽,它能够通过这一个破绽进入到咱们的零碎外部,这样进入咱们的外部,会产生什么样的情况,咱们能够本人设想。 在公司的外部发言中专门提到了UK对咱们产品的一个评估,外层是固若金汤,内层是很软弱的,客户或者黑客一旦进入到咱们的外部当前,他就能够随心所欲了,从这一点上来说,咱们肯定要对咱们现有的代码进行重构,以防止这样的问题。 咱们再来看第2个问题。重构前后性能又没啥变动,以后收益是什么? 重构最大的收益是解决如下的问题: 代码太多反复问题,单个函数体或者文件或者攻城过大的问题,模块之间耦合度太高的问题等等。 以上问题归根结底就是一个问题,就是简单度过高的问题。 当初来谈一谈复杂度的问题,软件开发中的复杂度当然是越低越好。个别谈到复杂度,咱们可能想到了各种逻辑上的复杂度,设计上的复杂度,实际上在软件过程中复杂度波及到方方面面,咱们来看一下,具体有哪些方面咱们须要留神复杂度的问题。 第一是命名规定。先举个例子,我定一个变量叫word。有的人喜爱把它写成wd。这个就减少了这个变量定义的复杂度,你从wd很难明确,这个变量是word的意思。 不论是变量的命名还是函数的命名,咱们都心愿看到名字,咱们应该可能了解这个变量或者函数大体是关联到什么样子的事件。 所以审慎的应用缩写是防止命名规定复杂度进步的重要前提。 第二是程序逻辑的复杂度。线性程序执行的复杂度为1, 呈现分支当前要乘以分支的个数。分支能够是条件判断也能够是循环。所以尽可能的防止分支的呈现是升高程序逻辑复杂度的重要伎俩。 如果程序分支不可避免,要尽可能的把程序分支放到最高的逻辑层。这样做的目标是为了防止在上层解决的时候呈现发散式的分支。发散式的分支会急剧的减少程序的复杂度。 复杂度越高,程序越难保护,复杂度超过肯定水平,人类程序员是无奈解决的。 第三是架构设计的复杂度。架构设计波及到模块设计和零碎设计。要尽可能的把一些专用的模块或者子系统抽取进去,比方平安相干的,日志相干的,工具相干的等等,这些专用的性能可能会被所有其余的业务模块或零碎所调用。 在调用这些专用性能的时候,越简略越好,并且调用者不须要关怀具体的外部实现,只须要晓得如何应用就能够了。 这样做的目标是让程序员专一到业务代码的设计上来。 第四是零碎部署的复杂度。零碎部署蕴含几个不同的阶段如开发阶段,测试阶段和生产阶段。不论是哪个阶段,部署的步骤越少越不容易出错。有些零碎人造的须要很多指令的配置,如果是这样的状况,须要编写一个批处理的文件来简化内部使用者的部署步骤,把多个步骤变成一步。 与部署相关联的还有集成局部。如果可能实现自动化或者从模板中创立那是十分好的状态。 第五是测试的复杂度。测试分白盒测试和黑盒测试。白盒测试的复杂度间接关联着代码层级的复杂度,代码层级的复杂度越高,当然白盒测试的复杂度也就越高。 白盒测试须要留神的一个重要问题是不要使白盒测试这部分的代码脱离实际业务代码的设计。也就是说白盒测试它的附丽对象就是咱们理论的业务代码,从架构设计上说是一个从属层,不要试图在这里应用什么软件设计艺术或者所谓的编程艺术。 这种代码的格调就是简略间接,复杂度线性化。 黑盒测试的复杂度来自于业务需要剖析。要有十分清晰的文档阐明,须要对测试步骤和预期后果写的十分分明。 第六是技术的复杂度。技术的发展趋势个别是越倒退越简略,性能越弱小。那么在设计和开发的过程中,要防止应用老旧的技术。对于技术框架的抉择,要提前做好调研。前端选什么框架,要不要抉择某些UI库,后端选什么框架,要不要抉择某些程序库,原则上是为了简化咱们的学习过程,进步开发效率,加强整个我的项目的可维护性。须要具体问题具体分析。 第七是队伍构造的复杂度。队伍形成肯定要短小精悍,人多不肯定好办事。像亚马逊提倡的是两张披萨团队,意思是说整个团队两张pizza就能吃饱。大体估算就是10人左右的一个队伍。当然这只是一个参考指标。 整个队伍的指标肯定要明确。所有的人都向着那个指标迈进,分工能够不同,然而指标肯定要统一。 指标+分工是队伍胜利运作的要害。具体来说就是把指标分成多个工作,每个工作里又能够分成小工作,那所有的人都去做对应的工作,本人让本人忙起来,而不是他人让你忙起来。 咱们当初来看一下第3个问题,就是如何评判重构成果的问题。在下面的剖析中,咱们曾经理解了重构的指标和最大的收益,就是复杂度的升高。 那么对应的,就是代码的反复率大大降低了,单个函数体或者代码文件或者工程过大的问题不存在或者缩小了,模块之间的耦合性升高了。 ...

August 28, 2020 · 1 min · jiezi

关于软件开发:第三方软件公司与低代码可二次开发框架的差距究竟在哪

案例:某大型家具制作企业,投资几百万,和国内某出名软件公司签约,进行全面的信息化。通过一两年,我的项目也几近失败。起初该公司CIO,分批逐渐中断了与该软件公司的合作项目。 CIO查看这一年多来与软件公司对接沟通状况,发现了以下几个问题: 1、后期开发沟通需要耗时长,公司须要帮助第三方梳理公司架构耗费人力、物力; 2、开发周期长,第三方公司不止承接一家企业,甚至是几家企业的我的项目同时动工,团队人员力量扩散,批改工夫过长; 3、交付的产品与公司预设的有出入,从领导层构想到对接人沟通再到第三方开发人员设计生成产品,中距离了太多层次的传递,最终进去的产品未达到领导层预期的成果; 4、前期保护效率低,因为是第三方公司,本人的公司须要运行,如零碎遇到bug急需处理,对方也须要调配人手的工夫,导致企业承当不必要的损失。 于是该企业立刻止损,采纳了低代码开发框架(JNPF)招了两个懂C语言的程序员自主开发一套合乎企业需要的管理软件,当初逐渐进入正规。 JNPF开发框架主界面 低代码二次开发有第三方承包商不可比较的劣势: 1、凋谢源代码:平台提供源代码,能够用非技术语言直观地展现代码中的业务逻辑和数据,放慢开发步调; 2、一站式开发:平台一站式、轻量化集成开发Windows+Web+App+小程序等PC端+挪动端的智能管理系统,多端应用,能够实时取得各端的同步数据,需要发生变化只需调整业务服务流程或批改操作即可。缩小沟通老本,进步开发效率; 3、集约式开发,平台能够集成开发ERP+CRM+HRM+OA等各类业务零碎,升高企业反复购买软件的老本开销; 4、Web可视化编辑,平台有可视化的开发流程,内置多套优质UI模板、向导式开发组件以及丰盛的图表设计; 5、低代码开发:平台低代码化开发,点选利落拽的形式即可实现大量开发工作,操作便捷,缩短开发周期; 6、个性化开发:平台紧跟时代倒退潮流,继续一直地迭代更新降级,企业可依据不同的业务场景自在配置; 7、双语言开发:平台领有.net和java两大开发语言,可实现云端化治理或独立部署,实现PC+手机联手管控; 8、代码生成器:平台有弱小的代码生成器,稳固的底层开发框架,简化了开发过程,可轻松实现二次疾速开发; 9、升高人员需要:无需懂得浅近的程序语言即可操作,大大减少了对开发人员的人数需要,冲破了技术制约; 10、易于更新拓展:需要发生变化时,登录Web浏览器即可批改、保护、降级,轻松实现各类性能的更新拓展; JNPF的益处劣势还不止于此,平台还集开发、流程、报表、门户、挪动等全方位性能于一体,以大型企事业单位的工作流程为规范,通过多年的研发,现有1000多个零碎性能可间接配置应用,不便简略。JNPF真正实现了为各大企事业单位增效降本,解决了企业管理系统开发和信息化建设的难题。

August 25, 2020 · 1 min · jiezi

关于软件开发:小知识软件开发的权限控制和权限验证

在软件开发中,常常会用到账号体系,波及到账号体系的话就不可避免的会用到权限管制或者叫权限治理。 有时候,权限管制与权限验证很容易搞混,很多人认为在前端页面暗藏了某个按钮就管制好权限了,其实用户能够间接发送一个接口申请服务端来实现这个操作。 权限管制是指在一个零碎中存在多个用户角色,不同的角色领有不同的系统资源拜访权限,它的实现更直观地体现在客户端的用户界面中。 例如,针对VIP用户,很多性能都是能够用的,然而在普通用户的客户端界面上,同样的按钮有时是置灰的或者暗藏的。 权限验证是指零碎服务器针对客户端发送过去的申请进行验证,查看用户是否有资格拜访所申请的资源,这更像是后端的,或者叫源头的权限治理。 Maka.

August 19, 2020 · 1 min · jiezi

程序员转型架构师推荐你读这几本书

从CRUD的程序员,到系统的架构师,进阶推荐读这几本书。架构师书单分为两部分,第一部分是关于系统架构的方法论,包括领域驱动设计,微服务,整洁架构,第二部分介绍各大互联网大公司是如何做系统架构落地实践。 程序员书单会做成一个系列,会推荐面试,职业规划,软技能等不同主题的书单,同时我会在博客和公众号「架构进化论」中,对书单中推荐的好书做解读,欢迎持续关注。 一、方法论《领域驱动设计》 这本书可以帮助我们理解用代码呈现真实世界的重要性,并且告诉我们如何更好地进行建模。 简而言之,这本书提供了深入的架构洞察力,并帮助你在不断变化的环境中创建强大的系统,最重要的是,Eric Evans用开发人员可以理解的语言来描述,非常难得。 书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一起,融入了作者的见解和经验,展现了一些可扩展的设计新实践、已验证过的技术以及便于应对复杂领域的软件项目开发的基本原则。 《架构整洁之道》 来自传奇人物Robert C. Martin的实用软件架构解决方案,作者还有另外一本非常经典的书《代码整洁之道》。 干净的架构对于每一个软件架构师、系统分析师、系统设计师和软件管理人员来说都是必不可少的,想要成为软件架构师,这本书一定是必不可少的。 《微服务设计》 这是一本了解现代分布式软件设计和体系结构的好书,特别是微服务,如Uber,Facebook,NetFlix等的实践。 本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务等。 作者和译者都来自ThoughtWorks,值得信赖,除了系统化地论述了微服务的方方面面以外,书中推荐的技术博客、工具软件等对增强感性认识都很有帮助。对关于COTS的集成,作者提出的在自己可控的平台进行定制化的核心思想尤其值得牢记。 《架构即未来:现代企业可扩展的Web架构、流程和组织》 作者还有另外一本《架构真经》,一起推荐。本书汇聚了作者从eBay、VISA、Salesforce.com到Apple超过30年的丰富经验,全面阐释了经过验证的信息技术扩展方法,对所需要掌握的产品和服务的平滑扩展做了详尽的论述。 任何一个持续成长的公司最终都需要解决系统、组织和流程的扩展性问题,作者详尽地介绍了影响扩展性的各个方面,包括架构、过程、组织和技术。阅读本书,可以学习到以最大化敏捷性和扩展性来优化组织机构的新策略,以及对云计算(IaaS/PaaS)、NoSQL、DevOps和业务指标等的新见解。利用其中的工具和建议,可以系统化地清除扩展性道路上的障碍,更好的开展技术和业务。 二、架构落地实践《淘宝技术这十年》 生动形象的介绍了淘宝从小到大的技术发展历程,是企业架构发展的一个缩影,对思考技术发展有较好的帮助。 《淘宝技术这十年》从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其所有主动和被动的技术变革的前因后果。书中有幕后故事、产品经验、架构演进、技术启蒙,也有大牛成长、业内八卦、失败案例、励志故事。《淘宝技术这十年》文风流畅,有技术人员特有的幽默感;内容积极正面,有现场感,全部是作者亲身经历。 作者子柳,创办“淘宝技术大学”,培养内外部工程师众多,人称“校长“,微博上也有他很多关于互联网的思考。 《分布式服务框架:原理与实践》 这本书对分布式服务框架做了拆解,依托工作实践,从分布式服务框架的架构设计原理到实践经验总结,涵盖了服务化架构演进、订阅发布、路由策略、集群容错和服务治理等多个专题,全方位剖析服务框架的设计原则和原理,结合大量实践案例与读者分享作者对分布式服务框架设计和运维的体会。同时,对基于Docker部署微服务以及基于微服务架构开发、部署和运维业务系统进行了详细介绍。 作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。 《大型网站技术架构:核心原理与案例分析》 一本国内不错的关于软件架构实践的书,销量和评价都挺好。这本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,呈现了一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图。 《大型网站系统与Java中间件实践》 阿里系技术图书,对分布式系统的演进做了较好的介绍,围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。本书从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构变迁;接着讲述构建 Java 中间件的相关知识;最后介绍支撑大型网站架构的 Java 中间件系统的设计和实践。 通过本书可以了解大型网站架构变迁过程中的较为通用的问题和解法,并了解构建支撑大型网站的 Java 中间件的实践经验。 《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》 看这本书,帮助你了解阿里的中台设计,也就是阿里巴巴的共享服务理念以及企业级互联网架构建设的思路。 本书从阿里巴巴启动中台战略说起,详细阐述了共享服务理念给企业业务发展带来的业务价值。接着会分享阿里巴巴在建设共享服务体系时如何进行技术框架的选择,哪些重要的技术平台支撑起了共享服务体系,这也是迄今为止对阿里巴巴集团中间件体系对外最全面系统的介绍。除了技术层面之外,本书还分享了阿里巴巴内部的一些经验和实践,如组织的架构和体制如何更好地支持共享服务体系的持续发展。 《尽在双11:阿里巴巴技术演进与超越》 这本书是阿里巴巴集团双11技术团队出品,集合了各个事业部对双十一的复盘,全面阐述双11八年以来在技术和商业上演进和创新历程的书籍。内容涵盖在双11背景下阿里技术架构八年来的演进,如何确保稳定性这条双 11 生命线的安全和可靠,技术和商业交织发展的历程,无线和互动的持续创新与突破,以及对商家的赋能和生态的促进与繁荣。 推荐做业务架构的工程师阅读,特别是双十一全链路压测,稳定性保障的篇幅。 本文作者:邴越 阅读原文 本文为云栖社区原创内容,未经允许不得转载。

October 17, 2019 · 1 min · jiezi

CODING-受邀参与-DevOps-标准体系之系统和工具-技术运营标准技术专家研讨会

2019 年 5 月 24-25 日,国内领先的一站式 DevOps 解决方案供应商 CODING 作为腾讯云的深度合作伙伴,受邀参加在成都举行的由 TC608 云计算标准和开源推进委员会主办,中国信息通信研究院牵头,高效运维社区支持,DevOps 标准工作组负责组织的 DevOps 标准体系之系统和工具 & 技术运营标准技术专家研讨会。 在《研发运营一体化 DevOps 能力成熟度模型第 8 部分:系统和工具》与《研发运营一体化DevOps 能力成熟度模型第 4 部分:技术运营》标准技术专家研讨会上,围绕项目与开发管理、应用设计与开发、持续交付、测试管理与自动化写实、技术运营、安全开发等进行了技术研讨,并制定了相关规范。 本次会议专家组合影,第五排左起第四位为 CODING 产品总监王振威 本次会议还邀请了来自华为、平安科技、腾讯、阿里巴巴、中兴通讯、亚信科技、浙江移动、京东金融、中国联通、苏宁消费金融、百度、去哪儿网、新华三等行业顶尖企业的 40 余位 DevOps 实践与工具专家,对标准框架和内容进行了全面的研讨,将系统和工具 & 技术运营两部分标准内容进行完善与规范,并在第二天的会议中将部分内容定稿。 DevOps 能力成熟度模型第八部分 项目与开发管理 & 应用设计与开发此次会议“项目与开发管理”、“应用设计与开发”两个部分的内容依旧由华为、腾讯、阿里、CODING 等单位的专家通力合作完成部分定稿。 工作项管理能力域的部分文稿 持续交付持续交付部分此次主要对能力域及其内容进行了更新,主要包含版本控制系统、构建与持续集成、流水线、制品管理、部署管理、发布管理、环境管理、应用配置管理、数据变更管理 9 个能力域,就数据管理更改为数据变更管理达成了高度一致,完成了定稿目标。其中 CODING 自研的 CCI 系统也为此部分标准提供了参考内容。 会议现场讨论情况 测试管理 & 自动化测试测试管理与自动化测试依旧由中兴通讯、腾讯、亚信科技、CODING 等单位的专家通力合作,完成了测试管理以及自动化测试的最终定稿。 缺陷管理能力域部分文稿 技术运营此次研讨会的核心内容之一是系统和工具中技术运营的能力项划分,最终与会专家达成一致,主要包括通用、监控管理、事件管理与变更管理、配置管理、容量与成本管理、高可用管理、业务连续性管理、用户体验管理等部分,后续也将在中国信通院的指导下,继续开展相关编写以及研讨工作。 会议现场讨论情况 CODING 简介CODING 一站式 DevOps 解决方案 CODING 是面向软件研发团队的研发协作平台,涵盖了软件开发从构想到交付的一切所需,提供完整的研发协作工具,无需对接第三方服务。使研发团队在云端高效协作,实践敏捷开发于 DevOps,提升软件交付质量与速度,降低企业研发成本,助力企业实现数字化转型。 点击即可开启企业数字化转型之旅现五人以下团队可免费使用 CODING

June 3, 2019 · 1 min · jiezi

程序员画像十年沉浮

十年,转瞬即逝,人生进入下半场。众生皆苦,万相本无。且看风云变幻,慢品苦辣酸甜。小姐姐味道微信公众号首发。小胡,拼搏者小胡很久没有笑过了。他在房价的次高点买了套超出自己承受能力的房子,紧接着老婆失业了,失业以后脾气变得特别的不好。他每天都下班很晚,最近终于鼓足勇气换了份离家近的工作,来省下每天的车费。他的技术很好,别人也是这么评价,但这次跳槽他并没有涨多少薪。心里乱乱的老觉得堵,家里环境太压抑,老母亲最近又和老婆掐了起来。他依然每天很晚下班,心烦了就工作。老板看在眼里,给他颁发了一个拼搏者奖杯。今天团建后他开车回家,天很晚,他把头顶在方向盘上呆了很久。推开车门,他静静伫立一刹,把一个包装袋随手扔进垃圾桶。里面是他刚得的奖杯。小苗,全栈培训讲师小苗很久之前就看透了it行业。别人要淘金,他偏要卖淘金的工具。在工作2年之后,通过被培训,他果断进入培训行业,一直到现在,还出了不少书。他可以算是一个全栈培训讲师,懂的东西多如牛毛,就是不深。“深了也没有用,简单才有市场。有能力自学的谁来培训呀”。小吴咧嘴一笑,他刚给自己镶上了金牙,灯光照耀下显得异常夺目。小包,BAT梦小包的学校不好,所以他很自卑,但还是有两把刷子的,所以业绩很好。他的大部分工作都是小公司经历,所以他觉得缺少点什么。随着年龄的增加,他觉得到了去大公司镀金的最后期限。但天不遂人愿,总有这样或者那样的事牵牵绊绊。准备了很多次面试,都不对口。他觉得在过去的这些公司,技术应该算是上等了,实在不明白这些BAT公司为什么死抠一些冷门而且明显用不着的技术。这些公司也贱,见到他这种小公司摸打滚爬的人,就像猫见了老鼠一样,想要尽情蹂躏一番,感受一下高高在上的感觉。“看来我只适合在小公司混啊”,小包回头按了下车钥匙,几米远的保时捷车灯亮了几下。小殷,佛学院的梦想对于一个不善言语的俗人来说,龙泉寺一直是小殷的一个梦想归宿,但这样的组织比Bat门槛还要高,要能力还要学历。小殷修了硕士,参读经书,在一个低很多档次的寺庙一呆就是五年,希望未来的某刻能结佛缘。“世人笑我太疯癫,我笑他人看不穿”。他昨天刚结婚,才休息2天,今天就要上班了。小刘,公司终结者“我干倒了这么多家公司”,每次小刘说到这里,都惨笑着伸出手,打着手势。这其中的背后意义,是小刘每次工作理想的破灭。哦,这当然是骗人的,因为每次都有赔偿金。他选的很准,每次想要弄点期权实现财务自由,可惜结果都不得愿。他的技术并不差,只是运气衰。面试填表的时候,在离职原因那一栏,他都不好意思下手,只能随意编几个说法。“我要认真准备”,小刘不怀好意的笑笑,“进阿里看看”。小姐姐味道微信公众号首发。小李,理想的路上“无论是干啥,哪怕是卖海鲜,都不会干这一行了”。小李每天都这么想。可工作太忙了,登上公司的电梯,行尸走肉般送到自己的座位,小李就开始了一天忙碌的生活。空闲时候,他喜欢逛知乎,看怎么快速赚钱的话题。回了家累的又什么都不想干,只好刷下抖音什么的。时间匆匆流过,每天他都想着单干,但第二天依然灰溜溜的穿衣上班。小李觉得,干这一行,就要了解自己的优势。他的优势就是技术,所以还得花时间学习一些烂七八糟的技术,那些叫做视野的东西。“我还没准备妥当”,他每次都这么安慰自己,“万无一失的时候我就自己干”。小万,互联网暴发户“风口、风口,都是风口”,小万笑呵呵的说,“我就是那头猪”。刚毕业,小万找工作就遇到不少的障碍。他只会两种语言的hello world。一个是c,一个是java。随着每次碰壁,小万的态度变的无所谓起来,他进了一个刚成立的小作坊,工作内容就是整理excel,只要饱自己就行。公司也实行过一些非人类的制度,但想到出去后还要找工作,就坚持了下来。没想到,公司在短短5年时间里就上市了,作为头部员工,他获得了不菲的回报。他的编程水平也有进步,现在会四门语言的hello world了。小江,坚持是无谓的等待小江终于明白了一个道理。如果你看好一家公司,就一直待下去,和它一直成长。苦也好,酸也罢,不亢不卑,不离不弃。得出这个结论,是因为小江前几家公司都上市了,前同事都分了不少。每次都在他离职后不久,而且是在经济好像要出现问题的时候。他的这家公司,据说也是独角兽。虽然从前年就有离职的打算,但还是咬牙坚持了下来。他要好好的待下去,套现,走人。但也会焦虑,和他一块来的小王,已经被劝退了,那点赔偿都不够塞牙缝的。“坚持就是胜利,我和它死磕到底”,小江用梳子打磨着自己脱发的前额,看着镜中的自己,说。小阮,收租快乐小阮找这份工作,完全是因为无聊。自从村里农改拆迁划入市区之后,他就辞职出去旅游了。最后见识到更加有钱的人的生活,认识到自己的差距后,也实在是玩腻了,就找了份工作打打牙祭。他花了很长时间,写了非常精美的微信小程序,开了个公众号,用来收租。房客想要租房,首先得关注他的公众号。同村的七大姑八大婶有了钱以后,基本上也不着家了,他就都揽过来,替他们打点、收租,仅收取部分管理费。“这群狗日的租客,老想着沾便宜”。他用力拍了下键盘,夹着的香烟烟灰四散,烫的小阮尖声叫骂。小姐姐味道微信公众号首发。小甄,奶爸小甄真是幸福,朋友们都这么说。小甄的老婆特别牛,但孩子没人带,所以他就辞职在家带娃。这一带就带了三年。他其实挺喜欢写代码的,但程序员工资还是低了点。比起天天在家带娃做饭,他还是比较怀念写代码。自从辞职后,他就只用python了,主要是做一些爬虫性的脚本,分析一些问题。他庆幸自己懂互联网,所以抖音的号也做起来了。作为一个男人,他最怕老婆有外遇,那样他就一无所有了,所以变着花样讨好老婆。但他还是有些担心,所以总是偷偷学python。“过几年我就去做人工智能”,小甄嘿嘿的笑起来。小冯,兔子的艺术企业大了,就要讲价值观。就像养狗一样,要有规矩。这时候,一些符合价值观,但没有能力的人,就上台表演了。小冯深谙职场潜规则,老板表演他拍照,老板群里发言他点赞,老板提要求他表决心,就是不干活。工作不就是crud么,他看的是编程之外的东西。兔子本来就是一种悠闲的生物,他只是想要自己的一颗胡萝卜而已。“我是马云眼中的兔子,是他们逼我这样的”。小冯对自己的定位直言不讳。小艾,自由职业者小艾实在是不喜欢天天挤着公交去上班的生活,所以他辞职,做了一个自由职业者。小公司做事,大公司做人,自由职业者做什么呢?他什么都做,哪里有钱,哪里就是他的靶子。股市火的时候,他炒股。比特币火的时候,他炒币。更多的是接一些不痛不痒的活儿,勉强度日。即使这样,也是基本收个首付款,尾款根本就回不来。最近他很焦躁。到处都在割韭菜,收入不增反减,他已经考虑再次打工了。“我是没认识到自己的能力和资源”,小艾不无感慨的说,“其他人做这一行,应该比我做的好”。小吴,工作+旅行有没有想过另外一种生活?每年换一个城市去工作,游览完毕后轻轻的走,不带走一片云彩。小吴就是这样,当他没钱花了,就去工作。大部分时间,他都在旅行。平均每一年,他就到一个美丽的城市落脚,去品味小城的故事。在这过程中,他选了几个比较好的城市,都购置了房产。去年为了还贷款,还变卖了一套。“爸爸”,有一天一个女人带着孩子费尽周折找到他。他头疼的很,而且感觉自己老了。接下来何去何从,他又一次产生了迷茫。哦,那是梦的感觉。小裴,职业经理人一步一步往上爬,最终成为职业经理人,是很多人的梦想。小裴很早就有这样的管理意识,他认识到自己的专业能力很容易遇到瓶颈,也认识到仅靠一己之力,并不能完成高大上的目标,所以他做的准备很早。他的努力的目标可能和大多数程序员的不同,他培养的是影响力。这些还不够,他还缺少经理人生涯中最重要的一环:有点说得过去的成绩。可他现在还没有,这也是他一直在这家中型公司一直待到现在的原因。努力不如借势,等公司名头响了,他就会更加值钱。“没有成绩,我比你们还要焦虑”。他有时掏心窝子和几个亲信说,但看着他们躲闪的眼神,他不认为有人能懂他。小宋,自己的事业公司管理,要向传销看齐。小宋悟道之后,就经常和人分享自己的高见。皇天不负有心人,经过多年的摸打滚爬,小宋终于找到了自己的事业。有了自己的商业模式之后,他就很少写代码了,但经常画图进行公司的架构设计。他现在非常痴迷一种画饼的技术,他的家里供着关公。这些二流子程序员完全不知道架构的最高境界就是架构组织和商业模式。小宋曲高和寡,经常有种高处不胜寒的感觉。”有些事情,你知道就好,千万不要讲出来“。他的好朋友劝他。朋友的身价已经很高了,这样的劝告很有价值,所以他最近收敛了很多。小丁,精彩的生活早晨6点钟,小丁一天的生活开始了。他喜欢跑步、登山、吉他、美食,就是不喜欢读书。小丁的每一天都安排的满满的,他不是科班出身,大学是学兽医的,鬼使神差的做了写代码的工作,主要还是因为工资高点。没办法,人聪明,编程需要的能力起点又低,小丁感觉这样的工作是为他量身定做的。“工作是配角,生活才是主角”。每次看到同事加班,小丁就忍不住劝阻。哦对了,老板马上就结婚了,他马上就可以正式的喊一声姐夫了。小汪,孤独的行者小汪的收入并不低,但他觉得很不幸福。高不成低不就的想法,养成了了目前单身还有点自卑的他。他本来就不喜欢捣鼓代码这份工作,最近项目老出乱子,经常被批,心理也越来越封闭。他下班时间不喜欢有人打扰,女孩子都不行。他养了三只猫,非常温顺。养猫不同于养狗,不用出去溜,他喜欢和它们呆在一起点个外卖醉生梦死的感觉。“这个问题我不知道”,小汪放下工作手机。猫咪脊背上毛发传来的柔软触感,让他舒服的眯起了眼睛。小祝,三线城市的希望小祝对爱情看的很重,所以他现在呆在这个三线城市中。鸟不拉屎说不上,起码还是有些禽类的。修电脑的,就是亲戚对他的认知。虽然在小地方,他可是有理想的,但一身本事只用了3成,就触碰到天花板了。过去几年,干倒了好几家公司,大多数是老板跑了。他现在正在琢磨动用关系,找点外包弄点外快什么的。“互联网红利该下沉一下到三四线城市了,机会是给有准备的人”,盯着大街墙壁上油漆未干的红标语,小祝依然充满希望。小郑,二线城市的焦虑“别飘了。你爸拖关系给你找了个工作“。距离母亲5年前给他打电话,小郑在现在的单位已经呆了4年了。活少不累,每天就是喝茶谈心。代码什么的他已经忘光了,但偶尔,他还会怀念起在帝都通宵调试代码的岁月,那激情澎湃的时光。“在哪混啊,都是为他人做嫁衣裳”。有时候,他凝视着夜空,不经意间还会深深的叹口气。主要还是混的不太好。小吴,国外技术专家幸亏当时走出国门。小吴每次想到这里,都会对自己翘起大拇指。他是典型的技术男,也不想走什么管理路线。随着自己的技术越来越精湛,研究的内容越来越深入,资历也越来越深。相比较起来,国内的同僚就落魄的多了。“现在,我可以干我喜欢的事情。或许等我老了,会回到我的家乡生活的“,小吴说,他在几年前就拿了绿卡。小雷,东南亚彩博小雷应该是走出国门里面最惨的那一批。当年,为了赚点快钱,他兴高采烈的接受了东南亚某公司的offer。结果,一封闭就是3年。在那里,他承受了超过国内三倍的工作强度,并且没有人身自由,心灵也受到了摧残。经过一系列努力,他终于在去年逃了出来,一分钱都没拿到。“现在,我真的能够坦然面对各种不平。世界上有很多灰暗地带,我只关心怎么去躲避“。 他直视着远方,他的眼睛非常有神。小关,赚钱的逻辑小关的父母都在新加坡,他每年都要飞去看望几次。在国内,他也算得上是留过学的高等人才了,当然走的是不同的路线。刚读了某名校的EMBA,然后找枪手出了几本专业的书籍。这么优秀,他还是非常的忙碌,每天只睡6小时。随着在几个大企业镀金完毕,他也顺利的注册了自己的公司。“越脏越臭的地方,机会越大“。父母想要他出国发展,他一句话就能说服。小孟,就喜欢外包比起其他程序员,小孟一直做外包,他喜欢这份工作。对于职场,他有自己的生存法则。他专找能够出差,而且补助高的工作,顺便游山玩水。他还兼职开了个网店,所以不能上网的封闭式环境他是不去的。车补、饭补、住宿,这些会搞的都是有油水的。他最看重的是每年能够连续休息一个月以上,想怎么happy就怎么happy。“赚那么多钱干什么啊,反正房子又买不起”,小孟甚至连房子都不租,他一直在出差。哦,他还喜欢去相亲,目的不是结婚的那种。小邬,心中的天平小邬算是这座城市的成功人士了。通过帮忙打理亲戚的一家公司,他的人生已经开挂,薪资是远高于其他同龄人的。自己的亲戚天天飞来飞去,一年也来不了几次。最近他学精了,招了个职业经理人前来帮忙,自己偷偷躲在办公室抱着电脑,不知道在捣鼓些啥。“我哪点不如他啊,不就是靠运气么”。某天醉酒后,他嘴里小声呢喃着。小顾,我爱996小顾的生活压力是比较大的,几乎是月光。他和妻子都是独子,双方父母多病,都没有短期死亡的迹象,不是贡献者没有退休金。更要命的是没和老婆控制好,生了3个娃。他在这家996的公司已经很长时间了,以至于他非常希望996合法化。他现在已经很少参与开发了,天天是一堆琐事,对外面的世界充满了恐惧。“我虽然已经财务自由了,但我还是不服输,我天天下班这么晚,就是想要为理想拼搏“。小顾每次开会,都要给下属打鸡血。服输俩字,出卖了他。小谢,羊毛党薅羊毛不犯法。在进局子之前,小谢也这么想,但没想到这次的动静这么大。有奖励的地方,就有利可图。小谢入这一行时间较早,从养号到变现,整个流程都颇为熟悉。这些年来,他都比较小心,虽然也有些被反薅的经历。但每个月,还是会为他带来不菲的收益。这次主要是太贪心,金额有点大,竟然也用了自己的支付宝账号,被别人顺藤摸瓜找到了。"我没觉得做错了什么,都是为了生活,我有什么错?“。小谢被拘留后很不服气。他正想着怎么做更隐秘的黑产。小孟,转产品技术转产品是非常容易的,还有不少优势。正因为这个理由,同时基于对代码的厌恶,小孟在三年前就转了产品。可他有硬伤。他不太喜欢和人交流,只会默默的在背后画原型图;被怼的时候,他会特别生气,以至于一整天的心情都不好;他觉得每天都被那么多繁琐的破事给牵绊,开会、交流、项目管理,真的很烦。“我的性格就不适合工作”,他把玩着手中的签字笔,“可我没这种命”。最近他在看javascript,他觉得前端应该会更简单一些。小高,一直走下坡路小高的职业路最近一直不顺,但十年前也曾达到过巅峰。想当年,他是所有同学里最风光无限的。回忆起他的第一次离职,他称为激流勇退。结果离职后,除了公司光环,啥都没有。他接着带着暴富的梦想去创业,接连黄了好几家。重回大公司的他,不得已只能做些普通的研发工作。最近更加凄惨,领导闲他的年龄大,性价比不高,正在慢慢孤立他。他研究孙子兵法,研究毛泽东理论,觉得是因为自己创业的几年把履历给弄坏了。“人生是场持久战,鹿死谁手未可知”。他咬了口手中的煎饼果子,咽下时能看到喉结的耸动。小崔,会跳的猿终于在这家公司干慢两年了。小崔舒了口气,他已经成功的挑战了自己。过去这十年,大多数时候,每隔半年就会跳糟一次,几乎没超过1年的,公司多的自己都不能够一口气说清。刚开始的时候,他傻不拉几全部都写上,结果简历厚厚的长长的吓人。后来,他才学会了合并这些经历,最近的这些工作找的就比较顺利。他从中得到不少好处,最明显的是薪资,翻了几翻。人又聪明,知识技能并没有拉下。“我就奇了怪了,他们看重的到底是能力还是经历”。小崔有时候会很纳闷。小关,专职割韭菜小关的技术是非常棒的,但他的薪资一般。因缘巧合,认识一个做区块链的老板,一拍即合。除了结婚,他从来没穿过西服。老板亲自带人来接,去照相馆照了张非常帅的照片,放在了公司官网上。他的眼睛炯炯有神,自信而有魅力,他是公司的CTO,是精英。但韭菜涨的有点慢,他就开直播,以技术的角度来解析区块链的好处。老板则以投资的角度讲解ICO的魅力。他好想吃一张喷香喷香的韭菜饼啊。“不赌一把,你都不知道自己的底线在哪里”。小关若有所思。小贝,上车容易下车难贝总,是大家对小贝的称呼。他们不知道,这称呼后所带的无奈。小贝是四年前到的这家公司。鉴于看好公司的发展模式,他技术入股,老板承诺了股份,但并没有签署任何协议。2年前,公司因财务紧张,在领导的忽悠下,他先后投入了200w资金,这部分老板倒是给他折合成书面股份了,但占比很小。每次和老板谈他的技术入股股份,老板都闪烁其词,他也不好追问。但看到网上越来越多的毁约,他的心头也有不少焦虑。他的履历并不算好,上市前老板透露有美化一下管理层的需求,他就更加担心。“我要离职,他起码得把200w资金的股份给我吧。况且,我们的交情...”小贝现在开始研究法律书籍了。小钟,猝死小钟兢兢业业的工作,他是最努力的那一个。公司有绩效机制,他想多赚点钱。楼下是地铁,公司楼下也是,直通的那种。他已经好几个月没见过太阳了。有一天晚上公司出了生产事故,他的手机叮叮叮响个不停,但他再也没有起床。死在了家里,据说是猝死。“公司压榨员工,必须给出合理的赔偿”!,小钟的爱人双眼欲泪,旁边小推车里躺着他们一岁的儿子,好奇的看着这个世界。前几天,他还刚给儿子买了《少儿学编程》系列,这是他最后的期望。END人生的目的从来不是享受,也不是承受,而是体验。你的每一次选择,都有自己的理由。你的每一个理由,都会让你热泪盈眶。 分享本人13年Java开发经验及产品研发经验,BAT背景,曾在多家知名企业担任技术总监、企业方案选型首席顾问,先后从事内核开发、大型Java系统架构设计和物联网系统架构设计开发,精通复杂业务技术方案选型、架构、核心难点攻关,对于java语言及项目有非常深入的理解和丰富的实操经验,热爱前沿技术,乐于进行技术分享与技术探讨。本人13年Java开发经验及产品研发经验,BAT背景,曾在多家知名企业担任技术总监、企业方案选型首席顾问,先后从事内核开发、大型Java系统架构设计和物联网系统架构设计开发,精通复杂业务技术方案选型、架构、核心难点攻关,对于java语言及项目有非常深入的理解和丰富的实操经验,热爱前沿技术,乐于进行技术分享与技术探讨。

May 15, 2019 · 1 min · jiezi

现代IM系统中的消息系统架构-架构篇

前言 IM全称是『Instant Messaging』,中文名是即时通讯。在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉、微信、QQ等以IM为核心功能的产品。当然目前微信已经成长为一个生态型产品,但其核心功能还是IM。还有一些非以IM系统为核心的应用,最典型的如一些在线游戏、社交应用,IM也是其重要的功能模块。可以说,IM系统已经是任何一个带有社交属性的应用需要具备的基础功能,网络上对于这类系统的设计与实现的讨论也越来越多。 IM系统在互联网初期即存在,其基础技术架构在这十几年的发展中更新迭代多次,从早期的CS、P2P架构,到现在后台已经演变为一个复杂的分布式系统,涉及移动端、网络通信、协议、安全、存储和搜索等技术的方方面面。IM系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步、存储和检索: 消息的同步:将消息完整的、快速的从发送方传递到接收方,就是消息的同步。消息同步系统最重要的衡量指标就是消息传递的实时性、完整性以及能支撑的消息规模。从功能上来说,一般至少要支持在线和离线推送,高级的IM系统还支持『多端同步』。消息的存储:消息存储即消息的持久化保存,传统消息系统通常只能支持消息在接收端的本地存储,数据基本不具备可靠性。现代消息系统能支持消息在服务端的在线存储,功能上对应的就是『消息漫游』,消息漫游的好处是可以实现账号在任意端登陆查看所有历史消息。消息的检索:消息一般是文本,所以支持全文检索也是必备的能力之一。传统消息系统通常来说也是只能支持消息的本地检索,基于本地存储的消息数据来构建。而现在消息系统在能支持消息的在线存储后,也具备了消息的『在线检索』能力。本篇文章内容主要涉及IM系统中的消息系统架构,会介绍一种基于阿里云表格存储Tablestore的Timeline模型构建的消息系统。基于Tablestore Timeline构建的现代消息系统,能够同时支持消息系统的众多高级特性,包括『多端同步』、『消息漫游』和『在线检索』。在性能和规模上,能够做到全量消息云端存储和索引,百万TPS写入以及毫秒级延迟的消息同步和检索能力。 之后我们会继续发表两篇文章,来更详细介绍Tablestore Timeline模型概念及使用: 模型篇:详细介绍Tablestore Timeline模型的基本概念和基础数据结构,并结合IM系统进行基本的建模。实现篇:会基于Tablestore Timeline实现一个具备『多端同步』、『消息漫游』和『在线检索』这些高级功能的简易IM系统,并共享我们的源代码。传统架构 vs 现代架构 传统架构下,消息是先同步后存储。对于在线的用户,消息会直接实时同步到在线的接收方,消息同步成功后,并不会在服务端持久化。而对于离线的用户或者消息无法实时同步成功时,消息会持久化到离线库,当接收方重新连接后,会从离线库拉取所有未读消息。当离线库中的消息成功同步到接收方后,消息会从离线库中删除。传统的消息系统,服务端的主要工作是维护发送方和接收方的连接状态,并提供在线消息同步和离线消息缓存的能力,保证消息一定能够从发送方传递到接收方。服务端不会对消息进行持久化,所以也无法支持消息漫游。消息的持久化存储及索引同样只能在接收端本地实现,数据可靠性极低。 现代架构下,消息是先存储后同步。先存储后同步的好处是,如果接收方确认接收到了消息,那这条消息一定是已经在云端保存了。并且消息会有两个库来保存,一个是消息存储库,用于全量保存所有会话的消息,主要用于支持消息漫游。另一个是消息同步库,主要用于接收方的多端同步。消息从发送方发出后,经过服务端转发,服务端会先将消息保存到消息存储库,后保存到消息同步库。完成消息的持久化保存后,对于在线的接收方,会直接选择在线推送。但在线推送并不是一个必须路径,只是一个更优的消息传递路径。对于在线推送失败或者离线的接收方,会有另外一个统一的消息同步方式。接收方会主动的向服务端拉取所有未同步消息,但接收方何时来同步以及会在哪些端来同步消息对服务端来说是未知的,所以要求服务端必须保存所有需要同步到接收方的消息,这是消息同步库的主要作用。对于新的同步设备,会有消息漫游的需求,这是消息存储库的主要作用,在消息存储库中,可以拉取任意会话的全量历史消息。消息检索的实现依赖于对消息存储库内消息的索引,通常是一个近实时(NRT,near real time)的索引构建过程,这个索引同样是在线的。 以上就是传统架构和现代架构的一个简单的对比,现代架构上整个消息的同步、存储和索引流程,并没有变复杂太多。现代架构的实现本质上是把传统架构内本地存储和索引都搬到云上,最大挑战是需要集中管理全量消息的存储和索引,带来的好处是能实现多端同步、消息漫游以及在线检索。可以看到现代架构中最核心的就是两个消息库『消息同步库』和『消息存储库』,以及对『消息存储库』的『消息索引』的实现,接下来我们逐步拆解这几个核心的设计和实现。 基础模型 在深入讲解消息系统的设计和实现之前,需要对消息系统内的几个基本概念和基础模型有一个理解。网上分析的很多的不同类型的消息系统实现,实现差异上主要在消息同步和存储的方案上,在消息的数据模型上其实有很大的共性。围绕数据同步模型的讨论主要在『读扩散』、『写扩散』和『混合模式』这三种方案,目前还没有更多的选择。而对于数据模型的抽象,还没有一个标准的定义。 本章节会介绍下表格存储Tablestore提出的Timeline模型,这是一个对消息系统内消息模型的一个抽象,能简化和更好的让开发者理解消息系统内的消息同步和存储模型,基于此模型我们会再深入探讨消息的同步和存储的选择和实现。 Timeline模型 Timeline是一个对消息抽象的逻辑模型,该模型会帮助我们简化对消息同步和存储模型的理解,而消息同步库和存储库的设计和实现也是围绕Timeline的特性和需求来展开。 如图是Timeline模型的一个抽象表述,Timeline可以简单理解为是一个消息队列,但这个消息队列有如下特性: 每条消息对应一个顺序ID:每个消息拥有一个唯一的顺序ID(SequenceId),队列消息按SequenceId排序。新消息写入能自动分配递增的顺序ID,保证永远插入队尾:Timeline中是根据同步位点也就是顺序ID来同步消息,所以需要保证新写入的消息数据的顺序ID绝对不能比已同步的消息的顺序ID还小,否则会导致数据漏同步,所以需要支持对新写入的数据自动分配比当前已存储的所有消息的顺序ID更大的顺序ID。新消息写入也能自定义顺序ID,满足自定义排序需求:上面提到的自动分配顺序ID,主要是为了满足消息同步的需求,消息同步要求消息是根据『已同步』或是『已写入』的顺序来排序。而消息的存储,通常要求消息能根据会话顺序来排序,会话顺序通常由端的会话来决定,而不是服务端的同步顺序来定,这是两种顺序要求。支持根据顺序ID的随机定位:可根据SequenceId随机定位到Timeline中的某个位置,从这个位置开始正序或逆序的读取消息,也可支持读取指定顺序ID的某条消息。支持对消息的自定义索引:消息体内数据根据业务不同会包含不同的字段,Timeline需要支持对不同字段的自定义索引,来支持对消息内容的全文索引,或者是任意字段的灵活条件组合查询。消息同步可以基于Timeline很简单的实现,图中的例子中,消息发送方是A,消息接收方是B,同时B存在多个接收端,分别是B1、B2和B3。A向B发送消息,消息需要同步到B的多个端,待同步的消息通过一个Timeline来进行交换。A向B发送的所有消息,都会保存在这个Timeline中,B的每个接收端都是独立的从这个Timeline中拉取消息。每个接收端同步完毕后,都会在本地记录下最新同步到的消息的SequenceId,即最新的一个位点,作为下次消息同步的起始位点。服务端不会保存各个端的同步状态,各个端均可以在任意时间从任意点开始拉取消息。 消息存储也是基于Timeline实现,和消息同步唯一的区别是,消息存储要求服务端能够对Timeline内的所有数据进行持久化,并且消息采用会话顺序来保存,需要自定义顺序ID。 消息检索基于Timeline提供的消息索引来实现,能支持比较灵活的多字段索引,根据业务的不同可有自由度较高的定制。 消息存储模型 如图是基于Timeline的消息存储模型,消息存储要求每个会话都对应一个独立的Timeline。如图例子所示,A与B/C/D/E/F均发生了会话,每个会话对应一个独立的Timeline,每个Timeline内存有这个会话中的所有消息,消息根据会话顺序排序,服务端会对每个Timeline进行持久化存储,也就拥有了消息漫游的能力。 消息同步模型 消息同步模型会比消息存储模型稍复杂一些,消息的同步一般有读扩散(也叫拉模式)和写扩散(也叫推模式)两种不同的方式,分别对应不同的Timeline物理模型。 如图是读扩散和写扩散两种不同同步模式下对应的不同的Timeline模型,按图中的示例,A作为消息接收者,其与B/C/D/E/F发生了会话,每个会话中的新的消息都需要同步到A的某个端,看下读扩散和写扩散两种模式下消息如何做同步。 读扩散:消息存储模型中,每个会话的Timeline中保存了这个会话的全量消息。读扩散的消息同步模式下,每个会话中产生的新的消息,只需要写一次到其用于存储的Timeline中,接收端从这个Timeline中拉取新的消息。优点是消息只需要写一次,相比写扩散的模式,能够大大降低消息写入次数,特别是在群消息这种场景下。但其缺点也比较明显,接收端去同步消息的逻辑会相对复杂和低效。接收端需要对每个会话都拉取一次才能获取全部消息,读被大大的放大,并且会产生很多无效的读,因为并不是每个会话都会有新消息产生。写扩散:写扩散的消息同步模式,需要有一个额外的Timeline来专门用于消息同步,通常是每个接收端都会拥有一个独立的同步Timeline(或者叫收件箱),用于存放需要向这个接收端同步的所有消息。每个会话中的消息,会产生多次写,除了写入用于消息存储的会话Timeline,还需要写入需要同步到的接收端的同步Timeline。在个人与个人的会话中,消息会被额外写两次,除了写入这个会话的存储Timeline,还需要写入参与这个会话的两个接收者的同步Timeline。而在群这个场景下,写入会被更加的放大,如果这个群拥有N个参与者,那每条消息都需要额外的写N次。写扩散同步模式的优点是,在接收端消息同步逻辑会非常简单,只需要从其同步Timeline中读取一次即可,大大降低了消息同步所需的读的压力。其缺点就是消息写入会被放大,特别是针对群这种场景。Timeline模型不会对选择读扩散还是写扩散做约束,而是能同时支持两种模式,因为本质上两种模式的逻辑数据模型并无差别,只是消息数据是用一个Timeline来支持多端读还是复制到多个Timeline来支持多端读的问题。针对IM这种应用场景,消息系统通常会选择写扩散这种消息同步模式。IM场景下,一条消息只会产生一次,但是会被读取多次,是典型的读多写少的场景,消息的读写比例大概是10:1。若使用读扩散同步模式,整个系统的读写比例会被放大到100:1。一个优化的好的系统,必须从设计上去平衡这种读写压力,避免读或写任意一维触碰到天花板。所以IM系统这类场景下,通常会应用写扩散这种同步模式,来平衡读和写,将100:1的读写比例平衡到30:30。当然写扩散这种同步模式,还需要处理一些极端场景,例如万人大群。针对这种极端写扩散的场景,会退化到使用读扩散。一个简单的IM系统,通常会在产品层面限制这种大群的存在,而对于一个高级的IM系统,会采用读写扩散混合的同步模式,来满足这类产品的需求。采用混合模式,会根据数据的不同类型和不同的读写负载,来决定用写扩散还是读扩散。 典型架构设计 如图是一个典型的消息系统架构,架构中包含几个重要组件: 端:作为消息的发送和接收端,通过连接消息服务器来发送和接收消息。消息服务器:一组无状态的服务器,可水平扩展,处理消息的发送和接收请求,连接后端消息系统。消息队列:新写入消息的缓冲队列,消息系统的前置消息存储,用于削峰填谷以及异步消费。消息处理:一组无状态的消费处理服务器,用于异步消费消息队列中的消息数据,处理消息的持久化和写扩散同步。消息存储和索引库:持久化存储消息,每个会话对应一个Timeline进行消息存储,存储的消息建立索引来实现消息检索。消息同步库:写扩散形式同步消息,每个用户的收件箱对应一个Timeline,同步库内消息不需要永久保存,通常对消息设定一个生命周期。新消息会由端发出,通常消息体中会携带消息ID(用于去重)、逻辑时间戳(用于排序)、消息类型(控制消息、图片消息或者文本消息等)、消息体等内容。消息会先写入消息队列,作为底层存储的一个临时缓冲区。消息队列中的消息会由消息处理服务器消费,可以允许乱序消费。消息处理服务器对消息先存储后同步,先写入发件箱Timeline(存储库),后写扩散至各个接收端的收件箱(同步库)。消息数据写入存储库后,会被近实时的构建索引,索引包括文本消息的全文索引以及多字段索引(发送方、消息类型等)。对于在线的设备,可以由消息服务器主动推送至在线设备端。对于离线设备,登录后会主动向服务端同步消息。每个设备会在本地保留有最新一条消息的顺序ID,向服务端同步该顺序ID后的所有消息。 总结 本篇文章主要介绍了现代IM系统中消息系统所需要具备的能力,对比了传统架构和现代架构。为方便接下来的深入探讨,介绍了表格存储Tablestore推出的Timeline模型,以及在IM系统中消息存储和消息同步模型的基本概念和策略,最后介绍了一个典型的架构**本人13年Java开发经验及产品研发经验,BAT背景,曾在多家知名企业担任技术总监、企业方案选型首席顾问,先后从事内核开发、大型Java系统架构设计和物联网系统架构设计开发,精通复杂业务技术方案选型、架构、核心难点攻关,对于java语言及项目有非常深入的理解和丰富的实操经验,热爱前沿技术,乐于进行技术分享与技术探讨。本人13年Java开发经验及产品研发经验,BAT背景,曾在多家知名企业担任技术总监、企业方案选型首席顾问,先后从事内核开发、大型Java系统架构设计和物联网系统架构设计开发,精通复杂业务技术方案选型、架构、核心难点攻关,对于java语言及项目有非常深入的理解和丰富的实操经验,热爱前沿技术,乐于进行技术分享与技术探讨**

May 15, 2019 · 1 min · jiezi

Java开发必须要掌握的20个核心技术

JVM相关(重点)对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。在JVM这个大类中,我认为需要掌握的知识有:JVM内存模型和结构GC原理,性能调优调优:Thread Dump, 分析内存结构class 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程方法执行过程Java各个大版本更新提供的新特性(需要简单了解) Java的运行这条可能出看很简单,java程序的运行谁不会呢?不过很多时候, 我们只是单纯通过IDE去执行java程序,底层IDE又是如何执行java程序呢?很多人并不了解。这个知识点是最最基本的java开发者需要掌握的,第一个肯定是教你如何在命令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候,去分析当时启动的目录多少,执行命名如何,参数如何,是否有缺失等。这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相关的问题。在这里需要掌握的知识有:javac 编译java文件为 class 文件java 命令的使用, 带package的java类如何在命令行中启动java程序涉及到的各个路径(classpath, java。library。path, java运行的主目录等) 数据类型(重点)这条没有什么好多说的,无非就是Java中的基本类型和对象类型的掌握。可以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱之后的类型相等的判断。主要知识点:基本类型: int, long, float, double, boolean 。。。对应的对象类型: Integer 等类型到基本类型的转换, 装箱和拆箱Object类型: equals, hashcodeString 类型的特点 对象和实例在这方面,开发者需要了解class和instance的概念以及之间的差别, 这是java面向对象特性的一个基础。主要知识点有:Class和 Instance 的概念Instance 创建的过程:无继承:分配内存空间, 初始化变量, 调用构造函数有继承:处理静态动作, 分配内存空间, 变量定义为初始值 , 从基类->子类, 处理定义处的初始化, 执行构造方法需要注意的点:静态属性等从基类->子类进行初始化默认无参构造方法相关的特性 访问控制这也是java封装特性的一个基础,需要掌握的有:public protected default private 对于class, method, field 的修饰作用。 流程控制Java 流程控制的基础, 虽然有些语法不一定很常用,但是都需要了解,并且在合适的地方使用它们。需要掌握的有:if, switch, loop, for, while 等流程控制的语法。 面向对象编程的概念(重点)这是一个java的核心概念,对于任何java开发者都需要熟练掌握。Java中很多特性或者说知识点都是和java面向对象编程概念相关的。在我的理解,一个好的开发者不仅仅需要了解这些特性(知识点)本身。也更需要知道这些对象在java的面向对象编程概念中是如何体现出来的,这样更有利于开发者掌握java这门开发语言,以及其他面向对象编程的语言。在这里只是简单罗列了一下,主要的知识点包括有:面向对象三大特性:封装,继承,多态;各自的定义概念,有哪些特性体现出来,各自的使用场景静态多分派,动态单分派的概念重载的概念和使用继承:接口多实现,基类单继承抽象,抽象类,接口多态:方法覆盖的概念和使用接口回调 static静态属性在java日常开发中也是经常使用,需要了解和 static 关键字相关的用法,还有和其他关键字的配合使用, 如是否可以和 abstract, final 等关键字联合使用。主要需要掌握的有:静态属性的定义,使用,以及类加载时如何初始化静态方法的定义和使用静态类的定义和使用静态代码块的定义和初始化时机基础知识点这里主要罗列一些散落的,没有系统归类的一些java知识点。在日常的开发中用到也不少。 这块内容其实还有很多,目前只是暂时归纳了这几个在这里:包括有:equalshashcodetring/stringbufferfinalfinallyfinalize9.集合框架(重点)这个是一个需要多加掌握的部分,做java开发,可以说没有不用到集合框架的,这很重要,这里整理的Java集合面试题及答案你必须都要清楚。但是这里的知识点并不难,但是对于集合最好要了解内部的实现方式,因为这样有助于你在各个不同的场景选择适合的框架来解决问题,比如有1W个元素的集合,经常要进行contains判断操作,知道了集合的特性或者内部实现,就很容易做出正确的选择。这里包括了如下内容(并发相关不包含在内):集合框架的体系: 基础Collection ,Map具体集合实现的内容, List ,Set ,Map 具体的实现,内部结构, 特殊的方法, 适用场景等集合相关的工具类 Collections 等的用法10.异常框架异常在java的开发中可能没有那么被重视,异常处理的最佳实战详细说明了。一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响。不过在企业级设计开发中, 异常的设计与处理的好坏,往往就关系着这个系统整体的健壮性。一个好的系统的异常对于开发者来说,处理应该统一,避免各处散落很多异常处理逻辑;对于系统来说,异常应该是可控的,并且是易于运维的,某些异常出现后,应该有应对的方法,知道如何运维处理,所以虽然异常框架很简单,但是对于整个企业级应用开发来说,异常处理是很重要的,处理好异常就需要了解Java中的异常体系。这部分需要掌握的知识点不多,主要就是:异常的体系:ThrowableExceptionRuntimeExceptionErrorRuntimeException 和 一般 Exception 的区别, 具体处理方法等 ...

May 13, 2019 · 1 min · jiezi

Java设计模式11享元模式

一、适用场景 内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。 二、模式核心 享元模式以共享的方式高效的支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态:可以共享,不会随环境改变而改变。外部状态:不可以共享,会随环境改变而改变。 围棋例子: 每一个围棋棋子都是一个对象,并都有如下属性: 三、享元模式结构 UM类图: FlyWeight抽象享元类:通常是一个接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。 UnsharedConcreteFlyWeight非共享享元类:不能被共享的子类可以设计为非共享享元类。 ConcreteFlyWeight具体享元类:为内部状态提供成员变量进行存储。 FlyWeightFactory享元工厂类:创建并管理享元对象,享元池一般设计为键值对。 围棋代码示例: FlyWeight抽象享元类: public interface ChessFlyWeight { String getColor();//获取颜色,内部状态 void display(Coordinate c);//展示位置,外部状态} UnSharedConcreteFlyweight 非共享享元类: /** * 外部状态:棋子坐标位置 */public class Coordinate { private int x,y; public Coordinate(int x, int y) { super(); this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; }}ConcreteFlyWeight具体享元类: ...

May 12, 2019 · 1 min · jiezi

小白教程一小时上手最流行的前端框架vue

前言 vue是现在很火的一个前端MVVM框架,它以数据驱动和组件化的思想构建,与angular和react并称前端三大框架。相比angular和react,vue更加轻巧、高性能、也很容易上手。大家也可以移步vue官网,看一下它的介绍和核心功能介绍。简单粗暴的理解就是:用vue开发的时候,就是操作数据,然后vue就会处理,以数据驱动去改变DOM。使用vue,我们可以集中精力于如何处理数据上,数据改变后,页面显示也会随之改变。相比jquery那种操作DOM元素的开发方式,能有效提高开发效率,个人觉得有接近两三倍的提升。 一、 安装 我们可以通过npm或者直接引入script标签两种方式来安装vue。这里为了方便说明,采用第二种方式,我们只需要在html页面引入标签即可。个人测试开发可以使用bootcdn的资源。 <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>二、核心思想 “数据绑定”是vue的核心思想,这里笔者举一个hello world例子来说明这种思想。 html代码 <div id="app"> <p>{{ message }}</p> <input v-model="message"></div>javascript代码 new Vue({ el: '#app', data: { message: 'Hello Vue!' }})页面效果 我们在html代码里面设置了一个id为“app”的div,然后在javascript里面实例化了一个属性el为“#app”的vue对象,表示这个vue对象用来处理该div的显示。 接着在vue对象的data属性里面设置了一个message字段,把这个字段和页面的p元素和input元素双向绑定起来。 这样只要message字段改变,p元素的内容就会改变。只要input的输入内容改变,message字段就会改变,从而导致p元素的内容改变。所以我们改变页面中输入框的值,p元素里面的内容也随之改变。 三、vue实例基本组成 new Vue({ el: '#app', data: { message: 'Hello Vue!', url: 'www.salasolo.com' }, methods:{ showMsg: function(){ alert(this.message) }, jumpUrl: function(){ location.href = this.url } },})可以看到,一个vue实例有三个基本的属性,el属性用来指定绑定的页面容器,data属性里面存放页面展示的数据,methods放置页面调用的一些方法。 四、数据绑定 使用下面的语法可以将页面元素的内容和vue实例的data属性里面的字段绑定起来。 1.文本 <span>消息: {{ message }}</span>2.原始html <span v-html="htmlCode"></span>3.列表 <span v-for="item in list">{{item}}</span>4.条件 ...

May 10, 2019 · 1 min · jiezi

spring-boot介绍及使用详解

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 Spring boot的特点 创建独立的Spring应用程序嵌入的Tomcat,无需部署WAR文件简化Maven配置自动配置Spring提供生产就绪型功能,如指标,健康检查和外部配置绝对没有代码生成和对XML没有要求配置Spring boot的优点 spring boot 可以支持你快速的开发出 restful 风格的微服务架构 自动化确实方便,做微服务再合适不过了,单一jar包部署和管理都非常方便。只要系统架构设计合理,大型项目也能用,加上nginx负载均衡,轻松实现横向扩展 spring boot 要解决的问题, 精简配置是一方面, 另外一方面是如何方便的让spring生态圈和其他工具链整合(比如redis, email, elasticsearch) Spring boot的使用 1、maven配置文件 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springboot.sample</groupId> <artifactId>spring-boot-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>spring-boot-sample</name> <description>Spring Boot Sample Web Application</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.2.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MYSQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Spring Boot JDBC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>2、application类 ...

May 4, 2019 · 2 min · jiezi

Java-Web基础ActionService-Dao三层的功能划分

Action/Service/DAO简介:      Action是管理业务(Service)调度和管理跳转的。       Service是管理具体的功能的。       Action只负责管理,而Service负责实施。       DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查询,dao只是封装增删改查。至于增删查改如何去实现一个功能,dao是不管的。       总结这三者,通过例子来解释:       Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;       Service是厨师,action送来的菜单上的菜全是ta做的;       Dao是厨房的小工,和原材料打交道的事情全是ta管。       相互关系是,小工(dao)的工作是要满足厨师(service)的要求,厨师要满足服务员(action)转达的客户(页面用户)的要求,服务员自然就是为客户服务喽。       现在最基本的分层方式,结合了SSH架构。Model层就是对应的数据库表的实体类。Dao层是使用了Hibernate连接数据库、操作数据库(增删改查)。Service层:引用对应的Dao数据库操作。Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理。       以上的Hibernate, Struts,都需要注入到Spring的配置文件中,Spring把这些联系起来,成为一个整体。 三大框架Struts/Hibernate/Spring      简单地说:      Struts——控制用的;      Hibernate——操作数据库的;      Spring——解耦用的。      详细地说:       Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,主要控制逻辑关系的处理。       Hibernate是数据持久化层,是一种新的对象、关系的映射工具,提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制,大大减少数据访问的复杂度。把对数据库的直接操作,转换为对持久对象的操作。 ...

May 4, 2019 · 1 min · jiezi

为什么许多程序员和设计师更喜欢用MAC而不是windows

MAC、windows和Linux谁更好已经成为了一个“千古难题”,就像从前的梗,“PHP是世界上最好的语言”一样,三大操作系统的用户各执一词,谁也不能说服谁。当然Linux用户趋向和其他两种用户完全不同,对于程序员、极客、专业人士而言更为友好,但对于普通用户来说门槛太高且实用性不佳,所以Linux及其忠实用户大多数时间也都是不与世俗争长短的状态,所以今天我们就来说说剩下的两个系统,MAC和Windows。 说到这两个操作系统,想必各位看官老爷都不陌生,一个是苹果PC产品搭载的桌面操作系统,另一个则是微软出品、陪伴我们二十余年的大众桌面操作系统,二者之间的争斗也从windows诞生就开始,一直持续了二十年余之久,大多数用户都会选择Windows作为自己的主要使用系统,但也有一部分程序员和设计师在使用windows的同时也在使用MAC系统,并且使用mac的场景往往是工作的时候,也就是用MAC作为生产工具,这是为什么呢? 首先我们来普及一下MAC和Windows的软件管理机制。Windows在安装软件的时候,我们都非常清楚安装过程中要写入注册表,这个原因是Windows的软件安装模式是先将安装包解压到指定位置,然后通过注册表写入来给这些文件赋予“身份证”,也就是该软件允许在本台电脑中获得权限并使用的权利,Windows也会记住这个软件,这样的安装方式是从win98年代就有的,机制也一直没有变化,优势在于这样的方式兼容性要更好,同时单个程序能够实现的功能也更多;但换来这些的同时也因为大量的文件分布在文件夹中,运行软件时多个文件同时运作,导致线程占用和资源占用更大,而失去了绝对稳定的运行效率。 MAC的软件管理机制可以简称为“沙箱”机制。在MAC软件安装中,所有的软件都是一个独立的程序文件,安装时没有任何解压、写入的步骤,将整个文件拖入application就可以直接使用,而在需要卸载的时候把该文件直接删除就可以了,这样做带来的好处是软件运行的稳定性极佳,同时软件因为封装紧密,不会出现文件损坏等特殊情况,所以MAC作为生产工具来说是一个非常可靠的选择;但这样的做法同样也有问题,那就是由于单一文件运行软件的机制在部分多平台的软件中无法实现全部功能移植,所以相对windows 的软件功能可能会略少。 然后我们再来说一下MAC和windows的防病毒能力。这个单独拿出来说对Windows似乎有些不公平,但事实上这确实是MAC非常大的优点。Windows因为每个程序能够获得的权限几乎是纯粹看用户想不想给予它权限,从软件权限获取难度上来看Windows是非常松散的,毕竟从最开始的系统设定上就是这样,虽然从vista开始加入了管理员运行这样的通道,以保证平时状态下不给予软件重要的权限,但相比MAC来说还是不够严谨。 MAC强悍的防病毒能力有两方面,第一方面MAC系统给予软件的权限并不多,用过IOS的人应该都清楚,在IOS 8之前苹果是没有第三方输入法的,原因就是对软件的权限审核非常严格,MAC也一样,甚至在某些软件上更夸张,什么类型的软件只能获得这类软件基本的权限,所以病毒、流氓软件根本不够格拿到权限,也就没法干坏事;当然还有第二点,那就是MAC在全球市场范围内的份额太小,windows才是主流,病毒肯定会针对市场大且相对而言更好下手的windows制作,所以MAC很少受到病毒困扰,就是因为MAC这块石头“又臭又硬”。 最后是MAC的文件管理机制。相比Windows混乱的文件管理机制,MAC因为文件管理内核和格式都要成熟许多,且在多年前就已经开始使用固态硬盘,所以文件碎片要比Windows少了许多;同时MAC的文件管理模式并没有像Windows一样给用户提供一个专门的资源管理器来让用户到处翻找文件,它系统的设定在最开始就不需要用户对硬盘进行分区,而事实证明MAC的文件稳定程度、磁盘格式的出色使得MAC根本不需要分区。 其实对于MAC比Windows更适合做创作类生产工具还有许多原因,例如MAC独占专业软件更好用云云,因为篇幅限制只能够简单概括,大家还知道哪些原因可以在评论区说出来哦。**写在最后程序员小伙伴们可以关注我一波,以后带来更精彩的**

April 28, 2019 · 1 min · jiezi

何为数据库连接池其工作原理是什么

连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。         连接池的主要优点有以下三个方面。         第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。         第二、简化的编程模式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。         第三、控制资源的使用。如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平之下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。         下面,简单的阐述下连接池的工作原理。          连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。         连接池的工作原理主要由三部分组成,分别为连接池的建立、连接池中连接的使用管理、连接池的关闭。         第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。Java中提供了很多容器类可以方便的构建连接池,例如Vector、Stack等。         第二、连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:         当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。         当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。         该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。         第三、连接池的关闭。当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。        **写在最后程序员小伙伴们可以关注我一波,以后带来更精彩的**

April 28, 2019 · 1 min · jiezi

Software System Analysis and Design | 3

一、简述瀑布模型、增量模型、螺旋模型(含原型方法)的优缺点。从项目特点、风险特征、人力资源利用角度思考。瀑布模型:优点:为项目提供了按阶段划分的检查点。每个阶段可以校验当前阶段开发过程的正确性,降低项目风险。当前一阶段完成后,只需要去关注后续阶段。保证每个阶段工作正确完成,使过程有序化,便于管理。有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。缺点:在项目各个阶段之间极少有反馈。开发过程不能过多逆转回退,否则代价极大。只有在项目生命周期的后期才能看到结果。每个阶段中的子流程可能过长,不能尽快得到反馈和修订。有些情况下客户往往很难清楚地给出所有的需求,而该模型要求有详细需求且在后期尽量不进行修改,对于前期需求不太明确的项目则不难很好应用瀑布模型。增量模型:优点:整个项目的资金不会被提前消耗,因为首先开发和交付了主要功能和高风险功能。每个增量交付一个可操作的产品。每次增量交付过程中获取的经验,有利于后面的改进,客户也有机会对建立好的模型作出反应。采用连续增量的方式,可把用户经验融入到细化的产品,这比完全重新开发要便宜得多。“分而治之”的策略,使问题分解成可管理的小部分,避免开发团队由于长时间的需求任务而感到泪丧。通过同一个团队的工作来交付每个增量,保持所有团队处于工作状态,减少了员工的工作量,工作分布曲线通过项目中的时间阶段被拉平。每次增量交付的结为,可以重新修订成本和进度的风险。便于根据市场作出反应。降低了失败和更改需求的风险。更易于控制用户需求,因为每次曾两开发的时间很短。由于不是一步跳到未来,所以用户能逐步适应新技术。切实的项目进展,有利于进度控制。风险分布到几个更小的增量中,而不是集中于一个大型开发中。由于用户能够从早期的增量中了解系统,所以更加理解后面增量中的需求。缺点:由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。螺旋模型(含原型方法):优点:设计上的灵活性,可以在项目的各个阶段进行变更以小的分段来构建大型系统,使成本计算变得简单容易。客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。缺点:很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。二、简述统一过程三大特点,与面向对象的方法有什么关系?Use case驱动。软件开发中对部分功能进行描述,并且可以在团队中被广泛理解,从而进行下一步的开发或测试。以架构为中心。软件体系结构提供所有其它发展的中心点,这要求一个具有弹性的、能适应变化的、易于理解的、可以重用的体系结构。统一过程是面向对象开发的重要方法,是迭代、敏捷开发实践的代表,给出了有关软件开发过程组织及实施的指导。三、简述统一过程四个阶段的划分准则是什么?每个阶段关键的里程碑是什么?RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。初始阶段初始阶段的目标是为系统建立商业案例并确定项目的边界。为了达到该目的必须识别所有与系统交互的外部实体,在较高层次上定义交互的特性。本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。对于建立在原有系统基础上的开发项目来讲,初始阶段可能很短。初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。生命周期目标里程碑评价项目基本的生存能力。细化阶段细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。为了达到该目的,必须在理解整个系统的基础上,对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。细化阶段结束时第二个重要的里程碑:生命周期结构(Lifecycle Architecture)里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。构造阶段在构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。构建阶段结束时是第三个重要的里程碑:初始功能(Initial Operational)里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。交付阶段交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命周期的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。在交付阶段的终点是第四个里程碑:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。四、软件企业为什么能按固定节奏生产、固定周期发布软件产品?它给企业项目管理带来哪些好处?遵循项目开发过程模型的指导,按照流程进行开发测试,利用软件产品范围的弹性,合理规划范围(20%业务决定80%满意度),使得软件生产按固定节奏运行,固定迭代周期、固定开发周期、固定升级周期。固定节奏可以量化生产过程、个人贡献度、人力资源利用率等数据,有利于更好地监督、控制、调整、评价整个生产。对于公司(生产方)来说,固定节奏开发保证适应市场需求的同时生产可控,对于用户来说,固定节奏的修复,更新更容易产生信赖感。

April 8, 2019 · 1 min · jiezi

深度揭秘:机器学习对软件开发带来哪些影响?

摘要: 当软件开发碰见机器学习,到底能碰撞出什么样的火花呢?机器学习有望从根本上改变软件开发的本质,这也许是自FORTRAN和LISP被发明以来软件开发领域改变最大的一次。这些变化对数百万正在从事软件开发的人而言,意味着什么呢?失业?裁员?现有的软件开发将变得面目全非?自20世纪70年代以来,我们尽可能的构建了足够多的软件。我们有高级语言,低级语言,脚本语言以及用于构建和测试软件的工具,但我们利用这些工具做的事情却没有发生太大变化。我们现在拥有的语言和工具比50年前要好得多,但它们本质上是一样的。我们仍然使用代码编辑器,但这些编辑器变得更花哨了:他们有彩色的高亮,变量名补全,它们有时可以帮助我们完成重构等任务,但他们仍然是emacs和vi的后代。面向对象编程代表了一种不同的编程风格,但从某种本质上而言并不是“全新”的事物,对于函数式编程我们可以一直追溯到50年代。未来我们将专注于机器学习而不是人工智能。机器学习曾经被称为“AI最管用的那一部分”,更重要的是,“机器学习”这种提法可以避开类似“通用智能”这种叫法。因为这样的系统目前不存在,并且可能永远不存在,目前来看只有人类才能做到这一点。而机器学习可能只比模式识别多一点点,但我们已经看到模式识别可以完成很多工作。实际上,手工编码的模式识别是我们当前工具集的核心:这真的是现代优化编译器所正在做的。麦肯锡估计“使用现有技术,只有不到5%的职业可以完全自动化。然而,大约有60%的职业工作活动中,具有30%或更多的组成部分能够被自动化。”软件开发和数据科学不会成为完全被自动化的职业之一。但优秀的软件开发人员一直在寻求对于繁琐,重复的任务的自动化,毫无疑问,软件开发本身将日益变得可以被自动化。这并不是一个激进的愿景,因为我们在过去的半个世纪里持续的为了自动化工具而努力。编译器对编写机器代码的过程进行了自动化。脚本语言通过将更大,更复杂的程序粘合在一起来自动执行许多枯燥无味的任务。软件测试工具、自动部署工具、容器和容器编排系统等等,这些都是为了对开发、部署、管理软件系统的过程进行自动化的工具。而且这些都没有利用机器学习,但这肯定是下一步它们要做的。机器学习会不会吞并软件?毕竟,“软件吞噬世界”是一个日益抽象和普遍化的过程。笔记本电脑,手机或智能手表已经逐渐取代收音机,电视机,锁和钥匙,电灯开关,这是因为我们并没有将计算机仅仅看成数字计算器而是通用机器。从这个角度来看,很容易将机器学习想象成下一个抽象层次,这是我们迄今为止发现的最通用的问题解决工具。当然,神经网络已经证明了它们可以执行许多特定任务。由资深人士乐观地表示,对于许多任务而言,收集数据比编写程序更容易。对于一些非常有趣且困难的程序,这无疑是正确的,比如说收集围棋或国际象棋的训练数据很容易,但很难写一个程序成功地玩这些游戏。另一方面,数据收集并不总是那么容易。我们无法设想自动标记图片的程序,特别是在Facebook和阿里巴巴这样收集了数十亿张图片的网站,而且其中许多图片已被人类标记过。对于像人脸识别这样的任务,我们不知道如何编写软件,而且很难收集数据。对于其他任务,例如计费,可以很容易地根据一些简单的业务规则编写程序。如果你能够收集数据,你编写的程序将更好地适应不同的情况,还能够检测异常,这一点当“将人类纳入软件迭代的循环”时,尤为如此。正在代替代码的机器学习机器学习正在使代码变得高效:Google的Jeff Dean说,500行TensorFlow代码已经取代了谷歌翻译中的500000行代码。虽然代码行数是一个值得质疑的指标,但无论是从编程工作量角度来看还是从需要维护的代码量来看,这个突破都是可称赞的。更重要的是这段代码是如何工作的:相比于五十万行的代码,这是一个经过训练以用于翻译的神经网络。神经网络可以随着语言的变化和使用场景的变化,在新数据上被重新训练,而且整个代码都不需要重写。虽然我们不应低估训练任何复杂度的神经网络的难度,但我们同样也不应低估管理和调试一个巨大代码库带来的问题。研究表明,神经网络可以通过组合现有模块来创建新程序。虽然以这种方式构建的程序很简单,但是让单个神经网络能够学习执行几个不同的任务是很重要的,每个任务通常都需要一个单独的程序。Pete Warden认为:“开发人员必须成为一名教师(教机器),一名训练数据的策划人。”我们发现,这种说法非常具有启发性。软件开发不会消失,但开发人员必须以不同的方式来思考自己。你如何构建一个解决一般问题的系统,然后教该系统解决一个特定的任务?这貌似听起来像是一个风险很高又麻烦的场景。但这意味着我们的系统将变得更加灵活,具有很强的适应性。Warden设想的未来,更多是关于产出的,而不是关于撰写代码行数。Peter经过更加系统的思考,认为机器学习可以从训练数据中产生短程序,而不是很大的程序。数据管理和基础设施早期的迹象表明,机器学习有着可以胜过传统的数据库索引的性能:它可以学习预测数据的存储位置或者预测数据是否存在。机器学习明显更快,并且需要更少的内存,但也有着相当大的限制性:当前基于机器学习的工具不包括多维索引,并假设数据库不经常更新。重新训练比重建传统数据库索引需要更长的时间。尽管如此,研究人员正在研究如何学习到多维索引,查询的优化,重新训练的性能。机器学习已经进入了数据基础设施的其他领域。数据工程师正在使用机器学习来管理Hadoop,从而可以更快地响应Hadoop集群中的内存不足等问题。 Kafka工程师使用机器学习来诊断问题,从而简化了管理许多配置的问题,这些配置会影响数据库的性能。数据工程师和数据库管理员不会过时,但他们可能需要发展一下他们的机器学习技能。机器学习将帮助他们使困难的问题变得更简单,管理数据基础架构这个工作,将不会像正确设置数百个不同的配置参数那样,它会更像是在训练一个系统,让整个管理工作运行的更有条理。使困难问题变得可管理是数据科学最重要的问题之一。数据工程师负责维护数据管道:提取数据、清理数据、特征工程和模型构建。同时他们还需要负责在非常复杂的环境中部署软件,一旦部署了这些基础架构,还需要不断监视它,以检测(或防止)资源用尽,确保模型正确运行。这些都是非常适合用机器学习处理的任务,我们越来越多地看到像MLFlow这样的软件能够被用于管理数据管道。数据科学在自动化编程的早期表现形式中,工具旨在使数据分析师能够执行更高级的分析任务。Automatic Statistician是一种更新的工具,可自动进行探索性数据分析,并为时间序列类型的数据提供统计模型,且附有详细说明。随着深度学习的兴起,数据科学家发现自己需要寻找合适的神经网络架构和参数。让神经网络学着找到合适自己架构的过程,也可能被自动化。毕竟,神经网络就只是单纯的自动化学习工具:虽然构建神经网络结构需要大量的人力工作,但是不可能手动调整模型的所有参数。未来的场景应该是使用机器学习来探索所有可能的神经网络架构:正如一篇文章指出的,10层网络可能就有10的10次方种可能性。已经有其他研究人员使用强化学习来让神经网络架构开发变得更加容易。模型创建不是一劳永逸的事情:数据模型需要不断进行测试和调整。我们开始看到的用于持续监控和模型调整的这些工具并不是特别新颖,比如用于A/B测试的老虎机算法已经存在了一段时间,对于许多公司来说,老虎机算法算是强化学习的第一步。机器学习同样也可以用来查找软件中的漏洞,有些系统会浏览代码,并寻找已知的缺陷。这些系统不一定需要能够修复代码,也不承诺找到所有潜在的问题。但是他们可以很容易地对危险的代码进行高亮显示,并且他们可以允许在大型代码库上进行开发的程序员提出诸如“还有类似这样的问题存在于其他地方吗?”之类的问题。游戏开发者也正在探索利用机器学习来降低游戏开发成本以及创造更多有趣的游戏。机器学习可以用来制作看起来更逼真的背景和场景吗?游戏开发者都知道对逼真的场景和图像进行绘制和建模又耗钱,又费时。目前,非玩家角色(NPC)所做的一切都必须明确编程。机器学习可以用来模拟NPC的行为吗?如果NPC可以学习到行为,我们可以期待更有创意的游戏玩法出现。展望未来软件开发人员的未来是什么样的?软件开发是否会同样走上麦肯锡为其他行业预测的演化路径呢?在软件开发和数据科学中所涉及的30%的工作是否会被自动化?也许,刚刚我们所谈的只是对未来某种情况的简单解读。但毫无疑问,机器学习将改变软件开发。如果未来我们现在所认为的“编程”中很大一部分被自动化了,那也没什么好惊讶的。编译器不进行机器学习,但他们通过自动生成机器代码来改变软件行业,这在未来可能并不是什么新鲜事。重要的问题是软件开发和数据科学将如何变化。一种可能性,实际上是一种事实:软件开发人员会在数据收集和准备方面投入更多精力。没有数据训练,机器学习就什么都不是。开发人员必须做的,不仅仅是收集数据; 他们必须构建数据管道,以及构建管理这些管道的基础设施,我们称之为“数据工程”。在许多情况下,这些管线本身将使用机器学习来监控和优化自己。我们可以看到训练机器学习算法成为一个独特的子专业;我们可能很快会有一个新职业-“训练工程师”,就像我们目前谈论的“数据工程师”一样。Andrew Ng在他自己的《机器学习渴望》一书时中说:“这本书的重点不是教你ML算法,而是教你如何让ML算法有效。没有编码,也没有复杂的数学。本书几乎完全侧重于模型训练过程,而不仅仅是编码,训练才是让机器学习有效工作的本质。”我们提出的想法都涉及一种能力:它使人类能够生产出更快、更可靠、更好的能够生效的产品。开发人员将能够将更多时间花在有趣且更重要的问题上,而不是把基本工作做好。那些问题可能是什么问题呢?在一篇关于智能增强的讨论里,Nicky论证了,计算机在针对一个问题寻找最佳答案上表现出色。因为计算机的本质是计算工具。但是他们不是很擅长“找到一个值得回答的有趣问题”,这件事是人类做的。那么,我们需要提出哪些重要的问题呢?这些重要的问题已经在不断的被发现了,比如我们刚刚开始认识到道德在计算中的重要性,才开始考虑更好的用户界面,包括会话界面:它们将如何运作?即使在人工智能的帮助下,我们的安全问题也不会消失。先不管安全问题怎样,我们所有的设备都在变得“聪明”。这意味着什么?我们希望它们做什么?人类不会编写尽可能多的低级代码。但是正因为他们将不会去编写那些代码,所以他们可以自由地思考代码应该做什么,以及它应该如何与人交互。需要解决的问题永远不会少。很难想象“人类不再创建软件”的未来,但很容易想象“将人纳入软件研发的循环”中在未来将占越来越多的比重。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 8, 2019 · 1 min · jiezi

数据科学家为什要用Git?怎么用?

摘要:也许你在别的地方听说过Git。也许有人告诉过你,Git只适合软件开发人员。如果你是数据科学家,那么Git其实对你很重要。本文作者希望能够通过经验分享让你了解Git的重要性,以及如何在你的数据科学工作中使用它。什么是Git?Git是一个分布式版本控制系统,用于在软件开发期间跟踪源代码的更改。看看维基百科给出的这个定义,好像Git专门是为软件开发人员而设计的。实际上,Git是当今世界上使用最广泛的现代版本控制系统,它是以分布式的协作方式为项目(开源或商业)做出了伟大的贡献。除了分布式版本控制系统之外,Git的还考虑了性能、安全性和灵活性。现在你已经了解了Git是什么,但是你脑海中的问题可能是,“如果我是做数据科学项目的人,它与我的工作有什么关系?”以前我也一样不能理解Git的重要性,直到我开始在现实工作环境中,我才发现它时如此重要!为什么是Git?我们来谈谈为什么?一年前,我决定学习Git。我在Github上分享并发布了我的代码,这是我在CERN的论文项目。虽然很难理解Git中常用的术语(git-add、commit、push、pull等),但我知道这在数据科学领域很重要,这使我的数据科学工作比以往任何时候都更加充实。所以我保持学习状态,并坚持“committing”。当我加入我目前的公司时,我在Git方面的经验就派上了用场,因为Git是跨不同团队进行代码开发和协作的主要方式。更重要的是,当你的组织遵循敏捷软件开发框架时,Git尤其有用,在该框架中,Git的分布式版本控制使整个开发工作流更加高效、快速且易于适应变化。那么什么是版本控制呢?版本控制是一个系统记录一个文件或一组文件随时间的变化,以便你以后可以调用特定的版本。比如说,你是一个数据科学家,与一个团队合作,在这个团队中你和另一个数据科学家在构建机器学习模型的时候,对同一个特征进行工作。如果你对该特征做了一些更改并上传到远程存储库,并且这些更改与主分支合并,那么你的项目现在变成了1.1版本。另一位数据科学家也对版本1.1的相同功能进行了一些更改,新的更改现在与主分支合并。模型就变成1.2版本。在任何时候,如果你的团队发现版本1.2在发布期间有一些错误,他们随时可以调用以前的版本1.1,这就是版本控制的美妙之处。作为数据科学家如何使用Git?我们已经讨论过什么是Git及其重要性。现在的问题归结为:作为数据科学家如何使用Git?作为数据科学家,你不需要成为一个Git领域的专家。关键是要理解Git技术的工作流程以及如何在日常工作中使用Git。准确地说,我在这里使用的是Git Feature Branch Workflow,它通常被开源和商业项目使用。如果你想更多地了解这里使用的术语,点击这里进行了解。Git Feature Branch WorkflowFeature Branch Workflow像一个中央存储库,master分支代表正式的项目历史记录。开发人员每次开始处理一个新特性时,都会创建一个新的分支,而不是直接提交到他们的本地主分支上。新的分支可以(也应该)推送到中央存储库。在这种情况下,可以在不修改master分支的情况下与其他开发人员共享一个该分支。在开始执行任何操作之前,请键入git remote -v以确保工作区指向要使用的远程存储库。1、从主分支开始,创建一个新分支git checkout mastergit pullgit checkout -b branch-name如果总是维护和更新主分支,则切换到本地主分支,并将最新的提交和代码提取到本地主分支。假设你希望创建一个本地分支,向代码中添加一个新功能,并稍后上传到远程存储库。一旦你将最新的代码更新到本地master分支,我们就创建并checkout出一个名为branch-name的新分支,所有的更改都将在此本地分支上进行。这意味着你本地的master分支不会受到任何影响。2、更新、添加、提交并将更改推送到远程存储库git statusgit add <your-files>git commit -m ‘your message’git push -u origin branch-name上面我们做了很多操作,让我们详细了解它。一旦发生了一些更新,就将新的操作add到本地分支,并且希望将该操作上传到远程分支,以便合并到远程主分支。git status将输出你对文件的所有更改(跟踪或未跟踪)。在使用git commit-m“your message”提交消息更改之前,你将使用git add <your files>决定要暂存哪些文件。在此阶段,你的更改仅显示在本地分支中。为了使你的更改显示在BitBucket上的远程分支中,你需要使用git push -u origin branch-name命令进行提交。此命令将该分支推送到中央存储库,并且-u表示将其添加为远程跟踪分支。在设置了跟踪分支之后,可以在没有任何参数的情况下调用git push,以自动将新的功能分支推送到BitBucket上的中央存储库。3、创建pull请求现在你已经成功地添加了一个新功能并推送到远程分支。你为自己的贡献感到骄傲,你希望在将远程分支与远程主分支合并之前得到团队成员的反馈。在该分支合并到主分支之前,让其他团队成员有机会对其进行审查。你可以在BitBucket上创建pull请求。现在,你的团队成员已经查看了你的代码,并决定在代码可以合并到主代码库-master分支之前,需要你进行一些其他更改。git statusgit add <your-files>git commit -m ‘your message’git push现在,你可以按照与之前相同的步骤进行更改、提交并最终将更新推送到中央存储库。一旦使用了git push,你的更新将自动显示在pull请求中。如果其他人已将目标更改为你所接触的同一代码,则会发生合并冲突,这在工作中很常见。你可以在这里看到如何解决合并冲突。一旦一切顺利完成,这些功能将会合并到master分支中。当我第一次开始学习Git时,我感到非常沮丧,因为我仍然没有真正理解工作流。这也是写这篇文章的主要原因之一,它真正分解并在更高层次的理解上向你解释工作流程。因为我相信,对工作流程中发生的事情有一个清晰的了解将使学习过程更加有效。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

March 25, 2019 · 1 min · jiezi

[总结]《敏捷软件开发: 原则、模式与实践》一次编程实践

编程一开始就需要明确项目的输入、输出建立一个良好的测试用例,使用测试驱动开发熟悉运行的逻辑,考虑边界条件与特殊值先确保代码能够运行,再考虑软件设计的原则需求要厘清,概念要明确,确保需求和开发一致先实现功能,再重构代码,修改变量名等图示有时是不需要的,在创建了它们而没有验证它们的代码就打算去遵循它们时,图示就是无益的最好的设计师是首先编写测试,一小步一小步前进时逐渐形成的

March 10, 2019 · 1 min · jiezi

传统软件行业与互联网行业对比

由于在传统软件行业与互联网行业都待过,所以在面试和做介绍时经常听到有人问到这两者之间有何差异,现在不妨总结一下。先来背景介绍:我所在传统软件行业主要从事军工方向信息系统设计及研发工作,在大型型号项目中作为总体或主要研发单位;互联网行业即在百度做网页搜索相关工作。互联网行业较之传统软件行业来说,1、技术氛围更加开放,更多的技术探讨和交流,思维更加活跃。在百度有各种串讲、分享、讲座和培训,大家乐意探讨技术问题,公司也鼓励transfer,这一方面应该也和百度技术人员的整体素质和水平较高有关。2、产品迭代周期快。信息系统、办公软件的发版一般都在半年以上,尤其军工系统的型号项目,经常论证设计一年、开发一年、测试保障好几年,这在互联网企业是不可想象的。互联网的发展脚步根本不可能等得了这么漫长的功能迭代和新产品研发,所以,在互联网企业业务模块基本每天都有上线,子项目的研发周期经常就是2-3天(包括开发+上线中间的所有过程)。3、技术特点上,一方面,由于所在研究所面向军工,以项目为驱动,基础构件和服务的复用程度较低,伴随大量重复开发导致效率较低,稳定性难以保证;而尤其像百度这样的大型互联网企业,深耕多年,内部技术积累深厚,各种基础库在高并发、高流量的框架内使用多年,稳定性能够得到较好的保证。另一方面,互联网企业更多的应用开源方案解决问题,创新实力和对新技术的跟踪做的也很优秀,而传统软件行业并不热衷新技术,对开源也没有多少热情。最后,大型互联网企业内部的研发流程自动化水平极高,开发、测试、运维方面有各种自动化工具辅助工作,大大提高了研发效率和线上稳定性。综上所述,其实我想说的是,开放的心态才能促使我们愿意沟通,与同事沟通,与上级沟通。开放的环境促使我们需要更加主动的推动事情的开展,同时也能够更加迅速的接收新鲜事物。不管环境是否有所变化,积极进取的心态,不断学习的要求,正确的做事方法,都是我们能够在职业道路上不断前进的保证和基石。

February 27, 2019 · 1 min · jiezi

什么是敏捷软件开发?

敏捷是一个术语,用于描述软件开发的方法,强调增量交付,团队协作,持续计划和持续学习,而不是试图在接近结束时立即交付。敏捷专注于保持流程的精益,并创建最小的可行产品(MVP),在最终结果出现之前经历多次迭代。不断收集和实施反馈,总而言之,这是一个更加动态的过程,每个人都在朝着一个目标努力。Scrum和其他领先的敏捷方法敏捷是一种思维方式,它是一套价值观和原则。敏捷是一种思考和行动的方式。敏捷就是短周期,迭代和增量交付,快速失败,获得反馈,及早向客户提供商业价值,关于人员,协作和互动。敏捷是一种关于透明度,检查和适应的心态。但是,敏捷不包含任何角色,事件或工件。这是一种心态。例如,Scrum是敏捷伞下广泛使用的框架之一,它可以帮助你变得更敏捷,但敏捷运动中有更多的框架,如看板,XP,Crystal等等,如图所示下面:ScrumScrum是一个框架,人们可以在其中解决复杂的自适应问题,同时高效且创造性地提供具有最高价值的产品。它用于管理软件项目和产品或应用程序开发。它的重点是适应性产品开发战略,其中跨职能团队作为一个单元在2-4周内达成共同目标(Sprint)。它由一系列价值,文物,角色,仪式,规则和最佳实践组成。Lean (精益)精益起源于丰田生产系统(TPS),它在20世纪50年代,60年代及以后彻底改变了实物商品的生产。精益保持其在制造业中的地位,但也在知识工作中找到了新的应用,帮助所有行业的企业消除浪费,改进流程并促进创新。软件开发是精益方法的自然应用,因为与制造业一样,它通常遵循一个确定的过程,具有一定的接受条件,并导致有形价值的传递。指导精益方法所有实践的关键概念,我们称之为精益支柱。他们是:连续的提高尊重人轻量级领导看板 (Kanban)看板是一种高度可视化的工作流管理方法,在精益团队中很受欢迎。事实上,83%的精益生产团队使用看板来可视化并积极管理产品的创建,重点是持续交付,同时不会使开发团队负担过重。与Scrum一样,看板是一个旨在帮助团队更有效地协同工作的流程。看板基于3个基本原则:可视化您今天要做的事情(工作流程):查看彼此上下文中的所有项目可以提供非常丰富的信息限制正在进行的工作量(WIP):这有助于平衡基于流的方法,因此团队无法启动并立即承诺过多的工作增强流程:当某些内容完成后,积压中的下一个最高优先级项目将被激活看板通过定义最佳的团队工作流程,促进持续协作并鼓励积极,持续的学习和改进。动态系统开发方法(DSDM)DSDM是一个由八个原则组成的框架,包括生命周期和产品,角色和职责以及几种最佳实践技术。这些支撑和支持的理念是尽早提供具有战略意义的商业利益,从而为组织提供最佳的投资回报率(ROI)。DSDM是一种优先考虑计划和质量而非功能的方法,它在一开始就修复了成本,质量和时间,并使用MoSCoW优先级排序方法,将项目分解为四种不同类型的要求:必须有(Must have)应该有(Should have)可以有(Could have)不会有(Won’t have)支持DSDM Atern的原则有八个[13]。这些原则指导团队必须采取的态度和他们必须采取的思维方式,以始终如一地提供。专注于业务需求按时交货合作绝不妥协质量从坚实的基础逐步建立起来迭代开发持续清晰地沟通表现出控制力极限编程最初由Kent Beck描述的极限编程(XP)已经成为最受欢迎和最有争议的敏捷方法之一。XP是一种快速,持续地提供高质量软件的规范方法。它旨在提高面对不断变化的客户需求的软件质量和响应能力。它促进了高客户参与度,快速反馈循环,持续测试,持续规划以及密切的团队合作,以非常频繁的间隔(通常每1-3周)提供工作软件。该方法的名称来源于传统软件工程实践的有益元素被带到“极端”水平的想法。例如,代码审查被认为是一种有益的做法。极端情况下,可以通过结对编程的实践不断检查代码。最初的XP方法基于四个简单的价值观 - 简单,沟通,反馈和勇气。它还有12个支持实践:规划游戏 (Planning Game)小版本 (Small Releases)客户验收测试 (Customer Acceptance Tests)简单的设计 (Simple Design)配对编程 (Pair Programming)测试驱动开发 (Test-Driven Development重构 (Refactoring)持续集成 (Continuous Integration)集体代码所有权 (Collective Code Ownership)编码标准 (Coding Standard)隐喻 (Metaphor)可持续发展 (Sustainable Pace)特征驱动开发(FDD)功能驱动开发(FDD)由Jeff De Luca于1997年在一家大型新加坡银行的软件开发项目中开展。它是一个迭代和增量的软件开发过程,是一种开发软件的敏捷方法。FDD将许多业界公认的最佳实践融合为一个有凝聚力的整体。这些实践是从客户端值的功能(特性)角度推动的。其主要目的是及时反复提供有形的,有效的软件。使用FDD的优势在于,由于“初期设计足够”(JEDI)的概念,它甚至可以扩展到大型团队。由于其以功能为中心的流程,它是一个很好的解决方案,可以保持对敏捷,增量和固有复杂项目的控制。它由五个基本活动组成:开发整体模型构建功能列表按功能规划按功能设计按功能构建。每个项目都有自己独特的模型,这将产生一个功能列表。最后三个活动是短迭代过程,其构建时间不超过两周。如果它需要两周以上,那么它将被分解为更小的功能。水晶 (Crystal)水晶方法是由Alistair Cockburn在20世纪90年代中期开发的一系列方法(Crystal系列)。这些方法来自Cockburn多年的学习和团队采访。Cockburn的研究表明,他采访过的团队并没有遵循正式的方法,但他们仍然提供了成功的项目。Crystal家族是Cockburn对他们所做的事情进行编目的方式,这些项目使项目成功。水晶方法主要关注:人 (people)相互作用 (Interaction)社区 (Community)技能 (Skills)人才 (Talents)通讯 (Communications)敏捷宣言“敏捷”一词是在2001年的敏捷宣言中创造的。该宣言旨在建立指导更好的软件开发方法的原则。敏捷宣言由4个重要的价值观组成。阅读敏捷宣言的方式并不是右侧的物品不再具有价值,而是敏捷运动更重视左侧的物品。那么让我们来看看敏捷宣言的第一行。这条线表明,我们重视人,他们的互动,沟通和协作,而不是拥有各种广泛的流程和工具。当然,流程和工具很有价值,但是,如果它们真正支持人们一起工作并提供优质产品,那么它们就更有价值。我们现在在很多组织中看到的是,流程和工具本身就是目标。从敏捷的角度来看,我们对此有不同的看法。流程和工具应该支持人们共同合作并为客户创造价值。敏捷宣言原则作为敏捷宣言的补充,敏捷联盟还定义了一套12项基本原则,除了敏捷宣言之外,还提供了指导和更详细的解释:我们的首要任务是通过早期和持续交付有价值的软件来满足客户。欢迎不断变化的要求,甚至是开发后期。敏捷流程利用变化来实现客户的竞争优势。经常提供工作软件,从几周到几个月,优先考虑更短的时间尺度。业务人员和开发人员必须在整个项目中每天一起工作。围绕有动力的个人建立项目。为他们提供所需的环境和支持,并相信他们能够完成工作。向开发团队内部和内部传达信息的最有效和最有效的方法是面对面交谈。工作软件是进步的主要衡量标准。敏捷过程促进可持续发展。赞助商,开发者和用户应该能够无限期地保持稳定的步伐。持续关注技术卓越和良好的设计可提高灵活性。简单性 - 最大化未完成工作量的艺术 - 至关重要。最好的架构,要求和设计来自自组织团队。团队定期反思如何变得更有效,然后相应地调整和调整其行为。摘要敏捷开发是软件开发行业的一个流行词,它是管理软件开发项目的另一种方式。它不是特定的软件开发方法,而是基于敏捷宣言中表达的价值观和原则的一套方法和实践的总称。解决方案通过自组织,跨职能团队之间的协作发展,利用适合其背景的实践。基本的Scrum閱讀Scrum和自组织团队 (Scrum and Self-Organizing Team)敏捷和Scrum - 有什么区别?在Scrum Sprint中发布的频率是如何确定的?通过3个步骤建立自组织团队The Best Free Scrum Learning Resources, Guides and Articles为什么敏捷开发是您项目的更好选择?为什么Scrum是 - 快速失败技术?8经常被误解的Scrum Master角色Scrum Events - 初学者阅读文章Scrum在3分钟内完成Scrum工件什么是Scrum工件?完成与接受标准的定义Scrum中Ready的定义是什么?如何写短距离目标?如何使用MoSCoW方法确定产品积压的优先级如何使用100点方法确定产品待办事项的优先级? ...

December 31, 2018 · 1 min · jiezi

Github Actions 介绍

本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏)。Github Actions 是 GitHub Universe 大会上发布的,被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能(“we believe we will once again revolutionize software development.”)。本文目的是向大家介绍这一 Github 全新的功能,更多内容可以查看文末的拓展阅读。什么是 Github Actions,官网的介绍是:With GitHub Actions you can automate your workflow from idea to production.还是很迷糊。不急,我们先看现在的 Github 是什么?代码仓库,一个提供了分布式版本控制和源代码管理的代码仓库。想象一下这样一种场景,你写好了一个网站的代码,并且存储到了 Github 上,但完事了吗?没有,你还需要部署代码才能让别人访问你的网站。另外,如果你修改了代码,还需要单独测试。理想的情况应该是:当你将代码提交到 master 时,测试、部署等等所有工作自动执行。之前,Travis、Pre-commit Hooks 可以帮助我们实现部分自动化,而现在有了 Github Actions,通通皆可抛。Github Actions 可以自动化和定制化项目的 Workflow,像官网显示的那样。Workflow 比较好理解,将对项目的操作概括和按顺序整理,在遇到触发条件时 Workflow 就会按照开发者事先的设置串行或并行地运行一系列 Action,这就是 Github Actions 名称的由来。上面那张图中,Action 即一个个方框,Workflow 即将 Action 连接起来的图表。触发条件有很多种,比如 push 代码到 Github,比如 assign 了一个 issue,比如创建了一个 milestone 等等,这些都是 Github 提供的事件,工作流只要监听关心的事件即可。(目前 Github 一共提供了 26 种事件,想看所有事件可以查看:https://developer.github.com/…)直观地理解了 Workflow 和 Action,下面再对 Github Actions 的核心 Action 作更深入地理解。Action 是一小段可以运行的代码,可以用来做很多事情。比如你可以设置一个自动测试的 Action,当提交代码到 Github 后,Action 便会触发自动测试;再比如你可以设置一个自动部署的 Action,当代码通过测试后直接部署到腾讯云、阿里云、Azure 上。除此以外,你还可以拿 Action 做很多事。比如当前项目是一个 NPM Package,你可以设置一个 Action 用来自动 Publish;比如你需要监听项目的 issue,所以你可以设置一个 Action,当项目中有 issue 创建,给你的微信发一条提醒;比如 minify 或 uglify 你的 JS 代码……Action 的想象空间很大,全看你的需求。目前 Github 一共发布了 450 个示例 Action,你也可以创建、分享你的 Action,别人也能搜到你的 Action。讲道理,讲完基本概念下面就要开始实操了,但 Github Acions 还处于 Beta 阶段,并没有对所有人开放,想要提前使用的可以在官网尝试申请。因为我还没拿到测试资格,所以后面有机会的话再说吧。不过已经有 Github Actions 的第一批实践者写了一篇文章关于如何设置以及如何创建一个 Action。拓展阅读:https://github.com/features/a…:官网;https://developer.github.com/…: 文档;Introducing GitHub Actions:详细介绍了如何设置 Action 和创建新的 Action;GitHub Actions: built by you, run by us:一些 Action Demo;GitHub Actions Creates a Buzz for Automated Dev Workflows:新闻报道;GitHub grabs a piece of the Actions: ‘A project that will do for software development what we did for the pull request’:新闻报道。 ...

October 22, 2018 · 1 min · jiezi