如何保持程序员的好奇心
封面照片由Wil Stewart拍摄,来自Unsplash。
人们很容易对好奇心麻木。我们的生活充满压力,我们围绕着这些压力构建起一套固定的作息。有时,这些作息会让生活变成一个无法逃脱的旋转门。当你的生活依赖于维持现状时,保持好奇心就变得异常艰难。
我花很多时间用Python解决问题。解决问题需要创造力,而好奇心又能激发创造力。对创新软件解决方案的需求始终存在,但好奇心却时有时无。
当你的好奇心减弱时,不要就此放弃,认为有些人天生就对事物充满好奇,而你或许不是其中之一。好奇心并非一成不变,你可以学习如何变得更有好奇心。
如何培养好奇心
好奇心会传染。关注那些充满好奇心的人,你很可能也会被感染。一旦你的思维模式被好奇心所引导,你就会本能地将这种模式运用到所有事物中。
神秘感是好奇心的钥匙。欣然接受困惑的感觉,因为谜题无处不在。质疑绝对真理和公理,即使是本文中提到的那些。设计实验来检验前提。
要学会察觉自己的好奇心何时消退。我知道,每当我停止持续阅读时,我的好奇心就会严重下降。我说的不是阅读代码——而是指阅读任何书籍。这是一种智力营养不良,而解决之道在于摄取丰富的知识。
大量消费内容
养成被动式消费的习惯。通勤或做家务时听播客,午休时看纪录片。如果思绪飘忽,就让它自由驰骋。不要只专注于一个主题。多元化的内容摄入更有可能揭示出令你着迷的奥秘。
积极阅读那些特别吸引你的悬疑类内容。阅读长篇文章和书籍。认真聆听并做好笔记。但不要强迫自己进行这些内容的阅读。强迫自己会扼杀乐趣。
🦁关键要点:像狮子捕食猎物一样吸收信息。大部分时间被动地观察眼前的信息流。当好奇心作祟时,就凶猛地追逐它。
深入探索你现在感兴趣的事情
与滋养身体的饮食不同,激发好奇心的内容摄入没有计划,也没有时间表。随意探索各种主题,但也要深入探索。不要让你的好奇心停滞不前。追求你现在感兴趣的主题。
尽情探索各种可能性,但要避免陷入算法生成的陷阱。算法总是倾向于推送相似内容。主动寻找问题的答案。
💦关键要点:好奇心就像水通过毛细作用从树木的木质部向上流动一样。顺其自然,接受其中的曲折变化。让最终的目的地成为一个谜。
将学习视为对话
好奇心是自私与谦逊之间的一种拉锯战。你受到一种原始的求知欲驱使。然而,学习需要你发现自身理解的不足,认识到还有更多未知领域等待探索。
学习是一场对话。积极参与这场对话,提出问题。好的问题能够综合现有知识,并弥补理解上的不足。
♻️关键要点:好奇心就像一个 REPL:
- 阅读:消费内容。
- 评估:批判性地思考,提出问题,并发现解决方案。
- 打印:分享你的学习心得
- 循环:解读反馈并重新开始。
如何培养程序员的好奇心
培养好奇心需要练习。幸运的是,编程领域充满了谜题。你可以发现各种软件包和工具,学习各种编程语言,探索各种实现细节。
以下是我在编程过程中培养好奇心的两种方法。
以非预期方式使用物品
突破界限,进行实验。
我曾经在一家商业音视频安装公司担任程序员。在一次项目中,我们安装了一套由应用程序控制的分布式视频切换系统。该应用程序通过iPad向网络交换机发送TCP数据包,并利用VLAN解标记技术将网络上的视频接收器连接到发射器传输的广播流。
该应用程序与最新的交换机固件不兼容。IT部门拒绝降级固件,而应用程序开发人员直到项目截止日期很久之后才能提供补丁。但我可以配置该应用程序,使其向任何IP地址发送命令。
我可以编写一个 TCP 服务器来接收来自应用程序的命令,将它们转换为网络交换机的协议,然后转发给交换机。我需要一台机器来运行这个脚本。音频处理单元 (APU) 是一台 Linux 服务器,拥有充足的存储空间和内存。安装自定义脚本会使保修失效。
APU采用拖放式可视化编程界面进行编程。其中一个可用的“模块”可以在应用程序的沙箱内运行Lua脚本。但是,在沙箱中运行的脚本能否接收来自应用程序的命令并与网络交换机通信呢?
由于没有相关的限制说明,我做了一个实验。结果成功了!更棒的是,脚本块会在APU启动时自动运行。即使因断电或其他意外情况重启后,视频切换也能正常工作。
我的好奇心得到了回报。我们按时完成了工作。我的发现为客户创造了新的解决方案,并催生了内部工具,从而节省了安装时间和成本。
尝试破坏东西
破坏也可以带来成果。
我喜欢想办法“破坏”一门语言。这并非是要找出bug,而是要找到那些行为出乎意料的代码示例。而这一切总是始于一个问题。
“Python集合如何判断两个对象是否不同?”
知道从哪里开始寻找答案至关重要。Python 文档中关于集合的部分写得相当不错。
“哦,好的。集合使用一种算法来检查两个对象是否具有相同的哈希值,并且彼此是否相等。如果这两个检查都为真,那么这两个对象就无法区分,集合只能包含其中一个。”
掌握一点知识就能开启新的问题。
“你能‘欺骗’一个集合,让它认为两个不同的对象是不可区分的吗?”
现在有个有趣的小谜题。想想看,一个整数的哈希值就是它本身的值。你可以用 .__hash__()方法来控制自定义对象的哈希值。这意味着你可以创建一个对象,使其哈希值与整数的值相同1:
class NotOne:
def __hash__(self):
return 1
要让一个集合误认为NotOne实例相等1,你需要让它们彼此比较相等1。你可以通过实现一个始终返回 `None` 的方法,使NotOne对象与任何对象都相等 :.__eq__()True
class NotOne:
def __hash__(self):
return 1
def __eq__(self, other):
return True
1现在看看当你创建一个包含以下对象的集合和一个实例时会发生什么NotOne:
>>> n = NotOne()
>>> # Create a set S containing 1 and n
>>> S = {1, n}
>>> # S only contains 1
>>> S
{1}
>>> # But somehow n is in S!
>>> n in S
True
n和 是截然不同的对象1。n甚至不是一个数字,它不支持算术运算。但你永远无法将n和1放在同一个集合中,因为它们不符合集合的唯一性标准。任何包含 的集合1也包含 ,这感觉很奇怪n。
“这很奇怪。我想知道是否有办法欺骗一个集合,让它认为两个不不同的对象是彼此不同的?”
要实现这一点,需要一个不与其自身相等的对象。如果您之前使用过 IEEE 754 NaN 对象,您就知道它们符合这个条件。
“如果尝试将多个 NaN 值放入 Python 数据集中会发生什么?”
让我们一探究竟。
>>> S = {float("nan"), float("nan"), float("nan")}
>>> S
{nan, nan, nan}
“好吧,这很奇怪。但你肯定可以验证该集合中包含 NaN 对象,对吧?”
请看:
>>> float("nan") in S
False
我喜欢这样的例子。说实话,除了我的大脑可能有点懵之外,其他一切都没问题。寻找并理解这类例子可以增强你对代码的直觉,并激发你解决问题的新思路。
接下来该何去何从
从今天开始培养好奇心。多问问题,多做实验。要庆幸自己不可能了解一切。总有新的谜题等待我们去解开,总有新的事物值得我们去探索。
继续学习
以下五种资源可以帮助你了解更多关于好奇心的科学知识,并培养你自己的好奇心:
- 如何培养好奇心?斯科特·H·杨著。本书深入探讨好奇心的科学原理,并提供激发好奇心的技巧。
- 这是马蒂亚斯·格鲁伯撰写的《好奇心如何影响你的大脑》。探索好奇心在我们记忆信息方面所起的作用。
- 《好奇心的心理学和神经科学》,作者:塞莱斯特·基德和本杰明·Y·哈登。本书是对好奇心研究的综述。
- 《发现好奇心》,作者史蒂夫·莫尔德。1989年秋天,史蒂夫发现自己的大脑有点特别,这彻底改变了他的人生轨迹。而且是往好的方向改变。本书讲述了他对教育日益增长的热情,以及他探索人类学习方式的历程。
- Python 到底是怎么回事!这是一个有趣的项目,试图解释 Python 中一些反直觉的代码片段和鲜为人知的特性背后的运作原理。
每周订阅我的“好奇心与代码”简讯,和我一起培养好奇心吧!
文章来源:https://dev.to/somacdivad/how-to-stay-curious-as-a-coder-510b
