[译]致年轻Haskell爱好者的一封信

致年轻Haskell爱好者的一封信

2014年8月1日 周五

作者:Gershom Bazerman

译者的话:这篇文章刊登于第53期的《Hacker Monthly》。作者以一个Haskell狂热爱好者的视角,阐述了自身对学习,分享进行自我批判所得的经验。其观点真实,深刻,不仅适用于Haskell学习者,而且适用于大多数追求技术的爱好者。它对学习动机和结果的独到分析,和其中透露出对一个开放,多样化的技术社区环境的憧憬,对求知的渴望,引起了广泛的共鸣。译者在此与你共勉之。

原文地址

下面这封信不是关于什么“老手”知道而新手不知道的事情。相反,它是关于经验教训,我们都需要学习一次以上,并时刻提醒自己。它是关于常见的,可以理解的倾向,还有那学习到新东西时的兴奋,和在试图决定如何最好地、以一种听的进去的方式、传达这种兴奋的重要性和意义给其他人时遇到的困难。这封信写的很具体,但仅仅是因为我发现,如果我们不谈论具体细节,泛泛而谈则毫无意义。这适用于代数,并且毫不逊色地适用于其它模糊的概念。这封信全是我要记住的事情,还有我想分享的建议。对此,当我在互联网上遭遇到谁是谁非的问题时,我期望我会想到提醒自己。

你最近进入了强类型的函数式编程的世界,你经决定了它是很不错的。你已经写了一个或两个程序或两个库,而你已得到了它的窍门。你浏览IRC,每一天都听到新的单词和思想。总有一些新的概念去学习,新的库去探索,新的方式来重构你的代码,新类型来实例化。

现在,你是一个社会人,你想继续下去,并分享你所学到的不错的事情。你已经学地足以辨别虚假的命题和真实的命题,而且你想向前进,去打倒世界上所有的虚假命题。

这真的是你想要做的么?你想帮助别人吗,你想教会别人新的美好的事物吗?你想分享使你兴奋的事情吗?或者你想对自己感觉更好,确认你的编程更好,确认你是聪明的,知道地更多;坚持一个利基语言,而对主流进行攻击?当然,你要做到前者。但是你的一部分可能暗地里想要做后者,因为在我的经验里这部分存在于所有人中。这是我们的自尊心,它驱使我们向好的事物,但它也可以阻挡我们,让我们像傻子一样,并且,最糟糕的是,阻挡我们与其他人正常沟通真正关心的事情。

Haskell不是建立在伟大的想法上的,虽然它有那些。它是建立在一种如何对待想法的文化上。它不是建立在攻击他人之上,而是在寻找自己的路;不去破除烂的想法(无论多么烂的),但用例子展示出,我们毕竟也不需要这些想法。

在函数式编程中,我们证明靠的不是相互矛盾,而是靠共同创造。如果你想教或宣扬函数式编程,或者只是一起讨论建库和项目,将有助于你顺利地了解到此道德准则。

你比下一个开发者知道的更多,或者你认为这样。这是因为你已经学会的一些东西。那么,你如何帮助他们也学习到这些呢?你不会告诉他们这是为聪明人准备的编程语言。你不会告诉他们因为你使用这种语言所以你是聪明人。你会告诉他们,数据类型像是会犯错误的人,就像我们自己一样。它们帮助我们推理,并指出错误,因为虽然软件变得越来越复杂,我们仍然坚持使用同样的老脑筋。如果他们告诉你他们不需要数据类型来发现错误,告诉他们,他们一定的比你更聪明,因为你肯定需要。但是还有,告诉他们,如果他们让编译器帮助他们的话,他们因为不使用数据类型而多使用的脑力可以变成更大,更好,更有创意的想法。

这不是聪明人的语言,虽然它能做一些很巧妙的东西。这是一个可以做简单事情也可以做聪明事情的语言,有时我们想简单,有时我们要聪明一点。但是,我们不给聪明加分。有时候,它只是好玩,就像解决一个填字游戏或弹奏巧妙的巴赫序曲,或学习探戈。我们要使简单的事情保持简单,这样棘手的事情才能成为可能。

这是不是一种“更加的数学”或“数学地”或“关于数学”的语言。是的,在深层次,编程就是数学。但是,如果某人反对这一点,这不是因为他是一个愚蠢的人,一个坏人,或怀有恶意的人。他们反对,因为他们有对数学不好的想法强加给了他们。“数学”是被人们挥舞着的工具,告诉他们,他们都不够好,他们无法学到,他们不具备学习的心态。这是一个肮脏的谎言。数学不是计算 - 这是电脑的。数学也不只是抽象的符号。数学也不是学习Haskell的先决条件。如果我没说错的话,Haskell让人觉得数学有趣。我们的逻辑不应该是数学是很难的,所以编程也是很难的。相反,它应该是编程可以很有趣,这意味着数学也可以很有趣。有些人可能会反对说编程不仅是数学,因为它也是工程学以及创造性和实用性的权衡。但是,奇怪的是,除了我们被灌输的教科书理论,这些就都是数学的实践要素。

我认识伟大的Haskell程序员,甚至伟大的计算机科学家,他们仅知道一点点线性代数,要么从来不屑于学习范畴论。要成为一个伟大的Haskell程序员,你并不需要那些东西。它可能是一种方法。需要范畴论的唯一一件事就是采取好的范畴和数学概念,并将其导入回编程,并把这个过程翻译过来,让别人不需要进行和你一样的过程。你甚至都不需要自己去做,如果你有耐心,因为最终会有人过来,并且为你做好。

对知识的教学和传播而言,最重要的一点,虽不是最难的,是强调知识是对大家都有用的。没有人是太年轻,太有经验,太老,太固守自己的方式,太激动,数学不够,等等。相信每个人,不攻击人,即使是最脆弱的。 *攻击别人建立好争辩的文化。它传播到第二个弱者,以此类推,并最终到一个只是对最后一个大论据说错话而引发不好的回忆的无辜的旁观者。

最难的,第二重要的事情,就是要放下你的骄傲。如果你想授人以渔,你要同情他们是怎么想的,和他们的感受。如果你的主要目标是传播知识,那么你一定要无情的自我批判那些你说的和你做的,碍事的事情。你无法去判断 - 让别人去。你必须相信他们。我告诉过你,这是困难的。所以,如果有人发现你让人不愉快,那是你的错。如果你说的东西使人受伤或生气发怒,苦恼或感觉不好并不是他们的错。这并不是关于什么是有害的,而是有关你没有具体的如你所愿地交流所致的失败。所以,接受批评,为冒犯别人道歉(不只是为让人难过,而且要为了你做的伤人的事),并试图了解为什么他们会有这样的感觉,为下一次做准备。

请注意,如果你已经让人感到糟糕,他们可能不会有心情解释为什么或者怎么样,因为他们对你的看法已经一落千丈。所以,不要认定,他们必须或应该为自己做解释,虽然你可以礼貌地询问。请记住,知识并不在人的行为之上。通常情况下,你不需要知道一个人感觉他该这样做的原因,而只是他们的所做,所以你才能尊重这件事。如果你发现自己一定要求严格的解释,那就问问自己,如果你知道了,它会改变你的行为吗?怎么改变呢?如果不会,那么学会放手。

也请记住,是你的所做所为使他们气愤,而不是你。很容易弄错这种区别而出防守的反应。“战斗或逃跑”妨碍清晰的思维和你的同情心;试着深吸一口气,抑或散个步,直到肾上腺素不再使你的真实意图出轨。

这会让你满意吗?那要看情况。如果你的目标是要了解一切,使每个人都同意在某种意义上客观真实的一切事物,你不会满意的。如果你的目标是让最广泛的,最好的,最多样化和最好玩的Haskell社区成为可能,在相互尊重和理解的气氛下进行交互,那么它就是会让你满意的唯一事情。

如果你犯了使是(你自认的)最温和的错误,无论是在社会交往或技术细节里,迅速道歉,并收回你的话,不要讲客气。你会失去什么呢?只有你的骄傲。谁会记得呢?只有你。什么收获呢?正直,最终这样的正直感觉会远比伤害别人或改变别人的想法而获得的廉价短暂的刺激更加充实。

有时,无论出于何种原因,有人不想跟你说话,因为与你的谈话在某处变成了争论。也许是他们在争,也许是你,也许你两都在争。这没关系,学会走开。从经验中学习如何更好地沟通,如何避免这种模式,如何始终保持更积极,更友好,更具前瞻性。对该项努力感到自豪。不要在他们的背后谈论他们,因为这只会助长自己不好的冲动。相反,想想如何改变自己。

你的自尊并不需要你的帮忙。你可能会觉得你需要证明你自己,但你不需要。其他人,在一般情况下,有比评判你更好的事情去花他们的时间,即使你可能有时会觉得并非如此。你知道你有才华,你有学到东西,并且创造东西,这将被时间所承认。没人愿意听你的,而且他们听到的越多,他们相信的越少,越会分散你真正想要的 ,这不是培养你的自尊,不是成为伟大的人 ,而是完成一些伟大的事情,甚至只是找到别人分享一些伟大的事情。事实上,如果有人的自尊应该得到照顾,那就是与你对话的人。他们对自己的能力和自己的价值更加自信,他们就会更加愿意学习新的东西,并承认自己的知识,像所有我们人一样,是有限的,局部的。你必须相信自己是愿意学习新东西的,如果你想培养更多的学生,你必须在别人那培养这种自信。

知识不是强加。知识是乐趣。任何人,只要有时间和倾向,都可以得到它。不要只是教育别人,而且还要继续学习,因为总是有更多你不知道的。(如果没有,哇,那将是令人沮丧的,因为你下面还有什么可学的?)学会珍惜所有的意见,因为他们都来自经验,所有这些经验都能教会我们一些东西。动态类型的倡导者们给我们带来了巨大的JIT技术飞跃。如果你对数值的优化感兴趣,你需要在C ++或Fortran语言的工作中成为先驱。和你一样,我宁愿写Haskell。但重要的不只是工具 ,还有思想 ,你会发现他们从各处涌来。

事实上,我们有太多东西要学,我们靠设立壁垒来引导学习, - 宣布某些工具,领域,语​​言或社区不值得我们花时间。这不是因为他们没有价值,而是因为这样做是一个一次性评估太多条选择的方法。缩小你的知识范围,以增加其深度,这是好的而且必要的。但为有其他人在努力探索而感到庆幸吧!谁知道他们会从那些探索中带回什么。

如果有人在互联网上聊起编程,他们已经领先,已经对工艺和知识感兴趣了。你可能不同意他们的意见,但你们永远能相互学习到东西。也许时间和地点都不适合分享想法和摆脱纠纷。没关系。会有另外一个时间和地点,也或许不会有。这有一个满是人的互联网,而你并不需要成为每个人的良师益友。你应该避免成为任何人的敌人,因为你和他们的时间弥足珍贵,与其将它浪费在反感上,不如用来学习新的东西。

这个建议不是个一次性的命题。每当我们学到新的东西,并希望分享它的时候,都会再次面临这些问题 - 宣扬新的知识、一次性全部推翻已有的智慧 - 已有的智慧越深刻,我们就想抨击地越激烈。但是,如果我们是谦虚的听众和考虑周到的老师,我们不仅教得更好,传播更多的知识,同时也学的更多,并更加享受这个过程。套用Rilke的“致一个年轻诗人的信”:如果已经从必然中涌现,则知识是好的。其判断就在于它的本质:没有其他。

感谢Haskell社区的各种帮我完善这篇文章的朋友。只是因为我不想暗示你有支持,或者给予这个依然是很初步,非常个人化的观点,以更广泛的一群人的许可。这些人我怀疑会在他们内部之间,和我之间于各种细节产生分歧。

*:据指出,这个建议是不普遍的。显然,还有一些东西值得更有针对性的回答。偏执,直接骚扰和有害的行为,等等。所以,请在阅读本段时,将它应用于谈论技术问题,而不是其他的东西,那里有人比我更加有资格给出建议。

你可能感兴趣的:([译]致年轻Haskell爱好者的一封信)