如何成为优秀程序员第 1 期分享
我一直在听这个问题。“我应该学习哪些编程语言?” 我过去曾多次问过这个问题。当您第一次开始编程时,似乎所有成为优秀程序员的是您知道的编程语言的数量。几年后,我现在意识到情况并非如此。如果你真的想成为一个更好的程序员,而不是专注于学习更多的编程语言,你应该专注于编程的其他方面。
在您真正了解语言之前,您必须学习许多不同的编程语言。出于本文的目的,我将把它们分成两个不同的类别:
语言语法:每种语言都有自己编写if语句,for循环,函数调用等的方式。显然,在熟练掌握编程语言之前,你需要熟悉如何编写这些结构。虽然学习语言的语法很大程度上意味着将语法固定在肌肉记忆中,但了解语言的语法仍然是学习编程语言的必要步骤。
语言概念:除了语言的基本语法之外,每种编程语言都有自己的特性和概念,将其与其他编程语言区分开来。Python具有诸如装饰器和上下文管理器之类的构造。基于Lisp的语言通过宏提供代码生成作为第一类功能。在学习编程语言时,您会发现语言提供的这些功能。您将了解每个功能的用途以及如何使用它们。学习更多概念的好处在于它教会了你解决问题的新方法,但稍后会更多。
我认为,学习更多编程语言有两个主要优点。
首先,您可以快速利用任何使用您所知道的编程语言的项目。如果你了解Python,你几乎可以立即开始在Python中为代码库做贡献。虽然这对于了解更多语言的程序员来说是一个优势,但这只是一个小优势。通常,程序员只需几周就能熟练掌握新的编程语言。如果这是你想要学习这么多不同编程语言的原因,那么等待你想要工作的项目更有意义,这会迫使你学习一门新语言,因为它不会花太多时间是时候提升了。
学习更多编程语言的另一个更有趣的好处是,每种新语言都会为您介绍解决问题的新方法。这主要是因为在学习语言时,您将学习该语言提供的特定功能以及如何使用它们来解决问题。在某种程度上,学习一门新语言会“伸展你的思维”,让你以新的方式思考问题。例如,如果您学习了Lisp派生语言,您将学习如何使用代码生成来解决问题。将来,熟悉使用代码生成可以让您识别代码生成何时是解决问题的最佳方法。随着您学习更多编程语言,您将学习更多解决问题的方法。
即使学习更多编程语言确实为您提供了解决问题的更多方法,但最终选择解决特定问题的方法并不重要。比你知道的问题的方法数量更重要的是你知道如何解决问题的空间。一个优秀的程序员没有价值,因为他们可以解决每个其他程序员可以解决的同一组问题,只是以不同的方式。一个优秀的程序员很有价值,因为他们可以解决其他程序员无法解决的问题。
大多数编程语言和样式的设计都考虑到了类似的目的:使计算机可以轻松地表达算法和程序。虽然某些编程风格在表达某些程序时比其他编程风格更好,但它们只能使编写解决手头的特定问题稍微容易一些。在大多数情况下,使用面向对象样式可以解决的任何问题也可以在功能样式中解决,反之亦然。只需一种编程语言和一种编程风格,您就可以解决任何编程语言或风格中可解决的绝大多数问题。从更大的角度来看,编程语言和方法的特定选择主要是实现细节。
如果你真的想成为一个更好的程序员并扩大你可以解决的问题的空间,而不是专注于编程语言,你应该专注于实际上使你能够解决更多问题的编程部分。以下是编程语言之外的一些示例,这些示例具有扩展您可以解决的问题空间的知识:
操作系统
Web开发
分布式系统
联网
算法
安全
例如,您应该学习如何设置和使用数据库。几乎每个非平凡的程序都使用某种数据库来跟踪应用程序数据。为什么?因为数据库能够解决处理数据的问题,所以很难用几乎任何编程语言来处理。对于一些例子,许多数据库:
可以处理比您在典型编程语言中使用的数据更多的数据。
即使断电,保证数据也不会丢失。
使您的数据无法进入不一致状态。
如果您熟悉如何使用数据库,只需设置数据库即可轻松解决所有这些问题。无论您使用何种编程语言或编程范例,您都希望数据库能够为您处理这些问题。最终,学习如何使用数据库使您能够解决比学习另一种编程语言更多的问题。
这同样适用于列出的其他区域。它们中的每一个都使您能够解决比其他方式更多的问题。如何在不了解Web开发的情况下构建网站?如何在不知道分布式系统的情况下编写可以处理机器崩溃的应用程序?对于您学习的每个领域,您都能够解决以前无法解决的问题。
这与学习更多编程语言或范式完全不同,后者在很大程度上是可互换的。在大多数编程语言和样式之间没有足够的区别,学习新语言使您能够解决之前可能遇到的更多问题。在这一点上你想学习:如何以更多方式解决问题或如何解决更多问题?