Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >写给自学者的入门指南

写给自学者的入门指南

作者头像
ThoughtWorks
发布于 2018-04-17 08:32:45
发布于 2018-04-17 08:32:45
9960
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

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


故事

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

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

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

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

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

  • 看书(这是最容易想到的方法)
  • 观看视频教程
  • 阅读官网文档
  • 读源码
  • 到大学蹭课或者报名培训(不知道还算不算自学,没交学费都算吧?)

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

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

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


正经话

上面的故事是我编的,但其中的纠结却是自学者或多或少都经历过的。实际上,IT从业者并不像传说中那样需要天才般的智商,要点在于能否找到合适的入门途径,再加上一点点坚持和思考。

比较可惜的情况是一些人没能找到适合自己的学习方法,并在纠结和碰壁后失去信心,然后沮丧的认定自己并不适合干这行。学编程很多时候就是一个趟坑的过程,但不是每一个坑都有必要趟,写这篇文章的目的是希望能够帮助初学者尽量少趟一些坑。

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、安卓技术栈等。当然这里面有一些重合和共用的技术也需要学习,比如版本管理器GitSVN就是每个合格的工程师需要去学习的。

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

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

(图片来自:http://skill-map.stuq.org/)


如何挑选你的兵器?

在介绍完计算机领域的大致图景后,就需要选择一门合适的编程语言,一个较为形象的例子是把编程语言比喻成兵器,因为我们深知编程语言对于工程师而言是实实在在的工具,我们不是为了学它而学,学编程不仅仅是学语言特性,一般来说我们也不用知道赋值语句像“茴香豆蔻”的“茴”字有四种写法。

当然语言之争从来没有停止过,如果把编程语言比喻江湖武器的话十分有趣。

C语言是M1式加兰德步枪,很老但可靠。 C++是双截棍,挥舞起来很强悍,很吸引人,但需要多年的磨练来掌握,很多人希望改用别的武器。 Perl语言是燃烧弹,曾经在战场上很有用,但现在很少人使用它。 Java是M240通用弹夹式自动机枪,有时它的弹夹是圆的,但有时候不是,如果不是,当你开火时,会遇到NullPointerException问题,枪会爆炸,你就会被炸死。 _JavaScript是一把宝剑,但没有剑柄。 _ -- 来自网络

老实来讲IT行业的最终目的是交付可用的软件,编程语言也是适应市场的。这对于初学者或许有些残酷,在工作中我们发现最好的语言是用来处理工作任务或者构建合适的应用,并不是出于爱好或者某种Geek精神。

对于初学者而言,在选择合适的入门语言时至少需要考虑两点:

  • 是否能适用于构建你想要的应用。如果你的目标是创建一个运行在IPhone上的APP,那么最好选择Object C 或者Swift,学习web开发可以选择PHP 或者JAVA。实际上我们仍然可以用汇编做出网页,但是这样做成本高昂。
  • 是否容易学习,在满足第一点的条件下请尽量选择容易学习的语言。容易不仅仅指语法简单,包括环境搭建、部署等都需要考虑在内,以及能不能容易找到好的学习资料,因此尽可能的选择主流语言。

别忘了非常重要的一点,学习编程语言还包括平台提供的API,比如Win 32 之于C++/C#/VB,以及周边的库和框架(这些库、框架和工具能在上面说的技术图谱中找到)。IT历史上甚至出现框架和库引领编程语言走向的情况:JQuery 和Angular 改变了前端开发的思想; Rails 抢走了Ruby的名气;而SSH三大框架一度代表了Java世界。

最后我为初学者整理了一个流行编程语言和用途的表:

另外还需要注意的是开发工具,可以选用IDE和有代码提示的编辑器,但尽量不要在这上喋喋不休,这就像用来盛放你锋利兵器的架子,用着顺手就行,也不推荐使用纯文本编辑器,这看起来像赤手空拳。

推荐一些编辑器和IDE:


挑选合适的资料和有效的阅读

对初学者而言,我仍然推荐好的视频教程,虽然我已经听到不下5个人声称是靠阅读官方文档或者看源码学会编程的,而且认为观看视频教程见效太慢。

但这个思想对初学者很危险,不得不承认阅读文档和源码能更准确找到自己想要的信息,这对深入技术原理非常有用,但视频能比文字传达出更丰富的内容,有更直观的演示和细致的讲解,我想没有比这个更适合初学者了。

除了上面提到的精品课程和慕课教程,国内有像网易云课堂,国外有lynda.com这种在线学习视频网站,甚至在优酷和土豆都能找到足够的教程资源。

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

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

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


自我激励

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

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

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

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

(图片来自:https://appadvice.com)

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

  • 看书(这是最容易想到的方法)。
  • 尽量将其分解为多个比较简单的小问题,一个一个地分开解决。
  • 将小问题从简单到复杂排列,先从容易解决的问题着手。
  • 子问题被解决后,进行联调测试,看是否能协同运行。

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


最后多说几句

非科班出身的工程师入门是有一定痛苦的,不像武侠世界里面的名门正派弟子,也没有机缘遇到骨骼精奇的世外高人,如何选择合适自己的学习方式并自我管理是很重要的一方面。

没有任何Low的学习方式,只要直接而又高效,而且要能达到我们的目的就好。以我为例,从大专学校毕业并没有机会参加本科课程,曾经也在网上攫取各种视频教程,去别的学校蹭课,甚至带上礼物去一个老师那里登门拜访补课。

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

我不知道算是有幸还是不幸经历了这一个过程,矫情一点来说是有一些曲折,但是我知道“聪明”从来不是这个行业的门槛。

引用流行于知乎的一句老话“以大多人的努力程度,还轮不到拼天赋的程度”,在Thoughtworks有大量优秀的工程师,从他们身上我能看到聪明不是学习编程成功的关键,坚持和勤于思考才是。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 思特沃克 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
GitHub 上这个「计算机科学」自学指南火了!
我不知道你们最近有没有刷 GitHub,如果有的话,你应该会发现一个项目特别亮眼,这个项目名为:TeachYourselfCS-CN。
GitHubDaily
2020/06/29
2.6K0
GitHub 上这个「计算机科学」自学指南火了!
真·程序员必修书单
迫近年关,很多人都写了 19 年的总结和 20 年的展望。我在回想 2019 年的时候,想到自己只读完了几本‘杂’书,真正技术的书籍一本也没有读完。焦虑就悄然涌上心头,有种不学习就退步的烦躁。然后我回想起了之前看到的一个网站:
HelloGitHub
2021/05/14
5720
如何入门编程语言,Java从入门到入土
自学编程首先需要选择一门编程语言。然后从易到难逐步学习。除此以外,还有一些需要注意的地方:
csdn博主eguid_1
2023/10/16
2490
如何入门编程:一份初学者的指南
随着技术的不断进步,编程已经成为一项宝贵的技能。无论你是想成为一名软件开发者、数据科学家,还是仅仅想提高自己的技术能力,编程都是一个很好的起点。本文将为你提供一份初学者的编程入门指南。
正在走向自律
2024/12/18
4930
如何入门编程:一份初学者的指南
劝人学计算机?
前段时间,我在 B 站聊了聊自己的高考往事。于是,这几天,陆陆续续有一些刚高考结束的小伙伴找我咨询一些计算机方面的问题。
程序员鱼皮
2021/07/02
5130
如何自学编程(二)-该怎样选择入门语言?
上次分享了一篇文章:《如何自学编程?》从初学者的角度给大家介绍了一些基本的概念和一些术语。
极客开发者
2022/01/18
7310
如何自学编程(二)-该怎样选择入门语言?
想学习数据科学?我们整理了一份优质编程入门课程清单
原作者 David Venturi 编译 CDA 编译团队 本文为 CDA 数据分析师原创作品,转载需授权 一年以前,我还只是一个没有任何编程经验的电脑爱好者。在试着上了一些在线课程之后,我深受启发,接着决定开始学习加拿大最好的计算机科学课程之一。 两周后,我意识到我可以通过 edX ,Coursera 和 Udacity 来学习我需要的一切知识,并且更快、更有效、成本更低。所以我退学了。 在不久之后,我开始通过使用在线课程创建自己专属的数据科学硕士学位。并且制定了一份数据科学编程方向的课程清单,
CDA数据分析师
2018/02/26
1.5K0
想学习数据科学?我们整理了一份优质编程入门课程清单
学习编程的方法及入门
1. 确定学习目标:首先,明确你希望学习编程的具体目标和用途。这有助于你选择学习的编程语言和方向,例如网页开发、移动应用开发或数据分析等。
用户10922923
2024/01/23
2430
学习编程的方法及入门
Java自学看这篇就够了!零基础速通教程:环境配置→项目实战→就业指导(附资料包)
在当今数字化时代,Java 作为一门广泛应用于企业级开发、移动应用开发等众多领域的编程语言,具有极高的市场需求。自学 Java 不仅能为个人打开一扇通往广阔职业发展空间的大门,还能培养自主学习和解决问题的能力。然而,自学的道路往往充满挑战和陷阱,如果没有正确的方法和指导,很容易走弯路,浪费大量的时间和精力。本文将结合实际经验,为你提供一套系统的自学 Java 方案,助你在职场至少少走 1 年弯路。
万里顾一诚
2025/03/26
3811
Java自学看这篇就够了!零基础速通教程:环境配置→项目实战→就业指导(附资料包)
硬核!如何全面系统地自学Java
我今年 XX 岁(调皮),使用 Java 开发将近 15 年了,目前虽然不在技术一线,但仍然和 Java 形影相伴,如影随形,每天都在相爱相杀。
沉默王二
2021/04/02
8210
python自学清单方法,分析优势和劣势,这三个问题你得思考一下
因为想通过编程来处理工作中的一些重复性枯燥任务,例如通过Python脚本定期登陆远程设备采集相关数据等等,于是打算学习编程。
一墨编程学习
2019/05/08
4570
python自学清单方法,分析优势和劣势,这三个问题你得思考一下
程序猿必须知道的一些有用的网站
来自:开源中国 原文:https://github.com/sdmg15/Best-websites-a-programmer-should-visit 在学习计算机科学(CS)时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术。下面是你应该访问的一些网站的不详尽的列表,一旦我得到了另一个链接,这个列表就会被更新,但是你也可以添加你知道的网站来做贡献。 索引 当你遇到困境时 新闻 初学者的编码实践 给那些想开始一个小项目却找不到点子的人 一般编码建议 编码风格 一般工具 面试的准备 纪录
企鹅号小编
2018/02/09
1.5K0
程序猿必须知道的一些有用的网站
我花一个月时间整理了新人转行IT最爱问都问题
我不能一一全部解答,我收集了比较有代表性都问题,如果你也是准备转行程序员的人,相信你也会纠结同样的问题。
王炸
2019/07/02
1.1K0
从小白到 Github 斩获 90k Star! 聊聊学习编程的正确姿势!
如果你看到这篇文章,恭喜你!不论是初入编程领域的小白,还是已经在工作几年的老手,这篇文章都将对你有很大的帮助。建议看到最后。相信我!一定会有收货。
Guide哥
2020/07/16
8920
从小白到 Github 斩获 90k Star! 聊聊学习编程的正确姿势!
你在B站看番剧,别人在B站学Web开发
有网友提问:Web开发还有前途吗? 知乎高赞回答:“这世界已经是Web的了。” 这个回答,小异太有共鸣了。 记得乔布斯曾经说过,未来不再有互联网公司,因为未来所有的企业都会有互联网部门,WEB就是人类的未来。我们现在每天所看到的浏览器界面、小程序界面...,若是追本溯源,它们实质上就是一张张网页。  确实,“WEB在手,天下我有!”这句口号不是随便说说是的。Web开发工程师就像魔术师一般,敲击键盘就能施展魔法,给网站来个惊喜大变身。  每当看到那些漂亮新颖的网站的时候,小异总是忍不住F12一下,一览网页背后
程序猿DD
2023/04/04
4650
你在B站看番剧,别人在B站学Web开发
家里出点事,大学没去成。。
大家好,我是二哥呀。昨天收到一条读者的私信:“他 01 年的,高中毕业就参加工作了,本来是要上大专的,但家里出了状况就没去成,有 Java 的基础,问我还要不要继续学?”
沉默王二
2022/04/14
3870
家里出点事,大学没去成。。
转行了!
微信上收到一个读者的私信,他正在一所 985 高校读研,专业是机械工程,想转行做软件开发,问我该选择 C++ 还是 Java?
沉默王二
2021/11/16
6070
转行了!
【访谈】大神自学编程的经验之谈
编程,programming,无时无刻不在改变我们的生活,从衣食住行,到科学前沿,各种编程语言层出不穷。在生命科学领域,越来越多的同行开始自学程序语言,周围的同事每天都在上演着从医生到实验员到程序员的身份来回转变。以前一天的工作量,因为有了编程,几分钟就能做好。以前无法完成的绘图,有了编程,再高大上的figure也不在话下。逐渐地,科研开始离不开编程,从SAS到R、从R再到Python,甚至LAMP、Java。我们的技术和客服每天都会面临和解答很多人关于程序语言的问题,今天,我们就特邀技术团队中一作文章IF达20+的生信大牛、也是我们的IT主管给大家讲讲该如何自学编程、分享一下他在学习过程中的经验之谈。
用户6317549
2019/10/28
5340
【访谈】大神自学编程的经验之谈
16个免费学习Python的网站和教程(2024年最新资源)
🔥 Python免费学习资源汇总,2024年最全面指南! 🚀 免费学习Python的最佳网站和教程,你不能错过!
猫头虎
2024/06/12
4.7K0
大学生自学编程需要看哪些书?
大学生自学编程需要注意几点,选择合适的书本,制定合适的计划,做好长期作战的准备。因为大学主要还是理论学习为主,开设的课程也很多,如果一股脑的学习不可能都能学的好,所以先要选择哪种编程语言适合自己,或者在市场上哪种语言能更好的找到工作。 因为大学生学习编程还是区别于直接在社会上参加培训的,尽量先要选择从最基础的学习开始,无论学习哪种编程语言,建议先从计算机组成原理开始学习,需要知道计算机是如何组成的,知道二进制和十进制之间是如何转化的,内存结构如何分配等基础,有了这方面的基础学起来别的心理起码有点底。 深入理
程序员互动联盟
2018/04/18
1.3K0
大学生自学编程需要看哪些书?
相关推荐
GitHub 上这个「计算机科学」自学指南火了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档