这是IT职场人生系列的第二十一篇。([序言](http://blog.csdn.net/cheny_com/article/details/6643609),[专栏目录](http://blog.csdn.net/column/details/career.html))
最近《火星人敏捷开发管理工具》接近发版了,回忆起一年半以前刚利用业余时间开工的时候,编程已经中断了7年(03年最后一次用VC++6.0编码),开发所需的C#、Html、asp.net、MVC2(现在用的是3)、LINQ、JS、JQuery、Ajax一个也没用过,反倒是在03年最后一个4个月项目中用到过的SQL Server算是唯一可以直接拿来用的技术了。
一年的时间里边基本上自己一个人编程也没师傅可问,书只买了一本只看了1/10,剩下的全部两本电子书(等等会讲到)+Google+StatckOverflow,现在说不上来学会这些技术没有,但是的确“会使用这些技术编程”了,而且还有正式的商业产品问世。
下面会总结一下学习新语言的一些技法和心法,很多不完全来自于这一年半的经验,也包含很多接触其他开发人员时候听到想到的东西。
### 如何开始学习
**一定要从一个实际的项目开始,一定要从模仿一个完整的例子开始。**
本人学过汇编、BASIC、FORTRAN、VAX C、Turbo C、TurboC++、C++Builder、VC++、asp.net/C#这九种语言或者说开发环境,用的最好的TC/VC/C#都是遵循这个过程来的,其他的都不是,所以也没学成。
这次面临这么多没见过的技术,如果面前拿起10本书,都不知道从哪看起,因为他们盘根错节,没有太强的先后顺序。你编写mvc2不懂C#不行,懂C#不懂asp.net不行,编写asp.net不懂Html不行,光懂Html不会 JQuery太傻,光耍JQuery不玩JS太浅……但是,也总不能从JS倒着开始学吧。怎么办呢?
当时,找了一本电子书就是这个[http://blog.csdn.net/cheny_com/article/details/5443661](http://blog.csdn.net/cheny_com/article/details/5443661) 提到的Scutt Gu的Nerddinner(现在太老旧了别读了),里边介绍如何用asp.net的MVC框架编程,有一个实际的完整例子。不过,如果连C#、ASP.net、Html都不懂,怎么学MVC呢?
这就涉及到一个学习心法:技术上不求甚解,业务上精益求精。(日后会有详细解释,这里先这么摆着,肯定有人有不同意见)
大致意思是说:一定要知道,外国小孩在一岁的时候学外语不是从音标、单词这些东西开始学的,之后也没有“深入、扎实、系统”地学习过外语,而是直指要解决的问题(吃喝拉撒)。这个样子学习外语我们可能没有这个条件,但是学习语言却能。
我们的最终目的不是要研究语言,而是要用它做我们要做的事情,所以显然的一种方法,是去“生硬”地模仿别人的做法,就像小孩模仿大人说话一样。
当时差不多用了一个月把nerddinner这个完整的例子一步一步抄写、编译、运行了一遍,这本书最大的好处就在于他假设你就差MVC不懂了,所以一句废话都没有,我也就一句废话没学过。
如果有一个实际的项目,就比一个完整的例子更好,当然多数时候很难。
### 获取帮助
很多时候我们都希望身边有个人肉百度,问什么答什么,把问题解决掉。本人也力推139团队和松结对编程(参考博客栏目),帮助新手成长。
但是如果就是没人在,怎么办呢?大致总结了这几点。
**1. Google+百度+StackOverflow**
一年半前还没离职的时候,我经常转到研发部找他们的技术大拿问问题(就是这位:[http://blog.csdn.net/lihonggen0](http://blog.csdn.net/lihonggen0)),发现他也不是什么都懂,但是也从来没有问住过他,原因是他差不多等我一问,就打开了Google或百度开搜,凭借一种“主动搜索能力”,他能迅速定位答案。
所以逐渐意识到自己OUT了,03年这些东西还没有,所以习惯了看书、问人了。于是后来除了“C#和ASP.Net到底是什么关系”这些比较模糊的问题,就再也不去找他了。
为什么提倡搜索而不是找人问呢?因为搜索过程本身很长见识,还会产生很多副产品,带着自己的思考观察和思考别人的众多答案,培养“主动搜索能力”,是一个非常重要的思考方式。
(待续)