(一)为什么你要编程?在正式开始之前,我还想说一点闲话。其实我一向认为方法论(或者在情感方面更进一步的“鸡汤”)文章从某种程度上都是没有太多价值的,在我看来,真正需要方法论指导的人即便是看了再多也恐怕也没有效果,而能够从方法论文章中获得经验或感悟的人事实上恐怕也并不需要这些文章,因为早晚这些道理他/她自己也会明白。同样的道理也适用于这个问题——“你为何要编程?”:码农工资高 —— 但仅限于互联网行业,更进一步说,仅限于已(BAT及其他二线)以及花投(关于这个问题,有个很有趣的观点);再进一步,也许这个说法再过两年就不再成立了,随着经济大环境的变化,码农不会独善其身。希望能够从事专业性工作 —— 但编程不是唯一有技术含量的工作,你为何想要放弃自己的本专业?为何没有考虑其他的专业领域?实事求是的说,每个专业都有各自的专业性,技术研发为何只考虑编程?互联网很酷,传统行业太无聊了 —— 呵呵。不擅长与人交流 —— 但交流在编程过程中是非常重要的能力,无论大小团队,交流方式可能有所不同,但相同的一点是交流在项目中的重要性是毋庸置疑的。“许许多多的人选择编程,首要的原因就是,他们宁愿花时间在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要是你对就可以赢得任何争论的地方。”(《软件随想录》) —— 但这只是理想,也许这里比其他地方好些,但从来就没有乌托邦。.......从学习心理学的角度来说,学习动机的种类和强度在很大程度上会影响学习的效果,因此,学习编程首要的问题就是——你为何要编程?也许上面列出的种种说中了你的想法,也许没有,但无论如何,如果不把这一点理清楚的话,那么离后悔和抱怨的日子也就不远了。说到底,转行码农与转行做其他并没有什么本质不同,仅仅是互联网的兴起而水涨船高罢了。
(二)如何开始?感谢互联网,感谢开源,目前学习编程的资源可以说是极大丰富的。但是也带来了一个幸福的烦恼,这么多的资源和方法应该如何选择呢?我大概将学习编程的资源分为以下三类:传统的科班课程。Youtube, MIT OpenCousre, Coursera, Edx, 学堂在线等教育平台将很多高校的课程搬上了网络,总体上来讲,这部分的资源的质量是相对较高的,只要你愿意寻找,都可以找到最好的学校的最好的课程来学习。书籍。目前国内计算机技术书籍的出版事业似乎还发展的不错,机械工业出版社那套黑皮系列翻译了很大一部分最经典的教材,图灵社区每个月都还会出一些很不错的书,而且社区上还提供了预览。培训。目前针对编程的培训机构是极多的,再算上各机构放出的公开课以及泄漏出的课堂视频,以及性质类似的51CTO、幕课网等在线平台,这也是相当丰富的一批资源。相对于前两者,这部分资源的水平更加参差不齐一点,教授的内容也更偏向实践,一般来讲也更浅显易懂一些。那么,针对以上几种资源,应该如何开始编程的学习呢?我的建议是:如果你是在校学生,或其他不着急以编程养活自己的人,那么我强烈建议你不要选择培训。你可以随意选择一门高校的入门课程来学习,在学习的过程中,不要只看视频。看视频人人都会,只看视频是学不会编程的,一定要将课程的配套练习全部做掉。当你在做练习遇到困难的时候,再思考一下上一个问题,思考一下自己是否真的喜欢编程。学习编程的过程中,类似的困难会经常出现,甚至每天都会出现,想象一下,你在面对困难的时候,真的可以不断尝试并解决每个困难吗?如果不确定的话,现在退出还来得及,你还有自己的本专业做为退路,也许还有更多其他更适合你的选择。如果你已经在工作,但打算转行做程序员,那么在开始学习之前,你更要再仔细思考一下上面的问题。你现在已经有工作,也许还在当前工作领域有所积累,转行则等于重新开始。第一点你需要考虑的是,你为何考虑从原来的职业中脱离?你也许在之前的工作中有很多不满意,但这些不满意并不一定会因为你换一种工作而消失;你也许在之前的工作中缺乏晋升的机遇,但换个领域从零开始客观上来讲更有可能让你遇上机遇的可能性更小。另一点你需要考虑的是,你真的了解程序员的工作是怎样的吗?假如你并不了解,只凭着一己想象来决定自己的转行,那么我觉得你最好还是放弃这个想法;假如你对程序员的工作已经有了真实的了解,那么你需要结合互联网前沿思潮和技术趋势,理性的去分析转行可能带来的损失和收益。如果你真的确定要转行,而且有很着急的需要以此为生的话,那么大概这就是最艰难的一种状态了。事实上,当不着急以赚钱为目的进行学习的时候,学习的效率是更高的,因为能够选择更正确的学习路线,但假如需要尽快以此为技能找工作的话,那么就不得不先学习 一些实用套路来防身了。这就如同武侠小说中所描绘的一般,除掉开挂的主角,假如你想要成为一代高手,那么内功修习则是重中之重,而且越早开始修习正统玄功越好,但缺点则是见效慢。假如你最近就要与人过招(找工作),那么为了这个目的,你可能不得不减少内功修炼的比例,而去学习一些过招的套路(培训技能),这其中比较困难的一点大概就在于平衡短期目标与长期目标之间的矛盾了。