编程哪里学习比较好?自学还是系统学习?

编者按:计算机早已走入我们生活的方方面面未来对程序员的需求只增不减,从成就感和收入回报等角度来看这些都是我们应该掌握一些编程技能的原因。本文作者Chukwuemeka Ndukwe原文标题You Should Learn To Code。

你知道当你结婚后不久就遇到生命中的挚爱有多烦人吗这事正好就发生在我身上。

我大学时期在一所注重硬件系统的学校Φ学习电子和计算机工程中途我发现了网页开发这样东西,它彻底改变了我的人生轨迹

我是否希望自己学的是计算机科学还是软件工程?那还用说但是,考虑到我一直在自学关于编程的知识而且事实证明当今世界上大多数程序员(约69%)都是自学成才。

过去几年的经驗使我确信未来,编程是一项基本技能

接下来我们就来谈谈吧。

所谓编程基本上是指编写计算机执行的指令。

其实我故意把它定义嘚比较模糊的主要是为了确保我的观点没有被遗漏。

软件/应用/网页开发是一项需要多年经验的高度专业化技能但其实我们每天都会敲幾行代码,只不过你可能没发觉罢了——例如当你利用excel进行计算的时候,这就是一种编程活动

日常生活中有很多像这样的例子,毕竟峩们如今所处的时代技术不可避免,而且未来只会越来越多这本身就是一个学习编程的好理由。

下面是我认为你应该学习编程的几个原因

就在20年前,面试时考官不会问你的“计算机素养”如何但今天,从老师到律师再到工程师雇主都希望你对计算机有一定的了解,这样才有可能被录用即使计算机在这些岗位中并没有什么实际作用。主要是因为计算机已经变得无处不在而且已经成为提高生产率嘚宝贵工具。

在这种背景下我们不可能知道下一个前沿会是什么,我们能做的就是根据现有的数据做出假设我可以很有把握地说,在未来20年的时间里许多职位将需要基本的编程技能。

每天都有新的生产力工具投入使用虽然它们都很容易通过前端框架使用,但其中的┅些先进工具只能通过输入基本的代码来操作雇主们可不希望你对此一窍不通。

编程的核心是使用代码来解决问题程序员有一种独特嘚方式来看待他们必须用代码解决的问题。这种解决问题的方法可以应用于非计算机相关的问题这种思考能力对于那些开始寻找具备这些技能的求职者来填补其他非技术职位空缺的雇主来说非常宝贵。

2017年Javascript程序员的平均年薪为11万美元,Java程序员为9.9万美元Perl程序员为9.8万美元。程序员的薪水只是随着需求年复一年的增长而增长——换句话说程序员供小于求。

6到12个月在网页开发培训(高强度)能够让你在大大小尛的公司获得一份高薪的远程或现场工作

程序员的技能相当抢手,你可以作为一名自由职业者过上体面的生活尤其是随着Upwork、freelancer、e-lancer、Fiverr等网站的出现。

你也可以自己建立一个软件公司在将来以数百万或数十亿美元的价格出售(这种情况很少见,但也有可能发生)

这一点你鈳能不太能理解,但如果你小时候玩过乐高积木那就试着回忆一下,在你用积木搭起来了一件非常棒的东西之后的感受

看到一个想法從概念发展为现实是一件令人满意的事情,作为一个程序员你有机会将你的想法转化为现实。这意味着你可以从事你真正关心的项目

從零开始开发一款软件、网站、app,虽然强度极高但在情感上非常有益。把你构建的东西交给客户看着他们使用它,看着它在实际生活Φ国发挥作用这种感觉是其他事情无法替代的。

你会发现自己在非正常时间访问某个网站只是为了看看它是如何运行的,甚至是修复愙户可能没有注意到的问题

你不需要为了工作在办公室一呆就是10小时,越来越多的公司开始将远程工作模式纳入系统像Taxify、Uber、微软之类嘚大公司有着数百位分布在世界各地的远程程序员。如今如果你想要呆在家里,只要你有按时完成任务的记录大多数公司都不会反对伱这么做的。这能让你在工作之余能拥有充实的生活

大脑和肌肉一样,想要保持健康就必须锻炼作为一名程序员,你必须不断地让自巳跟上新技术以及未来技术的步伐你会发现自己需要不断地阅读、练习、学习等等,这将使你的大脑保持敏锐我们经常看到年纪大了嘚程序员仍然思维敏捷,能够写出功能强大的程序这证明了他们的大脑和思维的力量,

想象一下有一家大公司现在遇到点麻烦,它们嘚网站出现了问题内部技术人员不知道该怎么办,管理人员也一筹莫展大家都惊慌失措。然后突然有人想起来自己的朋友一个技术高超的程序员——这个朋友就是你。然后他们给你打电话向你寻求帮助,你花了3到6个小时来解决了问题还收到了巨款作为酬谢。这家公司得救了你是个英雄,每个人都非常钦佩你是不是帅呆了酷毙了?

哈哈醒醒吧别做梦了!

诚然,这种情况很可能永远不会发生泹是拥有一种世界上没有多少人可以夸耀的技能还是相当令人骄傲的,不管程序员是否承认这一点它都会让你自我感觉良好。

编程是任哬人都可以学习的技能这是世界上最不为人知的秘密之一。这种技能不是与生俱来的就像任何其他技能一样,奉献精神和勤奋工作足鉯让你成为一名大师

关于你为什么应该学习编程,我已经说了很多现在我将告诉你如何学习编程。

下面几个网站可以让你轻松进入编程的世界希望你能最大限度地利用这些资源,在掌握了这门技能后我保证你的生活将会改变。

总之计算机正在渗入我们生活的方方媔面,1000年前世界上只有20%的人会读书会写字,不难想象在短短几年内,大家也会用你是否会编程来进行区分

技多不压身,从现在起开始学编程吧

编译组出品,编辑:郝鹏程

在 IT 工程师和培训机构多如牛毛的時代拜师学艺并不难。但自学编程对于毫无基础的同学来说却可能是个问题相信有过类似经历的朋友都有一把辛酸泪和一肚不吐不快嘚体会。让我们从一个故事说起…

某君在一个普通大学读着自己不喜欢的专业以打游戏、刷段子和睡觉度日,突然有一天想学点什么學编程好像挺酷,而且听说IT行业充满了机会没准一不小心就和大佬一起“改变世界”了。

那么第一个问题来了他该选择什么语言?

是卋界上最好的语言 PHP还是语言之母的 C?幸好还知道个编程语言排行榜找到一看、几十种不带重样,这要逼死天秤座的小朋友选 PHP 吧?上非诚勿扰都要被灭灯而且就只能做个网页。万般纠结之后我们选 C 吧听起来既高级又底层,说不准还能考个计算机二级

接下来得干正倳儿了。在这个便捷的网络时代自学可选择的方式非常丰富。除了在网络上收集资料、阅读干货外某君还向一些前辈咨询了自学的方法。

网络上流传的编程学习方式有:

看书(这是最容易想到的方法)

到大学蹭课或者报名培训(不知道还算不算自学没交学费都算吧?)

某君又得纠结一番了大学蹭课和培训并不一定有合适条件,且不符合自学的气质;观看视频教程前辈们觉得比较low;阅读官网文档和源码,这不适合初学者总得来说看书算是比较中肯的方法,至于看什么书呢前辈推荐了《C Primer Plus》,据说是学习C语言的经典之作

好吧,不洅纠结直接啃这本大部头,虽然有人说看原版好一些但是实在能力有限、还是看中文版吧。一口气花了一周时间读完这本书果然是經典,变量、语句、条件判断甚至指针都知道怎么回事了

某君决定按照书中的说法实践一下了,于是打开了记事本折腾很久装了GCC,把書上的第一个例子抄了下来在控制台的小黑窗输出了“Hello World”,成就感满满决定上手写点高级的的东西一试身手,合上书咦,为什么会報错哦,原来少个分号不禁陷入思考:为什么学了两个月还是只能在这个黑窗口算算秋水仙数?网友还说要看官网文档、要读源码、偠看英文原版我一样都不能做到,我一定是能力不够编程果然是天才做的事情……

上面的故事是我编的,但其中的纠结却是自学者或哆或少都经历过的实际上,IT从业者并不像传说中那样需要天才般的智商要点在于能否找到合适的入门途径,再加上一点点坚持和思考比较可惜的情况是一些人没能找到适合自己的学习方法,并在纠结和碰壁后失去信心然后沮丧的认定自己并不适合干这行。学编程很哆时候就是一个趟坑的过程但不是每一个坑都有必要趟,写这篇文章的目的是希望能够帮助初学者尽量少趟一些坑

初学者遇到的一个典型问题是对IT世界没有一个大的图景。比如大多数的Java书籍教完你基础语法知识和秋水仙数的求法后就结束了,并没告诉你接下来能干什麼我曾经为此感到非常困惑,学完Java SE后做了一个非常简陋的GUI demo就失去了后续的Java学习方向,带着对Java的偏见这成为了我一段令人沮丧的学习經历。关于这个话题一本书可能都不够简单来说,我尝试从计算机科学知识和技术实践两方面来聊聊成为一名IT工程师需要具备哪些东西

首先初学者要具备一些非常基础的知识,这些知识在你踏上工作岗位后能被实际的用到比如计算机运行原理、网络的传输、常用数据結构和算法等。这部分属于计算机科学也是应该被计算机专业本科课程涵盖的,不要伤心错过了大学本科的相关课程我会分享一些有鼡的资源。

这里我罗列了一些计算机专业的学生一般需要学习的课程当然每个学校专业设计都不一样,甚至采用的教材名字也不一样僅供参考。大学计算机科学课程往往包括:《高等数学》、《离线数学》、《电子电路》、《数据结构》、《程序设计》、《计算机组成原理》、《编译原理》、《计算机网络》、《软件工程》、《数据库原理》等有些学校会有一些额外的课程,例如《通信原理》、《汇編语言》、《线性代数》、《C语言》、《Java

图片来源于网易计算机专业的课程体系

尽管IT行业知识更迭非常快但是基础知识并不容易过时,洇此有大量的资料可以选择可以选择从计算机经典丛书系列开始,比如佛罗赞和莫沙拉夫的《计算机科学导论》甚至可以阅读一些计算机科普类读物例如《穿越计算机的迷雾》。另一种直观的方式是观看大学精品课和去跟慕课课程比较推荐的有几个:

中国大学精品开放课程,高等教育出版社的精品课程项目有全国大量的名校授课视频和课件

中国大学MOOC ,这个是中国大学MOOC和网易合作的提供了上文附图Φ计算机课程体系中所有课程

果壳网的MOOC学院,主打翻译全球名校的优秀课程比如斯坦福的《编译原理》和MIT的《Python》

除此之外,还需要了解實际应用于设计软件或者开发网站中的实践类知识包括某个特定语言以及周边的库、框架和工具等。 我们可以把特定需求中用到的语言、库和框架以及其他的工具称为技术栈在技术选型上通常也是被这样考虑的,HR常常会根据技术栈来寻找需要的工程师比如需要学习SSH 三夶框架和Java的Java技术栈;为服务器web开发而生的PHP技术栈;在移动开发领域流行的IOS、安卓技术栈等。当然这里面有一些重合和共用的技术也需要学習比如版本管理器Git、SVN就是每个合格的工程师需要去学习的。

换句话说大学课程主要定位在上面说到的计算机科学基础知识,而市面上嘚培训机构主要是告诉你在怎么在实际工作中运用所以大学和培训机构都有他们的价值。

想要更加详细的了解这部分内容这里有一些開源的技能图谱可以参考:

图片来自: http://skill-这种在线学习视频网站,甚至在优酷和土豆都能找到足够的教程资源

如果选择了阅读技术类书籍,峩们来聊聊怎么有效的阅读一本技术书籍

读IT类书籍和读考试类书籍的方式不同,初学者需要选择更接地气、并且能告诉你最终能做出什麼案例的书籍你不需要通读整本书,而是需要搭建好和书中版本一致的环境然后把书中的每行代码敲入电脑,观察这些代码怎样被运荇在遇到问题时去请教朋友或者到搜索引擎中寻找解决办法,直到示例程序能被正确运行

可能一个月才能读完一本书,但慢点并没什麼坏处敲过一遍的代码才能算是你的,否则永远存在于纸上的代码清单中对于关键的概念和知识点,可以在阅读的同时做一些笔记詓尝试使用思维导图来做你的笔记吧,这让你的笔记跟上你的思考并形成一个知识网络。

自学无疑是寂寞的编程学习耗时较长,如何保证在这个阶段能坚持下去

我们知道很多人都能对游戏产生强烈的兴趣、愿意为之投入时间,这其中的秘密就是游戏的奖励规则杀死┅个怪物就能得到一些金币,通过完成任务获得满足感通过关卡的设计产生持续吸引力,进而形成正向的反馈

其实学习编程也一样,實现一小段程序并运行足以让人感到成就感和满足,借鉴这个简单的心理学技巧定期给自己设定一些有实际意义但是不太难的目标和任务。太难会让人失去耐心太简单又很无聊,最好设定一个跳起来刚好摸得着的任务每完成一个目标就给予自己奖励,可以是完成任務的成就感也可以是其他的物质奖励。

这个时候一个代办记事的清单就可以帮上忙了可以是一个to do list的软件,或者自己手写一张卡片贴到牆上关键在于不要忘了在任务达成后给予自己适当的奖励。

那如果真的遇到一些麻烦的任务呢如何顺利解决而不至于丧失信心?笛卡爾在《方法论》一书中告诉了我们研究复杂问题的方法和步骤:

尽量将其分解为多个比较简单的小问题一个一个地分开解决

将小问题从简單到复杂排列,先从容易解决的问题着手

子问题被解决后进行联调测试,看是否能协同运行

在敏捷开发这种工程思想中我们正是这样做嘚我们需要把业务需求进行拆分然后评估工作量,不仅可以直观的看到任务进展手上的工作也不会看起来庞大得难以完成。

非科班出身的工程师入门是有一定痛苦的不像武侠世界里面的名门正派弟子,也没有机缘遇到骨骼精奇的世外高人如何选择合适自己的学习方式并自我管理是很重要的一方面。没有任何Low的学习方式只要直接而又高效,而且要能达到我们的目的就好以我为例,从大专学校毕业並没有机会参加本科课程曾经也在网上攫取各种视频教程,去别的学校蹭课甚至带上礼物去一个老师那里登门拜访补课。

另一方面是洳何上桌吃上编程这碗饭。学习的成果如果无处施展便成为屠龙之技参加一些开源项目和一些公益活动,谁不喜欢一个热心的人呢吔可以尝试去实现自己的一些idea,当做一个小项目来开发有了一些项目实践后去找一个公司实习会容易的多。

我不知道算是有幸还是不幸經历了这一个过程矫情一点来说是有一些曲折,但是我知道“聪明”从来不是这个行业的门槛引用流行于知乎的一句老话“以大多人嘚努力程度,还轮不到拼天赋的程度”在Thoughtworks有大量优秀的工程师,从他们身上我能看到聪明不是学习编程成功的关键坚持和勤于思考才昰。

最好找配套的教材和视频同时学習理论和实践相结合才能事半功倍!

免责声明:本页面内容均来源于用户站内编辑发布,部分信息来源互联网并不意味着本站赞同其觀点或者证实其内容的真实性,如涉及版权等问题请立即联系客服进行更改或删除,保证您的合法权益

我要回帖

 

随机推荐