编程入门指南


做者:@萧井陌,@Badgerphp

  • 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
  • CoCode:一个让你们学习、成长、相聚并得到乐趣的技术社区

本人简单作的一个导图

文章结构:html

  • 前言
  • 心态调整
  • 肯定目标
  • 不要浮躁
  • 培养兴趣
  • 开始学习
  • 使人警醒的故事
  • 警醒后的反思
  • 启蒙
  • 入门
    • 计算机系统基础
    • 数据结构与算法基础
    • 编程语言基础
    • 其余
  • 小结
  • 后记
  • 附录
  • @萧井陌 的编程类回答汇总
  • ...

前言

现在编程成为了一个愈来愈重要的「技能」:做为设计师,懂一些编程可能会帮你更好地理解本身的工做内容;做为创业者,技术创始人的身份则会让你的不少工做显得更容易。而做为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始;入门轻松度过初级材料的学习后,发现学习愈来愈困难,陡峭的学习曲线又让你望而却步;你知道如何在页面上打印输出一些文本行,可是你不知道什么时候该进行一个真正的有用的项目;你不清楚本身还有哪些不知道的东西,你甚至搞不清下一步该学什么。git

这篇文章的内容对此不只会有一些方向性的建议,还会包含一个基础核心向的编程入门导引。固然,Step by Step 的路线是不现实的,而且每一个人都会有本身的特色,因此给出的这个编程入门导引更多的是为了引起读者的思考,最终帮助你造成适用于本身的学习路线。程序员

但要注意:这篇文章是写给那些真心想学编程的人看的——那些憋着一股狠劲儿,必定要作出个什么真东西,不学好不罢休的人;而不是那些「据说编程好玩」的人,在我看来,这种人永远都入不了编程的门,更别提作出个像样的东西来了。github


「Disclaimer」: 虽然整篇文章的基调都是所谓的「Strong Opinions, Weakly Held」,但读者仍是应该像怀疑身边全部东西那样 怀疑咱们所写内容的准确性。如有任何相关疑问欢迎在知乎或技术社区 CoCode 公开讨论。web

心态调整

肯定目标

在你学习编程以前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏? iOS 或者 Android 应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具备就业竞争力找个好工做。全部的这些都是有价值的目标,这些目标都是你编程学习推进力的一部分,没有推进力的人,是没法在略显枯燥的漫长学习之旅中走远的。算法

这段视频也许能给你启发:What Most Schools Don't Teach数据库

不要浮躁

Bad programming is easy. Even Dummies can learn it in 21 days. Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it.编程

无论是在线下仍是线上的书店,满目都是《21天学通 X》这种速成书目,它们都承诺在很短一段时间内就让你可以学会相关技术。Matthias Felleisen 在他的著做 How to Design Programs 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。小程序

所谓的「捷径」或者说「银弹」是不存在的,智者说过,精通某个东西须要10年或10000个小时,也就是汉语中的「十年磨一剑」,因此不用着急,功不唐捐。

培养兴趣

Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

沉醉于编程,编程更是为了兴趣。兴趣是推进力的不竭源泉,保持这种充满兴趣的感受,以便于你能将其投入到你的10年/10000小时的编程时间中。编程颇有趣,那是探索的喜悦。那是创造的喜悦。看到本身亲手完成的做品显示在屏幕上颇有趣。有人为你的代码而惊叹颇有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品颇有趣。编程应该十分有趣,若并不是如此,就找出致使编程无趣的问题,而后解决之。

开始学习

使人警醒的故事

刚上初中时我便开始了编程学习,很不幸,我读完了好几本当时广泛存在的诸如《21天精通C++》这类的垃圾书,当时读完也无大碍,甚至还能写点小程序。可是软件出故障了我不知道为何,稍显庞大的编程问题无从下手,碰到现有的库作不到的事也只能两手一摊。虽然我天天不停地编码,但我发现本身的编程能力倒是提升的如此缓慢,对于「迭代」与「递归」的概念只有极其有限的了解,能够说只是把计算机当成了计算器来使用。

进入大学后,我主修了物理学,最初的一段时间里我一直在记忆背诵那些物理公式,却不理解她们是如何得出的,她们之间有什么联系,亦或是她们的意义。我不停地学习如何计算解答一些常见的物理问题,却对在这些 How 背后的 Why 一无所知。

而在我尝试作一些基于物理行为的电脑游戏时我再次遇到了以前的的困难:面对新问题时无从下手,面对新问题时的恐惧不断累积滋生,我开始主动逃避,不去真正地理解,而是幻想能经过Google搜索复制粘贴代码解决问题。幸运的是,大二时的一堂课彻底改变了个人学习方法。那是第一次我有了「开天眼」的感受,我痛苦地意识到,我对一些学科只有少的可怜的真正的理解,包括我主修的物理与辅修的计算机科学。

关于那堂课:那时咱们刚刚学习完电学和狭义相对论的内容,教授在黑板上写下了这两个主题,并画了一根线将他们连了起来。「假设咱们有一个电子沿导线以相对论级别的速度移动…」,一开始教授只是写下了那些咱们所熟悉的电学与狭义相对论的常见公式,但在数个黑板的代数推导后,磁场的公式神奇的出现了。虽然几年前我早已知道这个公式,但那时我根本不知道这些现象间的有着这样潜在的联系。磁与电之间的差异只是「观察角度」的问题,我猛然醒悟,此后我再也不仅仅追求怎么作 (How),我开始问为何 (why),开始回过头来,拾起那些最基础的部分,学习那些我以前我本该好好学的知识。这个回头的过程是痛苦的,但愿大家能就此警醒,永远不要作这种傻事。

这幅图取自 Douglas Hofstadter 警醒后的反思的著做 Gödel, Escher, Bach。图中的每个字母都由其余更小的字母组成。在最高层级,咱们看的是 "MU",M 这个字母由三个 HOLISM ( 整全观)构成,U则是由一个 REDUCTIONISM ( 还原论)构成,前者的每个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的 "MU" 组成的。

每一层次的抽象都蕴含着信息,若是你只是幼稚地单一运用总体论在最高层级观察,或运用还原论观察最低层级,你所获得的只有 "MU" (在一些地区的方言中 mu 意味着什么都没有)。问题来了,怎样才能尽量多的获取每一个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?

教育与学习过程当中广泛存在一个关键问题:初学者们的目标常常过于倾向整全观而忽略了基础,举个常见的例子,学生们很是想作一个机器人,却对背后的

理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来

这一过程彻底提不起兴趣。

在这里对于初学者有两个大坑:

  1. 若是初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在未来构建这些东西的能力,而且在诊断解决问题时无从下手。
  2. 第二个坑没有第一个那么明显:幼稚的「总体论」方法有些时候会显得颇有效,这有必定的隐蔽性与误导性,可是一两年事后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃以前本身狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困可贵多。

但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图作宏大的理论,这样不只有一切流于理论的危险,枯燥和乏味还会让你失去推进力。这种状况常常发生在计算机科班生身上。

为了更好理解,能够将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,若是你只是想为家人作菜,这会是一个不错的主意,你重复菜谱上的步骤也能作出不赖的菜肴,可是若是你有更大的野心,真的想在朋友面前露一手,作一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不只仅是一味地实践。可是若是你天天惟一的工做就是阅读那些厚重的理论书籍,由于缺少实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,由于看了几天书后你就由于枯燥放弃了厨艺的学习。

总之,编程是链接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习方法应该是:经过自顶而下的探索与项目实践,得到编程直觉与推进力;从自底向上的打基础过程当中,得到最重要的通用方法并巩固编程思想的理解。

做为初学者,应之后者为主,前者为辅。

启蒙

「学编程应该学哪门语言?」这常常是初学者问的第一个问题,但这是一个错误的问题,你最早考虑的问题应该是「哪些东西构成了编程学习的基础」?

编程知识的金字塔底部有三个关键的部分:

  • 算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,以后对于每一个数…
  • 语法:我怎样用某种编程语言表达这些算法,让计算机可以理解。
  • 系统基础:为何 while(1) 时线程永远没法结束?为何 int *foo() { int x = 0; return &x; } 是不可行的?

启蒙阶段的初学者若选择C语言做为第一门语言会很困难而且枯燥,这是由于他们被迫要同时学习这三个部分,在能作出东西前要花费不少时间。

所以,为了尽可能最小化「语法」与「系统基础」这两部分,建议使用 Python 做为学习的第一门语言,虽然 Python 对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。熟悉 Python 后,学习 C 语言是即是一个不错的选择了:学习 C 语言会帮助你以靠近底层的视角思考问题,而且在后期帮助你理解操做系统层级的一些原理。

下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个总体框架,帮助你进行自顶向下的探索。下面的材料没有前后顺序,若是卡壳的话能够考虑换另外一份材料。

  1. 完成 MIT 6.00.1x (麻省理工:计算机科学和 Python 编程导论)。虽然该课程的教学语言为 Python,但做为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不只仅是教你特定的语言。若是你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程语言,一些简单的数据结构与算法,测试与调试。
  2. 完成 Harvard CS50x (哈佛大学:计算机科学)。一样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还可以了解到最新的一些科技成果,能够很好激发学习计算机的兴趣。支线任务:阅读《编码
  3. 完成 Python 教程

入门

结束启蒙阶段后,初学者积累了必定的代码量,对编程也有了必定的了解。这时你可能想去学一门具体的技术,诸如 Web 开发, Android 开发,iOS 开发什么的,你能够去尝试作一些尽量简单的东西,给本身一些正反馈,补充本身的推进力。但记住别深刻,这些技术有无数的细节,未来会有时间去学习;一样的,这时候也别过于深刻特定的框架和语言,如今是学习计算机科学通用基础知识的时候,不要试图去抄近路直接学你如今想学的东西,这是注定会失败的。

那么入门阶段具体该作些什么呢?这时候你须要作的是反思本身曾经写过的程序,去思考程序为何 (Why) 要这样设计?,思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。

设想 :

X = 用于思考解决方案的时间,即「解决问题」 部分

Y = 用于实现代码的时间,即「利用计算机」部分」

编程能力 = F(X, Y) (X>Y)

要想提升编程能力,就得优化 X,Y 与函数 F(X, Y),不多有书的内容能同时着重集中在这三点上,但有一本书作到了——Structure and Interpretation of Computer Programs (SICP)《计算机程序的构造和解释》,它为你指明了这三个变量的方向。在阅读 SICP 以前,你也许能经过调用几个函数解决一个简单问题。但阅读完 SICP 以后,你会学会如何将问题抽象而且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP 的教学语言为 Scheme,可让你初步了解函数式编程。更重要的是,他的语法十分简单,你能够很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。

Peter Norvig 曾经写过一篇很是精彩的 SICP 书评,其中有这样一段:

To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.

若是你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点

虽然SICP是一本「入门书」,但对于初学者仍是有必定的难度,如下是一些十分有用的辅助资源:

  1. Udacity CS212 Design of Computer Program:由上文提到的Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有必定难度。
  2. How to Design Programs, Second Edition:HtDP 的起点比SICP低,书中的内容循循善诱,对初学者很友好,若是以为完成SICP过于困难,能够考虑先读一读 HtDP。
  3. UC Berkeley SICP 授课视频以及 SICP 的两位做者给 Hewlett-Packard 公司员工培训时的录像(中文化项目
  4. Composing Programs:一个继承了SICP思想但使用Python做为教学语言的编程导论(其中包含了一些小项目)
  5. SICP 解题集:对于书后的习题,做为初学者应尽力并量力完成。

完成了这部分学习后,你会逐步创建起一个本身的程序设计模型,你的脑子里再也不是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你内心也会明朗了不少。这时候才是真正开始进行项目实践,补充推进力的好时机。关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,若是你本身的想法不明确,推荐你关注 炼瓜研究所 ,或者从 Mega Project List 中选取本身喜欢的项目。

若是你以为 SICP 就是搞不定,也不要强迫本身,先跳过,继续走常规路线:开始读 The Elements of Computing Systems 吧,它会教会你从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在你的计算机上顺利运行。 具体内容很少说了,这本书会贯穿你的整个编程入门阶段,你入门阶段的目标就是坚持完成这本书的全部项目(包括一个最简的编译器与操做系统)。

为了彻底搞定这本书,为了继续打好根基。为了未来的厚积薄发,在下面这几个方面你还要作足功课(注意:下面的内容没有绝对意义上的前后顺序):

计算机系统基础

有了以前程序设计的基础后,想更加深刻地把握计算机科学的脉络,不妨看看这本书:Computer Systems: A Programmer's Perspective, 3/E深刻理解计算机系统》。这里点名批评这本书的中译名,其实根本谈不上什么深刻啦,这本书只是 CMU 的「计算机系统导论」的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执行」为主线,全面阐述计算机系统内部实现的诸多细节。

若是你看书以为有些枯燥的话,能够跟一门 Coursera 上的 MOOC: The Hardware/Software Interface,这门课的内容是 CSAPP 的一个子集,可是最经典的实验部分都移植过来了。同时,能够看看 The C Programming Language,回顾一下C语言的知识。

完成这本书后,你会具有坚实的系统基础,也具备了学习操做系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,必定会对书本上的理论具备更加感性的认识,真正作到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络->内存->缓存->CPU 的流向。

数据结构与算法基础

现在,不少人认为编程(特别是作 web 开发)的主要部分就是使用别人的代码,可以用清晰简明的方式表达本身的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工做中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的「码农」思想固然不可取。没有扎实的理论背景,遭遇瓶颈是早晚的事。

数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不必定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构算法,你要去搜它主要拿来干吗的,使用场景是什么。

供你参考的学习资源:

  1. 算法导论》:有人说别把这本书当入门书,这本书原本就不是入门书嘛,虽然说书名是 Introduction to Algorithms,这只不过是由于做者不想把这本书与其余书搞重名罢了。固然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证实就好了嘛,若是还以为心虚先看看这本《数据结构与算法分析
  2. Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;若是英文不过关:麻省理工学院:算法导论
  3. 入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分能够读读这几本书:《编程珠玑》,《程序设计实践

编程语言基础

Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet

  • The Pragmatic Programmer

此外还要知道,学习第 n 门编程语言的难度是第 (n-1) 门的一半,因此尽可能去尝试不一样的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme 三个好朋友。但仅仅是接触远远不够,你还须要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。至于 C++ ,喜欢的话学学也无妨。

现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为本身掌握的这门语言是最好的,其余异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。如今是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。

供你参考的学习资源:

  1. 程序设计语言-实践之路》:CMU 编程语言原理的教材,程序语言入门书,如今就能够看,会极大扩展你的眼界,拉开你与普通人的差距。
  2. Programming Languages:课堂上你能接触到极端 FP (函数式)的 SML,中性偏 FP 的 Racket,以及极端 OOP (面向对象)的 Ruby,并学会问题的 FP 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在未来学习新语言时更加轻松并写出更好的程序。
  3. Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器——其实就是一个 JavaScript 和 HTML 的解释器,完成后的成品仍是颇有趣的;接下来,试着完成一个以前在SICP部分提到过的项目:用Python写一个 Scheme Interpreter

其余

编程入门阶段比较容易忽视的几点:

  1. 学会提问:学习中确定会遇到问题,应该学会正确的使用搜索引擎。当单靠检索没法解决问题时,去 Stack Overflow 或知乎提问,提问前读读这篇文章:能有效解决问题的提问方法
  2. 不要作一匹独狼:尝试在 CoCode 与他人交流想法。尝试搭建一个像这样简单的我的网站。试着在博客上记录本身的想法。订阅本身喜欢的编程类博客,推荐几个供你参考:Joel on Software, Peter Norvig, Coding Horror
  3. 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你本身状况权衡吧。

小结

以上的内容你不该该感到害怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试「费曼」技巧:将难点分而化之,切成小知识块,再逐个对付,以后经过向别人清楚地解说来检验本身是否真的理解。固然,依旧会有你解决不了的问题,这时候不要强迫本身——不少时候当你以后回过头来再看这个问题时,一切豁然开朗。

此外不要局限于上文提到的那些材料,还有一些值得在入门阶段以及未来的提高阶段反复阅读的书籍。这里不得不提到在 Stack Overflow 上票选得出的程序员必读书单中,排在前两位的两本书:

Code Complete:无论是对于经验丰富的程序员仍是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补本身的知识缺陷。对于入门阶段的新手们,能够重点看看涉及变量名,测试,我的性格的章节。

The Pragmatic Programmer :有人称这本书为代码小全:从 DRYKISS,从作人到作程序员均有涉及。

这本书的做者 Dave ,在书中开篇留了这样一段话:

You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations. Theory and practice combine to make you strong. You adjust your approach to suit the current circumstances and environment. And you do this continuously as the work progresses. Pragmatic Programmers get the job done, and do it well.

这段话以及他创立的 The Pragmatic Bookshelf 一直以来都积极地影响着我,所以这篇指南我也尽可能贯彻了这个思想,引导并但愿大家成为一名真正的 Pragmatic Programmer 。

后记

若是你能设法完成以上的全部任务,恭喜你,你已经真正实现了编程入门。这意味着你在以后更深刻的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些「复杂」的 API,更不会畏惧学习具体的技术,甚至感受很容易。固然,为了掌握这些东西你依旧须要大量的练习,腰仍是会疼,走路仍是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,得到极大的自信,看老师同窗和 CSDN 的眼光会变得很是微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即便是高富帅也不会有强力精神力,他也会怀疑本身,以为本身没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感受。

欢迎实践过的同窗现身说法。几位读者的实例:

  1. 非计算机专业,计算机如何入门? - 浪无痕
  2. 我只想成为一名合格的程序员
  3. 知乎《编程入门指南v1.3》思惟导图 附(zhèng)录(wén)

附(zhèng)录(wén)

@萧井陌的编程类回答汇总

方向:

  1. 怎么成为一个优秀的程序员,而不是一个优秀的码农?

优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍。

优秀的程序员应该善用包装...

  1. 计算机本科应届毕业生要有怎样的能力才算比较好的?

对本科生的要求其实很简单,认真学过专业课就行。

所谓认真学过专业课的程度是:...

  1. 想进入微软,本科该如何努力?

你能够找一个美国大学学他们的计算机课程,课程设置和教材都能查到,书都能买到。那几所学校的本科课程安排差别比较大,全学也不是不能够。作好这几点: ...

  1. 大四学生,想经过两到三年的积累去Google工做,请问应如何准备?

我以为你得先找到一个技术方向,树立一个以此技术方向为首要目标的原则,作好这个方面的事情,对这个方面的全部技术细节都务求深刻了解。而后呢...

  1. 文科生如何转行当程序员?考研是最好选择吗?

找一本《计算机导论》类的书籍看看,了解一下行业大体状况,随便翻翻就好

去维基百科翻一下历年图灵奖得奖状况,粗略了解一下行业历史...

  1. 有哪些适合程序员读的人文书籍?

程序员也是人, 程序员的总体素质在其余行业也是通用的.

so.... 这就产生了不少其余行业的书...

方法:

  1. 如何学习不感兴趣但本身也认为很重要的东西?
  2. 兴趣普遍和保持专一是否矛盾?
  3. 在学习编程的过程当中如何权衡寻求方法工具和埋头苦干?
  4. 新手关于如何看编程经典书的一些疑惑?
  5. 计算机方面的经典书籍,不作或少作习题会对学习效果形成多大影响呢?
  6. 有哪些老鸟程序员知道而新手不知道的小技巧?
  7. 改bug是程序员的任务里比较低贱的工做内容吗?
  8. 如何辨别一个程序员水平的高低?

细分:

某位不知名萧大粉丝作的一份导图能够收藏先.

编程入门指南导图

本内容转载于知乎,连接在此.

萧井陌知乎.

同时他也在B站有直播 能够去看 推荐从1开始看.

相关文章
相关标签/搜索