抢单软件开发原理

Rubbish software is produced when we try to do everything at once.

当我们尝试一次做所有事情时,就会产生垃圾软件。

Principles, guidelines, best practices, and rules of thumb — they all make your life easier. Without them, ten-minute tasks can turn into ten-hour tasks.

原则,准则,最佳做法和经验法则-它们都使您的生活更轻松。 没有它们,十分钟的任务可能会变成十小时的任务。

One of the absolute best pieces of advice I received from my mentor very early on in my career was this simple one-liner:

我很早就从我的导师那里得到了绝对最好的建议之一,就是这个简单的单行代码:

“Make it work, make it better, make it faster.”

“使其工作,使其更好,使其更快。”

It’s a slight alteration of Kent Beck’s famous quote, and its simplicity is enabling and puzzling.

这是肯特·贝克 ( Kent Beck)著名语录的略微改动,其简单性令人感到困惑。

“Make it work” is quite easy to wrap your head around. You have a set of requirements, and you’re coding to fulfill them — kid stuff.

“动手做”很容易使您的头脑转转。 您有一组要求,而您正在编写代码来满足它们-孩子们的东西。

“Make it better” is where the meat is. “Better” is the juicy part that you’ll spend the majority of your day achieving. Better code, better design, better approaches. But what does “better” mean? We’ll get around to that later.

“做得更好”是肉的所在。 “更好”是您一天中大部分时间都会实现的多汁部分。 更好的代码,更好的设计,更好的方法。 但是“更好”是什么意思? 我们稍后再解决。

Well, let’s be honest: You often never get around to the “make it faster” aspect of your code — at least not for every part of the software. You want to make your hot paths fast and efficient, but you’re likely in good shape, leaving paths rarely traveled. It’s not worth the effort. Simple as that.

好吧,说实话:您通常永远不会绕过代码的“使其更快”的一面-至少不是针对软件的每个部分。 您想使快速路径高效而高效,但是您的状态可能很好,几乎没有路径可走。 这不值得付出努力。 就那么简单。

Ridiculously, developers tend to focus on “make it faster” whenever they read others’ code. It’s common to read comments like “This inefficient code is horrific!” This totally neglects whether the code solves the problem on time.

荒谬的是,开发人员在阅读他人的代码时往往会专注于“使其更快”。 阅读诸如“此低效率的代码太可怕了!”之类的评论很常见。 这完全忽略了代码是否按时解决了问题。

编写垃圾代码没有任何耻辱 (There’s No Shame in Writing Trash Code)

The first step is to make it work. Plain and simple.

第一步是使其工作。 干净利落。

Making things work by violating principles of good design in a quick, hacky way is completely fine.

通过快速,hacky的方式违反良好设计的原理来使事情正常进行是完全可以的。

Dreaming up premature, elaborate up-front designs is entirely useless. Exploration is best done using a few, battle-tested techniques such as prototyping, proof of concept, simple trashy code, and throwaway code.

幻想过早的,精心设计的前期设计完全没有用。 最好使用一些经过考验的技术来完成探索,例如原型设计,概念验证,简单的垃圾代码和一次性代码。

Everything is laid out right in front of you. There are no abstractions, no magic, no “I wonder how that works.”

一切都摆在您面前。 没有抽象,没有魔术,也没有“我想知道它是如何工作的”。

What’s important, though, is to recognize this as a first step. Leaving trash behind is a surefire way of building up technical debt that’ll come back to haunt you. Experiment like a mad lad, but clean up before pushing the code.

不过,重要的是要将此视为第一步。 丢垃圾是增加技术债务的可靠方法,这些债务会再次困扰您。 像个疯子一样进行实验,但是在推送代码之前先清理一下。

让我们变得更好 (Let’s Make It Better)

Time to be real: No end-user is going to be like “Man, Google’s code is so neatly structured. That’s why I use Google search!” Users couldn’t care less about how much better your code is compared to the mess you made earlier. Users care about good experiences and how easy your software is to use — not how easy it is to modify.

成为现实的时间:没有最终用户会喜欢“伙计,Google的代码是如此整洁。 这就是为什么我使用Google搜索!” 用户可以毫不关心与您之前的混乱情况相比,您的代码有多好。 用户关心的是良好的体验以及软件的易用性,而不是修改的难易程度。

Bettering your code is nevertheless an important aspect of the overall quality of your product. The internal software quality affects your ability to pivot, detect and correct defects, and the time to release.

但是,改进代码仍然是产品整体质量的重要方面。 内部软件质量会影响您发现,纠正和纠正缺陷的能力以及发布时间。

Before moving on to making your software better, be sure to somehow validate that your software is still functioning correctly after the modifications. Put in place some sort of regression testing. Unit tests are useful, but code inspection is just as important.

在继续改进软件之前,请确保以某种方式验证修改后您的软件仍能正常运行。 进行某种回归测试。 单元测试很有用,但是代码检查同样重要。

Making your software better is not just about refactoring. Refactoring is essentially behavior preserving changes to your codebase. But making your software better is a different species, where refactoring is only a part of it.

使您的软件更好,不仅仅是重构。 重构本质上是行为,可以保留对代码库的更改 。 但是,使软件变得更好是另一回事,重构只是其中的一部分。

It’s re-architecting. Applying design patterns where applicable. Assessing if your code is SOLID. Fixing code smells and taking care of edge cases.

正在重新架构。 在适用的情况下应用设计模式。 评估您的代码是否为SOLID。 修复代码异味并注意边缘情况。

Better code is:

更好的代码是:

  1. Readable

    可读的

  2. Maintainable

    可维护的

  3. Flexible

    灵活

Strive to achieve these characteristics by applying modern practices as well as the famous SOLID and DRY principles. I won’t preach theory here, as there’s already an overwhelming number of articles on these topics. Just google the acronyms.

力求通过应用现代实践以及著名的SOLID和DRY原理来实现这些特征。 我不会在这里讲理论,因为已经有大量关于这些主题的文章。 只是谷歌的缩写。

如果我们能够解决问题,那就更快 (If We Ever Get Around to It, Make It Faster)

Not every aspect of your application or library is created equal. Not every line of code is executed at the same frequency. Don’t rush off code tuning every line.

并非您的应用程序或库的每个方面都是一样的。 并非每一行代码都以相同的频率执行。 不要急于调整每一行的代码。

What you often find is only a small part of your application is using a disproportional share of the runtime. Figure out what part it is, measure its performance, set performance goals, optimize, and measure again.

您经常发现应用程序的一小部分正在使用运行时间的不成比例的份额。 弄清楚它是什么部分,衡量其性能,设定绩效目标,优化并再次衡量。

Optimizing without a target performance is not going to end well. You might do some solid performance optimization, but if you spent a whole workday on it, it’s perhaps not worth it.

没有目标性能的优化将无法顺利完成。 您可能会进行一些可靠的性能优化,但是如果您花了整整一个工作日,可能不值得。

After you reach a certain point of performance, users’ appreciation for every millisecond shaved off is diminishing. At this point, you’re only harvesting street credit from fellow developers, which is completely pointless.

在达到特定性能点之后,用户对每减少一毫秒的赞赏就会减少。 在这一点上,您只从其他开发人员那里获得街头信贷,这是毫无意义的。

Some developers preach that you must optimize as you go. Premature optimization is just as bad as applying a design pattern prematurely.

一些开发人员鼓吹您必须随行进行优化。 过早的优化与过早地应用设计模式一样糟糕。

Instead, write the simplest code possible to begin with. Then refactor, redesign, etc. and optimize only if there’s a bottleneck.

而是编写可能最简单的代码。 然后进行重构,重新设计等,仅在存在瓶颈时进行优化。

资源资源 (Resources)

  • Code Complete 2, chapters 20 & 25 by McConnell, S.

    代码完成2 ,第20和25章,由McConnell,S.发表。

  • What Is Throw-Away Code? by The Craft of Coding

    什么是丢码? 通过编码技巧

  • The Art of Software Testing, 2nd chapter 3, by Myers, G.

    软件测试的艺术 ,第2章第3章,作者:迈尔斯(Myers),G。

  • Make It Work, Make It Right, Make It Fast by Ward Cunningham

    让它起作用,让它正确,让它快速 by Ward Cunningham

  • Seven Basic Principles of Software Engineering by Boehm, B. W.

    Boehm,BW撰写的软件工程的七个基本原理

  • The Lean Six Sigma Guide to Doing More With Less: Cut Costs, Reduce Waste, and Lower Your Overhead by George, M. O.

    精益六西格玛指南,事半功倍:降低成本,减少浪费并降低管理费用

翻译自: https://medium.com/better-programming/the-principles-of-software-development-7415e7c5a156

抢单软件开发原理


http://www.taodudu.cc/news/show-3103026.html

相关文章:

  • 一些好用的Mac软件推荐
  • 软件测试工程师应该读的书
  • 在软件工程领域,搞科研的这十年!
  • 西安软件行业闲谈
  • 软件测试就是挑Bug?也许你有认知偏差
  • 软件缺陷概述
  • 儿歌.2019
  • 日食恐慌!运营商面临严峻挑战!
  • OSChina 周二乱弹 —— 假期余额已不足!
  • 2020年中国城市地下空间市场现状分析,东部地区供需市场依旧领先「图」
  • linux can总线接收数据串口打包上传_「干货」手把手教你用Zedboard学习Linux移植和驱动开发...
  • linux can总线接收数据串口打包上传_使用Zedboard开发板学习Linux的移植及驱动开发...
  • FFMpeg4.0相关结构体和函数
  • zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发
  • 0821-NRZ和PAM4
  • linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt
  • linux SPI驱动开发
  • Linux内核驱动
  • 多传感器融合记录
  • 一文彻底讲清Linux tty子系统架构及编程实例
  • 46、linux开发笔记(主线更新)
  • 基于Linux的tty架构及UART驱动详解
  • LwESP移植到STM32F10x过程
  • Linux的tty架构及UART驱动详解
  • 基于Linux的UART驱动框架源码分析笔记
  • 超详细Uart驱动框架及编程方法
  • uart驱动框架及编程方法
  • 【技术贴】聊聊ArcGIS Runtime for Xamarin
  • 【前端问题分析】从输入 URL 到浏览器接收的过程中发生了什么事情?
  • 从输入 URL 到页面加载完成的过程中都发生了什么事情?

抢单软件开发原理_软件开发原理相关推荐

  1. 软件技术基础_软件技术(游戏软件开发)专业介绍

    软件技术(游戏软件开发)专业 核心课程 C++程序设计.Java程序设计.C#程序设计.Cocos2d-x游戏开发.Unity3D游戏开发.Android游戏开发.IOS游戏开发.游戏框架设计.游戏服 ...

  2. rp软件app流程图_如何开发app软件,流程怎样

    好的APP开发公司有哪些 手机app开发分为Android客户端开发.iOS客户端开发.Symbian客户端开发.Windows Phone和BlackBerry OS等定制开发.如果找公司做的话,和 ...

  3. 安卓app开发工具_怎么开发app软件需要多少钱?主流app开发工具盘点

    现在智能手机的快速普及让手机app在生活中越来越重要,很多企业及创业者也意识到了app的重要性,但是怎么开发app软件?有哪些主流app开发工具呢?这里就为大家分享一下如何快速开发app软件. 一.编 ...

  4. 安卓开发板烧写程序与安装软件的区别_在开发板上安装Android

    一.安装串口调试工具 开发Linux驱动程序无法像开发Android应用程序直接在Eclipse中开发,但是可以通过串口来通信.所以就需要安装串口调试工具,在这儿我们使用的串口调试工具是minicom ...

  5. 内网通不用软件改积分_软件项目为什么不能够如期交付?

    作为一个多年软件行业项目经理,发现大部分软件项目都没办法如期交付给客户.比如,我现在就职的软件公司就有至少5个项目处于延期状态.于是我私下对每个延期项目进行了调研和详细分析,发现普遍存在以下问题: 1 ...

  6. 产线数字化软件源码_软件生产线技术、开源软件声明、源码下载地址

    软件生产线技术.开源软件声明.源码下载地址 软件生产线指生产软件的软件,先利用建模工具软件用图解的形式给出应用系统的系统模型,之后自动生成应用系统可执行程序,自动完成建立应用系统的工作.它能有效提高应 ...

  7. 分类计数原理与分步计数原理_《分类计数原理与分步计数原理》优秀说课稿

    <分类计数原理与分步计数原理>优秀说课稿 一.本节内容的地位与重要性 "分类计数原理与分步计数原理"是<高中数学>一节独特内容.这一节课与排列.组合的基本概 ...

  8. 3d游戏开发相关概念_游戏开发概念

    3d游戏开发相关概念 Game development is one of the most exciting fields of computer science and a major part ...

  9. v-model双向绑定原理_【Vue原理】VModel 白话版

    ↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,为了方便大家理解,分为了白话版和 源码版,白话版让大家可以轻松理解工作原理,源码版让大家更清楚内部操作和 Vu ...

最新文章

  1. 洛谷P4501/loj#2529 [ZJOI2018]胖(ST表+二分)
  2. Python基本数据类型(三)
  3. Kubernetes天生对多云策略的支持
  4. synchronized锁
  5. RTX5 | 消息队列02 - 放入与取出消息
  6. No such file or dirctionary:/ufeff.....关于ufeff错误的解决办法
  7. (转)shiro权限框架详解03-shiro介绍
  8. [fastjson] - fastjson中 JSONObject 和 JSONArray
  9. TypeScript:运算符
  10. 服务器cp所以型号,云服务器cp
  11. linux系统的课程实践,“Linux操作系统与应用”课程教学与实践
  12. Android 12 原生播放器的编解码 Codec 2
  13. 谷歌邮箱登录服务器设置
  14. JSP中文显示乱码解决方案
  15. 通过PS营造艺术的碎片效果人像
  16. 关于Android studio在ubuntu中真机测试运行出现Gradle build daemon disappeared unexpectedly的一个原因及解决办法
  17. Java 两个日期间的天数计算
  18. syslinux和grub引导linux,syslinux引导GRUB4DOS
  19. Linux Qt cannot find -lGL
  20. 云计算入门必备的60条术语

热门文章

  1. raid0两块硬盘损坏数据恢复过程
  2. Android 10.0 SystemUI下拉状态栏UI定制化开发系列(一)
  3. linux【网络】网络请求延迟变大了,我该怎么办?
  4. 数据结构与算法_c#_猎豹网校
  5. hiho一下 第三周---KMP算法
  6. 【iMessage苹果家庭推源码】软件安装Stomp协定的配置使用IMAP协议接收邮件
  7. 阿里巴巴心石:面向5G优酷正在做三件事
  8. 【JavaScript】回调地狱、Promise
  9. 中科大研究人工智能怎么样
  10. Mybatis框架Result Maps解析