如何学习新语言
出处:新浪博客 作者:s1021144145 责任编辑:fanyun 发布日期:2013-10-28
最近《火星人敏捷开发管理工具》接近发版了,回忆起一年半以前刚利用业余时间开工的时候,编程已经中断了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 提到的Scutt Gu的 Nerddinner(现在太老旧了别读了),里边介绍如何用asp.net的MVC框架编程,有一个实际的完整例子。不过,如果连C#、ASP.net、Html都不懂,怎么学MVC呢?
这就涉及到一个学习心法:技术上不求甚解,业务上精益求精。(日后会有详细解释,这里先这么摆着,肯定有人有不同意见)
大致意思是说:一定要知道,外国小孩在一岁的时候学外语不是从音标、单词这些东西开始学的,之后也没有“深入、扎实、系统”地学习过外语,而是直指要解决的问题(吃喝拉撒)。这个样子学习外语我们可能没有这个条件,但是学习语言却能。
我们的最终目的不是要研究语言,而是要用它做我们要做的事情,所以显然的一种方法,是去“生硬”地模仿别人的做法,就像小孩模仿大人说话一样。
当时差不多用了一个月把nerddinner这个完整的例子一步一步抄写、编译、运行了一遍,这本书最大的好处就在于他假设你就差MVC不懂了,所以一句废话都没有,我也就一句废话没学过。
如果有一个实际的项目,就比一个完整的例子更好,当然多数时候很难。
获取帮助
很多时候我们都希望身边有个人肉百度,问什么答什么,把问题解决掉。本人也力推139团队和松结对编程(参考博客栏目),帮助新手成长。
但是如果就是没人在,怎么办呢?大致总结了这几点。
1. Google+百度+StackOverflow
一年半前还没离职的时候,我经常转到研发部找他们的技术大拿问问题,发现他也不是什么都懂,但是也从来没有问住过他,原因是他差不多等我一问,就打开了Google或百度开搜,凭借一种“主动搜索能力”,他能迅速定位答案。
所以逐渐意识到自己OUT了,03年这些东西还没有,所以习惯了看书、问人了。于是后来除了“C#和ASP.Net到底是什么关系”这些比较模糊的问题,就再也不去找他了。
为什么提倡搜索而不是找人问呢?因为搜索过程本身很长见识,还会产生很多副产品,带着自己的思考观察和思考别人的众多答案,培养“主动搜索能力”,是一个非常重要的思考方式。
谦虚、大胆、再谦虚地尝试
这几个词看起来很不搭嘎,但我细细回忆起来10多年编程的经历,这句话很可能是高手与低手最后产生差别的关键,所以重点写一整篇。
菜鸟不是低手,低手指的是工作了很久,但技术能力上很落后的家伙。如果作为菜鸟,怎么才能避免成为低手呢?那就是谦虚、大胆、谦虚地尝试。
未必所有问题都能百度到,也未必身边一定有高人给予指点,那么遇到困难的时候,我怎么知道有还是没有方法解决、方法是什么呢?
1. 谦虚地认识自己面临的困难
这是第一个谦虚。
02年遇到一段程序,那个程序员水平不错,但他偏偏不懂C++中的“模板template”(就是Java和C#中的泛型),所以在处理13种不同数据的时候,不得不编写了13个函数,正赶上这个函数还在5种参数下运行,结果是编写了13×5=65个函数。不过最后被发现了,一个下午就缩减到一个函数,一个月的工作量被扔掉。
“作为一个即没见过又没听过模板的程序员,我怎么能预见到会有一种技术解决这些问题呢?”可能会觉得他很冤,对吧?
这就要解释“谦虚”的用意:当我们觉得这段代码很别扭的时候(比如65个函数长得差不多,编程困难,维护更困难),就要尝试处理它,如果他有这个心态,至少那个“5种情况”可以用一个循环解决掉的。那泛型呢?
如果用尽了招数,还是剩下13个new不同类型的问题,用自己所学所知都解决不掉,心里要这么想:“我还是一个菜鸟,我不是站在世界边缘,我遇到的问题,早就有人遇到过了,他们也早就解决了。”有了这个心态,就会去寻找答案,找人或找网络都无所谓了。事实上,他的项目经理就坐在离他隔一个人的位置上,这位项目经理是个设计模式专家,就别提泛型这点小事了。
多数人找不到答案,是没有去找答案,因为认为自己正面临世界难题,这个问题无法解决。
一年前开发的时候,我们面临很多难题,确切说我们真的“站在世界边缘”,因为还没进去呢,呵呵。下面是一些大大小小的我们猜测有答案,而最终果然也有的“难题”。拥有多年经验的开发者可能对这些问题不以为然,但是对于真正两眼一抹黑一行C#/Web/...代码没写过的新手,相信这些问题存在答案是很困难的:
a. 我们猜测,一个Ajax调用完成后可以调用两个以上的JS函数作为OnSuccess参数
b. 我们猜测,一个页面的菜单部分,可以延时1秒后再加载,以便整个页面显示的更快
c. 我们猜测,一定可以截获数据库的“写”操作,以便在写操作发生时同步更新我们的应用缓存,而不是完全销毁并重建整个缓存
d. 我们猜测,Html的backgound-image应该可以设置偏移量,以便让底图出现在合适的位置
e. 我们猜测,一定可以写一个类封装MVC中的Repository(Nerddinner中没有封装),以便完成任何表的简单增删改查
f. 我们猜测,一定可以把不同的类保存在一张表里边(Nerddinner里边从没提过),拿出来的时候自动生成不同的类型
g. 我们猜测,一个js script可以用Html的Helper生成,而不止限于div/img这些常见的东西
h. 我们猜测,一个类可以在另外一个类的某个函数上方生成(也就是类包含着类,C++里边是不允许的),因为我们太需要 他们两个定义在一起以便对照了……(说不上来一年里边做了多少猜测了,呵呵)
这些问题,有些有现成的答案,比如f是用Discrimitor字段,c是有个ChangeSet,只要定位了问题,都是google到的答案。
但是并非所有问题都这么解决的,因为有些问题不太好描述,而且也很找到答案,我们还用了下面一些其他的手段。
2. 大胆地尝试
我们当时设置了一种class为tip的,当其母体(class = "withtips")被鼠标悬停时会弹出,其左上角上有个小图标(tip是16×16的问号,还有其他种类),以便和warning/notice有所区别。
可是,由于这个问号图片是用backgound-image: url(...)做的(因而你代码里边无需提及这个图片,只需要加上class = "tip"),当我们写成
background-image: url('../Resouces/Images/Others/Tip16.png');background-position:top left;
的时候,它总是紧紧地贴在p的左上角,没有留出空白,显得很难看。查了很多资料,都没有提怎么办。
当然,惹不起躲得起,有一种很简单的方法:不用backround了,在每个tip里边手工加一个图片,这样就可以用style来控制其margin了。这个,就属于笨方法,经常这样思考问题,水平就很难提高。怎么办?那就是想象:“我是这种语言的设计者,如果让我来全权设计,我会写成这样……”
结果是:
background-image: url('../Resouces/Images/Others/Tip16.png');
background-position:top 8px left 5px;
没想到,成了。
d、g、h这三个问题,都是这么解决的。
确切说,在这一年里边很多问题都是这么解决的,不是个例。如果被七八种新技术围住,光靠google百度突围是不可能的。
后面会看到,大胆=谦虚,看上去很奇怪的表达式。
3. 谦虚地尝试
有些人刚学一种新语言,因为不懂,又加上自己很谦虚,所以单子就小,就不敢尝试,其实这里边反而有问题。
他们想:“我是想这么设计,因为这样设计最好;可实际设计这些语言的大师们也这么想的吗?他们真的做到了吗?”
怀疑大师们的能力?怀疑你的想法大师想不到?其实这实际上隐藏着一种不谦虚的想法。
所以,越大胆的尝试,越表明我们谦虚地认为前人早就思考和解决过这些问题了,我们只是试试具体写法是不是正确而已。
“如果尝试失败了怎么办?”尝试失败,往往是因为我们的想象力与大师有差距造成的。一定要做最大胆、最优化的尝试,这反而会“蒙中”大师们当年的设计。作为菜鸟,要大胆地想象:“大师们不会设计一种语言,让我只能重复拷贝代码65次,或者每次写tip都必须加上这张冗余的图片代码,或者……”,要谦虚地认为大师们早就实现了我们的梦想,天下已经没有难题了。
为什么很多人编写了很多年的代码,有些很有用的东西从来没用过呢(比如前面65个函数的例子)?原因就是,连想象力都距离大师们甚远,能力差得就更多了。这也是为什么提倡编码要精益求精的原因(参考2月5日和2月20日的5篇文章),如果平时就喜欢写垃圾代码,是很难猜中大师的设计的,因为他不会做垃圾设计。
我有一个不等式是这么写的:我们的技术能力 < 我们的想象力 < 大师们已经实现的 < 大师们的想象力为什么肯定地说大师们已经实现的比我们的想象力还多?因为拿起一个语言,会发现里边有很多“没用的”或“暂时没用到过的”东西,这些东西就是两者之差。所以,阻碍我们的第一个东西是我们的想象力,而不是某种语言或技术的自身限制,连自己的想象力都受到限制,就不可能学好这种语言。
总结一下本篇:大胆谦虚地与大师共振
01年我在一个非常有进取心的团队工作了接近两年(他们的产品后来占据国内市场60%份额),在那里我们有很多技术梦想,有些我们手工实现了一半,有些限于当年的技术条件无法实现,比如:
1. OODB,一个把数据库和C++对象映射起来的东西,就是现在的EF和LINQ
2. 限制C++模板的传入类型,就是现在C#泛型中的where关键字
3. MVC分离,当时还只是一个概念,尽管我们努力手工做了很多工作,而现在直接框架化了
……等等
由于存在梦想,想象力的边缘就会扩大,而看到LINQ、泛型、MVC这些全新内容的时候,不但不会觉得奇怪和难以理解,反而立刻就会共振起来。
因此,当想象力越来越大的时候,反而学习一种语言越来越容易,因为它多半正好实现了我们想做的事情。
如果长期这样思考问题,想象力就会接近大师们当前能实现结果,因此会达到共振状态,连实现的方法都和自己想象的差不多,学习一种新技术就没有什么太大的难度了。
注:评论审核后才能被公开。
相关文章
- [办公·耗材] 频繁的居家学习,该... 2022-05-25
- [成功宝典] 职场没人教你怎么办... 2022-01-21
- [成功宝典] 如何利用碎片化时间... 2022-01-06
- [手机·数码] 父母与孩子在学习上... 2021-12-22
- [办公·耗材] 学习+办公“双面”... 2021-11-26
- [手机·数码] 引导学习更重要!惠... 2021-09-17
- [职场入门] 初入职场,你该学习... 2021-07-06
- [新手上路] 使用if语句做一个... 2020-06-04
- [职场入门] 职场学习就像贼学艺... 2020-01-14
- [职场入门] 在职场中,这三种技... 2019-06-28
- [都市情感] 促进孩子语言发展的... 2019-06-18
- [社会百态] 无边界社会,我们该... 2018-07-20
- [手机·数码] 英特尔收购小型芯片... 2018-07-16
- [励志故事] 蔡元培:决定孩子一... 2015-07-07
- [社会百态] 诸葛亮写给儿子的一... 2015-06-03
最新更新
- [促销讯息] 易搜《广东IT行业... 2024-06-14
- [促销讯息] 易搜《山西IT行业... 2024-02-22
- [促销讯息] 易搜《福建IT行业... 2023-04-21
- [促销讯息] 易搜《安徽IT行业... 2023-04-21
- [促销讯息] 易搜《云南IT行业... 2023-04-21
- [促销讯息] 易搜《福建IT行业... 2023-04-21
- [美容养生] 口腔溃疡的起因不止... 2023-03-29
- [职场入门] 终面技巧丨明明聊得... 2023-03-29
- [职场入门] 应届生离职原因大公... 2023-03-29
- [职场入门] 简历上什么都写只会... 2023-03-29
- [美容养生] 肝脏是否健康,可以... 2023-03-29
- [手机·数码] 8分钟即可充满!传... 2023-03-10
- [职场入门] 关于五险一金,这些... 2023-03-10
- [职场入门] 如何应对校招中的性... 2023-03-10
- [市场动态] 济宁市三项目获省良... 2023-03-10
热门点击
- [热点访谈] 易搜《山东IT行业... 2014-04-01
- [名人传记] 董事会该如何订定高... 2014-12-08
- [促销讯息] 易搜《江西IT行业... 2014-07-15
- [促销讯息] 易搜《河南IT行业... 2014-10-24
- [促销讯息] 易搜《福建IT行业... 2014-07-02
- [热点访谈] 易搜《湖南IT行业... 2014-10-18
- [促销讯息] 看过来看过来!关注... 2014-09-10
- [促销讯息] 易搜《四川IT行业... 2014-11-27
- [爆笑囧图] 00年代我们追过的... 2014-09-28
- [热点访谈] 易搜《浙江IT通讯... 2015-01-30
- [手机·数码] 为年终蓄力 十月份... 2013-10-28
- [市场动态] 互联网电视“赛马”... 2013-09-16
- [桌面壁纸] 性感古装美女,亮瞎... 2014-09-16
- [热点访谈] 易搜《浙江IT行业... 2014-08-24
- [热点访谈] 2015年,100... 2015-03-25









评论列表