作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
尼克·麦克雷的头像

尼克·麦克雷博士

尼古拉斯是一名专业的软件工程师,对高质量的工艺充满热情. 他喜欢架构和编写一流的代码.

专业知识

以前在

deepblocks
分享

编程是一项伟大的技能. 无论是在个人层面还是在职业层面,这都是非常有益的, 赋予你构建、修补和发明的能力. 它可以打开通往各种职业道路的大门,带来巨大的好处, 哪怕是一份可观的薪水, 工作自由 你想要的时间和地点或以上所有.

毫无疑问,越来越多的人, 来自各种各样的背景, 正在决定学习编程. 但, 每个处理这个任务的人很快就会面临一个不愉快的现实:学习编程很难.

一开始,很多代码都很复杂,令人困惑,根本没有任何意义. 与预期相反, “我不明白”的感觉,的问题可能会持续很长一段时间, 让曾经充满希望的初学者感到绝望, 失去了, 并准备放弃.

这个故事的寓意是:做好准备. 的 通往程序员天堂之路 如果一开始没有正确的心态,它会很快失去吸引力吗.

在本文中, 我会试着给你一些指导,告诉你在旅途中会发生什么, 怎样做最好呢, 还有什么工具 Resources 你可能会发现这对你很有帮助.

通往程序员天堂的旅程始于一步.

期待什么

也许这很明显, 但首先要确定的是编程, 其核心是, 是一门技术学科. 你最早学习的技能将需要大量的“精确”和“正确”,试图偷工减料将使你一事无成. 你至少要学一点数学,还有很多可能的东西 感觉 比如数学,比如程序逻辑.

关键是,学习编程的基础需要大量的关注和实践. 然而,无数的技术人员和非技术人员, 取得了 这段旅程 在你面前 所以不要气馁. 我们会看到, 对于像你这样的人来说,有大量的Resources可以帮助他们尽可能地简化这个过程.

学习编程并不容易.

编程的学习曲线在一开始是最陡峭的. 有大量的“基本面”需要吸收, 包括编程语言的各个部分(表达式), 变量, 数据类型, 运营商, 循环, 条件语句, 功能, 类), 以及了解代码将使用多少计算机时间和内存空间的技术(复杂性). 您将编写许多第一次无法运行的代码, 因此,您将不得不接受每个程序员存在的祸根:调试.

一旦你学会了如何写代码,你就能学会如何写代码 健壮的 code. 使代码高效, 易于阅读和理解, 而且很容易扩展, 是一门艺术, 而且是不断发展的. 您将能够开始探索不同的软件哲学, 从简单的“程序员”变成“软件架构师”.“这也是一个需要大量时间和练习的过程, 但你做得越好, 你就会发现为你敞开的机会越多.

如何学习编程

每个人的旅程 编程的天堂 是不同的,但有一些好的原则,所有的旅行者都可以从中受益. 如果你刚刚开始,下面是我建议的基本流程:

1. 选择你的目的地:选择一门语言,任何语言

如果你认真学习编程,你选择的语言真的不太重要. 大多数流行的编程语言都有相同的基本概念, 当你真正掌握了用第一门语言编程的窍门时, 拿起一个新的会比第一次更容易. 如果你正在通过大学学位课程学习, 或类似的, 你的语言可能会为你选择.

无论如何,除非你知道 完全 从长远来看,你想做什么, 我只推荐五种语言, 哪一个在容易学习之间取得了平衡, 知识的广泛性, 还有丰富的长期就业前景: Ruby, JavaScript, Python, C, Java.

以下是对每个问题的一些一般性说明,以帮助你做出决定:

解释型语言

解释性语言是 更容易上手. 这是因为它们的源代码一写好就可以运行. 相比之下, 编译 语言在编写和运行代码之间需要一个额外的步骤.

因此,解释语言 允许更快的编码,但是他们 没有有效地利用计算机Resources,确实如此。 bug更容易不被发现. 它们最适合性能不是优先级的应用程序. 这些语言在web开发中非常流行. 事实上,其中之一,JavaScript,是 只有 可以直接在web浏览器中运行的语言, 这使得它迅速崛起为最赚钱的语言之一.

语言优点缺点常用于
Ruby
  • 极其灵活的语法.
  • 很容易上手.
  • 高需求造就了高薪工作.
  • 这种灵活性可能会掩盖许多潜在的过程.
  • 缓慢的性能使其不适合高端应用程序.
JavaScript
  • 浏览器内软件的唯一选项.
  • 对每个现代网站都至关重要.
  • 极高的需求意味着大量高薪工作.
  • 复杂的语法有时会令人困惑.
  • 对于初学者来说,比Ruby或Python更具挑战性.
Python
  • 优雅、极简的类型语法深受实践者的喜爱.
  • 很容易上手.
  • 缓慢的性能意味着不适合高端应用程序.
  • 可怜的可伸缩性. 语言设计在大型应用程序中会产生问题.
  • Web后端. 看到 Django.
  • 科学研究和学术. 看到 SciPy.

编译语言

当代码是 编译,它在运行之前从人类可读的代码转换为优化的机器代码. 结果 运行得更快更有效 而不是解释语言. 这样做的编译器必须, 作为其工作的一部分, 确保所有已编码的内容都“有意义”,”,, 结果是, 它可以 识别和防止多种类型的错误 解释性语言容易受到影响.

由于这个原因,使用这些语言很难避免错误或糟糕的代码. 它们将迫使您更深入地了解“幕后”到底发生了什么 你会学到更多关于电脑的知识 真的 作品. 代价是这些语言 更多的劳动密集型,一般来说 学习起来更具挑战性 对于初学者来说.

编译语言用于要求性能和可靠性的应用程序, 包括嵌入式应用程序, 哪个可以在Resources限制严格的硬件上运行, 和大, 复杂的应用程序, 在那里,即使是一个小虫子也能造成严重破坏.

语言优点缺点常用于
C
  • 能提供比任何其他“高级编程语言”更好的性能吗."
  • 会教你最多关于电脑如何工作的知识吗.
  • 可能是这个列表中最难掌握的.
  • 操作系统.
  • 高端电子游戏.
  • 嵌入式系统.
  • 机器人与人工智能.
Java
  • 最广泛使用的语言.
  • 严格的打字要求清晰有效的思维方式.
  • 复杂的语法阅读和处理起来可能很麻烦.
  • 被许多人认为是过时的、单一的、接近衰落的.
  • 大型企业应用.
  • Web开发.
  • 安卓开发.

HTML和CSS:不是编程语言

应该注意的是,HTML和CSS, 几乎所有网页都使用过这种方法, 是 不是编程语言. 它们是表象语言, 用来定义某物的外观和它应该包含的内容, 但不是它应该怎么做. 不过, 它们可能是一个很好的起点, 因为它们更容易拿起来, 他会教你怎样正确地打字. 此外,如果你打算做任何web开发,无论如何你都必须在某个时候学习它们.

2. 从小事做起

学习需要时间,有很多东西需要吸收. 如果你试图在第一天就构建一个完整的应用程序,那是行不通的. 为了不让自己感到沮丧,你可以从解决简单的小问题开始,然后循序渐进.

例如, 传统上学习一门新语言时编写的第一个程序是“Hello World”程序, 它只是在屏幕上打印“Hello World”这几个字. 在大多数语言中, 几乎不可能写出一个更简单的程序, 很明显,这个程序没有什么实际用途. 然而, 它仍然包含了语言的许多基本部分, 因此,这是介绍自己如何输入语言的完美方式.

从这里, 你可以写一些数字的加减运算, 然后是接受用户输入的东西. 然后你可以学习条件句, 哪些是做决定的方式, 和循环, 执行重复性任务. 很快, 您将准备好构建第一个对象, 此时,您可以开始尝试构建完整的应用程序.

3. 要有耐心

编程的核心概念可能相当具有挑战性. 如果你不知道计算机在更深层次上是如何工作的,那么其中很多都不是直观的.

例如, 我刚出道的时候, I found debugging to be an infuriating process; it didn’t 感觉 like programming. 而不是编写新的代码来做一些很酷的新事情, 我要花一整天的时间来整理我写的东西, 试着弄清楚, “这次我怎么搞砸了??挠头,准备放弃. 最终, 我会发现我在某个地方漏掉了一个分号, 或者用TAB代替空格, 等我的代码又能工作的时候, 这将是一天的结束. I would 感觉 like a total idiot; it would 感觉 like such a waste of time.

学习编程需要很大的毅力, 尤其是当你觉得自己一事无成的时候.

这种事一定会发生在你身上,而且会让你发疯的. 所以,成功的关键之一是: 要有耐心,对自己宽容一点. 一些 最好的建议 关于主题建议关注过程,而不是目标. 如果你专注于你的最终目标(“我想在六月底建立一个网站”),你会气馁的, 感觉自己很失败. 让自己花尽可能多的时间来取得进步,你会更成功.

4. 练习练习练习

就像任何技能一样,要想精通它,归根结底还是要靠练习. 没有什么比做一件事,学会如何去做更好的了! 即使你每周只能抽出几个小时, 如果你坚持有规律地练习, 你会, 有一天,, 发现自己知道如何编程. 最终, 你会对事物有一种直觉, 一开始要花一整天的时间(比如追踪一个bug), 现在可以只花几秒钟吗.

当你觉得自己或多或少掌握了编程的基本技巧时, 练习的一个好方法是开始你的第一个项目. 设想一个您想要构建的简单应用程序, 比如待办事项清单, 还是计算器, 从小事做起), 试一试吧. 这将教你如何解决建筑和设计问题, 然后把不同的部分组装起来,这样它们就能组装成一个整体. 这些基本技能将使您真正称自己为程序员.

Resources

取决于你的目标, 学习风格, 和手段, 你可能想要在你的旅程中使用不同的Resources. 以帮助您确定哪些方法适合您, 下面是一些你可以使用的工具的快速总结, 命令, 约, 从更结构化的学习到更松散的学习.

这些工具和Resources将帮助您学习编码.

结构化的学习

这是提供讲师的选项类别, 家庭作业, 测试, 成绩, 最后期限, 如果你不把学习放在首位,后果会很严重. 这些是你必须去上课或不及格的选择.

大学学历

最昂贵的, 对于许多, 最有价值的选择, 一个正式的大学学位将为你在编程和计算机技术领域的蓬勃发展奠定最好的基础. 你的成就将以学位的形式得到认可(这是进入专业市场的一个重要优势)。. 但更重要的是, 你会对计算机的一切有一个深刻而透彻的理解, 你的写作能力也是一流的, 有效的软件将反映这一点.

这里有一些你可以期望从任何像样的大学课程中深入学习的东西, 在其他地方找到彻底的指导可能会更加困难.

  • 电路 -几乎所有计算机硬件的基本物理原理.
  • 数字逻辑电路 -如何用电路表示真理和逻辑结构.
  • 微处理器和计算机系统 -逻辑电路是如何组合成可编程计算机的. 这些小金属别针和印刷电线上发生了什么.
  • 操作系统 -如何编写计算机程序来管理, 组织, 保护自己, 并使多个应用安全运行.
  • 数据库 -如何存储和复制大量数据而不丢失, 腐蚀它, 或者让搜查变得不可能.
  • 网络 -不同且不相关的计算机系统如何相互通信.
  • 高等数学 -包括微积分和线性代数. 对于任何高级或前沿领域的职业都是必不可少的.
  • 信号处理 -如何跨越从模拟世界到数字世界的边界,反之亦然.
  • 数值方法 -当现实世界的问题无法在计算机中完全解决时.

计算机科学和工程学院会把你打得落花流水, 你必须做出牺牲,奉献自己来完成它. 但回报是值得的. 我努力争取自己的学位, 但我收到它的那天仍然是我一生中最骄傲的日子之一.

训练

所谓的“训练营”项目已经出现,以满足那些没有时间或Resources去追求正式学位的人的需求, 但都愿意努力工作, 并且至少学会了开始软件开发生涯所需的最低限度的知识. 在成本和所需的承诺, 它们介于正式学位和下面讨论的自主选择之间.

训练营通常包括8至12周的高强度学习,费用约为10,000美元. 它们在短时间内涵盖了大量的材料, 在此期间,你将不得不牺牲大部分其他的追求. 但, 它们承诺让您为现实世界的软件开发做好准备, 让你走上编程生涯的快车道. 许多训练营在职业生涯中达到高潮, 或者在你毕业后不久就给你安排一份带薪的工作.

训练营是一个相对较新的爆炸性现象. 像这样, 他们的成功率仍然很难衡量, 而且许多学校在为毕业生就业方面还没有良好的记录. 话虽如此, 随着这一新兴行业的不断发展,现有的项目只会越来越好. 只要你仔细研究,你可能会发现这是一个完美的选择.

大多数训练营都是当地的项目,所以你必须看看你所在城镇有什么项目. 如果你住在大城市,也许你能在网上找到你要找的东西 这个列表, or 这一个.

半结构化的学习

每天都有越来越多的Resources可供那些在结构和指导方面工作得最好的人使用, 但是没有时间和Resources去参加正式的学位或训练营项目. 这些选择通常是完全在线提供的,其中许多是完全免费的! 由于对此类服务的高需求已经变得明显, 这些工具在复杂性和价值交付方面发展迅速. 软件开发课程自然地推动了这种演变, 作为学习和教学软件 通过 软件有明显的好处.

所以你想成为一名程序员,是吗? 这些提示和工具将帮助你开始.

大规模在线开放课程(MOOCs)

mooc是一种惊人的Resources,在公平竞争质量方面取得了重大进展, 负担得起的教育. 他们提供了许多世界上最好的正规大学课程的结构和指导, 但是任何人都可以在网上找到, 在任何地方, 谁能上网. 许多受欢迎的mooc也是如此 完全免费, 虽然需要额外的费用(以及学习的承诺), 许多课程也可以获得正式学分, 相当于大学学分.

网上有许多一流的MOOC平台,由世界上最负盛名的大学教授授课, 还有社区平台,这样你和你在世界各地的同学就可以互相帮助学习. 以下是一些最知名的供应商:

请注意, 就像广告上说的, 这些课程提供大学水平的课程, 所以你最好准备好努力工作来通过它们!

指导教程网站

如果你喜欢结构和指导, 但我不喜欢最后期限, 有很多很棒的在线平台提供自动化, 通过广泛的交付方法逐步培训. 有些是通过视频教程,有些是通过文本. 许多包括交互式代码编辑器,供您在浏览器中练习. 这给了你很大的灵活性,可以按照自己的节奏学习, 无论是每天结束时半小时的练习,还是周末10小时的马拉松.

虽然许多这些平台需要付费订阅才能访问所有内容, 大多数都提供免费试用,这样你就可以马上开始使用, 然后自己决定它是否适合你.

这只是一个简短的列表,所以搜索一下,看看还有什么!

非结构化的学习

为那些想要找到自己道路的人, 或者在空闲时间提高他们的知识, 没有结构化课程的压力, 以下工具提供了一种自我指导的方法. 即使你打算采取上述方法之一, 你可能会发现这些Resources对补充你的学习或提供练习平台很有帮助.

钻的网站

如果您的目标只是练习解决编程问题, 互联网, 再一次, 你投保了吗?. 以下站点提供了不断扩展的编码挑战集, 以及交互式编码接口, 解决问题, 让你的解决方案在飞行中被评分, 并将它们与其他用户的解决方案进行比较.

视频

被动地学习编程的实用性有限, 但如果你想吸收一些更深层次的概念, 在会议间隙或晚上喝杯酒的时候, 这些系列讲座都是最好的. 如果你喜欢这类东西,看看YouTube和其他网站上还有什么.

即使有那么多神奇的科技, 对于许多人来说,仍然没有什么比一本好书更能让他们深入了解一个话题. 如果你喜欢这种学习方式,请点击查看 Toptal的顶级免费编程书籍列表.

在关闭

学习编程是一段非常个人化的旅程. 每个人从不同的Resources和不同的目标开始,在这个过程中遇到不同的挑战和机遇. 不要担心别人在做什么,或者他们是怎么做到的. 即使对于 有经验的程序员在美国,这段旅程永远不会结束,因为不断有新的东西需要学习.

一旦你成为一名程序员,一个充满奇迹的世界在等着你.

所以,我给你的建议是,慢慢来,享受这段旅程! 这里有很多值得探索的地方,一个充满奇迹的世界在等待着你. 千里之行,始于足下. 这里有一些不错的鞋子. 祝你好运!

就这一主题咨询作者或专家.
预约电话
尼克·麦克雷的头像
尼克·麦克雷博士

位于 丹佛,科罗拉多州,美国

成员自 2014年7月8日

作者简介

尼古拉斯是一名专业的软件工程师,对高质量的工艺充满热情. 他喜欢架构和编写一流的代码.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

deepblocks

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.