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

作为一名优质的程序员如何高效的解决各种bug?

作为一名优质的程序员如何高效的解决各种bug?,Go语言社区,Golang程序员人脉社

 

第一件事情是学会二分查找

第一件事情是学会二分查找。我看过很多刚入门的程序员,要么是自学编程的,没有系统地学过算法,连二分查找都不知道;要么是本科念完,算法都还给老师了,总之就没有这样一种基础意识。看他们定位问题,从第一行代码开始加断点或者是打印上下文信息,我会有一种强烈的冲动:还是让我来吧。

eg:

如果你有一段代码,例如说一个函数,或者多个互相调用的函数,最终结果不是你想要的,你不要从头开始找哪里出错了。你应该找一个中间点,从那里开始二分查找。你在中间点查一个断点,或者是把上下文信息打印出来,以此确定程序执行到中间点时的状态是不是还是符合你预期的。如果符合你预期,问题处在中间点之后;如果已经不符合你预期了,问题出在中间点之前。如此重复,直到你能定位问题出在哪里。

如果你能定位到问题出在哪里了,要么是显而易见的逻辑错误,你自己把写错的逻辑纠正过来就好了;要么是更底层的问题,你觉得你的逻辑是没错的,但底层的运行时、框架、浏览器、操作系统之类的就是不按照你预期的方式进行处理。这时候你只能通过搜索去学习,为什么你依赖的底层没按照你的预期进行处理。你的预期有可能是对的,底层出错了,你要想办法绕过去;你的预期也有可能是错的,因为你没有真正理解你依赖的底层,这时候你要继续学习新知识,调整你对底层的理解,然后修正你的代码逻辑。

关键字搜索

遇到这种问题时,你应该用什么关键字搜索呢?这是个很难教的东西,因为是否能抓准关键字来搜索是非常依赖于眼界和经验的。这种状况我在教新手编程时遇到过,在教非常有经验的程序员上手新公司技术时也遇到过。

教一个新手编程

教一个新手编程:我跟他说,你遇到这个问题,你自己搜索一下。他尝试用他能想象得到的关键字搜索了一番,就是找不到答案。我来一搜,答案就在 StackOverflow 上,或者这个开源项目已经有人提了个 Issue。为什么他搜不到呢?原来某些更复杂的技术概念他还没学到,我直觉能想到用什么关键字,但他根本意识不到那些关键字的存在。

教一个有经验的程序员:

教一个非常有经验的程序员上手新公司的技术:我跟他说,遇到这个问题你搜一下公司内网吧,我们的内部搜索系统非常强大的,Wiki、文档、讨论……什么都能覆盖到。他怎么都搜索不出来,但换我来一下子就搜到了。为什么他搜索不到呢?因为公司内某些系统、术语、代号他还从来都没听说过,而我一下子就能想到,于是我能搜索到。

这种眼界和经验是没办法系统化、一次性地教给一个新人的。就算你尝试一次性地把很多知识传授给一个新人,他也无法全部都记下来。所以最好的学习方法是不断地通过覆盘来学习——我遇到了这样一个问题,我尝试了如下的操作,没有解决好问题,或者解决了但效率很差,那比我厉害的人遇到同样的问题是如何解决的?他们如何使用不同的操作更高效地解决同样的问题?我能从中学到什么?让我重来一次的话我会怎么做?


这时候自然引申出来的一个问题是:去哪里认识这些比自己厉害的人?如何能获得他们的帮助和指导?这有付费和免费两个途径。

付费的话,例如说知乎的付费咨询啦。(知乎的产品和运维,如果我这个答案帮助你们提高业务指标了,记得多收录我其它答案啊!)有不少人都在尝试付费咨询这样一件事情,这个行业在中国还很不成熟,但如果你付得起的话可以试一下。我做一对一的 career coaching,收费是 300 美元一小时(5 美元一分钟的费率),有需要的可以私信联系我。

说完付费的再说一下免费的,这里面最重要的一点是跟比你厉害的人建立关系,让对方意识到你也在为他在乎的领域创造价值。以下是我提供的一个简单的步骤:

  1. 去关注比你厉害的人,看看他平时发布的内容都在说什么,了解他最在乎的领域是什么。
  2. 在他发布的内容下面参与互动,发表你对于他的领域的见解,最重要的是你的见解要能在他已有的内容之外创造新的价值。
  3. 在跟他有持续互动之后,他可能会主动想要认识你,否则的话你也可以主动私信他,提出说你想认识一下他。如果是你主动的话,你最好带上一个有价值的话题,以此展开私信对话。

我可以给你一个非常具体的例子,当年跟我聊上一位大佬,他私信我的第一句话是「鼓起勇气不要脸一波,可以给我这个回答送个专业吗?」我觉得他写的答案质量都不错啊,确实在为刷题的留学生提供了价值,于是我毫不犹豫地帮他的答案点了个专业。

在你跟一个比你厉害的人建立关系后,给点耐心多聊聊,在你有需要是别人往往是愿意帮助你的。

文章到此就结束了

 

来自小编的福利

今天的技术分享就到这里了,给大家推荐一本书  Java并发编程艺术  需要的小伙伴  可以 点我 点我 免费领取 哦,还有一些小编整理的Java核心知识点资料整理分享给到你们哦 !

喜欢小编的文章可以点赞三连哦,还可以白嫖资料呢


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有