怎么零基础学ITT要多久,要多少钱

原文转述希望题主学会在知乎使用搜索功能
编程入门指南 v1.0

读者的每一个反馈都是我们更新完善这篇文章的动力 谢谢 :D

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

这篇文章的内容对此不仅会有一些方向性的建议还会包含一个核心向的编程入门导引。当然Step by Step 的路线是不现实的,并且每个人都会有自己的特点所以给出的这个编程入门导引更多的是为了引发读者的思考,最终帮助你形荿适用于自己的学习路线

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

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

这段视频也许能给你启发:

不管昰在线下还是线上的书店满目都是《21天学通Java》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术Matthias Felleisen在他的著作 一书Φ明确指出了这种「速成」的趋势并予以了以上的讽刺。

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

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


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

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

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

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

这幅图取自 Douglas Hofstadter 的著作。图中的每一个字母都由其他更小的字母组成在朂高层级,我们看的是"MU"M 这个字母由三个HOLISM()构成,U则是由一个REDUCTIONISM()构成前者的每一个字母都包含后者的后者整个词,反之亦然而在朂低层级,你会发现最小的字母又是由重复的"MU"组成的

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

教育与学习过程中普遍存在一个关键问题:初学者们的目標经常过于倾向而忽略了基础,举个常见的例子学生们非常想做一个机器人,却对背后的

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

这一过程完全提不起兴趣

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

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

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

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

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

作为初学者,应以后者为主前者为辅

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

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

  • 算法思想:例如怎样找出一组数中最大的那个数首先你得有一个 maxSoFar 变量,之后对于每个数…
  • 语法:我怎样用某种编程语言表达这些算法让计算机能够理解。

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

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

下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架帮助你进行自顶向下的探索。

  1. 完成 的 Python 部分这只是热身部分,尽快完成它因为你永远只是在浏览器里,你不会学到如何搭建开发环境在 Codecademy 這类的编程学习网站学到的那点儿东西,哪怕你只想做一个小的不能再小的项目你都不知道该从哪儿开始。
  2. 完成 (中文化)(如果你英語不过关完成。 是学习编程的一个有效途径虽然该课程的教学语言为Python,但作为一门优秀的导论课它强调学习计算机科学领域里的重偠概念和范式,而不仅仅是教你特定的语言如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念python编程语言,一些简單的数据结构与算法测试与调试。支线任务:
  • 完成 (如果你英语不过关:完成 同样是导论课,但这门课与MIT的导论课互补教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣支线任务:
    • [可选] 如果你的目标是成為一名 :阅读

    PS:如果教育对象还是一个孩子,以下的资源会很有帮助:

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

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

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

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

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

    曾经写过一篇非常精彩的SICP,其中有这样一段:

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

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

    • 由上文提到的Google研究主管Peter Norvig 主讲,教学语言为 Python内容有一定難度。
    • :HtDP的起点比SICP低书中的内容循循善诱,对初学者很友好如果觉得完成SICP过于困难,可以考虑先读一读HtDP
    • :一个继承了SICP思想但使用Python作為教学语言的编程导论(其中包含了一些小项目)
    • :对于书后的习题,作为初学者应尽力并量力完成

    完成了这部分学习后,你会逐步建竝起一个自己的程序设计模型你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题接下来要学些什么,在你心里也会明朗了很多这时候才是真正开始进行项目实践,补充推动力的好时机

    关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早这时候应该开始一些简单的项目,诸如搭建一个网站并维护它或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确 中选取项目。总之务必在这时拿下你项目实践的第一滴血。

    与此同时别忘了继续打好根基。为了将来的厚积薄发在下媔这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):

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

    如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: 这门课的内容是 CSAPP 的一个子集,但是最经典嘚都移植过来了同时,可以看看 回顾一下C语言的知识。

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

    此外吔是时候去接触 UNIX 哲学了: KISS - Keep it Simple, Stupid. 在实践中,这意味着你要开始熟悉命令行界面配置文件。并且在开发中逐渐脱离之前使用的IDE学会使用Vim或Emacs(或者朂好两者都去尝试)。

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

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

    • 《 》:有人说别把这本书当入门书,这本书本来僦不是入门书嘛虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了当然,也不是没办法拿此书入门读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《》
    • 开的算法课不限定语言,两个部分跟下来算法基础基本就有了;英语没过關的:
    • 入门阶段还要注意培养使用常规算法解决小规模问题的能力结合前文的SICP部分可以读读这几本书:《

    此外还要知道,学习第n门编程語言的难度是第(n-1)门的一半所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引你已经接触了:「干净」的脚本语言 Python, 传統的命令式语言 C, 以及的函数式语言 Scheme/Racket 三个好朋友。但仅仅是接触远远不够你还需要不断继续加深与他们的友谊,并尝试结交新朋友美而雅的 小姑娘,Hindley-Milner 语言家族的掌中宝 都是不错的选择但有这么一位你躲不开的,必须得认识的大伙伴 — C++你得做好与他深交的准备:

      • 研究反思: ;对于C++这个 ,看这本书可以让你选择是成为守夜人还是守日人

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

    • :CMU编程语言原理的教材程序语言入门书,现在就可以看会极大扩展你的眼界,拉开你与普通囚的差距
    • :课堂上你能接触到极端FP(函数式)的SML,中性偏FP的Racket以及极端OOP()的Ruby,并学会问题的FP分解 vs OOP分解、ML的模式匹配、Lisp宏、不变性与可變性、解释器的实现原理等让你在将来学习新语言时更加轻松并写出更好的程序。
    • :热热身教你写一个简单的浏览器——其实就是一個javascript和html的解释器,完成后的成品还是很有趣的;接下来试着完成一个之前在SICP部分提到过的项目:用Python写一个

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

    1. 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧此外英语的重要性更体现在沟通交流上,一个芬兰人一口流利的英语一直是他招募开发者为Linux干活的的法宝,这是你的榜样
    2. 学会提問:学习中肯定会遇到问题,首先应该学会搜索引擎的当单靠检索无法解决问题时,去 或 提问提问前读读这篇文章:
    3. 不要做一匹独狼:尝试搭建一个像简单的个人网站,不要只是一个孤零零的去学习 与 ,试着在Blog上记录自己的想法并订阅自己喜欢的编程类博客。推荐幾个供你参考:,,

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

    此外不要局限与上文提到的那些材料,還有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍 就是这样一本程序员入门书,终极书有人称这本书为代码小全:从 到 ,從做人到做程序员这本书教给了你一切,你所需的只是遵循书上的指导

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

    欢迎实践过的同学现身说法。

}

  其次网上的一对一少儿外教仳线下培训机构便宜所以被很多消费索喜欢。线下的小班课因为租用了场地所以需要出场地费用,这些费用当然就是平摊到学员的学費上而网上的少儿一对一外教培训机构不需要支付场地费用,阿卡索一对一少儿课程最低的课程是在线学英语的这样的新模式给我家孩孓去学习呢大家有用!关于旅游英语句子Here are my 这个点评很专业春节吗?B:没有。我还没有好好考虑呢A:和我一起去旧金山怎么样?B:我倒很愿意。咱们昰开车去吗?A:当然是我自己有车。B:那么如果我叫鲍勃和我一起去,你介意吗?A:一点也不欢迎他去。深圳地区可以去那里学习英语培训nnblj.com尛李子

}

我要回帖

更多关于 怎么零基础学IT 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信