针对这个问题,我上午看到了@品雪一年前写的一篇文章,很不错,在此强烈推荐给大家,希望对有同样需求和疑惑的同学有所帮助。
原作者:@品雪原链接:https://zhuanlan.zhihu.com/p/21475104原出处:知乎目标决定方法,如果是想转行做职业程序员,那还是老老实实把基础概念搞清楚,系统的学一门语言一个平台,虽然风口来时只会点皮毛也能唬住一些外行、混到一个不错的收入,不过即使努力边学边干熬过去了,有这样心态的人也很难有长远的发展,风口总是会过去的,一直在程序员底层混着,不会比其它行业愉快的。
不过,也未必要把四大基础课程(计算机原理、数据结构与算法、操作系统原理、编译原理)都深入学完才算有基础概念了,基础不好的程序员刚工作时,挺容易陷进这个坑里。这些东西迟早是要补回来的,不过开始只要有个最粗略的概念也够干活的了。严格说来,系统学习与快速出活的矛盾是一个永远需要面对的问题,需要根据具体情况和个人兴趣找到适当的平衡点。在碰到问题时,作为深入系统的学习的契机是很好的,假以时日就会变得非常专业。总是解决过眼前需求就算,出活比较快,但是对个人的长期发展是很不利的,因为水平总是很浅。
在这里,先插一句,对于没有基础的初学者来说,学习编程最重要的是保持初心。当初怎么想起来学编程的呢?
是想把自己理想里的网站、移动 App 或者工具应用做出来,还是要求解专业方向上的问题,或者完成一个游戏、制作一个交互动画效果,还是别的什么。学习时,编程语言的诸多规定要记,开发平台的许多细节要熟悉,上手时debug的各种没头绪,如果陷到里边又没有搞出什么成果,太容易上演从入门到放弃。时时记得自己是为什么来学习编程的,学会一点,就用一用,明明白白感受到每天进步一点点,坚持下来的概率就大很多了。
把一门编程语言的细节都学透了,会是一个漫长的征程,你并不需要成为人肉编译器或解释器才能运用它,学会流程控制语句和基本的程序结构算是入门了,之后就可以开始给自己的项目添砖加瓦了。这样比较能保持长久的热情。昔年我还在上大学的时候,有很多同学抱着谭浩强版《C语言程序设计》学编程,基本上都从入门到放弃了。固然有书写得不好的因素,缺少目的性也是一个很关键的因素。
那么语言本身怎么入门呢?
对初学者,我喜欢推荐https://www.codeschool.com的教程,这些教程贯彻了小步前进、动手练习的原则,同时又省去了配置环境麻烦。别小看最后一点,软件开发的环境配置实在是一个比较烦人的事儿,非常容易掉坑里。所以,零基础的爱好者尽量选择解释型语言学起,用好的集成开发环境( IDE )工作,比如学习 Windows 应用开发用 Visual Studio,学习 PHP 考虑 Zend Studio 或者
PHPStorm,学Web 开发的 WebStorm/Sublime/Visual Studio Code 等。另一个选择是越来越多的在线编程环境,@路人甲整理了一个很不错的清单:https://zhuanlan.zhihu.com/p/21808087。对于 JavaScript 的话,http://codepen.io(国内略慢)、http://jsbin.com/、http://jsfiddle.net(国内略慢) 也比较流行。
语言选择是由学习的目的决定的,比如做 Android 应用开发就得学 Java ,IOS 则是 Objective-C 或者 Swift(PS:IOS和安卓药丸),做网页当然是 JavaScript,大数据考虑 Python 或者 R,做游戏 C/C++,所以并不一定由得自己。对于零基础的爱好者,随大流才是明智的,听说 Rust 好或者 haskell 牛就去学,基本上是找虐。程序语言的流行情况随便在哪个社区论坛逛逛都很容易知道,搞不清楚可以参考TIOBE。如果只有泛泛的兴趣,我现在一律推荐学 JavaScript,纯考虑语言的话 Java 其实更好,学习起来简单,能尽快上手写东西才是好语言,不过 JavaScript 拿来做页面效果,比较容易有成就感,环境依赖也比较小。另外,对于泛兴趣的学习者,强烈推荐去https://www.codewars.com刷题。