【译】编程不容易

banner

编程不是...

编程不是操做键盘快速敲打。编程不是牢记键盘的快捷键并使用退化了的鼠标工做。若是首要考虑,编程并非要学习每种编程语言。不能经过电脑的品牌、价格、性能和操做系统来决定一个程序员是否优秀,也不能经过他们对代码编辑器和IDEs--VS-CodeAtomIntelliJ IDEAVimNotepad++等的偏心来决定。与许多好莱坞电影潮流的观念相反,编程毫不等同黑客攻击git

此外,编程不只仅是要记忆编程语言的语法和内置功能。逻辑、条件、if语句和算法不能描绘出编程的蓝图。数学、递归、计算机科学和设计模式也不能。虽然它们是编程的重要组成部分,可是它们也仅仅是编程的一部分。程序员

设计和规划

在编写代码以前,咱们要对项目的设计和体系结构进行了全面的规划,以确保一个平稳的开发周期或者增长平稳开发周期的可能性。这时候,软件设计就派上用场了。工具链、pipelines、公共和内部API的抽象层、模块化、对象关系和数据库结构都在这个开发阶段进行了规划。github

咱们与调试器共存

编程艺术要求咱们跳出条条框框的限制来思考,用最实用,有效且可行的解决方案解决问题。这可能就是为何咱们被说是宅家的"I.T.guy"或"客户支持"的缘由了。实际上,咱们的工做是查漏补缺。这好像说“编程”对“解决问题”的一种美化方式。web

换言之,计算机内外都有方便咱们的调节器,所以,咱们意识到如何阅读和编写文档很重要。正确的文档-它以详细文档的实际页面的形式出现,或者像在代码库中散布有价值的评论同样简单-这做为程序员最重要的生命线之一。没有它,咱们会在黑暗中迷失,没法履行咱们做为调试器的职责。不多甚至没有进展,由于咱们大部分时间都花在实验和调查框架或者了解遗留代码库如何工做。总之,这将致使很是糟糕的开发人员体验算法

考虑到全部可能的场景

调试已经够困难了。更糟糕的是,代码的执行一般不是线性的。因为具备if语句的程序逻辑,大型项目意味着可能执行路径的多个“分支”。咱们必须考虑每种可能的场景和错误,特别是涉及用户输入。跟踪每一个可执行路径所需的认知负荷使编程变得更加困难。数据库

用户体验

走出开发的世界,咱们进入一个普通用户的角色。除了提供功能,添加新功能,修补错误和记录咱们的代码库以外,咱们还关注普通用户如何与咱们的应用或软件进行交互。咱们思考能带来良好用户体验的多种因素,例如(但不限于)可访问性,可用性,用户友好性和可发现性,UI设计,颜色主题,功能动画和性能。编程

性能和优化

说到这点,性能自己就是编程的一个很重要的方面。咱们,特别是那些具备计算机科学背景的人,努力使用和编写最节省时间和空间的算法。咱们着迷于微不足道的微妙时间尺度,以便充分利用咱们可用的内存,CPU和GPU。vim

在web开发的背景下,网络优化是一个须要掌握的重要概念。咱们很努力地来减小和压缩咱们的HTML,CSS和JavaScript,以减轻来自服务器响应的有效负载。图像和其它杂项资源也被压缩和延迟下载,以最小化用户在页面可用以前须要下载的数据量。设计模式

可是,有时咱们会过于沉迷于性能。当咱们没必要要地专一优化代码库的某些部分而不是关注实际(项目)进度和生产中须要作什么时,过早优化就成了问题。这种状况下,咱们必须明智地判断代码库的哪些部分确实须要优化。安全

安全性

除了软件的UI和逻辑以外,做为程序员,咱们还要对用户的安全负责。在咱们这个时代,数据是很是使人垂涎且货币化程度很高的(资源),确保用户我的的信息安全是比以往任什么时候候都更重要。咱们采起额外的措施保护私人数据,由于用户信任咱们的软件。若是咱们不坚持履行这一责任,咱们确定不是真正的程序员,甚至不是长期的。

在接近安全的时候,咱们永远不会太安全。广泛的经验法则告诉咱们,“永远不要信任用户输入”。这甚至能够被视为“最佳经验”,不遗余力去净化数据和用户输入。若是咱们不够谨慎,咱们不只会使咱们的软件和基础设施面临巨大的风险,并且还会冒着损害用户敏感数据的风险,这些用户数据是咱们做为程序员承诺保护的。

可是,安全性并不只限于用户数据和输入。病毒,蠕虫,特洛伊木马,广告软件,键盘记录器,勒索软件和其它形式的计算机恶意软件继续在全球数百万的计算机和其它设备上传播和肆虐。即便通过数十年的硬、软件技术的改进,也不存在无懈可击的系统。安全性是一种不断被磨练的工艺,但永远不会完美,由于总会有好奇的少数人探究并寻找各类可能的方法来破解系统。

所以,无论面向的怎样的用户群,若是咱们还没将安全性归入优先考虑范围的话,那么咱们应谨记要将安全性设计做为最重要的优先级之一。这样作是为了保护咱们的用户免受上述威胁的影响,这些威胁可能会形成诸如数据丢失,文件损坏和系统奔溃等不便之处。

团队协做让梦想成真

即便它不必定和编程相关,团队协做在软件开发中也起着不可或缺的做用。因为任何大型项目的全部复杂性和活动部分,一我的不可能以常规迭代的快速节奏或者在客户或任何监督人的严格期限和时间限制下开发出高质量的软件。

这就是为何咱们有各类各样的团队,他们专一于编程的诸多方面的其中之一。一我的永远不会拥有全部技能和知识,并将每一个方面的点有效的粘合在一块儿。一个团队可能负责UI设计和保证可访问,而另外一个团队可能负责软件自己的功能开发。若是将各个专业团队的全部能力结合起来,最终的软件将具备最佳功能,用户体验,性能和安全性,(软件)它将会在财务和实际限制范围内使用。

对于时间管理和会议期限,工做流程组织和自动化相当重要。咱们花时间正确配置咱们的构建工具和管道,由于这样作将为咱们节省大量时间。通常而言,投资回报随着时间的推移而增长。

与他人愉快地工做

为了阐述团队合做的理念,咱们与同行创建良好的关系,由于最终项目的成功在很大程度上取决于团队人员良好的相处。咱们努力营造一个鼓励性的工做环境,在这环境下,经验丰富的人要常常引导新人。

因为咱们是以团队形式开发软件,所以咱们必须留意其余人是否能读懂咱们的代码。为了保证开发周期的长期可持续性,代码可读性和可维护性被认为与项目的逻辑和功能一样重要。咱们始终要编写良好,可读的代码,同时提供信息化的GIT提交信息和文档说明,由于这些确定会帮助咱们和其它人更好地理解咱们写的代码。

说到其余人阅读咱们的代码,代码审查是一个很好的机会,能够更多地了解编程中的最佳实践。这也是熟悉代码库以及其底层设计和架构的另外一种方法。虽然建设性的批评对接收方是使人不愉快和难以处理的,但重要的是将其做为合理的建议,以便做为程序员的咱们进行改进。

编程很难

编程囊括许多方面,包括用户体验,性能,安全性和团队协做等功能。仅仅关注一个方面而忽略其它方面是不够的。对于复杂和重要性的项目,它并非键入几行代码就能取得成功。它须要大量精心规划,设计,考虑和团队协做才能取得成功。事实上,在编程时花费的时间比在打字时花费的时间多,特别是在长时间的调试过程当中。

最后,编程其实是连续的,不间断的学习。适应性和不间断的学习是这个行业生存的关键。若是咱们不努力继续学习,咱们就不能指望能跟上潮流。在这种指数级的科技改进的动荡行业中,咱们必须跟上它的快速节奏,以避免陷入困境。

全世界的开发人员都是辛勤的工做者,我想经过认识到这点来结束本文。写这篇文章,我不得不反思一个开发团队的平常工做流程。我不得不探究经常被咱们忽略的编程和软件开发的许多方面。从那时起,我对计算机中安装的全部软件都有了更多的了解。为此,今天,我提倡你们要感谢下程序员,不管其经验如何。没有他们,咱们会在哪里呢?

永远不要把他们的努力看作理所固然。

原文 https://dev.to/somedood/programming-is-hard-2p87

文章首发 https://github.com/reng99/blogs/issues/10

更多内容 https://github.com/reng99/blogs

相关文章
相关标签/搜索