学编程的一些核心建议
我认为最重要的有三点
- 热爱(从心底喜爱)
- 努力(多做项目,每天5小时以上)
- 解决问题的能力
这三点保证了其次最重要的就是
- 选好方向(深度和广度都得保证,最好是80%时间专精保证深度,20%时间来涉猎各种知识保证广度)
ps: 代码要写的优美
热爱
编程这么有趣的事,竟然还有钱赚 (by c++ 之父)
我花了一年时间做到这点,这个很重要。
现在我非常喜欢代码的优美,顺便喜欢技术带给我的能力、自信、钱。
然后选择方向上,很大一部分是取决你的兴趣的,你对算法感兴趣 or 工程 or 数据 or 硬件 or 安全 or 优美的代码
努力
第一点做到了,这一点应该是顺理成章的。
其中最重要的是,要 learn by doing。也就是做中学,多做项目,非常重要。让你写的程序从100行到1000行,再到万行,就好比看着你创造的城市在一点点的扩大,当然要确保代码的优美,时刻思考,不然那不是城市,而是垃圾堆。
还有就是看书,仔细阅读一本经典的书(做笔记、写博客、思考、把理论付诸于实践),胜过看十本普通的书,一百本烂书。所以选书很重要。练习、思考更重要。
总结一下,努力就是我后面说的 基本功 和 熟练度 的积累过程,记住 量变导致质变
解决问题的能力
解决问题的过程
这个复杂一点,是程序员的 核心竞争力,我觉得解决问题的过程无外乎三点
- 彻底理解问题是什么
- 弄清导致问题的根本原因
- 寻找解决方案
有一种说法是面对 谷歌编程,面对 stackoverflow 编程,其实当你把这三点弄透,你就知道为啥了。你搜索之前应该弄懂前两点,看前人的经验来完成第三点。所以根本不是谷歌帮你编程,而是你在使用谷歌这个工具,最关键的还是你自己,不同人用谷歌搜索的效果是天差地别的。(当然工具还是很重要非重要的,“君子生非异也,善假于物也”,不过怎么用工具更重要,工具里往往沉淀着非常棒的思想)
搜索的思想和谷歌技巧 http://simplyy.space/article/56c2d71f6ba384e02299f9a5
除了搜索的技巧,基本功、熟练度、胆量 也很重要
基本功
当然基本功很重要,不然你不可能真的能理解问题,比如你不会数据结构,然后面对这方面问题。说白了,当你真的懂了一个问题,问题的答案就是呼之欲出的。而透彻的懂一个问题,需要你对这个问题的方方面面有一定的了解和思考。
熟练度
无他,但手熟尔 (by 卖油翁)
量变导致质变,当你解决了数千个问题后,谷歌了上万次,你会发现你再用谷歌,就是一目十行,眼睛跟老鹰一样,瞬间就锁定到了答案。
胆量
这里有个胆量问题,还很严重,对于新手
- 谷歌不会,翻墙好难
- 英文好多,英语好难
- 代码看不懂,编程好难
- 这里出 bug 了,debug 好难
- 我不敢写有趣的项目,做项目好难
我还是 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 上面
- 等(看完十本经典编程书?)
如果你对编程兴趣还不大,可以看看 SimplyY 的博客文章: 《编程的优点》 链接为: http://simplyy.space/article/56c2d71f6ba384e02299f99f