程序员是否应该参加写作课程来增强代码的表达能力?


15

假设程序员是作者,并且编写代码来表达抽象的思想和概念,并且其他程序员应该阅读良好的代码而没有困难和误解,那么程序员是否应该参加写作课程来编写更好的代码?

抽象概念和现实世界中的问题/实体是编写优质代码的重要组成部分,并且对编码语言的良好掌握应该可以使程序员更轻松或以更好的方式表达自己的想法。此外,在尝试编写或重写某些代码以使其更好时,可以花很多时间来确定函数,变量或数据结构的名称。

我认为这也可以避免编写具有多种含义的代码,这通常会导致不同程序员之间的误解。代码应始终明确表达其功能。



2
如果人们可以在18岁以上以后学会清晰书写,尤其是在使用外语时(在IT中就是这样),那将是很好的。问题是,是否存在一种可以在相对较短的时间内取得良好效果的教学方法。我记得当我第一次上大学时,我接受了科学英语课程,我想它对我有一定帮助(是的,我以前写的比这差:)。
NoChance 2012年

1
什么是“代码表现力”?我认为这与编程语言的表现力不同,因为没有什么写作课程可以改变这种情况……
Andres F.

1
blog.codinghorror.com/recommended-reading-for-developers- >请参阅代码完成2.我读过的最好的“如何正确编写代码”书。
马查多

1
@JoseFaeti,那么,你在书中很有品位,先生。:-)无休止的页面讨论如何正确编写“ if”语句?算我。:-)
马查多

Answers:


25

1.写作课?并不是的。

编写源代码与写书完全不同。

两者都追求相同的目标:尽可能明确和易于理解,但是它们的执行方式却截然不同,并且编写者应学习的内容与软件开发人员应学习的内容不同。

示例1:修辞格

修辞格在创作小说,诗歌等时很有价值,因为它们提高了作品的表现力。

您最近一次在源代码中看到矛盾或矛盾的是什么?拥有它们会有所帮助,还是对以后不得不维护此类源代码的任何开发人员都极为有害?

示例2:词汇

丰富的词汇在文学中受到高度赞赏。例如,威廉·莎士比亚的词汇量是2万到2.5万个单词。丰富的词汇量使阅读小说或诗歌更加有趣。

编写源代码时,您会期望不会英语流利的人阅读它。显示您对英语的了解对您的代码非常有害。如果您知道一个花哨的单词,它恰恰意味着您所需要的,但是您知道很多人不知道这个单词的含义,那么您应该找到一个表达性较低的同义词或一组解释该含义的单词。对于给定的项目,数千个单词的词汇通常就足够了。

请注意一个重要方面:尽管Google翻译对非母语使用者可能有很大帮助,但任何翻译人员都会遇到两个问题:

  • 两种语言的词之间不一定有1:1的匹配。有些单词要么没有其他语言的翻译,要么多个单词可以翻译成外语的单个单词。例如,在俄语中,有大量针对特定下雪和寒冷天气的单词,在不失去其特殊性的情况下,通常不可能用法语或西班牙语进行翻译。

  • 单词有时具有多种含义,并且该含义是根据上下文推论得出的。Google Translate尽管质量很高,但除了最基本的情况外,通常无法说明其含义。

示例3:表达式

表达方式也使散文更加丰富。作者希望读者具有一定的一般文化,并借此机会使文本更具表现力。

与前面的示例相似,当由非母语人士阅读时,此类表达可能会出现很大问题。但是,如果通常可以翻译一般词汇,则表达会更加成问题。

例如,英语不是我的母语,并且每天,我都会遇到不知道的表达式,包括StackExchange上的表达式。我试图猜测它们的含义,有时我是对的。但是有时我错了,并且谷歌搜索这些表达式没有帮助。

她/他的评论中的一个用户使我想起了一个例子,这个例子使我刚开始编程时就苦了很长时间:PHP的needlehaystack。我没有意识到相应的措辞,因此每次阅读文档时,我都想知道这是怎么回事。不用说C#sequence.Contains(element)或优秀的Python element in sequence是更好的选择。好吧,至少,不了解希伯来语的开发人员也必须遭受PHP的折磨,但这是另一回事。

范例4:文化参考

文化参考。在文学中,包含一种特定文化的元素是很诱人的,这也使这本书更加丰富,有时阅读起来也更有趣。

但是,代码面向的是来自世界各地的开发人员。因此,对于意大利开发人员而言,显而易见的参考对于俄罗斯开发人员而言可能并不那么明显,并且每个印度男孩或女孩所知道的东西不一定一定会被美国程序员所知道。

谈到针头和干草堆的那个用户也提供了这样的文化参考的一个很好的例子:圣杯。谁不知道圣杯是什么?好吧,我的意思是,法语是“ Graal”,西班牙语是“ Grial”,而土耳其语是“ KutsalKâse”,但仍然如此。但是,有多少美国或欧洲开发商了解中国或印度的中世纪历史?为什么有人会认为每个中国和印度程序员都必须了解圣杯参考书?

2.编写富有表现力的源代码的经验教训?当然。

  • 任何开发人员都应该学习如何编写富有表现力的源代码。

  • 任何开发人员都应在以下内容中解释其注释的原因:

    int j = i + 1; // Creating i and adding 1 to it.
    

    即使是完全错误的事实,也是很糟糕的。

  • 任何开发人员都应该能够理解基本的重构以及它如何帮助使源代码更具表现力。

  • 任何开发人员都应该记住,20%的时间是花在开发代码上,而80%的时间是在维护代码上。对于某些项目,它更像是5%-95%。

  • 等等


本质上,编程接近技术文档。为螺栓编写规格表的人是否需要上课?并不是的。开发人员也是如此。任何人都应该在写每个单词时不要犯拼写错误,并且任何人都应该能够足够清晰地传达她的想法。除此之外,我不确定写作课程比计算机科学,IT安全或其他课程更有用。

可以通过其他方式学习源代码的表达性。superM 在回答中提到了其中之一:阅读良好的代码。我可以提到其他一些:

  • 阅读《美丽代码》或《代码完整》等书籍,

  • 要求有经验的开发人员来审查您的代码,

  • 了解模式以及如何以及何时使用它们。


+1好答案。表达力和简洁非常重要,但是写作课可能不是最佳的培训时间。每个人都应该自觉地努力编写显而易见的,可自我描述的代码,而我认为其余的代码就不用考虑实际的教训了。
丹尼尔·B

有文档,电子邮件,...以及代码-与您的同事,老板,用户,未来的自我等等进行交流的书面部分。但是,请不要诗歌。
2012年

我明白了。实际上,我在考虑使用特定于域的语言。我达到了使用特定领域语言进行编程的感觉,而不是使用通用编程语言的基本语法的感觉。这使您的代码更容易理解和直接使用,即使对于非程序员也是如此。我想知道这是否是由于我的英语词汇不好,因此想到了上课的想法。
Jose Faeti 2012年

一般而言,这是一个很好的答案,但是我在代码中看到了修辞格。例如,PHP的少数几个好功能之一是,它的所有搜索/查找功能都在大海捞针中寻找针头。
user949300 '16

@ user949300:这是我非常讨厌PHP的原因之一。作为非英语母语者,我不知道相应的表达方式,对我而言,这些用语几乎无济于事。将其与C#sequence.Contains(element)或优秀的Python进行比较element in sequence。因此,言辞在API中没有位置。
Arseni Mourzenko '16

11

程序员应该上写作课来编写更好的代码吗?

。程序员应该上写作课,学习写更好的散文。程序员应上编程课,以学习编写更好的代码。尽管有一些相似之处,但撰写散文和编写代码却大不相同。

并不是说程序员不应该编写类。他们应该!原因如下:

  • 写作是任何受过教育的人必不可少的技能。如果写得好,您会显得更聪明。

  • 尽管尽了最大的努力,程序员经常需要经常使用书面文字与其他人进行交流。

  • 您不仅可以在编写类中学习技能,而且通常对程序员有用。例如,您将学习讨论他人的工作而不损害他们的感受,并且您将学会接受他人的批评而不会亲自对待。


这才是重点。即使您的代码不一定会更好,您也将成为更好的人,特别是在与其他程序员或同事进行交流时。我想我的问题应该用不同的表达方式:)
Jose Faeti 2012年

2
这非常。擅长撰写散文是任何专业人士的一项关键技能
Zachary K

6

我的代码越来越依赖于在业务和技术团队之间创建共享词汇表。我想说,提高您的写作技巧可以帮助您减少这些工作中的模棱两可和误解,但是这不可能帮助您提高代码的表达力。

表现力的文学观念与程序化的表现力观念不同。在许多情况下,语言的歧义甚至可以在非小说类作品中用作文学工具,以提高表达能力,因为它会引起读者各种意向和意想不到的文化,语言和符号联想。这种表达方式在编程中是不可取的。抽象比歧义更有价值。在编程中,抽象可能会增加认知负载的灵活性,从而增加灵活性。文学形式的抽象可能与编程产生相反的效果:您的写作越抽象,读者就越有可能认为您什么也没说。所有具体言语产生的符号和联想都具有价值,

但是,程序员不是机器。人类通常会从智力和情感增长中以意想不到的方式受益。提高写作质量可能会导致更大的客户同理心,因为您迫使自己面对沟通挑战。也许您会觉得那个客户说了他们想要的东西,然后您交付了它,他们意识到这不是他们的需要。也许您将学会集中精力处理未说的内容。

也许学会在陶轮上扔泥土将帮助您开始看到工艺与软件开发之间的相似之处。研究建筑设计师的交流方式可能会使您对在编程中建立设计模式的词汇有更深的了解。学习生物学可能会让您获得关于蚂蚁和蜜蜂如何发现和交流食物来源以及如何将这些简单机制转化为寻路算法的迷人见解。

在您的核心领域之外学习东西是值得的,因为好奇的人比没有的人更擅长开发。

就其价值而言,我几乎是文学专业的学生。我最终转投东亚研究专业,因为我对该科上的课程更感兴趣。如果我没有学习东亚研究,就有可能不在这个行业,因为当时学习日语的副作用使我变得更有价值,当时一家软件公司部分是因为语言技能而雇用我的。我仍然必须建立更深入的技术技能组合,但是学习任何东西的意外副作用都可以使您成为更好,更相关的软件专业人员。


+1:“我的代码越来越依赖于在业务和技术团队之间创建共享词汇。”:非常重要!许多错误源于误解,因为分析师和开发人员对两个不同的事物使用特定的术语。
乔治

4

当编程项目失败时,通常是由于通信失败,通常是围绕需求。尽管对英语的中等掌握可能足以实际编写代码,但良好的沟通能力对于编写正确的代码至关重要。在这个远程工作,基于文本的交流时代,英语写作是非常重要的交流技巧。

就是说,您的问题以非常简洁明了的方式编写-比与我合作过的大多数程序员都要好。我没看过代码,建议您集中精力用自己选择的编码语言表达自己。对于Java,我推荐Joshua Bloch的书“ Effective Java”。


谢谢,我正在努力!实际上,我到达了通用编程语言的语法不足以在编码时表达自己的地步。我现在正在编程预处理器工具,以增强语言语法,并针对同一问题实现特定于域的语言,这可能比尝试以通用编程语言强制表现性更好。
Jose Faeti 2012年

3

就像作家是通过阅读世界经典来教书的,因此程序员也要通过阅读优秀的代码来受教育。但是有一个小问题。尽管文学中有公认的巨人,但编程中却很少。如果有的话,他们可能会“说”另一种语言。(我什至不确定建议阅读Tanenbaum的Minix源代码是否合理)

有许多流行的方法可以使代码更具可读性(=>可维护性),例如编写注释,提供有意义的名称等。此外,许多公司都建立了编写代码的规则,这使一切变得更加容易。

无论如何,像许多优秀的作家一样,程序员永远不会对自己的代码感到满意。因此,知道何时停止与编写质量代码一样重要。


2

我总是发现在编写完每一段代码之后都停下来再读一次,以为您以前从未见过它,这使我大步前进。

更好的办法是让一个熟悉编程的朋友阅读您的代码,而不告诉他们代码的作用。


0

我认为这不会有帮助;创意写作是关于情节,角色发展和对话的,而不是清晰地表达技术概念。技术写作可能会有所帮助,但我对此表示怀疑-它们只是非常不同的一种写作!

并注意“可读”代码是主观的,并且主要是语法风格和常见用语(这在语言之间甚至团队之间都不同)

但是,为变量,类和方法选择好名字很重要。在一定程度上,每个开发人员都将成为正在开发领域的某些方面的主题专家,因此正确使用领域术语至关重要。

同行评审可以帮助您建立词汇量和自信心


0

编写代码和编写散文之间肯定有很大的区别。

在散文中,句子是按时间连接(或分开)的(它们彼此跟随以达到终点或含义的方式),但是在(有效的)代码中,您可以(可)从表中“重载”部分“故事”,并具有可重复性动作/回应。因此,与读者(散文)或用户(代码)的交互是完全不同的。

用另一种方式写“好”的散文和写“好”的代码是相似的:学习写(代码或散文)是一个过程,涉及很多错误(或思考/测试改进,或重新制定)以获取“优雅'。

我认为元素的化学期刊系统很优雅,因为它以非常紧凑的方式描述了我们使用的基本材料的某些基本属性,有点像高效的代码,但它肯定不是散文。开个玩笑有很多散文特质(使您陷入某种情绪,保持这种情绪,然后在意外时改变它),但这是一种糟糕的编码实践。

但是两种类型的写作都需要技巧。


-1

从我的角度来看,基本的英语和语法对于程序员来说就足够了。但是,任何打破单调编程例程的事物都将焕发新生,因此编写课程对于程序员来说将是轻松的。


4
一个单调的编程例程可能比修改课程更好地解决职业问题。
艾略特·鲍尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.