首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

成为好程序员必须避免的5个坏习惯

在你的职业生涯中你犯很多错误 – 有的特别、有的普遍 – 通过这些错误可以学习如何避免在将来再犯同样的错误。 但是如果你是一个初学者,你犯的错误可能会比其他人更频繁。...在开始之前,你可能想知道为什么知道这些是错误不是最佳的方法? 有一个简单的回答就是 – 在的职业生涯中,所有这些情况都遇到过。有些情况经常遇到,有些只遇到过几次。每次犯错之后,都后悔莫及。...最坏的情况根本你不知道在做错的东西。一旦意识到我在做错事,就开始避免这些失误。至少,现在写的代码比以前写的要好多了。 现在你们也可以避免这些错误。首先要知道你现在在做的是错误的。...你可以使用这些时间让你的应用在其他方面更加优秀。 如果一个API、框架或者游戏引擎让你的任务更加轻松,你没有理由不适用它们。你的目标不是展示你有多么的优秀,也不是证明你可以独立完成任何任务。...这就是为什么我们的写的代码能正常的工作,但是却不是在所有情况下都能工作。 如果你在工作的时候把它忽略掉,你会在后面花更多的时间。 了解上面这些错误能有助于你避免它们。

59750

A Guide to Node.js Logging

当你运行 node index.js 并访问 http://localhost:3000 你注意到打印的很多信息并不是我们需要的。...我们可以通过访问流程的各个部分并编写一堆 JavaScript 代码来获取上述的信息, npm 生态已经给我们提供了各种各样的库来使用,例如: pino winston roarr bunyan 个人喜欢...$ DEBUG=express:* node index.js 如图: 如果你没有启动调试日志,则不会看到任何这样的日志输出。这是通过一个叫 debug 的包来完成的。...的理念是将逻辑日志和你的 CLI 输出分开。对于任何逻辑日志来说,你应该使用类似 debug 这样的包。这样你或其他人可以重写逻辑,而不受 CLI 的约束。...如果是这种情况,我们可以使用类似 boxen的东西来显示所有漂流的输出。如果不是,则可能会将输出重定向到文件或输出到其他地方。

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

keil调试程序的断点设置技巧

因为很多时候我们并不需要让程序停下来,而只想知道是否在这段代码运行过,或者说发生问题的位置根本不能停下来,否则就会让整个系统功能出现问题,比如中断处理函数的调试,程序一旦停下了也就失去了所有中断的后续响应...3、在代码中引入调试代码有风险,本来程序运行没有问题的,一旦引入调试代码之后可能就出现了问题,这种情况对于拥有丰富开发经验的人来说应该见怪不怪了。...比如这段代码: 还有后面的打印函数也使用 emOsprey 变量,所以也导致程序运行停止。可能你感到奇怪,为什么 emOsprey++这样的操作也涉及到读取?...如果说你想让断点代码位置运行多次之后才输出一条信息也是可以的,只要设置 Count 即可。 这里可能你问,这 printf 不就是我们写的打印函数吗?事实上,是,也不是。...发生这种情况是因为μVision 模拟器在应用程序驱动和模拟器内部访问之间没有区别。

2.8K11

Go Testing By Example--Russ Cox在GopherCon Australia 2023的演讲

错误不是随机的, 在任何给定的程序中,某些错误比其他错误更有容易发生。因此,如果你犯了一次错误,你或其他人将来可能再犯。没有测试来阻止它们,bug就会再次出现。...即使测试用例很难写,事实上在这种情况下通常更值得去做的。 为了测试这种情况,一种可能是编写一个仅在32位系统上运行的测试, 并对2 GB的unit8进行二分搜索。...Clean删除^D及其后面的换行符。在这种情况下,“新”文件最终没有最后的换行符,diff正确报告该换行符。 因此,尽管txtar非常简单,你也可以轻松地将自己的格式调整分层。...Issue 51989 永远不会再发生,至少不会在实时网站上发生。当然,其他的错误肯定还会出现,这个错误已经一去不复返了,这就是进步。 这就是能展示的所有示例,最后还有一个想法。...如果你是代码的作者,你可能觉得自己很幸运。如果是别人写的代码,你可能会对他们评价不高,然后也认为他们很幸运。大多数时候,答案并不是运气。这段代码能够工作的原因几乎总是因为它有一个测试。

27910

困扰程序员的30种软件开发问题,你是否时曾相识?

很明显可以看出,构建一个框架就需要许多的基础库,甚至一些Java的插件也需要很多大量的附加文件。有时候这些乱七八糟的东西很让人心烦,但是至少它能运行。...在回顾一些源代码时,总是尽力想弄明白的逻辑是怎么回事。经常会回头更新代码,让逻辑更清晰。 8、花30分钟写个函数运行它却要花2个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?这种情况并不陌生,它会让人特别沮丧。 20、哦买糕的,为什么都没写注释呢 如果涉及到最基本的前端代码HTML/CSS/JS时,并不需要总是写注释。...21、这个20分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...发誓这种情况绝对有发生,而且它没有任何意义——也许其它程序运行的是缓存版本呢,然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就回退到最新的备份版本,从那儿继续吧。

45830

困扰程序员的30种软件开发问题,你是否时曾相识?

很明显可以看出,构建一个框架就需要许多的基础库,甚至一些Java的插件也需要很多大量的附加文件。有时候这些乱七八糟的东西很让人心烦,但是至少它能运行。...在回顾一些源代码时,总是尽力想弄明白的逻辑是怎么回事。经常会回头更新代码,让逻辑更清晰。 8、花30分钟写个函数运行它却要花2个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?这种情况并不陌生,它会让人特别沮丧。 20、哦买糕的,为什么都没写注释呢 如果涉及到最基本的前端代码HTML/CSS/JS时,并不需要总是写注释。...21、这个20分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...发誓这种情况绝对有发生,而且它没有任何意义—也许其它程序运行的是缓存版本呢然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就会回退到最新的备份版本,从那儿继续吧。

67331

程序员遇到bug时常见的30种反应,你躺枪了么?

5有这个功能的插件吗 何必要多此一举插件是扩展任何程序或者网站用户接口的很好的资源。另外它们还为开发者提供了一些定制以及独特的选项。如果没有可用的插件,那你为什么不自己创建一个呢?...在回顾一些源代码时,总是尽力想弄明白的逻辑是怎么回事。经常会回头更新代码,让逻辑更清晰。 8花 30 分钟写个函数运行它却要花 2 个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?这种情况并不陌生,它会让人特别沮丧。...21这个 20 分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...发誓这种情况绝对有发生,而且它没有任何意义—也许其它程序运行的是缓存版本呢然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就会回退到最新的备份版本,从那儿继续吧。

70910

【前端技能树-需要避免的坑】Javascript 开发者容易在花田里犯的错

它们发生的方式有很多种,因此这里只想向你强调两种更常见的情况。...不幸的是,很容易得到不再使用的“僵尸”对象, GC 仍然认为它们是可访问的。 4 .等号的困惑 JavaScript 的一个便利之处在于,它将自动强制在布尔上下文中引用的任何值转化为布尔值。...没有使用 “严格模式” “严格模式”是一种在运行时自愿对 JavaScript 代码执行更严格的解析和错误处理的方法,也是一种使代码更安全的方法。...在没有严格模式的情况下,将值赋给未声明的变量自动创建一个具有该名称的全局变量。这是最常见的 JavaScript错 误之一。在严格模式下,尝试这样做抛出错误。...当严格模式检测到对象中的重复命名属性或函数的重复命名参数(例如,函数foo(val1, val2, val1){})时,抛出错误,从而捕获代码中几乎可以肯定的错误,否则可能浪费大量时间来跟踪。

16211

ChatGPT 出现重大 Bug、7天还未完全修复, OpenAI 直指 Redis 开源库错误导致

没有输入任何这些提示或问题。”有推特网友称。这意味着,完全陌生的人可以使用不同的帐户查看别人的历史记录,而无需执行任何不同的操作。...网友“YPPH”表示,“如果有人要求 ChatGPT 生成一些代码,然后不假思索地将其复制并粘贴到他们的项目中,想知道 OpenAI 如何看待这种说法:该错误是 ChatGPT 生成的错误代码造成的...“这让想起了遇到的第一个 Bug:通过 yahoo messenger 向自己发送一个  标签,你随机得到一个其他人和它的目标用户发回给你的消息对话。”...“有那个错误的变体,它在 0x45 (iirc) 的协议处理程序中允许用户注入格式错误的字符,并且从消息流中泄漏,发生一次就为其他用户发送一条消息。”...有网友表示,当其使用提示写出一些 React 代码时,已经发生了几次这样的错误。“它一直在提示超时,然后突然间看到了其他人的提示。它们每次都不一样。”

77030

破坏开发人员生产力的十二件事

意思就是:正如保罗·格雷厄姆(Paul Graham)所写的那样,“单次会议可以将整个下午分成两部分,每部分都太小而无法做任何事情。” 如何避免这种情况?这部分记录良好; 你没有任何借口。...开发人员想知道他们是否正在处理正确的任务的时间可以很容易地避免。如果有的话,他们会得到经理的评论,询问他们为什么要处理这个特定的任务(虽然优先事项没有定义)……好吧,你得到它 - 很多挫折…… 4....当管理者完全没有参与工作时,就会发生这种情况,但是……他们偶尔突然畏缩不前。“这是错的,这个,这看起来很糟糕,”等等,然后又飞走了。...不得不承认喜欢这个形象,但不幸的是,这种情况比我们想要的更频繁。这种行为让开发人员感到非常沮丧; 他们将在接下来的几个小时内无法返回该区域,有时甚至连几天都没有。 5....也不。问题是虽然有很多评论描述了代码正在做什么,没有一个描述它为什么这样做。如果程序中存在错误并且您偶然发现了这段代码,那么您将不知道从哪里开始。 12.

40320

代码测试意味着完全消灭了Bug?

代码将所有内容抽象到开发者难以想象发生了什么的程度,只是为了向原本非常简单的函数中添加“单元测试”。DHH 称这种为测试引起的设计损坏。 测试只是确保用户的程序正常运行的工具之一。...重构提供了一个工具用另一个测试用例来验证正确性(简单性)。简单性很难保证正确性,单元测试也不是。理想情况下,我们应该两点都做到。...它可以很好的解决一些问题; 对其他人而言并非如此。特别是,认为“被迫在小单元编写代码” 在某些情况非常有害。有些代码只是一个串行脚本,上面写着“执行此操作,然后执行此操作,然后执行此操作”。...认为这些 BDD(-ish)测试工具存在实际问题,因为它们混淆了你实际做的事情。无论如何,测试仍然是获取函数的输出并检查它是否符合你的预期。没有任何测试方法会改变这种基本原理。...所以这些都是错误的抽象:它们包装和混淆,而不是分离关注点并缩小范围。 关于开源项目 如果你有兴趣在开源项目中请求其他人来贡献,那么测试可以理解是一个非常重要的问题。

46210

别再错了,数字化转型与数据和应用程序无关,而与流程有关

它似乎与赞助没有任何关系”时,他们回答说:“不是,但我通常会在其他应用程序中为一个组织收集这些数据,而赞助商就是组织。”...幸运的是,在这段时间内,情况没有太大的改变,如果发生了改变,你可能只是把工作浪费在了不再合适的活动上。 但是,如果你从流程开始,你就可以让用户进行快速测试。...即使最初的步骤仍然是手动的,这个流程也可以自动化。任务得到分配和监控。通知会发出。步骤不再被遗忘,错误越来越少。...虽然你可能只是想浏览一条记录,通常有一个原因。如果你说你只想知道某人的电话号码,明白了。...在这种情况下,没有流程可以自动化。它太特殊,太特定于情况了,甚至看不到模式,更不用说尝试建模和重复它们了。

30540

try catch引发的性能优化深度思考

如果可能,应在代码中的较高级别上进行异常处理,在这种情况下,异常处理可能不会那么频繁发生,或者可以通过首先检查是否允许所需的操作来避免。...上面的这段代码语义上跟 trycatch 其实是相似的,运行效率迅速下降至 0.04ms,所以 trycatch 应该通过检查属性或使用其他适当的单元测试来完全避免使用此构造,因为这些构造极大地影响性能...事实上 plus1 和 plus2 函数代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个错误抛出 1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...上面这类代码个人更建议写成如下形式,如果你实际上抛出并捕获了一个异常,它可能变慢,但是由于在大多数情况下上面的代码没有异常的,因此整体结果会比异常更快。...因为 JavaScript 是事件驱动的,虽然一个错误不会停止整个脚本,如果发生任何错误,它都会出错,捕获和处理该错误几乎没有任何好处,代码主要部分中的 trycatch 代码块是无法捕获事件回调中发生错误

2.5K73

一道面试题考验了你对java的理解程度

有人可能在没经过仔细考虑的情况下,给出以下的答案 ? 很遗憾,这是错误的。重要的事注释三遍!!! 那么为什么错误,原因是什么?...看我上面的那个例子的swap1,是不是顿时觉得与上面的面试题的错误做法非常相似了,是的,错误的原因是一模一样的,就是稍微有一点区别,就是Integer不是new出来的,而是自动装箱的一个对象,那么什么是自动装箱呢...没错,也是new出来一个对象,如果想知道上面的代码做了什么处理,可以参考 Long==Long有趣的现象 这篇文章,里面有介绍类似的 好了,有人可能问,为什么知道自动装箱调用的是valueOf方法...这是Integer的构造函数可以看到Integer对象实际值是用value属性来存储的,但是这个value是被final修饰的,没办法继续找,value没有提供任何的set方法。...,所以,为了避免这种情况,就只能不需要调用缓存值,直接new Integer就可以跳过缓存,所以代码改成如下即可 ?

50220

在开始编码之前,他们先在纸上推演程序吗?

下面是对编码的看法: 如果代码量很小,例如是程序的一部分,可能是一个 RESTFul API,或者一种小算法,这时候可能要考虑使用的数据结构是什么,这种情况下应该是直接上手就写了,没有什么提前的推演和规划...要尽可能多地考虑边缘情况,并针对它们一一处理和测试,确保处理所有可能发生错误和已经发现的边缘情况。...比单元测试更好的方法是,对于任何代码更改,通过分析当前函数的所有消费代码,分析它们触发的所有副作用,以及所有可能影响到的边缘情况,然后测试所有代码。...另一个项目运行了大约 5 年,没有出现一个问题,直到服务器退役后得到一个 ping,发现它仍然被大约数百名未迁移到新系统的用户使用。...大约每 5-10 行代码就会产生 1 个错误,这很正常,有错误不是不足。喜欢通过处理边缘情况来规避大部分错误,但我不知道没有捕捉到全部。庆幸你发现的每个错误吧,这些错误可以避免成为生产问题。

54630

try catch引发的性能优化深度思考

如果可能,应在代码中的较高级别上进行异常处理,在这种情况下,异常处理可能不会那么频繁发生,或者可以通过首先检查是否允许所需的操作来避免。...由于上面的代码是从项目中改造出来演示的,可能并不够直观,所以我重新写了另外一个相似的例子,代码如下,这里面的逻辑和上面的 getRowDataItemNumberFormat 函数讲道理是一致的,但是让其发生错误的时候进入...事实上 plus1 和 plus2 函数代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个错误抛出1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...error) { // todo } 上面这类代码个人更建议写成如下形式,如果你实际上抛出并捕获了一个异常,它可能变慢,但是由于在大多数情况下上面的代码没有异常的,因此整体结果会比异常更快...因为 JavaScript 是事件驱动的,虽然一个错误不会停止整个脚本,如果发生任何错误,它都会出错,捕获和处理该错误几乎没有任何好处,代码主要部分中的 try catch 代码块是无法捕获事件回调中发生错误

85420

​如何处理Express和Node.js应用程序中的错误

在此文件夹中创建index.js并将代码粘贴到其中。 错误来源 Express应用程序中可能会发生两种基本错误。 一种错误是对没有定义路由处理程序的路径发出请求。...… 错误的另一个来源是当路由处理程序或代码中的其他任何地方出现问题时。...Express创建了一个可以称为路由表的地方,它将路由按照代码中定义的顺序放置。当请求进入Web服务器时,URI通过路由表运行,并且使用表中的第一个匹配项-即使存在多个匹配项。...定义错误处理中间件 错误处理中间件函数的声明方式与其他中间件函数相同,只是它们具有四个参数而不是三个参数。...500表示如果错误对象没有status属性,我们将500用作状态代码

5.6K10

数据科学家易犯的十大编码错误,你中招了吗?

没有共享代码中引用的数据 数据科学需要代码和数据。所以为了让其他人能够复现自己做出来的结果,你需要提供代码中涉及的数据。这看起来很简单,许多人忘记共享代码中需要的数据。...将数据和代码混在一起 既然数据科学代码需要数据,为什么不将代码和数据存储在同一个目录中呢?运行代码时,这个目录中还会存储图像、报告以及其他垃圾文件。乱成一团!...可以用 d6tflow 或者 airflow。 写 for 循环 和函数一样,for 循环也是你在学代码时最先学的。这种语句易于理解,运行很慢且过于冗长,这种情况通常表示你不知道用什么替代向量化。...没有注释代码 明白你急着做分析。于是你把代码拼凑起来得到结果,把结果交给你的客户或者老板。一周之后他们找到你,问你「你能改掉 xyz 吗?」或「你能更新一下结果吗?」。...然后你和自己的代码大眼瞪小眼,既不记得你为什么要这么做,也不记得你做过什么。现在想象一下其他人运行这段代码时的心情。

53730

数据科学家易犯的十大编码错误,你中招了吗?

没有共享代码中引用的数据 数据科学需要代码和数据。所以为了让其他人能够复现自己做出来的结果,你需要提供代码中涉及的数据。这看起来很简单,许多人忘记共享代码中需要的数据。...将数据和代码混在一起 既然数据科学代码需要数据,为什么不将代码和数据存储在同一个目录中呢?运行代码时,这个目录中还会存储图像、报告以及其他垃圾文件。乱成一团!...可以用 d6tflow 或者 airflow。 写 for 循环 和函数一样,for 循环也是你在学代码时最先学的。这种语句易于理解,运行很慢且过于冗长,这种情况通常表示你不知道用什么替代向量化。...没有注释代码 明白你急着做分析。于是你把代码拼凑起来得到结果,把结果交给你的客户或者老板。一周之后他们找到你,问你「你能改掉 xyz 吗?」或「你能更新一下结果吗?」。...然后你和自己的代码大眼瞪小眼,既不记得你为什么要这么做,也不记得你做过什么。现在想象一下其他人运行这段代码时的心情。

74020
领券