学会Debug—如何成为一名优秀的程序员(一)

 

调试(Debug)是成为一个程序员的基石。调试这个词第一个含义即是移除错误,但真正有意义的含义是,通过检查来观察程序的运行。一个不会调试的程序员等同于瞎子。

理想主义者认为设计、分析、复杂的理论或其他东西,是更基本的东西,他们不是现实的程序员。现实的程序员不会活在理想的世界里。即使你是完美的,你也需要与在你周围的主要软件公司或组织 (比如-GNU-) 的代码,和你同事写的代码打交道。这里面大部分的代码以及它们的文档是不完美的。如果不能看透代码的具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这种可见性只能从实验获得,也就是,调试。

调试是一件与程序运行相关的事情,而非与程序本身相关。你从主要的软件公司购买一些产品,你通常不会看到(产品背后的)程序本身。但代码不遵循文档的情况(让你整台机器崩掉是一个常见又特殊的例子)或者文档没有说明的情况仍然会出现。更常见的是,你的程序出现了一个错误,当你检查你写的代码的时候,却不知道这个错误是怎么发生的。不可避免的,这意味着你做的一些假设并不对,或者一些你没有预料到的情况发生了。有时候,神奇的修改源代码的技巧可能会生效。当它无效时,你必须调试了。

为了获得一个程序执行过程的可见性,你必须能够执行代码并且从这个过程中观察到什么。有时候这是显而易见的,比如一些正在呈现在屏幕上的东西,或者两个事件之间的延迟。在许多其他的案例中,调试与一些不一定可见的东西相关,比如代码中一些变量的状态,哪一行代码正在被执行,或者一些断言是否持有了一个复杂的数据结构。这些隐藏的细节必须被显露出来。

观察一个正在执行程序的内部的方法通常可按如下分类:

  • 使用一个调试工具;
  • Printlining- 对程序做一个临时的修改,通常是加一些行去打印一些信息;
  • 日志 - 用日志的形式为在程序的运行中创建一个永久的视窗。

当调试工具稳定可用时,它们是非常美妙的,但 Printlining和写日志甚至是更加重要的。调试工具通常落后于编程语言的发展,所以在某些时候它们都可能是无效的。另外,调试工具可能轻微改变程序实际执行的方式。最后,调试有许多种,比如检查一个断言和一个巨大的数据结构,这需要写代码并改变程序的运行。当调试工具可用时,知道如何使用调试工具是一件好事,但学会使用其他两种方式也是至关重要的。

当调试需要修改代码的时候,一些初学者会感到害怕。这是可以理解的,这有点像探索型外科手术。但你需要学会打破代码,让它跳起来,你需要学会在它上面做实验,并且需要知道你临时对它做的任何事情都不会使它变得更糟。如果你感受到了这份恐惧,找一位导师 - 就是因为许多人在一开始面对这种恐惧的的时候表现的太脆弱,我们因此失去了很多本可以变成优秀程序员的人。

下一节:如何通过分离问题空间来Debug

全部评论

相关推荐

已经入职字节快一个月了,突然想起来之前那段时间的面经没有发,先发一下timeline吧。Tiktok 内容安全平台(人才库电话捞我):电话10.28 -> 一面10.30(我觉得你跟我们组业务挺match的,然后过了三天问hr挂了,应该是别人流程更快)阿里淘天:投递11.11->约面11.12->一面11.14(问得很简单,30分钟,手撕八股全过无后续)Kpi面腾讯wxg 微信小程序:投递11.13 ->约面11.14-> 一面11.17 (究极无敌拷打,问我多模态大模型涉及的算法?但是人很好)->11.19流程终止小红书 风控平台:投递11.16 —约面11.17  ->一面11.18 (抽象的面试官,面试感觉一般,问得前端网页安全相关的,确实没准备)->11.20挂百度 百家号:投递11.14 —>约面11.14 ->一面11.14(当场约2面)->二面11.24->口头告知offer, 拒绝(原因是业务不太好)美团 技术平台投递11.17 -> 约面(忘记了,没多久) ->一面11.19 ->二面11.21 (字节offer不想面了)快手 电商业务投递11.17 -> 约面11.18 ->一面11.19 -> 二面11.21(拒了)腾讯wxg 微信支付(被捞):(直接发面试邮件)技术一面12.05 ->技术二面12.11 ->技术三面12.17 -> hr面已拒绝(了解业务后拒绝,但是有转正hc,感觉还蛮可惜)字节跳动 xxxx:东家就不放具体的时间线了,大概是面完第二天就能知道结果,除了有几天ld请假了没填面评。不去wxg还有个原因是还在期末周,深圳学校来回太麻烦了,至少现在在的组感觉能学到很多的东西,自己的选择应该也没错。还是感概一下,一年前大二的时候投简历海投基本上石沉大海,无论大小厂约面比例很少。现在基本上投了就有面试,还都是以前梦寐以求的大厂,现在自己也有了更多的选择,也没有投太多简历。也感谢上一段实习的经历,很有意思的项目,无论是字节,腾讯,还是美团基本都有聊这个项目。面经需要等一下,也许等周末有空了再发给各位uu,感兴趣可以关注一下~有想要交流学习的同学也可以私信我,目前人在北京大钟寺~,可以找搭子~
正能量的牛可乐:这么多大厂面试下来,不仅摸清了不同公司的面试风格,还能精准避雷业务不匹配的岗位,血赚
实习简历求拷打
点赞 评论 收藏
分享
2025-12-17 15:08
赤峰学院 Java
乐邦詹雨:学历厂,另外东子不同部门待遇进的难度天差地别,我同学零售一面1h30min有八股算法项目拷打,我就两轮技术面各30min就一面问了些技术问题,二面问了两个开放式技术问题,三面线下hr面就结束了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务