学编程的一些核心建议

学编程的一些核心建议

我认为最重要的有三点

  • 热爱(从心底喜爱)
  • 努力(多做项目,每天5小时以上)
  • 解决问题的能力

这三点保证了其次最重要的就是

  • 选好方向(深度和广度都得保证,最好是80%时间专精保证深度,20%时间来涉猎各种知识保证广度)

ps: 代码要写的优美

热爱

编程这么有趣的事,竟然还有钱赚 (by c++ 之父)

我花了一年时间做到这点,这个很重要。

现在我非常喜欢代码的优美,顺便喜欢技术带给我的能力、自信、钱。

然后选择方向上,很大一部分是取决你的兴趣的,你对算法感兴趣 or 工程 or 数据 or 硬件 or 安全 or 优美的代码

努力

第一点做到了,这一点应该是顺理成章的。

其中最重要的是,要 learn by doing。也就是做中学,多做项目,非常重要。让你写的程序从100行到1000行,再到万行,就好比看着你创造的城市在一点点的扩大,当然要确保代码的优美,时刻思考,不然那不是城市,而是垃圾堆。

还有就是看书,仔细阅读一本经典的书(做笔记、写博客、思考、把理论付诸于实践),胜过看十本普通的书,一百本烂书。所以选书很重要。练习、思考更重要。

总结一下,努力就是我后面说的 基本功熟练度 的积累过程,记住 量变导致质变

解决问题的能力

解决问题的过程

这个复杂一点,是程序员的 核心竞争力,我觉得解决问题的过程无外乎三点

  1. 彻底理解问题是什么
  2. 弄清导致问题的根本原因
  3. 寻找解决方案

有一种说法是面对 谷歌编程,面对 stackoverflow 编程,其实当你把这三点弄透,你就知道为啥了。你搜索之前应该弄懂前两点,看前人的经验来完成第三点。所以根本不是谷歌帮你编程,而是你在使用谷歌这个工具,最关键的还是你自己,不同人用谷歌搜索的效果是天差地别的。(当然工具还是很重要非重要的,“君子生非异也,善假于物也”,不过怎么用工具更重要,工具里往往沉淀着非常棒的思想)

搜索的思想和谷歌技巧 http://simplyy.space/article/56c2d71f6ba384e02299f9a5

除了搜索的技巧,基本功、熟练度、胆量 也很重要

基本功

当然基本功很重要,不然你不可能真的能理解问题,比如你不会数据结构,然后面对这方面问题。说白了,当你真的懂了一个问题,问题的答案就是呼之欲出的。而透彻的懂一个问题,需要你对这个问题的方方面面有一定的了解和思考。

熟练度

无他,但手熟尔 (by 卖油翁)

量变导致质变,当你解决了数千个问题后,谷歌了上万次,你会发现你再用谷歌,就是一目十行,眼睛跟老鹰一样,瞬间就锁定到了答案。

胆量

这里有个胆量问题,还很严重,对于新手

  1. 谷歌不会,翻墙好难
  2. 英文好多,英语好难
  3. 代码看不懂,编程好难
  4. 这里出 bug 了,debug 好难
  5. 我不敢写有趣的项目,做项目好难

我还是 qq 问一下别人吧。

于是海量的伸手党就出现了。

其实说白了,就是,大家都没有解决这个问题的胆量,都不敢自己一个人去解决问题,虽然这是共性,但是一定要有意识的克服,不然你会一直没有进步。

记得有人说过这样一句话,在公司上班,假如技术上的大问题来了,而你没有胆量去解决,而是总是交给别人,ok,别人就会一直进步,最后成为你的主管,你的大主管,你的大大主管,而你原地踏步,说不定还会被新来的淘汰。

并且,没有胆量熟练度就无从谈起,做有趣的项目就无从谈起,你学的所有基本功就会持续荒废,学而不用就会怎么样?忘啊!

所以胆量是 基石

方向

深度和广度都得保证,最好是80%时间专精保证深度,20%时间来涉猎各种知识保证广度

选择方向上,很大一部分是取决你的兴趣的,你对算法感兴趣 or 工程 or 数据 or 优美的代码,这个要慎重选择,我花了半年时间才选择的,多了解、多尝试,发现自己的兴趣点,再为之努力,潜下心来学习,挖深领域。

我是近期要去阿里 web 前端岗位实习(其实我选择和学前端是一年内的事,不过之前兴趣和基本功都不错,做做项目熟练度就起来了),我写了一个教程,如果大家对 web 前端 这方面感兴趣,可以看看 SimplyY 的博客文章: 《web前端 thinking 教程(0):序》 链接为: http://simplyy.space/article/56fa2d3a6ae6a1031eaa4e3c

向编程方向上现在大体分为

  • 硬件
    • 嵌入式(c、c++、汇编)
    • 等(我不怎么了解硬件。。)
  • 软件(互联网程序员,50%以上从事这方面,每一个端都是刚需。然后在十年前就有一句话是说,web 是未来)
    • pc native 端(c++、c# 等等)
    • 移动 native 端,安卓(java),ios(oc,swift)
    • web 前端(js)
    • web 后端(java,python,c++ 等)
  • 算法 & 科研
    • 机器学习
    • 等等(不怎么了解+1)
  • 安全(不了解,当黑客、白帽子等)
  • 运维(大 linux)
  • 底层(不很了解,据说只有1%的程序员才有能力靠这些吃饭,,)
    • 操作系统
    • 编译器
    • 等等

其中不推荐新手上手学 c,c++,这俩在应用层上些有趣的东西对基础要求比较高,新手很难上手写大且有趣的东西。

推荐 python、js,写应用的门槛低,可以很好的 learn by doing,当然深入学习(弄懂原理、造轮子、弄懂底层等)是必须的,不能满足简单的东西,不然基本功就很弱,熟练度再高也白搭。

具体怎么学

搜。

这也是一个 待解决的问题,其实我也讲了不少,看书、做项目、多思考,而且不同方向是不一样的,答案网上很多很多。

总结一下非常重要的东西

  • 兴趣
  • 基本功
    • 编程能力:语言语法、debug 能力、写优雅的代码、数据结构(编程离不开它)
    • 底层知识:计算机网络、操作系统、编译原理等
    • 各领域特定知识:根据你的方向来
  • 工具(君子生非异也,善假于物也)
    • 英语 非常重要
    • 搜索:谷歌
    • 社区:github、stackoverflow等
    • 各类英文文档:MDN、dash(osx 专属,全平台文档利器在这里 http://devdocs.io/
  • 成果
    • 多写几个有一定规模(代码量 3k 行以上)的有趣的项目(写一个足以升一次级,收获满满),最好都发布在 github 上面
    • 等(看完十本经典编程书?)

http://devdocs.io/ :

如果你对编程兴趣还不大,可以看看 SimplyY 的博客文章: 《编程的优点》 链接为: http://simplyy.space/article/56c2d71f6ba384e02299f99f

文章目录
  1. 1. 学编程的一些核心建议
    1. 1.1. 热爱
    2. 1.2. 努力
    3. 1.3. 解决问题的能力
      1. 1.3.1. 解决问题的过程
      2. 1.3.2. 基本功
      3. 1.3.3. 熟练度
      4. 1.3.4. 胆量
    4. 1.4. 方向
    5. 1.5. 具体怎么学
    6. 1.6. 总结一下非常重要的东西
,