解决编程难题的实用方法指南 - praeclarum


我有时发现自己需要编写一些代码,但我不知道如何写。你有过这样的经历吗?以下是我在遇到困难时采取的步骤。这里没有巨大的启示,只是硬性规定的建议。

在输入任何代码之前,认真思考这个问题几个星期。

输入一个函数或写一个有你需要的输入和输出的类。

把函数分解成多个有明确目标的步骤。你可能不知道如何实现这些目标,但这是你未来的自己的问题。现在,你只是想写出高层次的算法。

为每一个步骤创建一个函数,并在其中抛出新的NotImplementedException()。它们的名字应该很长,而且要有解释,对它们的预期应该没有问题。如果你不知道怎么写,也没有关系。

现在,去实现这些函数中的几个。你知道它们并不都是困难的。有些甚至是有趣的! 建立起你的信心,实现那些简单的函数。取得进展的感觉很好,它可以让你大脑的分析部分在后台运行一会儿,而你则专注于琐碎的数字类型和文件IO。

是时候解决一些较难的函数了。就像你之前所做的那样,进入每一个问题,并将问题分解成若干步骤。你是对的,我要说的是。冲洗和重复。继续将这些困难的问题分解成步骤。把每个步骤变成一个有明确名称的函数。实施容易的问题。然后再把困难的问题分解成步骤。一次又一次地这样做。你会惊讶于你能真正完成多少事情。

很快(哈哈)你就会有一个80%完整的解决方案,只剩下几个讨厌的函数抛出NotImplemented。现在去搜索你最喜欢的软件包库,或代码库,或问答网站,或人工智能编程助手的实现。你很有可能不是第一个需要这个特定函数或部件的人。找到一些巨人,爬到他们上面,然后大叫 "我靠,世界上有很多聪明的程序员!"

好了,你已经搜遍了网络,但你仍然有几个讨厌的NotImplemented异常。现在是时候检查一下那些科学家了。在arXiv中输入你的问题陈述的每一个SEO变体。当然,其他人也曾研究过与你试图解决的问题相关的问题。他们很可能会提供一些见解或观点的转变,以帮助你将你的问题重塑为可解决的问题。就这样做。重新构思你的问题,把那些 "不执行 "的问题解决掉。

现在你有麻烦了。如果你仍然有一些没有实现的例外,而且没有巨人可以站在上面,也没有学者在这个特定的领域里纠缠不休,那么这一切就取决于你。大胆思考。跳出框框思考。你的职业生涯就靠它了。(开个玩笑,我希望。)也许洗澡可以帮助你思考?

我认为这些是所有程序员都会采取的步骤,但有时把它说出来也不错。

我特别重视函数分解。函数是一个强大的抽象,不仅仅是为了少写代码,也是为了思考问题。

请不要误解我对 "函数 "一词的使用,认为它只是指那些函数式程序员喜欢的东西。我指的是任何数据转化器:从低级的lambdas到带状态的IO处理的单体对象。