发布于 2026-01-06 4 阅读
0

我如何应对编程挑战

我如何应对编程挑战

去年这个时候,我正在做很多求职面试的测试,当时我用的是https://adventofcode.com 这个网站。

我知道你可以学习各种数据结构和算法来简化这些操作(我希望在以后的文章中再介绍一些我最喜欢的),但我采取的一种通用方法对我很有帮助,也可能对你们中的一些人有所帮助。

使用 TDD

我一直很喜欢测试驱动开发(TDD),而这类谜题非常适合TDD的思路。通常会提供一些示例来构建初始测试套件。算法通常会被分解成多个步骤(有时会明确地写成“在每个时钟周期……”)。

养成边做边检查的习惯,以便充分利用现有信息。在编写任何代码之前,先思考问题本身以及输入和输出之间的对应关系。

检查所有简单解决方案。

有模板

大多数挑战都包含几个常见任务:从文件中读取输入(忽略空行)、创建列表……、输出为 CSV 文件等等。

其中一些在你选择的语言中会有标准化的模式,你应该使用这些模式。有些可能需要一些错误处理。有些需要从标准库或第三方库加载代码。而所有这些都需要一个测试框架。

随着开发进程的推进,逐步建立一个实用工具列表,其中包含你熟悉使用、足够健壮且简洁的函数、类和包。它们并非设计给其他人使用,但你会经常用到它们。收集并珍藏它们。

思考简单

技术测试和编程挑战通常都旨在提供简短易懂的解决方案。如果你需要通过解决 P == NP 问题来提升代码速度,那么你使用的算法很可能并不合适。请找到另外两种解决问题的方法,并选择更简单的那一种。

比这更简单

想想最简单的可行方案,并用简洁的语言编写出来。

确保代码可读性强。现在不是追求花哨技巧的时候。如果程序在处理某个输入时出错,要便于修改。

但事情并非如此简单。

你仍然需要考虑各种极端情况、内存使用情况以及其他各种资源限制。想想在谜题的限制范围内,哪些环节可能会出错。Advent of Code 特别擅长在每天挑战的第二部分中检测出你代码中的极端情况。

快速思考

注意避免过早优化,但如果使用最简单的实现方式,预计会遇到输入数据过多和循环次数过多的问题。学习新的算法和数据结构。

文章来源:https://dev.to/craignicol/how-i-approach-coding-challenges-301