Perl 6个小东西#15:关于Perl Weekly Challenge no。的简短答案的长话。 1个
如何在开发和维护应用程序时节省时间
Jangan Sia-siakan Kesempatan Ini:Kamu Harus Belajar编码!
测试Custom React Hooks的另一种方法
在Windows 10中为Go-Lang配置开发环境
在Node.js中无需cURL调用即可发布大型JSON数据
2016年接近移动开发,第2部分:五个流行框架
2016年接近移动开发,第2部分:五个流行框架

在 2016年如何进行移动开发的 第1部分 中,我们直接比较了本地移动开发和跨平台移动开发,并强调了混合方法在某些情况下可以作为提供无缝移动体验的解决方案。 在第二部分中,我们将评估在需要跨平台开发时可能使用的一些流行框架,以帮助您找到最适合您的项目的框架。 ( 本文首次出现在Graph.uk上 ) 跨平台框架 PhoneGap,Xamarin,Unity,Qt和Appcelerator Titanium是目前占所有跨平台移动开发80%的框架。 (请阅读表的原始文章,其中列出了每种工具的主要特征。) 电话间隙 通过PhoneGap,可以使用行业标准的Web技术(HTML5,JavaScript和CSS3)开发移动应用程序。 结果,它迅速成为最流行的跨平台框架,因为它避免了使用本机编程语言(Android的Java,iOS的Objective-C和Windows Phone的C#)的需求。 PhoneGap的工作方式 使用PhoneGap开发的应用程序被构造为一个完全本机的应用程序,HTML和JavaScript组件作为一个或多个WebView嵌入其中。 这些WebView只是瘦容器,可以使用Web技术呈现简单的用户界面,并处理与基础设备的通信-发送消息,打开摄像头等。 可以将其他功能编写为插件,然后从WebView调用。 PhoneGap提供了基于云的服务(称为“ Build”),可以针对每个平台编译应用程序,而无需为每个平台安装软件开发套件(SDK)。 PhoneGap可用于构建两种类型的应用程序。 Web Hybrid:在不需要本机UI元素时使用,这样,整个应用程序将在一个WebView中 本机混合:当您确实需要本机UI元素时使用,这样应用程序可以在本机容器中包含多个WebView 优点 通过简单的API,已经使用HTML,CSS和JavaScript的开发人员发现使用PhoneGap进行开发非常容易。 任何已经写成网页的内容都可以快速打包到移动应用程序中,从而使其成为小型应用程序和原型的有用工具。 插件允许功能访问本地设备API 支持所有移动平台&endash; 无需安装本地SDK,因为基于云的“构建”服务可轻松完成。 缺点 使用嵌入式浏览器呈现用户界面。 与本机应用程序相比,这会产生较差的响应。 嵌入式浏览器在不同设备上的行为不同,因此应用程序的用户界面也有所不同。 现有的PhoneGap插件通常已过时,因此扩展应用程序意味着编写自己的插件。 为了充分利用PhoneGap,开发人员确实应该了解每种平台的编码语言。 Xamarin Xamarin是第二受欢迎的跨平台框架。 为企业设计的应用程序是使用单个共享的C#代码库开发的。 然后将其编译为Android,iOS和Windows Phone上的真正本机应用程序。 Xamarin如何运作 使用Xamarin时,开发人员将应用程序的代码分为两部分:“核心”和“用户界面”。 “核心”部分由数据存储,业务逻辑代码和不属于用户界面的其余代码组成。 开发人员只需编写一次该代码,即可在所有平台上重复使用。 在“用户界面”部分,开发人员将使用C#编写底层代码,并使用本机UI设计工具提供特定于每个平台的不同用户界面层。 优点 AC#开发人员可以创建具有本地UI元素外观和感觉的本机Android和iOS应用程序。 您无需了解Java或Objective-C即可创建最终版本 由于Xamarin基于’Mono’框架,因此您可以使用.NET堆栈 它与不断增长的社区联系在一起 开发人员可以使用TestCloud自动测试其应用程序。 缺点 […]

在这样的时代,我们是否应该质疑自己的贪婪?
在这样的时代,我们是否应该质疑自己的贪婪?

在美国乃至世界上,这个话题最令我印象深刻。 正如著名作家唐纳德·罗斯伯格(Donald Rothberg)所说:“没有任何东西应该属于别人”。 去年,我开始了向西班牙的迁移过程。 我这次旅行的行李限额是一个托运行李和两个个人物品(我选择不支付额外的行李费并尝试容纳)。 当我开始收拾东西时,焦虑开始出现,我看到的东西数量和我所拥有的空间,这些东西都无法容纳。当我开始思考背后的故事时,人们开始对每件事物产生个人依恋每个小物件。 此举是暂时的,但计划是长期或确定的停留时间,因此,任何滞留的东西都会长期或永久地存放在仓库中。 因此,当我看到人们在德克萨斯州以及世界上许多贫困国家所面临的灾难时,这种说法又让我感到困扰。 转化贪婪有许多应用,但是,我在本文中的重点是深入了解由于我们自己的恐惧而开始变成贪婪的欲望。 恐惧变成了我们不需要的财产的掌握或ho积。 就个人而言,由于去年的经验,我决定重新评估我购买的商品和拥有的商品。 我必须承认,这是一个内在工作的过程,学会放开事物及其故事,知道并接受没有它们我们会没事的。 想象一下,如果我们作为一个社会改变了我们对事物所有权的行为方式,如果不依恋是一种生活习惯,而人们只有他们所需要的东西。 我写这篇文章时想到的一件事是,如果社会这样想,那么存储业务将会发生什么? 根据下面的文章,有9.5%的美国家庭租用存储单元,在美国大约有1.246亿个家庭,即约有1180万个家庭租用存储单元。 美国自存储行业统计

厂商学院…。第1周
厂商学院…。第1周

哇!!!! 在制造者学院学习的第一周后,我将在星期二写这篇文章,我会早点完成它,但是我在编码,进食,睡觉和梦想rspec测试之间没有机会。 不出所料,我的第一周在精神上和身体上都对系统产生了冲击。 我知道这将是完整的,但是我不确定如何处理这种密集的教育形式,事实证明,由于在很短的时间里吸收了很多知识和学习了很多东西,这让我筋疲力尽时间真的可以带走你。 上周向我们介绍了制造商学院如何运作的两个主要基石……测试驱动开发(TDD)和结对编程。 到目前为止,我发现后者非常有益,可以使您的合作伙伴不断思考,并不断处理新的代码库,这是一种绝佳的学习方法。 另一方面,TDD是一个艰苦的工作,并且是为所有同类人群提供的一种全新的工作方式,即使是最先进的同学也在挣扎中,这令人耳目一新! 我发现了令人惊讶的事情,是在本周结束时,当我关闭笔记本电脑时,我感到完全不知所措,并且我的大脑绝对发呆了,但是在星期六下午打开笔记本电脑时,我为自己吸收的知识而感到惊讶。 到周日结束时,我为周末工作做好了准备,尽管还没有完成,但我觉得自己已经巩固了本周学到的许多概念。 我们经常被告知,完成每一个挑战并不是那么重要,而是要吸收信息并开发新技能,而不是为了完成工作而奋斗。 最初,我承认我担心与某些事情相比我在某些事情上“落后”,但是在第一周之后,我已经动摇了这种想法,并且只关心我在哪里成为开发Web开发人员的疯狂旅程。三个月。 我们出色的教练告诉我们每天问自己:“我是昨天比昨天更好的开发者吗?”……可以肯定地说,到下午我比早晨醒来的时候还是更好的开发者。 第二周的角色!

针对(新的和以前的)Bootcamp学生的6个新年决议
针对(新的和以前的)Bootcamp学生的6个新年决议

无论您是刚刚开始学习编码,还是正在参加编码训练营,还是正在从事软件开发人员的工作,保持挑战自我以了解更多信息都是很重要的。 我本人就职于Flatiron学校之后,在这里担任工程团队的工作,最近刚开始担任讲师,我一直在思考我自己对新的一年的目标,以及可以为学生提供的建议。 以下是2017年的一些简单解决方案,可以重新开始新的一年,并不断提高您的编码研究和职业水平。 1.每月写一篇博客文章。 作为开发人员,我们依赖的许多软件都是开源的,这要归功于其他勤奋的开发人员的努力,他们将业余时间用于构建出色的东西。 为什么不通过从事开源项目来回报? 贡献可以是任何问题,包括评论问题,修复错误或仅提交具有其他测试的拉取请求。 在GitHub个人资料上获得更多使用不同代码库的机会并提交更多提交也不会受到伤害。 这是一个 很好的关于开源入门的文章 。 5.寻找一名导师。 如果您确实想将自己的技术能力提高到一个新的水平,请尝试寻找一位可以帮助您专注于提高技能的导师。 作为学生,请向您的老师寻求指导。 作为开发人员,导师可以是您团队中比您更高级的人,或者您可以在公司之外浏览。 甚至可以分享经验的同龄人也可以帮助您设定目标并制定实现目标的策略。 在线学习? 您仍然可以 在远程教室中 找到 社区 ! 6.刚开始。 也许您在开始第一个编程课程或放入Bootcamp应用程序时遇到了麻烦。 也许您已经是一名开发人员,并且您的代码库中充斥着注释的待办事项,而您和您的团队似乎从来没有这样做过-尝试在业余时间解决一个问题。 无论是什么,您在编写代码时都会推迟……只需开始! 在我们的在线校园中 试用Flatiron的免费 Bootcamp预备课程 ,或者立即开始您的应用程序到我们的 Online Web Developer 和 NYC Web Developer Programs ! 新的一年是新起点的时候。 考虑到这些解决方案,我为学习,成长和编码的又一个美好的一年做好了准备,我希望您也是如此! 该帖子最初出现在“ 课程报告”中 。

马来西亚的技术和数字专业人员能赚多少钱?
马来西亚的技术和数字专业人员能赚多少钱?

对于在职的马来西亚成年人来说,2017年将是有趣的一年。 我们生活的世界越来越数字化。 人们在早上刷牙之前醒来的第一件事就是手机。 闹钟,Facebook通知,Whatsapp消息…清单继续。 说到这,我想知道现在闹钟的销售情况如何… 如今,您能想到的几乎每个行业都在创新其现有业务模型,以适应快速变化的数字世界。 真的不再是什么时候的问题了……而是如何。 这一变革浪潮激发了NEXT Academy的核心使命,使一百万个人拥有技术和数字行业的技能,建立了伟大的公司或在其职业生涯中蒸蒸日上。 使世界成为一个更美好的生活场所。 但是,在所有关于学习数字/编码/技术技能的讨论中,您可能会想到的一件事是,这些行业中的人们实际赚多少钱? 在NEXT Academy,我们已经完成了研究。 我们在网上和线下搜寻可靠的资源(无论高低),都发现了一些非常惊人的结果…… 就本文而言,我们将仅关注马来西亚的薪水。 例如,在像美国这样的较发达国家中,这个数字可能要高得多。 技术专业人员能赚多少钱? 1)网站开发人员 根据著名的薪资比较网站PayScale.com的数据,初级网络开发人员的平均月收入约为3,500令吉。 该样本是在具有不同年限(主要是初级,因为这是一个相对较新的行业)的开发人员中进行的。 我们还注意到,大多数受访者都精通PHP作为他们的后端技术栈。 Ruby开发人员呢? (顺便说一下,我们在NEXT Academy的Full-Stack Web Development Bootcamp上教授Ruby on Rails)。 您可能已经知道,马来西亚的许多科技创业公司都使用Ruby on Rails构建平台。 示例:SAYS.com,Groupon Malaysia和KFit等。 我们对Quora进行了一些挖掘,发现了一些智慧的金块。 这就是VapeClubMY的创始人Jeremy Ong(他刚好也熟悉Ruby on Rails)不得不对Ruby Developers说:“ 如果您在风险投资支持的科技初创公司工作,则价格在35,000令吉至5,000令吉之间不等。表现如何(创建值得生产的应用)。” 实际上,这是一个非常有希望的趋势,因为大多数Ruby开发人员都没有从传统的大学学位中获得技能。 那有经验的Ruby Developers呢? 这是我们在马来西亚Ruby Brigade受欢迎的Ruby Developer社区小组中发现的: 有趣的事实:SushiVid由NEXT学院的两名毕业生创办。 2)iOS移动开发人员 根据Payscale.com,移动应用程序开发人员的平均薪水相对较高,每年达57,275马币 。 如果您有兴趣开发移动应用程序,这对您来说是个好消息。 我们深入研究了马来西亚一些最热门的技术工作门户,以找出人们愿意为iOS移动开发者支付的费用。 这是我们发现的内容: 一家医疗保健创业公司GetDoc一直在寻找iOS开发人员来构建他们的移动平台。 […]

再次制作#TBT BASIC
再次制作#TBT BASIC

我承认:我对怀旧情有独钟。 从我的唱片黑胶唱片到我最近对世嘉创世纪(Sega Genesis)的痴迷-愤怒的街道,有人吗? —我可以从“过时的”技术中获得与从浮华的新技术中获得的喜悦一样多的乐趣。 在周四的Throwback上,我回顾了自己的编码器背景知识-尤其是我对Visual Basic的经验。 拥有超过15年的呼吸空间,以及不断增长的新编码经验,我以好奇心,崭新的视角和更多的怀旧感来探寻这些记忆。 以下是一些要点: Visual Basic基础 我在高中时花了两个学期的“计算机编程入门”学期。 该课程的重点是Visual Basic 6.0(Microsoft的编程语言和集成开发环境(IDE)),该语言在1998年至2008年间一直处于活动和受支持状态。早期版本在1991年至1998年之间发布。 深入研究Visual Basic,我现在了解到它是由Microsoft设计的,适合初学者使用。 它将两个工具集组合到一个IDE中: 拖放式图形用户界面(GUI)或表单生成器( 琐事:这种表单生成器技术曾经的代号为“ Ruby”-无关! ) BASIC,一种旨在更加“易于阅读”的编程语言。此代码为与表单上的组件相关的任何事件(例如提交,单击,按键等)提供逻辑。 追捕W 本周在Flatiron学校,Web开发团队处于项目模式,因为我们都创建了Ruby on Rails Web应用程序。 随着各个部分的融合,MVP魔术开始闪闪发光,我对我在Visual Basic中的“最终项目”(一种名为“狩猎吸血鬼”的游戏)记忆犹新。 班上每位学生使用的“追捕W”的概念涉及迷宫中的弓箭手(玩家)。 弓箭手可以移动并可以射箭。 他/她可以拿起黄色或蓝色的钥匙,使您可以穿过随机放置的黄色或蓝色的门。 您可以通过将箭头射入相邻的“房间”来获胜。如果您掉入深坑,不正确地发射箭头或进入Wumpus隐藏的房间,则会输掉您。 也有蝙蝠将您传送到一个随机的房间-可能直接进入一个坑或Wumpus! 我认为该项目(从2003年开始!)早已不复存在-或至少埋在旧的备份驱动器上的某个位置。 但是搜索“ Wumpus”后发现该文件夹深藏在我硬盘上的Homework文件夹中。 好极了! 不幸的是,我使用的是macOS,并且没有安装有(需要许可证!)Visual Basic 6.0软件的PC。 因此,尽管我无法运行程序甚至看不到表单,但可以看到我编写的用于控制这些表单和处理动作的代码。 这是我发现有趣的几件事: 命名约定#FTW! 我很努力地遵循表单对象的命名约定,使我感到惊喜。img,shp,frm等。我还觉得表单元素定位语法非常直观而且不错。 #在Private Sub Form_Load()中 新游戏 imgCompass.Top = shpWest.Top + shpWest.Height +(((frmGameDisplay.Height)-(shpWest.Top […]

我们如何在快速成长的初创企业中建立质量检查团队
我们如何在快速成长的初创企业中建立质量检查团队

我一生都是测试人员,尽管我并不十分了解。 仅两年前,我选择了它作为我的职业。 我一直很喜欢观察事物的工作方式,并观察它们在什么情况下起作用和破裂。 有一次,我决定与人们一起探索这个问题,并获得了心理学硕士学位。 经过几年的咨询,我决定转行从事职业,并加入了Slido,在那里确保各种事物的质量很快成为我的工作。 两年前,Slido还没有指定的测试人员。 不是说它不需要一个。 开发人员大量精力被用于查找和修复错误,并且发布被延迟。 尽管如此,该公司仍在快速发展,因此构建质量保证平台是不可避免的。 这项任务已分配给我。 我知道作为一个团队,我们想要实现的不仅仅是建立测试人员的席位。 我意识到,质量保证不仅限于发现产品中的错误。 您可以在许多领域提高质量。 似乎一个好的开始是看我们当时面临的最大挑战。 仅举几例,我们想: 降低将关键错误发布到生产中的风险 缩短开始冲刺和发布最终功能之间的时间 找出客户最迫切的问题,并找到跟踪他们的好方法 最后, 推动产品前进 ,争取获得最佳质量 这是我如何应对这些挑战的故事。 当我说“我”时,我的意思是我和我们团队中的其他人,自从Slido以来,我们始终应对挑战并共同找到最佳解决方案。 Slido的性质非常特殊。 如果您是活动的组织者,则不必每天使用Slido。 通常,您将其打开两次。 第一次-事件发生前一个月,一周或一天。 然后在活动即将开始前7分钟左右将其打开。 如果某事不起作用,您的血压将高涨。 您立即单击绿色的“与我们聊天”按钮,或给我们打个电话,想知道上周一切正常,现在不是吗? 我们都知道发生了什么。 新版本已经发布。 但是客户的事件受到了威胁,在这么短的时间内做不到的事情很多。 即使是我们热线服务电话团队中的杰出人士,也都会流血,以免客户因仿制而发生的事件。 这是我需要防止的第一件事。 当时显而易见的解决方案是在每个发行版上盲目地测试所有甚至是无关的功能,以确保没有任何故障。 不需要花费太多时间就可以意识到这是缓慢而无效的。 作为一家公司,我们希望快速发展,但是当您快速发展时,您会遇到麻烦。 我们只是无力与客户合作。 如果某个小时不能正常工作,则可能是关键时刻,正好是他们的事件发生之时。 我决定创建一个必须在100%的时间内都可以使用的关键功能的列表。 我会在发布之前和发布之后(只是为了确保)检查它们。 当时,我不知道这被称为健全性检查。 但这是理智的事情。 我发现这很困难,但这是我的方法。 这样,我可以确定,即使我的手指滑了一些东西,也不会给我们的客户带来风险。 但是,手动浏览关键功能仍然不是最有效的方法。 它也很慢,很无聊,而且产品越大,更多的功能被认为是关键功能。 对于那种工作量,我知道我需要更多的同事。 我最终做到了,但是我们仍然需要使我们的开发更加受测试驱动。 这就是为什么我们的开发人员在冲刺中为每个新功能编写单元测试的原因。 对于我而言,我编写了涵盖最关键的关键功能的端到端测试。 即使将风险降至最低,也无法百分百确定发布之前的安全性。 那是现实。 您就是不知道不知道什么。 […]

面向服务的架构和Docker开发中
面向服务的架构和Docker开发中

我们的团队写了几次关于我们向Docker过渡的文章。 一年前,我们从笨拙的配置工具(即Salt)管理的系统迁移到了Docker,我们很喜欢它。 我们的系统由几种服务组成。 在开发中,通常情况是您要运行整个系统,有时只想运行其中的一部分。 诸如核心API之类的东西总是存在依赖性,但是通常情况下它们应该是自包含的。 该系统设计的一个方面对我们来说,在使用Docker进行开发时一直存在问题。 我们如何在保持所需的关注点分离水平的同时轻松地运行系统? Docker Compose。 将每个服务都带有自己的docker-compose.yml文件运送到系统中似乎是一个自然而明智的步骤,而这正是我们所做的。 但是,采用这种方法时,docker-compose的工作方式会带来一个小问题。 从仓库运行docker-compose时,它将读取您的配置文件并启动您已定义的服务。 但是等等,这个依赖的其他服务在另一个仓库中! 复制服务 😁 您无需阅读本段即可知道这是一个糟糕的主意。 不要重复任何事情,尤其是配置。 假设您有10个都至少需要API服务的服务,那么您将定义10个api服务实例。 当您不可避免地调整如何将api配置为由docker-compose运行时,这变得非常痛苦。 就是说,当您入门时,这当然是最容易的事情。 这是实践中的示例。 如您所见,这很快就失去了控制,这只是一个简单的示例,其中包含两种服务。 作曲 🙈 我们很快就回到了开发人员开始的地方。 受信任的bash脚本。 我们知道我们不想跨多个存储库定义我们的API服务,但是我们还需要运行该服务,以便其他服务可以启动。 我们接下来尝试的也是使用docker-compose的-f选项,以允许我们将每个服务的docker-compose.yml文件合并为一个配置。 每个服务都以一个名为run.sh的bash脚本结尾,该脚本提供了用于运行将处理docker-compose.yml文件组成的服务的标准接口。 run.sh看起来像这样 乍看之下,这并没有很多错误。 这种方法使我们能够独立运行每个服务,它在我们所有服务中都是一致的,最重要的是它可以正常工作。 至少一会儿。 我们发现组合docker-compose文件的顺序很重要。 对于我们来说,这是一个交易突破点,因为我们添加了一项新服务,该服务也需要首先添加。 还感觉像docker-compose不太热衷于以这种方式运行事物。 Docker-compose为您的所有服务加上当前目录的名称前缀,从不同目录启动容器显然会根据运行run.sh脚本的位置更改这些前缀。 因此,虽然感觉您最终获得了API服务的“单个”实例,但实际上您只是避免了复制服务定义并要求docker-compose在读取时进行操作。 进入Docker网络🙌 在开发中围绕基础结构开发工作流时,必须考虑的一件事是,这些工作流不是由机器管理的,而是由人使用的。 您团队中的每个工程师都有自己喜欢的工作方式。 例如,我使用vim + tmux。 我在tmux中为每个服务都有一个会话,然后每个会话都有多个窗格。 运行service-x时,我喜欢去该会话并从那里运行它。 这对我来说合乎逻辑,并且适合我的肌肉记忆。 我们FE团队的工程师的工作方式完全不同,他们更喜欢从一个地方启动系统,实际上通常只关心单个服务。 试图适应所有这些用例很困难,但这确实很重要。 这就是促使我寻求更好解决方案的原因。 我开始狩猎时要牢记3个明确的目标。 我们需要一个可以扩展的解决方案,但目前尚无法解决问题。 它需要强大。 我们不想要那种感觉像是另一种变通办法的东西。 它需要与我们现有的工作流程一起使用。 […]

SOLID:软件不会出现“拾音棒”
SOLID:软件不会出现“拾音棒”

还记得那个拾起棒游戏吗? 要坚持下去,您必须非常小心。 但是,即使在世界上一切谨慎的情况下,也可能会移动另一根棍子,在最坏的情况下,一切都可能崩溃。 有时,软件开发似乎是这样。 即使有注意和知识,您也必须更改一部分代码,然后破坏另一部分代码。 一个错误的动作会炸毁东西。 这些事情是由于高度耦合而发生的。 降低耦合程度和增加内聚力的现有方法之一是使用SOLID原理。 我正在研究这些原理及其在各种面向对象编程(OOP)语言中的应用。 您可以在我的GitHub帐户中找到我的演示项目。 该练习考虑了从阿拉伯数字到基数的转换。 它们已应用于C#,Java和Swift项目。 我的意图是使用.NET Core Go创建其他演示项目。 和科特林(我仍然必须学习)。 首先,让我们看看它的含义。 Robert C. Martin在2000年代初定义了一些原则来管理代码中的依赖项。 但是,Michael Feathers引入了SOLID的缩写。 单一责任原则(SRP) “ 一个班级应该有一个改变的理由 ” 这里实现了一种凝聚力,但不仅如此。 您不必只给出明确和明确定义的职责和目的,每个班级都只需承担一个职责。 在这种情况下,责任就是改变的理由。 这非常重要,因为您可以使代码保持整洁,可读和易懂。 这导致较低的复杂性和强大的凝聚力。 开放封闭原则(OCP) “ 应该打开软件实体进行扩展,但是关闭软件实体进行修改 ” 一旦班级承担了各自的职责,就完成了。 除非有错误,否则您将无法再进行修改。 因此,如果您需要更多的要求或功能,则可以从该类扩展。 有两个建议可以实现该原则:迈尔(Meyer)和多态。 Meyer说,如果您有错误,则可以在类中进行更改。 但是,如果需要更改新功能,则必须是一个继承自旧类的新类(使用虚拟方法)。 在Polymorphic中,我们不必从特定的实现继承,我们可以从抽象的基类继承。 如果选择多态方式,则必须很好地记录该类的建议。 这个原理也可以应用于模块和库。 这很重要,因为您可以降低破坏现有功能的风险。 您无需更改代码,因此不会破坏代码。 里斯科夫替代原理(LSP) “ 令q(x)是关于类型T的对象x的一个可证明的性质。那么q(y)应该是对于类型S的对象(其中S是T的子类型)可证明的 ” 换句话说,基本类型必须可以替代其子类型。 这项原则由Barbara Liskov(谁经营世界?女孩!)定义,并与OCP同行。 这是一个复杂的原理,涉及一些行为条件,例如“不能在子类型中增强先决条件”,“不能在子类型中弱化后置条件”等行为条件,因此值得单独描述。 这些条件用于“按合同设计”方法中,并且再次有助于去耦。 […]

技术债务是进步的标志
技术债务是进步的标志

技术债务是所有软件项目中的副产品,您无法避免,如果您认为您的项目没有这种债务,那么您看起来就没有足够的努力。 在线快速粗略搜索将得出Wikipedia的术语定义:“技术债务(也称为设计债务或代码债务)是编程中的一个概念,反映了易于在代码中实现的代码产生的额外开发工作。使用短期方法而不是应用最佳的整体解决方案” 在现实世界中,您积累债务是因为需要前进。 您需要一辆车,研究您的融资方式,选择适合您情况的最佳方案,获得租约,并在一些金融机构积累了债务。 另一种选择是在未来10年内工作,省钱并用现金购买汽车,但这对您来说可能不是一个现实的选择,届时您可能会失去任何可用的机会。 技术债务不一定坏 没错,您无法避免,因为软件开发行业需要快速解决方案,并且不能容忍10年才能构建Web应用程序。 在项目的每个步骤中,您都必须决定要在何处投资。 如果您正在努力实现汗水公平,那么您的时间将比金钱更为有限。 您基于债务的决策几乎总是围绕利息和投资回收率。 您的软件设计和代码决策也是如此。 有些决定的利率很小,而另一些则可能会令人崩溃。 这个想法是负责任地管理您的债务。 例如,如果您选择了错误的数据库技术,那么您将面临严重的问题和重大的重构。 无论您是实施存储库模式还是其他数据访问层模式。 对于您的编码项目,没有完美的解决方案,您将想出的每一个解决方案都有缺点,并且与之相关的债务,无论您是否提前知道,都是在这里发挥作用的。 那是因为您无法预测您的业务或应用在功能方面的需求,甚至无法连续工作6个月。 项目计划是该死的,它们将在您执行它们时更改。 敏捷无济于事 敏捷方法作为对巨额债务的一种回应而兴起,经常迭代的概念是处理此问题的一种方法。 即:使用您的信用卡进行购买并付款,然后再使用另一张信用卡累积利息,直到有了现金为止。 建筑设计也开始尝试减少人们的兴趣。 微服务的兴起就是一个很好的例子,将您的应用程序分为一系列单独维护的小型独立应用程序。 当然,此示例提出了其他问题,您可以通过搜索微服务来识别。 最后一个示例类似于在许多不同的信用卡上积累一点债务,并可以选择在您认为合适的情况下还一张一张。 您可以立即看到这种设计策略的优缺点。 您采取的任何主动控制技术债务的策略都将有所帮助,您可以采取的最重要措施是始终牢记这一点,并使债务负担分析成为每天工作的一部分。 如何避免技术债务 对不起,你不能! 但是您可以负责任地进行管理。 尝试避免个人生活中的债务,看看能走多远。 可能但不可行。 为了查看项目的进度,您将不得不在某些时候积累债务。 您将不得不做出并非最佳的设计决策,或者您知道必须进行更改。 最终将不得不偿还这笔债务,而且可能还需要数年时间才能偿还,到那时,您可能有资源来为此做些事情。 您可以跟踪债务,而不是在TODO注释中,而是以结构化格式。 如果您看到这种类型的评论,则说明存在问题: “ // TODO:2017年1月1日-OMG必须解决此问题,这确实很糟糕” 如何偿还技术债务 我运行了许多软件项目。处理债务的方式是在我们的问题管理系统中创建一个称为技术债务的问题类型。 每当我或我的一个开发人员注意到潜在的债务或积极创建债务时,我们都会将其记录为问题,以后再处理。 每个季度,我们都会安排一个冲刺,我亲切地称其为GOST,就像“让我们在一起”。 在此sprint中,我们将选择一些需要偿还的技术债务问题,有时由于其复杂性,这仅仅是一项任务。 要记住的重要部分是,偿还债务需要经常执行。 我希望我能告诉您多少才是正确的债务,但是这种类型的测量高度取决于项目,您的经济状况,您的市场以及您所承受的市场压力。 负责任地承担债务 至少在现实中您不能避免,但是您可以对此负责,并且可以通过权衡选择权和做出明智的决定来做出利息较少的债务决策。 如果您很懒惰,甚至根本没有考虑过,那么没有什么可以帮助您的,因为一个懒惰的人会付出两倍的努力。 不要想到完全不用偿还债务。 最终,一场完美的风暴将到来,您将没有足够的资源来度过难关。 您应该有一个付款计划,以负责任的方式逐步减少债务负担。