[译] 学习编程旅途上的心得与工具

编程是一个值得拥有的伟大技能。它给了你构建、修补和发明的能力,而后让你在我的和职业上都能收获巨大的奖励。它打开了通向各类各样职业生涯之门,伴随而来的是丰富的收益,即体面的薪水、随时随地工做的自由,或者以上所有这些。前端


因此,为何愈来愈多来自不一样背景的人都决定开始学习编程,也就不足为奇了。可是,每一个尝试这项任务的人很快都会面临着一个不愉快的事实:学习编程好难。node


起初,会感到复杂、疑惑,由于大部分代码根本一点意义都没有。与指望的相反,“我搞不懂它”的感受在整个学习途中也许只增不减,这使得热情的初学者感到无助、迷茫,甚至准备放弃。react


这个故事的寓意就是:作好准备。由于通往程序乐园是一个漫长的旅途,若一开始没有正确的心态,将会很快就失去此中的乐趣。jquery


在此篇文章中,我将会尝试为你提供一些引导,包括:在你的旅途中应该作什么、如何更好地作到、以及沿途中对你有帮助的工具和资源。git


应该作什么

显而易见,你首先要考虑的就是写代码,它的本质是一门技术学科。你最先须要掌握的技能须要大量的“精确”与“正确”,而且任何偷工减料都会让你一无可取。你至少须要学习一丁点数学,或者那些看起来像数学的东西,例如程序逻辑。程序员


要点就是,学习编程的基础须要大量的专一与实践。然而,无以计数看起来是技术或非技术的人已经先于你已经开始了他们的旅途,因此不用过于垂头丧气。正如咱们将会看到的那样,有大量专为你这样的初学者而准备的资源来帮助此旅途尽量的简单。angularjs

一开始学习编程的成本是很陡峭的。在太多的“基础原理”须要掌握,包括编程语言的各个部分(表达式、变量、数据类型、操做符、循环、条件判断、函数、类),帮助理解运行你的代码须要使用多少CPU时间和内存的技术(很是复杂)。你将会编写不少一开始没法运行的代码,所以你将不得不忍受让每个程序员都痛苦的经历:调试。github


一旦你学会了怎样写代码,你就能学会怎样编写更稳定的代码。让代码更高效,容易阅读和理解,而且便于扩展,是一门艺术,其中还包括持续演进。你将可以开始探索不一样语言的原理,并从一个简单的“码农”进级为一个“软件工程师”。这也是一个须要大量时间和实践的过程,可是你越精通,为你打开的机遇就越多。web


怎样学习编程

通往编程乐园的旅途,各有各的不一样,但这里仍是有一些好的原则可让旅行者从中获益。若是你才刚刚启程,如下是我推荐的基本过程:数据库


一、选择你的目的地:掌握一门语言,任何语言都行

若是你真的打算学习编程,你所选取的语言其实并不重要。大部分流行的编程语言都有着类似的基本原理内容,而且当你彻底掌握了你的第一编程语言后再去学习一门新的语言将会轻松不少,而不是一开始就挣扎于一堆语言。若是你是经过大学的学科或相似的方式来学习编程的话,你的语言可能已经被选择好了。


无论怎样,除非你确切知道在这个长跑中你想作什么,只有5门语言是我推荐值得考虑的:Ruby,JavaScript,Python, C,Java,这些语言在学习的容易程度、得到知识的广度以及长期工做项目的数量之间有着很好的平衡。


如下是帮助你进行决定的一些提示:


解释性语言

解释性语言容易上手。这是由于他们的代码一写完就能立刻运行。相反地,编译性语言在编写代码和运行代码之间须要一个额外的步骤。


所以,用解释性语言能够更快地编程,但他们并无高效地利用计算机资源,也容易存在一些不易察觉的bug。他们适用于那些对于性能并非很优先的应用。这些语言在网站开发中很流行。事实上,其中的JavaScript,是惟一能够直接在浏览器执行的语言,由此使得它可以快速成为众所周知最赚钱的语言之一。

编程语言
优势
缺点
一般用于
Ruby
  • 很是灵活的语法

  • 容易上手

  • 需求大,工做待遇好

  • 灵活性会使得底层模糊不清

  • 性能低,不适用于高端应用

JavaScript
  • 浏览器内软件的惟一选择

  • 对于每个现代的站点都相当重要

  • 需求大,工做待遇好

  • 复杂的语法有时会让人感到疑惑

  • 对于初学者,比Ruby或Python更有挑战性

Python
  • 有让人喜好的优雅、简约

  • 容易上手

  • 性能低,意味着不适用于商端应用

  • 网站后端,可见 Diango

  • 科学性研究和学术,可见 SciPy


编译性语言

编译时,代码在它运行以前会从人类可读的代码转换成机器可以直接执行的代码。这也就是为何它会比解释性语言更快、更高效。编译器其中一个职责就是确保所编写的代码都“有意义”,所以它能够识别而且预防各类各样解释性语言容易出现的bug


出于这个缘由,用这些语言却想把这些错误或者差的代码置之不理是很难的。他们会强制你去很好地理解“在底层”到底作了什么,你也会学到更多关于计算机是如何工做的。对应的代价是这些语言更劳动密集型,而且典型地对于初学者学习挑战性更大


编译性语言用于要求高性能和稳定性的应用,其中包括运行于资源严重受限的硬件的嵌入式应用,和甚至一个小小的bug都能形成极大破坏的庞大又复杂的应用。

编程语言
优势
缺点
一般用于
C
  • 能比其余”高性能编程语言“交付更好的性能

  • 能够教会你更多关于计算机如何工做

  • 本次推荐列表中最难以掌握的编程语言

  • 操做系统

  • 高端电子游戏

  • 嵌入式系统

  • 机器人和人工智能

Java
  • 全球使用最广的语言

  • 严格的书写强制着要有清晰、高效地思惟方式

  • 复杂的语法致使阅读和工做笨重

  • 许多人认为过于老式、片面、接近降低

  • 大型企业应用

  • 网站开发

  • Android开发


HTML和CSS:非编程语言

应该注意到HTML和CSS不是编程语言,虽然他们基本用于每个网页。他们是展现性语言,用于定义如何展现和应该包括什么,而非如何运行。无论怎样,HTML和CSS都是一个不错的起点,由于他们更容易上手,而且能教会你如何把代码编写正确。此外,若是你打算进行网站开发,某种程度上你也须要学习HTML和CSS。


二、快速开始

学习须要时间,由于有太多内容须要吸引。若是你打算第一天就想尝试构建一个完整的应用,那基本是行不通的。为了避免至于陷入沮丧,从解决一个简单的小问题开始,可让你走得更为顺畅。


例如,传统上学习一门新的语言时编写的第一个程序就是在屏幕上打印”Hello World“的”Hello World“程序。在大多数语言里,基本上不会编写一个简单而又没有什么实际的做用的程序。然而,它依然结合了编程语言中不少的基本原理部分,因此它对于一我的入门如何编写某一语言仍是很适用的。


在这里,你能够编写对一些数字进行加、减的东西,而后从用户那获取输入。随后你能够学到决定路径的条件,和执行重复操做的循环。很快,你就可以准备构建你第一个项目,那时你也就可以开始经历如何构建 一个完整应用了。


三、要有耐心

编程的核心部分能够颇有挑战性。但若是你还没明白计算机在底层是如何工做的话,这些挑战并不是显而易见。


好比,当我一开始出发时,我以为调试是一个很让人受不了的过程:它看起来一点都不像是在编程。由于我得花费整整一天去排查我写过的代码,尝试去找出问题的所在,”我这一次要***怎样才能搞定这个问题呢“不断在我脑里回旋,让我崩溃得几乎快要放弃,而不是写一些新的代码作一些更酷的事情。最后最后,我发现我在某处漏了一个分号,或者使用了缩进来代替空格,而当我让个人代码可以再次运行时,一天又过去了。那时我感受我完彻底全就是一个笨蛋,简直是在浪费时间。


这样的事情,也会发生在你的身上,一样地它也会让你抓狂。因此,对于调试的技巧就是:要有耐心,而且放松点。在《对于初学者学习编程的最好方式是什么》一文中推荐注重过程,而非结果。若是你注重最终的结果(如”我在要六月底前构建一个网站“),你将会以为沮丧,而且感受本身像个失败者。随着过程一点一点地前进,你将会更成功。


四、实践、实践再实践

一如任何技能,编程也在于功多手熟。要想更好地学习地编程,没有比实践更好的方式了。即便你一周只有业余的几个小时,只要能坚持定时实践,总有一天,你将会找到编程的真谛。最后,你将能拥有能够在短短地几秒钟以内搞定问题的直觉,而在此以前可能须要花费你整整一天(如追踪调试一个bug)。


一旦你以为本身已经差很少掌握了编程语言的基础部分后,进行实践的一个更好方式是开启你的第一个项目。设想一个你想构建的简单应用,好比一个待办列表,一个计算器(再一次,快速开始),而后撸之!这将会教会你怎样去解决架构和设计上的问题,以及如何构建不一样的部分使之能够相互融合成为一个可以工做的总体。这些都是可让你可以自称为程序员的基本技能。


资源

根据你的目标、学习风格和用意,在旅途中你可能须要使用到不一样的资源。为了帮助你决定什么方法适用于你,这里快速整理了一些你可以用获得的工具,粗略涵盖了从结构化学习到非结构化学习。


结构化学习

若是你不是以学业为重,此部分建议的目录将提供教师、做业、测试、等级、期限和实在的结果。而这些建议须要你走进一间课室或者在编程以外。


正规大学学位

花费最大但对于大部分人来讲,又是最有价值的建议就是得到一个正规大学的学位,它可能让你有机会为开启编程和计算机技术的职业生涯打下最好的基础。根据你申请的大学和学位,你将会收到对应的录取通知书(等于一条脚迈进了职业的生涯)。可是更为重要的是,你将能塑造出能够洞悉计算机全部一切的本领,以及编写确实无可挑剔代码的能力,而高效的软件正依赖于此。

如下是你能够从大学课程中进行更深刻学习的内容,而在非大学里学习这些将会更难。

  • 电子电路:几乎所有电脑硬件的基本物理底层。

  • 数字逻辑电路:怎样用电路表示真和逻辑结构。

  • 微机与计算机系统:如何将逻辑电路结合成一个可以被编程和计算的机器。在这些元件和打印总线上发生了哪些事情。

  • 操做系统:如何编写一个可以进行管理、组织、自我保持和制受权各类各样应用程序进行安全性操做的电脑。

  • 数据库:如何存储和复制海量的数据且无丢失、不被破坏,而且易于搜索。

  • 网络:各类不相关的计算机系统如何进行通讯。

  • 高等数学:包括微积分和线性代数。对任何尖端领域的职业生涯都是相当重要。

  • 单片机:如何从模拟世界穿越到数字世界。

  • 数值方法:用姨夫现实世界的问题不能很好的映射到计算机时。

计算机科学和工程学校会让你痛不欲生,你不得不担惊受怕,不得不强迫本身完成这些学科。可是一分耕耘一分收获。我曾经也为获取个人学位而苦苦挣扎,可是我拿到毕业证的那一天是我人生中最美好的日子之一。


训练营

所谓的训练营是用来知足那些没有时间或资源去追求一个正规学位,但又愿意更努力工做,或者至少想学习开启软件开发职业生涯最基本要求的人的须要。对于一个正规的学位与接下来要讨论的半结构化学习,训练营所须要的代价和承诺在于这二者之间。


训练营的课程一般在8到12周之间,学费金额约10,000刀左右。他们在短期内覆盖了绝大部份内容,在此期间你得牺牲你的大部分其余业余爱好。可是,他们会承诺为你准备实际的开发环境,而且让你以最快的速度进入编程的生涯。不少训练营以职业生涯的日子了结,或者在你一毕业就为你安排一个职位。


相对来讲,训练营在最近这几年是一个爆炸的现象。所以,尽管不少都提供了关于就业率的追踪报告,依然很难评估他们的成功率有多少。也就是说,当这个新兴的爆炸式行业在持续快速发展的过程当中咱们只能期待有更好、更具价值的流程出现。若是你仔细地埋调查,你将会发现训练营是否适合于你。


大部分的训练营都是有固定场所的,你能够你的城镇上找到那些对你有做用的训练营。若是你居住在大都市,也许你能够在这里这里找到你想要的训练营。


半结构化学习

如今愈来愈多的资源变得随手可得,这些资源来自那些工做于有很好结构和指导可是又没有时间或资源提交给正规则大学或训练营的人。而这些资源一般提供在网上,且大部分是彻底免费的!随着对这些服务的高度须要,这些工具迅速发展,日益成熟而且体现了它们的价值。本质上,软件开发或多或少也受到这些工具演进的驱动,正如软件的学习与教育的相互促进。

你真的想成为一个程序员,对吗?如下这些技巧和工具将能帮助你如何开始。


海量在线开放课程(MOOC)

MOOC是一个惊人的资源,而且在质量和支付得起的教育中取得了重大的进展。他们经过在线的方式将世界上最好的大学课程的结构和指导提供给任何一个可以连得上互联网的人。不少流行的MOOC也都是彻底免费的,尽管还会有一个额外的价格(以此承诺坚持学习),并且也能够得到像相似大学那样的学分。


这里有不少能够得到由来自世界上著名大学的教授进行齐整讲授的一流MOOC平台,还有你和你的同窗与世界各地的人进行相互帮助的社区平台。如下是一些著名的提供商:

注意,正如广告中所说的,这些课程提供了大学级别的课程,因此你最好作好克服他们的准备。


入门网站推荐

若是你喜欢有结构和有指导性的学习,但又不受限于期限,这还有不少利用各式各样交付方法提供自动化、一步接一步训练的在线平台。其中有一些以视频形式提供,有一些则用文本。并且不少都包含了你能够直接在浏览器上练习的即时编辑器。经过这些网站你能够在你的环境中自由地学习,无论是在每一天最后的一个半小时里,仍是在每一个周末10个小时马拉松式的练习。


其中不少平台都须要支付以便能订阅到所有的内容,另外不少则提供免费的资料以便你能够立刻开始,如下网站能够根据我的须要自由选择。

这仅仅是其中很小的一部分,经过搜索你能够找到更多!


非结构化学习

对于那些想找到适合本身的方式、或利用他们本身自由的时间来提升,而又不想有结构化课程压力的人来讲,如下工具提供了一个自主学习的途径。即便你准备使用以上任意一种途径来学习,你也能从如下这些资源中找到能够帮助补充你进行更好学习或进行练习的平台 。


实战网站

若是你的目标仅仅只是练习解决编程问题,那么再一次,你须要用到互联网。如下站点提供了一系列编码挑战,这些挑战为了解决问题,有着即时编程接口,以及能够看到将你的与其余用户的解决方案进行对比的排行结果。


视频

学习编程离不开实践,但若是你想学到更深的内容,除了会议和夜间在线的课程外,还有一些更好的系列讲座。若是你喜欢这样的方式,能够到YouTube或者网上找下这方面有关的视频。


书籍

即便有这么多有用的技术,但对不少人来讲仍然没有比书更能让他们一头扎进去得到关于某一主题深刻理解的了。若是你想经过此方式来学习,能够看下Toptal免费编程书籍推荐清单


结语

学习编程的旅途,因人而异。不一样的人有不一样的资源、不一样的目标,而且在此途中又有不尽相同的挑战和机遇。不要过于担忧别人正在作什么,或者他们是如何到达终点的。即便对于经验丰富的程序员,此旅途也是没有终点的,由于总会有一些新的东西须要学习。



因此,个人建议就是,慢慢来,祝你旅途愉快!这里有太多东西须要你去探索,而且一个充满神奇的世界正等待着你的到来。千里之行,始于足下。这里只是一些好用的鞋子。祝你好运!


关于做者

Nick McCrea, United States


本文翻译做者为:dogstar,发表于开源中国我的博客;欢迎转载,但请注明出处,谢谢!

相关文章
相关标签/搜索