plc-st编程语言学习
“我应该首先学习哪种编程语言?”
许多初学者在开始学习编码时都会遇到这个常见问题。
“哪种是最好的编程语言?”
在学习了一些语言之后,许多开发人员都会问这个问题。
在这篇文章中,您将获得我对这些问题的答案。 但我想与您分享的更重要的事情是: 如何掌握学习新语言的技能。
我不仅会给你一条鱼,还会教你钓鱼。
对于熟练的程序员来说,学习新的编程语言应该很容易。 在周末学习或几个小时后,用新语言编写代码是正常的。 而优秀的程序员只会选择任务要求的任何语言,语言是一种工具。
![](https://i-blog.csdnimg.cn/blog_migrate/2253366f2b797bc5ae504120168eb7a9.png)
(图片来源:tenor.com)
是的,的确如此,但是您需要学习的是“如何学习新的编程语言”,而不是特定的编程语言。 掌握学习“all languages”
的技能并不需要人才,它需要PL和实践的核心知识。
让我详细解释一下。
如果编程语言是汽车
记住-编程语言是工具,它们是程序员发明的。 世界上有数千种编程语言,其中只有约20种被广泛用于IT行业。 如果再多考虑一点,您会发现这些语言具有许多共同的基础知识。
![](https://i-blog.csdnimg.cn/blog_migrate/8fef2f32a063a5a8f40b7f7b03751dfe.png)
(图片来源:http://crashworks.org)
以汽车为例 ,世界上有很多汽车品牌。 有些汽车紧凑而强劲,有些又慢又笨重,不同品牌的汽车代表着不同的驾驶体验。
如果您知道如何驾驶一辆汽车,那么您将知道如何驾驶大多数其他汽车,即使新车是另一个品牌。
为什么? 由于不同品牌的汽车共有许多共同点,因此它们基本上是用发动机和轮胎制造的。 它们的设计目的相同:将您带到目标。
编程语言的目的是:表达您的想法。
为什么会有这么多的编程语言
编程语言是一种表达工具,它包含两个方面:
- 与其他程序员一起表达您的想法,以便其他人可以理解您的代码,并与您一起维护代码库。
- 将您的想法转移到计算机上(通过编译器或解释器),以使它们按需运行命令。
因此,您知道代码对人和机器都是“消息”。 这涉及到编程语言设计和实现之间的权衡。
![](https://i-blog.csdnimg.cn/blog_migrate/11f0b23bbec80a991a614b2a126bd5e0.png)
主要原因应为:
1.硬件和计算机语言理论在不断发展,一般而言,编程语言的设计更易于使用,更强大。
2.随着计算机的广泛使用,涉及计算机的问题领域越来越多,针对特定的不同领域发明了不同的编程语言。
3.不同的程序员具有不同的思维方式。
语言具有非常不同的语法或功能,但是从形式上讲,它们在本质上是相同的,它们都是图灵完整的 。 用简单的词表示: 所有语言都可以用于实现任意算法。
当然,您不需要学习所有类型的语言,但是学习更多的编程语言将帮助您为任何给定的任务选择合适的语言。
编程语言基础
几乎每种编程语言都包含以下类别的元素,它们实际上都是关于“抽象”的:
- 1.数据类型和数据抽象
- 2.控制流和控制抽象
- 3.低层抽象
- 4.特定领域的补充和抽象
编程语言中还有许多共同的功能。 我们之所以能够掌握所有编程语言的真正原因是: 语言概念的数量有限 ,通常少于15种。
- 程序
- 递归的
- 静态型
- 动态类型
- 类型推断
- Lambda函数
- 面向对象
- 垃圾收集
- 指针
- 延续性
- 元编程
- 巨集
- 例外
语言概念往往像设计原则一样是不变的。
编程语言设计者彼此借鉴思想或功能,但是实现方式不同。 因此有时我们可以说PL_C是PL_A和PL_B的儿子,而PL族谱将是这样的:
![](https://i-blog.csdnimg.cn/blog_migrate/6fb4feac0a9bd7214b5dcdad9e15800d.png)
很好地理解这些语言概念不仅可以帮助您更快地学习语言,还可以帮助您编写更好的代码。 例如,功能性语言与结构化语言具有不同的编码风格和抽象实践,如果您不明白它的意思,则会编写错误的代码。
专注于语言概念,而不是语法
![](https://i-blog.csdnimg.cn/blog_migrate/b1ba8b3e22c7a441f788032a6cd6fe6b.png)
(图片来源:twitter @slidenerdtech)
所以我们想学习语言概念,但是怎么做呢?
我的建议是了解由该概念或功能解决的问题,它的优缺点,有时需要知道它是如何实现的。
让我们以GC为例,第一个问题应该是什么是GC?
在Google上进行快速搜索后,我们将重定向到Wikipedia GC页面 。 GC是为解决内存管理问题而发明的,它可以减少程序中的内存错误,由于我们不需要手动处理内存,因此使用GC编写代码将更加容易。 但是代价就是性能。 当您将编程语言用于GC时,请注意GC如何为您处理内存。
经过一些练习后,您需要了解GC的工作原理,使用了哪些算法? GC的种类也很多,并且还在不断发展。
这是您学习新语言时学习新语言概念的好机会。 例如,如果Ruby是您的第一种OO语言,那么您就有机会认真学习OO的优缺点。
当您学习另一种OO语言时,对OO的良好理解将非常有帮助。
创建或实现编程语言
不用担心,解释器和编译器只是另一个程序,它们的输入是您的代码,输出是运行您的代码或将您的代码编译为字节代码或二进制代码,很简单,对吧?
![](https://i-blog.csdnimg.cn/blog_migrate/471f63d802de8160b387602b4804a0c2.png)
(图片来源:f.hatena.ne.jp)
如果您的语言的语法并不复杂,则实施一种语言不需要太多的工作。 看一下这个项目: 创建Lisp ,任何语言都可以用来实现Lisp。 8cc是用于C编程语言的编译器,如果您要编写编译器,它是一个很好的参考。
还有一些书籍适合您:
《 EOPL 》是一本教科书,其中包含许多同声传译。 《 Programming Language Pragmatics》也是一本很好的学习编程语言的书。
学习新语言的步骤
以“学习所有语言”为目标,如果您按照以下步骤操作,将有助于您更快地学习:
#1了解该语言的设计理念和一般语言功能
例如,如果您开始学习Ruby,那么让我们找到Ruby有什么特别之处吗?
![](https://i-blog.csdnimg.cn/blog_migrate/0671c019565e9a4f4c2d19da5feaf25a.png)
Emmm,让我们深入了解一下: http ://www.ruby-lang.org/en/about/
总结您需要了解的要点后,您便开始学习它:
- 专注于简单性和生产力,代码易于阅读
- 有了解释器,您就拥有了GC,这也意味着性能对于某些任务可能是个问题。
- 一切都是对象,好的,是带有OOP的语言,甚至是“纯OOP”。
- 灵活性,太好了! 我们可以重新定义语言的许多部分。
了解语言的最重要特征,包括其优缺点。 当您开始使用这种新语言进行编码时,这将对您有很大帮助,这似乎对您来说是一个路线图。
#2通过教程或书籍学习语法和实践
在第2步中,您需要掌握语法部分,基本IO,调试器工具以及此新语言的单元测试。
如果您是入门者,请查找权威书籍,例如语言创建者编写的书籍,或者只是在Amazon上搜索具有语言名称的书籍,并找到带有良好注释的书籍。
如果您是语言专家,则可以找到有关该语言的一些简单指南,甚至一些使用该语言的示例代码。 看一下learningxinyminutes.com 。
请记住,在学习语法时,您需要用手编写代码,而不仅仅是复制代码。 使用exercism.io来练习新的语言,有指导者来审查您的代码,免费提供建议,这很棒。
#3使用新语言读写更多代码
好的,您需要以一种新的语言开始一个项目,并且要具有相关的生态系统,工具或库的知识。 您可以从简单的游戏开始,例如猜数字游戏,例如简单的书店或待办应用程序。 您可以在Github上找到许多类似的项目。
#4了解语言实施的更多细节
并非每种语言都必需。 正如我在《成为一名程序员》中所说,有抱负的程序员会对他们的语言的细节和实现感兴趣。 有时,甚至会出现错误,因为我们对语言实现没有足够的了解。
![](https://i-blog.csdnimg.cn/blog_migrate/0dc11554c0af67e5583c227635dfd7d4.png)
那么,我应该首先开始哪一个?
好的,最后我们需要回答这个问题。 它取决于许多因素,简单的指导是:
1:您是否有特定语言的指导者,还是需要在课堂上学习特定语言?
这很简单,如果您的老师告诉您我们需要学习C进行练习。 好的,C是您的第一门编程语言,因为您有导师(您的老师)和同学,所以更容易开始使用此帮助。
2:您知道要构建吗?
这也很简单,如果要构建Web应用程序,则需要学习Javascript / Python / Ruby,如果要构建游戏,请选择C ++,如果要处理数据,请选择Python / R,如果要编写Android应用,选择Java / Kotlin。
3:您想申请需要特定语言的工作吗?
恩,您应该只按照工作说明,立即学习。
得到它了? 只需选择您所选领域中最常用的语言,不要花太多时间选择第一种编程语言。 在拥有更多经验之后,Swift上手,如果您不喜欢它或问题域发生了变化,请转移到另一位。
那么,哪种语言是最好的?
![](https://i-blog.csdnimg.cn/blog_migrate/0dbeb8acd69488be694ec5468db29fb4.png)
(图片来源:turnoff.us)
这也取决于您的领域,每种语言都有其优缺点。 没有适合每种任务的语言。 如果存在,我们只需要学习这一点,对吗? 记住没有银弹 。
对于个人品味,我最喜欢的语言包括C / Ruby / Lua / OCaml,我的工作效率很高。 这可能不是您的喜好,您应该尝试使用其他语言并找到您喜欢的语言。
有人说,除非您至少了解5种编程语言,否则不要认为自己是认真的程序员。 如前所述,您不应专注于学习越来越多的语言,而应尝试学习更多的语言概念或设计原则。
如果在工作中使用结构化语言,为什么不尝试学习功能性语言,如果使用动态类型的语言,为什么不尝试学习静态类型的语言呢?
![](https://i-blog.csdnimg.cn/blog_migrate/8e89c14cd874e90850ad728446887ace.png)
那是我选择下一种语言的指南。
翻译自: https://hackernoon.com/how-to-learn-all-programming-languages-yes-all-c41j3t8l
plc-st编程语言学习