勇于尝试并抛弃 “我不是程序员” 的口头禅
在过去的几年里,我的大部分咨询工作都在企业培训方面。我的课程的许多参与者是已经开发软件多年的专业人士,他们只是想学习新的语言和技术。但是,也有一些人是编程新手;他们意识到编程技能可能对他们的职业生涯产生的潜力,并且很兴奋地学习,但他们不一定确定从哪里开始。
此外,鉴于网站(更不用说移动应用程序)在现代世界中如此普及,人们不仅仅想编程。他们想构建 Web 应用程序。他们想构建移动应用程序。他们想开始控制他们的计算机,而不仅仅是被动的用户。
而且,尽管 Linux Journal 的读者往往是从事技术职业和职位的人,但你们中的许多人可能与网络工程师、系统管理员、销售工程师和数据科学家类似,他们一直都在使用 Linux 和开源软件,但从未认为自己是程序员。
因此,在本文中,我鼓励您尝试学习编程,开始入门并构建一些简单的 Web 应用程序。我不会说这可以在几分钟内完成;您肯定需要学习许多不同的技能。但是,您知道吗?每个人,包括那些已经编程多年的人,都需要不断学习新事物和提高技能,以跟上不断变化的技术。
因此,如果您已准备好迎接充满刺激的终身学习,以及永无止境的学习和进步,我绝对鼓励您勇于尝试,并将 “我不是程序员” 的口头禅替换为 “是的,我确实可以做到” 的信念。
语言编程新手(和潜在的新手)问我的最大的问题可能是:“我应该学习哪种语言?”
他们问这个问题有几个不同的原因。首先,他们想要一种对他们的工作有实际用途的语言。其次,他们想要一种相当容易使用的语言。第三,他们想要一种具有他们感兴趣的功能的语言。
因此,让我先说明几件事。在您的职业生涯中,您几乎不可避免地需要学习几种不同的编程语言。它们都同样强大。但是,有些语言的学习曲线比其他语言更陡峭,期望您入门时就具备比其他语言更多的知识。
我还应该补充一点,许多编程新手并非完全零基础入门。他们已经掌握了一些编程技能,例如 bash 脚本。Bash 是一种语言,我见过用它完成各种令人惊叹的事情,但总的来说,我谈论的是更高级和更复杂的语言,它们可以用更少的代码做更多的事情。
我长期以来建议的第一语言一直是 Python。它是一种真正的语言,但它也相对容易学习,并且为初学者提供了大量的资源。当然,一种语言相对容易学习并不意味着它没有学习曲线,您应该为此做好准备。
如果 Python 不是您的菜,或者您想尝试其他语言,我实际上认为 JavaScript 也是一个不错的选择。我确实认为 JavaScript 的语法和行为,尽管在过去几年中得到了极大的改进,但对人们来说仍然可能有点令人困惑。JavaScript 的优势在于,每个人都可以从他们的 Web 浏览器中轻松访问它。此外,JavaScript 具有不可否认的酷炫因素;您可以获得即时反馈,并立即认识到您已加入 Web 开发人员的世界。
此外,任何从事 Web 开发的人都必须学习 JavaScript,因为它是在客户端编程中唯一的严肃选择。(我知道还存在其他语言,但它们要么需要插件,要么编译为 JavaScript。)如果您学习 JavaScript,您可以在服务器端和客户端使用相同的语言。
如果您还在犹豫不决,我建议您选择 Python。虽然安装可能有点复杂,但 Jupyter notebook 提供了一个易于使用且友好的环境,用于交互式实验和编程。
我不建议使用编译型语言,例如 Java 或 C#,主要是因为它们的学习曲线要陡峭得多。面向对象编程很棒,但您不应该仅仅为了编写 “Hello, world” 就去学习它。此外,我强烈相信像 Python、JavaScript 和 Ruby 这样的动态语言,它们不需要您在使用变量之前声明它们,这对于新手程序员(以及有经验的程序员)来说可能令人生畏。
我再怎么强调学习编程语言就像学习人类语言一样也不为过。这是一项终身事业,您将在其中不断发现新事物,并且经常意识到您可以更好地表达自己。
一旦您学会了一种语言,您会发现自己会学习其他语言。幸运的是,您会看到模式和相似之处,并且您能够将您对一种语言的理解转移到另一种语言中。
工具和环境您还需要找到一个编辑器来编辑您的代码。我一直是 Emacs 的长期粉丝,但即使我也认识到与 Emacs 和 Vim 等传统 UNIX 工具相关的学习曲线可能会让许多新手感到困惑和沮丧。我建议从交互式 shell 开始,例如 Jupyter Notebook,甚至可能不在您自己的计算机上,而是在由其他人维护的系统上。
但是,随着时间的推移,您将希望开发在开发环境之外也有用的应用程序,因此您需要选择一个编辑器。虽然我自己不使用它们,但我对 JetBrains 生产的各种编辑器印象深刻。在 Python 的情况下,JetBrains 的 PyCharm IDE 有一个免费的 “社区版”,对于许多人的需求来说已经足够了。其他人对 Sublime Text 感到满意,它可以处理大量的编程语言。
只有在开发软件多年之后,我才养成了使用版本控制来保存旧代码副本的习惯。这是一个错误;今天,我使用 Git 来存储我编写和做的几乎所有事情的旧版本。它给了我对我的代码的信心,这是我在作为专业开发人员的最初几年里没有的。
鉴于 Git 在开源世界中功能强大且无处不在,我鼓励您学习 Git。此外,您应该努力理解 Git 正在做什么以及它是如何工作的。这些想法非常简单,但很多人在使用 Git 时没有完全理解,然后陷入困境,这种情况出奇地多。
此外,虽然 GitHub 只是众多提供托管服务的公司之一,但它已成功成为开源开发人员编写、协作和分发代码的主要系统。如果您想参与开源生态系统,您需要学习 Git,最好是通过命令行,但如果一开始使用 GUI 工具(例如 SourceTree)会让事情变得更容易,您也可以这样做。
Web 开发我从事 Web 开发已经很长时间了(自 1993 年以来)。我从不停止对现代 Web 应用程序框架的强大功能和简洁性感到惊叹。它们使创建和部署 Web 应用程序变得容易而直接。但是,这假设您知道如何编程以及 Web 的底层技术:HTML、CSS 和 JavaScript。
的确,如果您想创建 Web 应用程序,基本上无法绕过学习这三者的基础知识。(再说一遍,您可以看到学习 JavaScript 编程的优势,因为它减少了您需要学习的事物数量。)您不需要成为这三件事方面的专家,但是学习一些基本教程将大大有助于使一切对您来说更清晰。
与其试图掌握它们中的任何一个或全部,我强烈建议在开始之前尽可能少地学习。选择一个使用您喜欢的编程语言的框架,并尝试选择一个极简的 Web 框架,一个不会尝试做太多事情,但文档完善,因此很可能帮助您学习,而不是让您感到沮丧的框架。例如,如果您决定使用 Python 编程,我建议使用 Flask。
编程的魔力,尤其是 Web 开发的魔力的一部分,是您可以从您的工作中获得的即时反馈(和满足感)。我认为更重要的是开始构建东西,犯错误,学习您需要前进的技术,然后在第二天犯所有新的错误。
因此,一旦您掌握了 Python 的基本知识,您就可以阅读 Flask 教程。然后开始构建一个小的 Flask 应用程序。使用 CSS 和 JavaScript 添加一些色彩。了解这些不同的部分如何协同工作。
然后,一旦您开始了解方向,您将不得不做出一个艰难的选择:前端还是后端?也就是说,您是更喜欢在后端工作,配置服务器、进行数据库查询(稍后会详细介绍)、处理后端任务并生成 HTML 和 JSON 的某种组合?或者,您是更喜欢在前端工作,主要通过 JavaScript 和 CSS 创建用户看到的界面?
理论上,您不必选择。当然,存在许多 “全栈开发人员”,他们知道如何处理前端和后端项目,但很少有人在两者方面都同样擅长。更典型的情况是,人们将 70% 或 80% 的时间用于做一件事情,并且在另一件事情上也表现得相当不错。
您应该选择哪个?这很难说;每个都有优点和缺点。
数据库如果您有兴趣进行 Web 开发,您需要考虑数据库。您需要一些东西来存储信息,然后在以后检索它。
我是关系数据库的忠实拥护者。好消息是它们已经存在一段时间了,它们稳定、高效且灵活。坏消息是您使用关系数据库所做的一切都是通过一种名为 SQL 的语言来完成的。
这意味着如果您想进行 Web 开发,并且您将使用关系数据库,您可能需要学习另一种语言,即 SQL。
我认为 SQL 有很多优点。但是,学习曲线可能很陡峭,如果您想快速入门,它可能会有点让人不知所措。
因此,我建议您使用 ORM——“对象关系映射器”,它可以让您在编程语言中工作,并将函数调用转换为 SQL。现代 Web 框架要么自带 ORM,要么可以轻松配置为与它们一起工作。这可以大大降低学习曲线,使使用关系数据库变得容易得多。
另一种选择是使用所谓的 NoSQL 数据库,例如 MongoDB。此类数据库有自己的查询语言,但通常通过您正在使用的编程语言的库进行访问。对于许多简单的任务,NoSQL 数据库涉及的工作量和开销要少得多,这使其成为那些仍处于职业生涯起步阶段的人的良好可能解决方案。
结论在过去的几年里,我遇到(并教过!)许多人,他们确信自己无法编程,但最终还是做到了。这可能需要一些时间和精力,但如果您用心去做,您绝对可以编写 Web 应用程序。如果您还不是软件开发人员,我希望本指南能帮助您至少迈出开始编写一些软件的第一步。请记住,我的建议只是建议——通往成功的道路有很多条。