通过上一篇 《写一个 DNS 服务器》内的源码,拼凑出一个 simple_dns_server.py
,或者直接通过 LearnPython.app 内获得原始代码,总而言之,此时的你,应该完成了一个 DNS 服务器。
一个我们在互联网时代无法离开的,关注度却又是很低的产品,我们作为一个初学者,完成了雏形。而且,从代码上看,并不深涩。
『看起来并不深涩』,不算容易的事。
虽然我们会说 Python 是 English-like
的编程语言,它接近自然语法。但是一个工具在不同人的手中,呈现出来的姿态也是不一样的。特别在一些涉及底层的协议时,如果有没有现成的 module 把中间环节隐藏了,代码很容易会变得晦涩。
对初学者而言,总有东拼西凑的时候,这很正常,只是这种拼凑的能力未经锤炼,实际代码往往看起来也会比较乱。
开始的时候,『乱』没有关系,能运行就好。
简而言之,『并不深涩』,不容易的,特别对于初学者来说。
《写一个 DNS 服务器》中,一些写法、函数的调用方式是特定的,完全意义上的特定,跟 Python 甚至都没有什么直接关系。因为面向的是 DNS 协议,这个我们甚少会接触到,里面一些具体的参数,到底有什么作用,这跟 Python 确实没有关系,只跟 DNS 协议本身有关系。
所以,这个过程中,肯定会产生一个疑问: 为什么代码要这么写?!
重新梳理下,我自己当年为什么要去写一个 DNS 服务器?
为了技术入门?不是,那时已经入门太久了。
为了好奇?也不是,好奇的东西很多,更没有这么多时间浪费在 DNS 上面。
因为闲?这个倒是一个好的因由,可惜,现在也还没有达到这个状态。
真正的原因很简单: 为了用户体验。
如果我们自己控制了 DNS 服务器,那么用户只需要将 DNS 服务器设定成我们的就可以,就不需要配置其它记录了。而且还可以有其它特性的对应,比如多节点的自动切换、负载均衡等。
如果, 入门 有考核标准的话,上面这句话就是一个很好的标准。
我会使用 Python 去完成某个灵感
,Python 就像是一种胶水。这个过程中,先寻找的是原材料,可能是别人已有的方案、第三方 package、甚至某个代码片段。灵感
对应的,很可能是全新的领域,或者是一个并不常见的领域,那么这些原材料可以让我们更快地理解实现最终产品的粗略路线。如果路线勾勒
的结果是倾向于否定的,那么,也可以考虑放弃这个灵感。
遇到了难以解决的问题,绕过去,绕过去。不要制定自己真的无法完成的目标,勇而不智,不好。
然后是 实施 的过程,也同样,你想做的事情,只是需要时间,就能产出结果。犹如 Python 中我们讲过的 自省机制,你也一定会建立这种自省机制,知道什么能完成,什么不能完成,并且在这个基础上,最终完成。
方才,有些务虚,我们接下来务实地谈一谈:
大抵是如此的过程,到最后,完成了就可以了。
可能过很长时间后,待你再从头去看这些代码,里面涉及到的基本协议,也会忘记得精光,没有关系,it works 更重要。另外一方面,让代码看起来容易理解些,也很重要,不至于回头看时感叹 『写的什么东西呀』。
DNS 相关的,确实比较少见。
我们之前介绍 Awesome Python 时,还『嫌』它太繁多了,但即使如此繁多,也找不到 DNS 相关的。
但 寻找 并不是一个问题,找到一个小小的线索,不要气馁,再挖下去,就能找到自己想要的了。
在这个过程中,你的疑问也会消失,不会想着 『为什么代码要这么写』,不过是知道了基础的用法,然后不断尝试、出错、修正、学习、it works,以及 遗忘 ……
好在代码语言,可以帮我们把思考的过程沉淀下来,并不断实现复用。