热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序员安身立命的138条忠告

让我们面对现实,每个开发人员都希望个人的技术能力以及团队协同能力可以随着时间的推移不断得到提高。但大多数开发者都会提出的一个重要且关键性的问题:如何才能

让我们面对现实,每个开发人员都希望个人的技术能力以及团队协同能力可以随着时间的推移不断得到提高。但大多数开发者都会提出的一个重要且关键性的问题:如何才能做到这一点呢?接下来,本文作者以自身的开发经验分享在编程时作为开发者应该牢记的 139 条忠告,以成为更好的程序员。

代码外观

关于代码布局的讨论越多,越有可能陷入没有结果的争辩中。众所周知的争论有 TAB 键与空格缩进的争论,以及大括号要不要另起一行的争论等。

良好的代码格式不一定是你觉得最漂亮的那个。良好的格式是更易于浏览和阅读的代码格式。

良好的代码外观揭示了代码的意图。这不是一项艺术工作。

我们需要通过良好的外观避免出现代码错误。不是为了表现我们可以创造漂亮的 ASCII 艺术。

虽然我们写的代码是通过计算机执行的,但却要给人类阅读。

如果有人想写清晰的风格,那么首先让他弄清楚自己的想法。

选择一种布局样式,然后坚持使用这种样式,或采用编码标准或样式指南。

如果你正在处理的文件不符合项目其余部分的布局约定,那么请遵循该文件中的布局约定。

命名

良好的命名具有描述性、正确性和惯用性。

如果你非常了解命名对象,那么你可以为它起一个好名字。在为变量提供神秘的名称之前,请确保你明白它是什么。

避免冗余。冗余表明你没有充分考虑正在创建的东西的名字。无论是类,函数还是变量。

采用你使用的语言中最常用的大写惯例。比如在C#方法中,大写的Console.WriteLine(“Hello World”)

确保明明准确无拼写错误。

切勿同时修改外观和行为。用不同的版本管理它们的更改。

随着获得的经验调整代码外观风格。新手并不能总是保持良好的代码外观,你更应该关注程序的功能。

减少代码量

写的代码多不一定意味着你写了很多软件。这可能只是意味着你写了很多 Bug。

代码越多,意味着需要阅读和理解的越多,这会让程序更加难以理解。

代码量越大,隐藏 Bug 的地方就越多,追踪 Bug 就会越难。

避免非必要的代码

常见的没有意义的代码包括使用非必要性的条件语句和重复的逻辑构造。混乱的逻辑代表着混乱的思路。

代码保持明确简洁。避免不必要的冗长语句。它们不会为代码带来任何价值。

复制

不要段。将它们重构成通用的函数。通过参数表示差异性。

如果发现重复代码,请将其删除。

无效代码

无效代码是指永远不会运行,或永远无法访问的代码。

要么给代码运行的机会,要么干脆删掉。

无效代码的其他表现形式包括:

永远不会给调用的函数;

定义的变量永远没有不会被使用;

传递给内部方法的参数永远不会被使用;

从未使用过的枚举、结构、类或接口。

注释

良好的代码不需要大量注释的支持,也不需要解释它的工作原理。

确保每个注释都有添加的价值。代码本身就是工作原理以及方法的最好的说明。注释应该解释为什么——只有代码本身不够清楚的时候。

删除代码时不要将其注释掉。这会让读者感到困惑,而且很碍事。

每天都让你的代码变得更好。如果找到冗余和重复时,请将它们删除。

通过删除代码来改进系统

添加新代码可以改进系统。你也可以通过删除代码来改进系统。

无效代码会在开发过程中积累

应用程序的用户界面的功能已被删除,但是后台的支持代码依然保留了下来。

通过向导生成的用户界面代码经常会插入一些永远不会被使用的逻辑。

随时随地删除无效代码。这些代码很碍事,会影响你的工作速度。

删掉将来可能需要的代码也是安全的。届时你可以从版本控制中恢复。

清理代码始终应该和功能改变分开提交。

即使最好的代码库也有无效代码 。

警惕过去

在写代码的时候,你觉得它是完美的,但是通过认真审视旧代码,你可以发现所有代码中的陷阱。

回顾旧代码可以帮助你提高编程技术。

如何处置现有的代码库

接管现有的大型代码库是一件很困难的事。你必须迅速开始:

了解从哪里开始查看代码

弄清楚代码每个部分的作用以及实现方法

衡量代码的质量

了解如何操控系统

了解代码的惯用语,这样你的修改就可以完全融入

找到所有功能的可能位置(以及由此引起的后续bug)

了解代码的最佳方式是由知情人士为你讲解。大胆地寻求帮助!

学习代码的最佳方法是修改代码。然后从你的错误中吸取教训。

许多程序员不是努力阅读和理解现有代码,而是更喜欢说“代码很糟糕”并重写。

准备好遭遇很差的代码。准备好得力的工具来处理这些代码。

一些惨不忍睹的代码可能只是一个能力较弱的程序员编写的。或者是一个有能力的程序员在心情糟糕的时候写的。

遇到很糟糕的代码时,控制好自己的厌恶情绪。你需要寻找实际的方法改进这些代码。

不要指望任何代码(甚至是你自己的代码)完美。

遵循童子军规则。无论何时遇到代码,确保你离开时的代码更好。

缓慢而谨慎地修改代码。一次只改动一个地方。

错误处理

不要忽视代码中可能出现的错误。不要一再推脱错误处理(逃避不是办法)。

规规矩矩使用异常。了解语言的惯例和需求,有效地使用异常。

程序员必须了解程序错误。用户必须了解使用错误。

记录错误还不够好,必须要让勤奋的操作员每天注意到错误并处理好错误。

做好异常准备

每一步都要考虑所有可能发生的不寻常,无论你认为它们出现的几率有多低。

时时刻刻都要考虑从错误中恢复,并编写合适的恢复代码。

确保你的错误处理是惯用手法,并使用适当的语言机制。

在写代码的时候,严密考虑代码的运行分支。不要推迟处理“不寻常”的情况:转头你就忘了,导致代码到处是 Bug。

追踪 Bug

程序员写代码。但程序员不是完美的,所以程序员的代码也不是完美的。因此代码第一次不能正常工作也很正常。所以我们有 Bug。

我们应该采用合理的工程技术,量减少令人不快的意外事故。

首先调试的难度是写代码的两倍。因此,如果你尽可能巧妙地编写代码,那么显然这对于调试是不明智的。

将重现 Bug 的步骤降到最少。

确保你只专注于一个问题。

断言和日志(即便是简陋的 console.log 和 nodejs 断言)是有效的调试工具。可以经常利用。

二进制删除空格的问题可以更快地获得结果。

在开发软件时,花点时间写一套单元测试。

未经测试的代码是 Bug 的温床。而测试是杀虫剂。

了解如何使用调试器。然后在正确的时间内使用。

尽快修复 Bug。不要让它们累积成灾。

调试并不容易。这是我们的错。我们写了 Bug。

别忘了测试代码

单元测试是专门针对最小“单元”的功能展开的测试,以确保它们可以独立正常运行。这里的独立意味着单元测试不涉及任何外部访问:不运行任何数据库、网络或文件系统操作。

质量是免费的,但只有那些愿意为此付出高昂代价的人才能享有。

为了改进软件开发,我们需要快速反馈,以便在出现问题时立即掌握问题。良好的测试策略可以提供快速的反馈回路。

在编写代码时编写测试。不要推迟测试,否则测试就不会那么有效了。

所有测试都应作为持续集成工具链的一部分在构建服务器上运行。

测试应用程序中的重要内容。

全局变量和单例对象是可靠测试的噩梦。你无法轻易测试拥有隐藏依赖项的单元。

重构代码,提高可测试性,以便获得更好的代码设计。

程序测试可以展示 Bug 的存在,但永远无法证明没有 Bug。

如何处理复杂性

简单性是伟大的品质,但需要付诸福利才能实现,人人都应该重视简单性。但糟糕的是:大家更喜欢复杂性。

复杂性通常是偶然的,很少有人会故意添加。

推迟设计决策,直到你必须做决定的时候。在还不了解需求时,不要做出架构决策。不要猜。

完美的实践

程序员需要良好的品味和美感才能编写出色的代码。

任何聪明的傻瓜都会让代码变得更大、更复杂和滥用。我们需要一点天才的力量以及很大的勇气,才能朝着正确的方向前进。

良好的软件开发不是牛仔式编程,扔掉第一个你能想到的代码。这是一项需要深思熟虑和朝着正确方向努力的工作。

优秀的程序员在工作中很谦虚。他们敢于承认他们并不知道所有的一切。

良好的代码和良好的程序员源于以正确的方式编写正确的东西的愿望。

团队合作

程序员团队有一套规则。这些规则定义了我们的工作以及我们的工作方式。同时也描述了编程文化。

不要依赖模糊的不成文的团队“规则”。要明确隐含的规则,并控制你的编程文化。

要从根本原因上修复 Bug,而不是表面症状出现的位置。坚持修复表面症状不会简化代码。

避免在代码中隐含假设。

只需编写所需的代码。任何额外的复杂性都将成为负担。

停下来想一想。不要写愚蠢的代码。

承认你的错误和错误的编程决定。并从中吸取经验教训。

勇敢地使用你的大脑。你有权批评代码并做出改进代码的决定。

了解使软件易于修改的原因,并努力建立具有这些属性的软件。

修改代码需要的是勇气和技巧。而不是鲁莽。

通常最好进行一系列频繁、少量、可验证的改动,而不是一次大规模的代码变动。

避免复制和粘贴编码。重构逻辑建立共享函数和公共库,避免重复代码(和重复的 Bug)。

编写小的模块化代码段。保持干净整洁。

代码应该“共享”,因为它可以用于多个客户端,而不是因为开发人员想要创建一个漂亮的共享库。

不要拒绝别人的代码。使用现有的库可能更好,避免编写自己的版本。

建立软件版本需要规范和规划。这不仅仅是在开发人员的 IDE 中点击“构建”。

始终从头开始构建新的软件。切勿重复使用构建软件的旧代码。

简化构建过程,只需一步即可自动完成流程的所有部分。使用脚本语言执行该操作。

在 CI 服务器上部署构建以确保其健康。从同一系统发布正式版本。

不断学习。积极学习新知识。

我们的学习往往过于狭隘。考虑更广泛的参考范围。从许多领域中汲取灵感。

学习时记笔记。即使过后你会扔掉它们。

如果不能用简单的方式做出解释,那么意味着你理解的不够透彻。

教别人学习一个主题,可以促进自己更好地学习该主题。

耳听为虚,眼见为实。实践出真知。

使用你刚学到的东西可以加强记忆。尝试示例,回答问题,创建业余项目。

警惕停滞不前。渴望成为更好的程序员,就必须挣脱最舒适的生活方式。

投入时间和精力来提高你的技术力。这项投资物有所值,你会收获丰厚的回报。

不要试图通过编写不可读或不必要的“聪明”代码来证明自己“不可或缺”。

获取软件资格证是一种荣誉。

不要一叶障目。要准备好面对新挑战,学习成长为更好的开发人员。

爱所有的编程语言。

学习遵循不同语言的惯例和范例。

考虑学习一些不再常用的语言,以了解编程历史。

一个优秀的程序员知道多种语言和多种惯例,这可以拓宽他们的解决方案。改进他们编写的代码。

使用编程语言是你每天的例行工作。

要用语言编写最好的代码,你应该接受它的风格和惯例,而不是强迫你自己。

优秀的程序员是良好的沟通者。他们会听说读写以及编程。

不要指望一夜之间成为语言大师,在工作中不要感到沮丧。

首先集中精力处理最重要的事情。什么是最紧迫的,什么会产生最大的价值?

让计算机帮忙处理重复性的工作。使用脚本完成自动化。

将大型任务分解为一系列小任务,这样易于理解的任务。并且可以使你更准确地判断这些进展。

确认你定义的“已完成”是什么。

如果你不知道什么时候能够完成,那请不要着急动手。

使用代码中编写的测试来定义代码的完成和工作的时间。

不要做非必要的工作。只做必须完成的工作。然后住手。

遇到问题,在开始解决问题前,请确保你考虑过多种解决方案。

目标明确是优秀程序员的品质。

注释并不一定能改善代码。简单明了的代码不需要额外的注释支持。

了解开发的方法、趋势、宣言和流行。



推荐阅读
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • JavaScript最初并非设计为纯粹的面向对象编程(OOP)语言,因为直到ES5标准中仍未引入类的概念。然而,随着ES6的发布,JavaScript正式引入了类的语法,使得开发者能够更加直观地实现继承机制。本文将深入探讨JavaScript中多样的继承实现方法,包括原型链、寄生组合式继承等技术,并分析它们的优缺点及适用场景。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 在当前各种算法实现和开源软件包层出不穷的背景下,算法对程序员的重要性是否有所减弱?回顾历史,早期程序员必须熟练掌握算法并频繁自行编写。然而,随着技术的发展,算法逐渐成为一种“商品”,现代开发者更多依赖现成的库和商业算法解决方案。有观点认为,机器学习领域中,许多算法已经被高度封装,不再需要深入理解其背后的数学原理。然而,这种趋势也引发了关于技术深度与广度平衡的讨论,强调了基础理论知识在应对复杂问题时的不可替代性。 ... [详细]
  • 《软件测试精要》深度解析与实战经验分享
    《软件测试精要》深度解析与实战经验分享,系统梳理了软件测试的核心概念与关键原则,结合实际项目中的测试经验和教训,详细探讨了测试分类、测试权衡要素、测试效率、测试覆盖率以及测试框架的引入和用例设计等内容,为读者提供了全面而实用的指导。 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 在Unity3D的第13天学习中,我们深入探讨了关节系统和布料模拟技术。关节系统作为Unity中的关键物理组件,能够实现游戏对象间的动态连接,如刚体间的关系、门的开合动作以及角色的布娃娃效果。铰链关节涉及两个刚体的交互,能够精确模拟复杂的机械运动,为游戏增添了真实感。此外,布料模拟技术则进一步提升了角色衣物和环境装饰物的自然表现,增强了视觉效果的真实性和沉浸感。 ... [详细]
author-avatar
fuhuan9479184787
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有