假设程序员是作者,并且编写代码来表达抽象的思想和概念,并且其他程序员应该阅读良好的代码而没有困难和误解,那么程序员是否应该参加写作课程来编写更好的代码?
抽象概念和现实世界中的问题/实体是编写优质代码的重要组成部分,并且对编码语言的良好掌握应该可以使程序员更轻松或以更好的方式表达自己的想法。此外,在尝试编写或重写某些代码以使其更好时,可以花很多时间来确定函数,变量或数据结构的名称。
我认为这也可以避免编写具有多种含义的代码,这通常会导致不同程序员之间的误解。代码应始终明确表达其功能。
假设程序员是作者,并且编写代码来表达抽象的思想和概念,并且其他程序员应该阅读良好的代码而没有困难和误解,那么程序员是否应该参加写作课程来编写更好的代码?
抽象概念和现实世界中的问题/实体是编写优质代码的重要组成部分,并且对编码语言的良好掌握应该可以使程序员更轻松或以更好的方式表达自己的想法。此外,在尝试编写或重写某些代码以使其更好时,可以花很多时间来确定函数,变量或数据结构的名称。
我认为这也可以避免编写具有多种含义的代码,这通常会导致不同程序员之间的误解。代码应始终明确表达其功能。
Answers:
编写源代码与写书完全不同。
两者都追求相同的目标:尽可能明确和易于理解,但是它们的执行方式却截然不同,并且编写者应学习的内容与软件开发人员应学习的内容不同。
修辞格在创作小说,诗歌等时很有价值,因为它们提高了作品的表现力。
您最近一次在源代码中看到矛盾或矛盾的是什么?拥有它们会有所帮助,还是对以后不得不维护此类源代码的任何开发人员都极为有害?
丰富的词汇在文学中受到高度赞赏。例如,威廉·莎士比亚的词汇量是2万到2.5万个单词。丰富的词汇量使阅读小说或诗歌更加有趣。
编写源代码时,您会期望不会英语流利的人阅读它。显示您对英语的了解对您的代码非常有害。如果您知道一个花哨的单词,它恰恰意味着您所需要的,但是您知道很多人不知道这个单词的含义,那么您应该找到一个表达性较低的同义词或一组解释该含义的单词。对于给定的项目,数千个单词的词汇通常就足够了。
请注意一个重要方面:尽管Google翻译对非母语使用者可能有很大帮助,但任何翻译人员都会遇到两个问题:
两种语言的词之间不一定有1:1的匹配。有些单词要么没有其他语言的翻译,要么多个单词可以翻译成外语的单个单词。例如,在俄语中,有大量针对特定下雪和寒冷天气的单词,在不失去其特殊性的情况下,通常不可能用法语或西班牙语进行翻译。
单词有时具有多种含义,并且该含义是根据上下文推论得出的。Google Translate尽管质量很高,但除了最基本的情况外,通常无法说明其含义。
表达方式也使散文更加丰富。作者希望读者具有一定的一般文化,并借此机会使文本更具表现力。
与前面的示例相似,当由非母语人士阅读时,此类表达可能会出现很大问题。但是,如果通常可以翻译一般词汇,则表达会更加成问题。
例如,英语不是我的母语,并且每天,我都会遇到不知道的表达式,包括StackExchange上的表达式。我试图猜测它们的含义,有时我是对的。但是有时我错了,并且谷歌搜索这些表达式没有帮助。
她/他的评论中的一个用户使我想起了一个例子,这个例子使我刚开始编程时就苦了很长时间:PHP的needle和haystack。我没有意识到相应的措辞,因此每次阅读文档时,我都想知道这是怎么回事。不用说C#sequence.Contains(element)
或优秀的Python element in sequence
是更好的选择。好吧,至少,不了解希伯来语的开发人员也必须遭受PHP的折磨,但这是另一回事。
文化参考。在文学中,包含一种特定文化的元素是很诱人的,这也使这本书更加丰富,有时阅读起来也更有趣。
但是,代码面向的是来自世界各地的开发人员。因此,对于意大利开发人员而言,显而易见的参考对于俄罗斯开发人员而言可能并不那么明显,并且每个印度男孩或女孩所知道的东西不一定一定会被美国程序员所知道。
谈到针头和干草堆的那个用户也提供了这样的文化参考的一个很好的例子:圣杯。谁不知道圣杯是什么?好吧,我的意思是,法语是“ Graal”,西班牙语是“ Grial”,而土耳其语是“ KutsalKâse”,但仍然如此。但是,有多少美国或欧洲开发商了解中国或印度的中世纪历史?为什么有人会认为每个中国和印度程序员都必须了解圣杯参考书?
任何开发人员都应该学习如何编写富有表现力的源代码。
任何开发人员都应在以下内容中解释其注释的原因:
int j = i + 1; // Creating i and adding 1 to it.
即使是完全错误的事实,也是很糟糕的。
任何开发人员都应该能够理解基本的重构以及它如何帮助使源代码更具表现力。
任何开发人员都应该记住,20%的时间是花在开发代码上,而80%的时间是在维护代码上。对于某些项目,它更像是5%-95%。
等等
本质上,编程接近技术文档。为螺栓编写规格表的人是否需要上课?并不是的。开发人员也是如此。任何人都应该在写每个单词时不要犯拼写错误,并且任何人都应该能够足够清晰地传达她的想法。除此之外,我不确定写作课程比计算机科学,IT安全或其他课程更有用。
可以通过其他方式学习源代码的表达性。superM 在回答中提到了其中之一:阅读良好的代码。我可以提到其他一些:
阅读《美丽代码》或《代码完整》等书籍,
要求有经验的开发人员来审查您的代码,
了解模式以及如何以及何时使用它们。
sequence.Contains(element)
或优秀的Python进行比较element in sequence
。因此,言辞在API中没有位置。
程序员应该上写作课来编写更好的代码吗?
不。程序员应该上写作课,学习写更好的散文。程序员应上编程课,以学习编写更好的代码。尽管有一些相似之处,但撰写散文和编写代码却大不相同。
并不是说程序员不应该编写类。他们应该!原因如下:
写作是任何受过教育的人必不可少的技能。如果写得好,您会显得更聪明。
尽管尽了最大的努力,程序员经常需要经常使用书面文字与其他人进行交流。
您不仅可以在编写类中学习技能,而且通常对程序员有用。例如,您将学习讨论他人的工作而不损害他们的感受,并且您将学会接受他人的批评而不会亲自对待。
我的代码越来越依赖于在业务和技术团队之间创建共享词汇表。我想说,提高您的写作技巧可以帮助您减少这些工作中的模棱两可和误解,但是这不可能帮助您提高代码的表达力。
表现力的文学观念与程序化的表现力观念不同。在许多情况下,语言的歧义甚至可以在非小说类作品中用作文学工具,以提高表达能力,因为它会引起读者各种意向和意想不到的文化,语言和符号联想。这种表达方式在编程中是不可取的。抽象比歧义更有价值。在编程中,抽象可能会增加认知负载的灵活性,从而增加灵活性。文学形式的抽象可能与编程产生相反的效果:您的写作越抽象,读者就越有可能认为您什么也没说。所有具体言语产生的符号和联想都具有价值,
但是,程序员不是机器。人类通常会从智力和情感增长中以意想不到的方式受益。提高写作质量可能会导致更大的客户同理心,因为您迫使自己面对沟通挑战。也许您会觉得那个客户说了他们想要的东西,然后您交付了它,他们意识到这不是他们的需要。也许您将学会集中精力处理未说的内容。
也许学会在陶轮上扔泥土将帮助您开始看到工艺与软件开发之间的相似之处。研究建筑设计师的交流方式可能会使您对在编程中建立设计模式的词汇有更深的了解。学习生物学可能会让您获得关于蚂蚁和蜜蜂如何发现和交流食物来源以及如何将这些简单机制转化为寻路算法的迷人见解。
在您的核心领域之外学习东西是值得的,因为好奇的人比没有的人更擅长开发。
就其价值而言,我几乎是文学专业的学生。我最终转投东亚研究专业,因为我对该科上的课程更感兴趣。如果我没有学习东亚研究,就有可能不在这个行业,因为当时学习日语的副作用使我变得更有价值,当时一家软件公司部分是因为语言技能而雇用我的。我仍然必须建立更深入的技术技能组合,但是学习任何东西的意外副作用都可以使您成为更好,更相关的软件专业人员。
当编程项目失败时,通常是由于通信失败,通常是围绕需求。尽管对英语的中等掌握可能足以实际编写代码,但良好的沟通能力对于编写正确的代码至关重要。在这个远程工作,基于文本的交流时代,英语写作是非常重要的交流技巧。
就是说,您的问题以非常简洁明了的方式编写-比与我合作过的大多数程序员都要好。我没看过代码,建议您集中精力用自己选择的编码语言表达自己。对于Java,我推荐Joshua Bloch的书“ Effective Java”。
编写代码和编写散文之间肯定有很大的区别。
在散文中,句子是按时间连接(或分开)的(它们彼此跟随以达到终点或含义的方式),但是在(有效的)代码中,您可以(可)从表中“重载”部分“故事”,并具有可重复性动作/回应。因此,与读者(散文)或用户(代码)的交互是完全不同的。
用另一种方式写“好”的散文和写“好”的代码是相似的:学习写(代码或散文)是一个过程,涉及很多错误(或思考/测试改进,或重新制定)以获取“优雅'。
我认为元素的化学期刊系统很优雅,因为它以非常紧凑的方式描述了我们使用的基本材料的某些基本属性,有点像高效的代码,但它肯定不是散文。开个玩笑有很多散文特质(使您陷入某种情绪,保持这种情绪,然后在意外时改变它),但这是一种糟糕的编码实践。
但是两种类型的写作都需要技巧。