...我如何开发可以应用于所有语言而不仅仅是一种语言的编程技能?
这个问题的关键是超越语言而思考而不是使用您所编码的语言。
WAT?
有经验的会说多种语言的程序员会在自己的语言思维模型的抽象语法树(AST)中进行思考。一个人不认为“我这里需要一个for循环”,而是“我需要对某个东西进行循环”,并将其转换为该语言的适当的for或while或迭代器或递归。
这类似于在学习口语中所看到的。会说多种语言的人会流利地想到其中的含义,然后它会以给定的语言显示出来。
在一对带有眼动追踪的代码理解视频和眼动追踪代码实验(新手)的一对眼动视频中,可以看到有关此AST的一些线索,在该视频中可以观看初学者和经验丰富的程序员的眼球运动。人们可以看到有经验的程序员将代码“编译”到他们的思维模型中并在脑海中“运行”,而初学者则必须逐关键字遍历代码。
因此,开发适用于所有语言的编程技能问题的关键是学习多种语言,从而使人们可以远离拥有一种语言的思维模型,并具有自行针对问题生成AST的能力。母语,然后将其翻译成给定的语言。
一旦具备了在头部使用AST的能力,就可以在类似的思想流派中学习另一种语言(去Befunge距Java有点远,而距Forth则不那么多)变得容易得多-这就是“正义”将AST转换为一种新的语言,这在完成第三,第四和第五(等等)时间时要容易得多。
有一篇经典文章,《Real Programmers不要使用Pascal》。其中部分内容为:
...确定的Real Programmer可以用任何语言编写Fortran程序
还有一些您不能仅仅使用心理AST的功能-您也需要使用语言进行思考。这需要一些时间才能完成(我仍然被指控用Python 编写Perl代码,并且对我的第一个Lisp代码进行了评论,说“这是一个非常好的C程序。”)。
为此,我必须指出ACM发表的一篇文章,《如何不以任何语言编写Fortran》。本文的第三段(不是引号)直接解决了当前的问题:
良好的编码特性超越了所有通用编程语言。如果您将自己应用于代码,则几乎可以在任何代码中实现良好的设计和透明的样式。仅仅因为编程语言允许您编写错误的代码,并不意味着您必须这样做。如果编码器具有足够的创造力,那么为提高良好的风格和设计而设计的编程语言仍然可以用来编写糟糕的代码。您可以淹没在浴缸中,里面有一英寸深的水,并且可以轻松地编写一种完全没有可读性和维护性的程序,而该程序没有异常或行号,并且具有异常处理和泛型类型以及垃圾回收功能。无论您是编写Fortran还是Java,C ++或Smalltalk,您都可以(并且应该)选择编写优质的代码而不是不良的代码。
拥有AST不仅足够-还需要拥有可以将其翻译成其他语言的AST。掌握Fortran AST并用Java编写Fortran代码不是一件好事。人们还必须对语言及其习语足够熟悉,以便能够用语言进行思考(尽管我在最上面说了什么)。
我看过由不停止编写C代码的人编写的Java代码。有一个对象具有一种主要方法。在此对象中,有一堆由main
和调用的静态方法以及具有公共字段(因此看上去很像struts)的私有内部类。这是用Java编写的C代码。所有要做的就是将一种语言的语法翻译成另一种语言。
为了超越这一点,人们需要继续用多种语言编写代码,在设计代码时不要考虑这些语言,而在将设计转换成代码以正确使用语言习语时要考虑它们。
达到此目标的唯一方法-能够开发适用于所有语言的编程技能-是继续学习语言,并使这种思维编程语言保持灵活,而不是链接到一种语言。
(我向ChaosPandion道歉,因为他大量借鉴了他提出的想法。)