优秀程序员养成指南:掌握两大基础知识

来源:36氪 作者:网友

我们都知道,优秀的程序员能够开发出超棒的功能、网站、应用程序等。他们有什么共同点呢?

在我的研究中,他们的共同点不仅仅是精通某门语言或拥有很好的教育背景。真正有才华的程序员对基础知识掌握到炉火纯青的地步。这个基础使他们能创造伟大的东西,提出突破性的想法。

想想金字塔:它的底部非常之大,越往上越小,顶部是尖尖的。编程的基础知识就是金字塔的底部,一切都从那里开始。

那么这些基础知识是什么呢?根据我的经验和我研究过的程序员的背景,我认为编程基础知识有两部分。

超凡的问题解决者

首先,你必须是一个高效的问题解决者。这是一个重要的起点,因为编程就是解决问题。

虽然解决问题的方法有很多,但问题解决流程有几个部分让我印象深刻。超凡的问题解决者会提炼出问题的本质,以便确定他们的总体目标,并有目的地开始处理问题。然后,他们将每个问题分解成小块的、可管理的部分,依次处理每个部分。有时还会实现它的可视化。

这个过程比听起来要难。当我刚开始编程时,我遇到了瓶颈:跟很多人一样,我在学校从来没有学会如何解决问题(这是一种不容易教授的技能)。数学老师给我们布置了一组习题集,然后我们就立即开始做题——这就是我刚开始编程时所做的事情。毫不奇怪,我压根儿不会,连最简单的问题也不知道如何解决。

我开始学习问题解决流程、学习如何高效解决问题,这时,事情开始发生变化。我现在在解决一个问题之前,先分析它的目的。我要感谢George Polya的书《怎样解题 数学思维的新方法》(购买链接:当当京东)给我的建议。

我将Polya的一些理念应用到编程中,比如理解问题。Polya 写道:“必须理解问题。”这包括能够“指出问题的主要部分:未知部分、数据和条件”。对于每个问题,我都会拿出一张纸,写下这些问题的答案:我要解决什么问题?(未知部分);我现在拥有什么?(数据);我需要注意哪些限制或细节?(条件)。

上面的几个问题答案似乎是显而易见的,但很容易被忽视。我经常在某个问题上投入数小时,但很久之后才意识到,我忽略了问题陈述中一个小而关键的细节。写下问题的细节让我的思考慢下来,让我能够准确地思考我需要做什么。这是成功的一半。

在此基础上,我会制定一个计划,这也是Polya的另一个建议。它很有意义。我写文章前先写提纲,画家在作画之前先画一幅素描稿,建筑商根据图纸建造房屋……编程也一样。与其急着去做,还不如先思考我要做什么,然后制定一个计划。

做计划的方法很多。

  • 有时我只是简单地用数字列表列出我需要采取的步骤:1. 做AAA;2. 做BBB。

  • 我还会把问题“可视化”:当我学习for循环的时候,我拿出一把杏仁,用这堆杏仁学习迭代。这现在看起来可真够愚蠢的,但它在我初学阶段帮助我思考了这个问题。

  • 我还会画图或者图表。对于递归问题,我会绘制一个图表,说明每次递归调用时发生的情况,直到我理解它为止。

我几乎总是能找到一种方法使问题更易于处理,这就简化了问题,并帮助我发现处理此类问题的模式。

在此之上最重要的是,在解决一个问题之前,先分析它的目的,并在解决问题的过程中始终保持这种目的感。

尽管制定了计划,但问题仍然很难,我仍然会被困住。成为一个伟大的问题解决者需要时间。我仍在为此而努力,我知道这份努力绝对值得。你可以看到不同之处。

当我阅读一个超凡的问题解决者编写的代码时,我能感到他的代码很干净,很容易理解;变量的名称都很好;功能简单明了;每一行代码都有特定的用途,没有多余。代码的清晰性反映了程序员的思想流程:我从头到尾流畅地阅读代码,确切地知道每一行代码的意义。这是超凡的问题解决途径,也是我所追求的。

计算机科学

学习计算机科学是第二个编程基础知识。我最近开始学习计算机科学,我很喜欢它,因为我正在超越表面的层次。例如,当我使用内置函数时,我将“在后台”了解其运行。我还在学习内存和运行时间等等其他主题。简而言之,我正在学习为什么计算机会做它所做的事情。

了解这个原因可以增加我的背景知识,让我更有见识,这样,我在写代码时会更加深思熟虑。例如,现在我对运行时间有了一些了解,我将选择使用二分查找,而不是循环访问列表中的每个元素。

它还丰富了我对核心编程概念运行的理解。例如,我正在处理一个递归问题,但没有得到预期的解决。经过仔细检查,我明白了其中的原因:它与调用堆栈的执行有关。而就在几个月前,我几乎完全不会意识到这一点。

以及使用“类”(class)。我在“类”上挣扎了很长一段时间,不敢用它。我知道怎么写,但不确定什么时候以及为什么要用它。我创建实例和调用方法,当我了解到这时我的计算机内部实际发生了什么时,这种情况发生了变化。当我有了一些背景后,我终于知道怎么用“类”了。在递归和类上,计算机科学填补了我知识的空白。

很多时候,基础知识被抛到了一边。进步很可能非常慢:当有所选择时,人们倾向于选择更“有趣”的方法来解决问题,这是一个耻辱。掌握基础知识的程序员似乎对编程充满信心:他们知道自己如此选择的方式和原因——这还可以改进他们的工作,提高他们的认可度。

此外,扎实的基础知识使学习新的语言和技术变得更容易。例如,花时间真正理解一种语言的核心概念,如迭代、递归和抽象,将有助于另一种语言的学习。简单地说,掌握了基础知识,就会有很多收获,而且几乎没有什么损失。


相关文档推荐

DeepSeek 搞钱指令库.PDF

1743659940  0.95MB 22页 积分5

T GDWJ 016 公立医院全面预算管理工作指南.PDF

1743652887  1.62MB 79页 积分6

人工智能技术发展与应用实践.PDF

1743586449 史树明 5.88MB 35页 积分6

DeepSeek行业应用案例集解锁.PDF

1743586338  5.03MB 152页 积分6

2025AI大模型产业市场前景及投资研究报告.PDF

1743586288  4.47MB 22页 积分0

AI韧性AI安全的革命性基准模型.PDF

1743586206  1.91MB 38页 积分4

Deepseek大模型生态报告.PDF

1743586174 赛迪 1.26MB 149页 积分6

DeepSeek在金融银行的应用方案.PDF

1743586138  1.12MB 146页 积分6

AI为中心的数字化转型战略理解与落地安排.PDF

1743586083 侯宏 1.42MB 16页 积分5

深度解读 DeepSeek 部署、使用、安全.PDF

1743586019 天津大学 5.47MB 46页 积分6

相关文章推荐