https://zhuanlan.zhihu.com/p/19959253

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

心态调整

确定目标

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

这段视频也许能给你启发:What Most Schools Don’t Teach
https://v.youku.com/v_show/id_XNTIzNzE2NzQ4.html

我的目标:

  1. 转码留美/加… 【职业选择 & 人生规划的更多可能性】
  2. 给自己增加一个技能

不要浮躁

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小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。

学习原则(Methodology)

how–> why

但是软件出故障了我不知道为什么,稍显庞大的编程问题无从下手,碰到现有的库做不到的事也只能两手一摊。虽然我每天不停地编码,但我发现自己的编程能力却是提高的如此缓慢,对于「迭代」与「递归」的概念只有极其有限的了解,可以说只是把计算机当成了计算器来使用

我不停地学习如何计算解答一些常见的物理问题,却对在这些 How 背后的 Why 一无所知。

此后我不再仅仅追求怎么做 (How),我开始问为什么 (why),开始回过头来,拾起那些最基础的部分,学习那些我之前我本该好好学的知识

重视基础

初学者们的目标经常过于倾向整全观而忽略了基础

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

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

一个厨艺的比喻

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

总结

正确的编程学习方法应该是:

  1. 通过自顶而下的探索与项目实践,获得编程直觉与推动力
  2. 从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。
    作为初学者,应以后者为主,前者为辅。

启蒙

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

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

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

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

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

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

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

入门阶段思维导图

https://blog.csdn.net/a910626/article/details/45223657

编程入门指南 v1.5相关推荐

  1. 编程入门指南 v1.4

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Badger 链接:http://zhuanlan.zhihu.com/xiao-jing-mo/19959253 来源: ...

  2. 《转载》编程入门指南 v1.4

    编程入门指南 v1.4 Badger · 8 个月前 作者:@萧井陌, @Badger 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 CoCode ...

  3. 知乎萧井陌大神《编程入门指南v1.3》思维导图

      毕业之后才发现大学的基础课程是多么的关键,有幸在知乎上看到萧井陌大神的文章,打算将涉及的内容学一学,下午花了1h用思维导图将文章梳理如下,希望对大家有帮助(图片太大,因此进行了分割): 原文链接: ...

  4. python编程入门指南-编程入门指南

    编程入门指南 ----------------------------------------------- 编程入门指南 v1.5 --- https://zhuanlan.zhihu.com/p/ ...

  5. 编程入门指南 @萧井陌 的心得

    编程入门指南 v1.4 这是一个知乎上的程序员大神,给了我很多帮助,还有轮子哥vczh.感谢这些大神的无私分享精神,才让我一窥什么是程序员,以及如何成为一名程序员.下面进入正题: 今年的目标:APP ...

  6. [转载]编程入门指南

    编程入门指南 作者:@萧井陌 @Badger 2015年03月03日 v1.1 更新 2015年02月18日 v1.0 更新 前言 如今编程成为了一个越来越重要的技能:作为设计师,懂一些编程可能会帮你 ...

  7. [译]函数式响应编程入门指南

    原文地址:An Introduction to Functional Reactive Programming 原文作者:Daniel Lew 译文出自:掘金翻译计划 本文永久链接:github.co ...

  8. 编程指南_今晚7点,译者编程入门指南抽奖!

    各位关注"简言"的同学们好.老师们! 我的新书<译者编程入门指南>出版啦!感谢大家一直以来的支持和陪伴,我每次发完文章后都会得到大家的点赞.转发.留言甚至打赏,我感到非 ...

  9. python编程入门指南-最简单的Python编程入门指南,没基础也能快速入门Python编程...

    原标题:最简单的Python编程入门指南,没基础也能快速入门Python编程 对Python这门编程语言来讲,几乎是没什么不能做到的.最难的不过是如何入门,也就是你进入Python编程的第一步. 其实 ...

  10. Matlab编程入门指南:简介、安装、学习路线和几十个编程案例分析。

    一.Matlab编程入门指南:简介.安装.学习路线和几十个编程案例分析. 1.Matlab编程语言是一种广泛应用于科学计算.工程计算.数据分析.统计分析.信号处理等领域的高级数值计算和数据可视化软件. ...

最新文章

  1. 高考631能上什么好的计算机学校,2021年高考630分能上什么大学 可以报哪些学校...
  2. nodeJs --- web服务器创建
  3. Microbiome:南京农大团队在粘细菌捕食的生态学功能方面取得重要进展
  4. 基于用户投票的排名算法(五):威尔逊区间
  5. Qt5布局管理(2)
  6. 用计算器计算“异或CRC”
  7. 关于Redis缓存,这三个问题一定要知道!
  8. dpkg:处理 xxx (--configure)时出错解决办法(转载)
  9. BizTalk学习笔记系列之四: BizTalk功能介绍
  10. UDP ECHO server
  11. 极通EWEBS虚拟化平台牵手厦门大学
  12. mcu AD采样值和物理值
  13. 天线发射功率计算公式_天线增益的定义/计算公式/发射功率
  14. Android客户端如何使用cookie
  15. shopex mysql索引_mysql版本太高导致shopex4.8.5无法安装
  16. 大学有必要考华为认证吗?
  17. 【Windows】win10如何拦截弹窗?
  18. java音频剪辑_Java混剪音频
  19. php面向过程求圆 三角形 长方形计算,求,圆,三角形,长方形,梯形的面积,周长公式...
  20. case when 的使用

热门文章

  1. 各国程序员薪资水平,咱有点惨...
  2. 华为 任正非 2021年1月22日 最新内部电邮全文
  3. iOS ● 非常全的三方库、插件、大牛博客等等
  4. 樊登读书会终身成长读后感_终身成长读后感300字
  5. 凸优化理论(一)数学优化问题的分类
  6. DiskGenius无损调整C盘容量方法扩大c盘
  7. 计算机网络和internet选项,internet选项在哪
  8. GAE+bottle+jinja2+beaker快速开发demo
  9. SQL基础(一):安装MySQL以及一些简单操作
  10. 从零开始嵌入聊天机器人服务(小白适用)