十二年前,他刚开始接触web开发,于是在google和ide之间不停的切换,自学c#,sqlserver,js开干。
这时他无非用js做了下面几件事:
1.简单的操作dom位置颜色等;
2.一些数据验证;
3.尝试写简陋的ajax,做了一个类似游戏中装备栏的组件,用js绑定事件;
4.ajax写了个省市县三级联动,又尝试着将数据做成xml一次全发给浏览器,这样联动可以更快。
在这里,他完成了javascript常用功能的学习与练习。不过只用到了javascript 最简单那部分能力,并且有时会做一些错误的决定(滥用)。
后来出现了在浏览器上裁剪图片的应用,他觉得很神奇,用一些原始的技巧把别人的js代码扒下来,一点一点去掉无用代码,集成到了自己的站点上。
在这个过程中,他第一次仔细地大段阅读别人写的代码。很多地方看不懂,但是觉得很屌的样子。
于是他决定认真看几本js的书补补课。
他越来越多的使用google,有一天突发奇想:他要做个浏览器插件,可以用键盘操作google:
1.打开firefox后,双击ctrl打开google,输入框获得焦点;
2.在搜索结果前加上数字序号;
3.按数字n,在新页签打开第n个结果,并调到这个新页签;
4.按ctrl+数字n,在新页签打开第n个搜索结果;
5.按ctrl+shift+数字n,在新页签打开前n个结果;
firefox的插件是用js写的,他完成了以上功能。
然后从别人那收到了用同样的操作来使用百度的需求。
虽然有点生搬硬套c#经验,他第一次在自己的js代码中使用了类和对象来重构代码实现了这个需求。
后来他加入一个大型公司,负责erp的技术平台中单据组件的开发维护,这个工作有以下几个特点:
1.大量的逻辑放在浏览器端,入职时就已经有了数万行js代码量;
2.这个组件最初是购买了一个商业软件的混淆版本,所以其中的两万余行javascript核心代码是混淆的(变量方法名都是a3,e5这种);
3.他的工作是维护好这个足够抽象的组件,不停的添加新的功能。然后业务平台会将其业务化后提供给业务开发人员使用。
在这个工作中,他的js技能得到了一些演化,包括但不限于:
1.总结并学习了一些调试技巧,如:在不阅读源码的前提下(太花时间),如何在页面发生某件事时定位到触发的代码上。或是利用条件断点在不改源码的条件下修改代码逻辑;
2.设计抽象抽象再抽象;
3.产出简单简单再简单,甚至为每一个功能制作使用demo,用最直白的方式展示如何使用这个新功能;
4.身在最下层的技术平台,帮助上层业务平台和业务实现调试问题;
5.不停的重构;
6.由于复杂度庞大,有意识地使用设计模式;
7.时间分配发生了很大的变化:原来很短的设计耗费时间变长;开发耗费时间没有较大变化;调试耗费时间在调试难度大幅增加的情况下却变短了。
有次因为朋友推荐,到一家不错公司面试js开发,面试官听说很厉害。
他问了一些如var a=[1,2,]中最后一个逗号有啥名堂,constructor关键字的作用等偏门问题。
他觉得被恶意刁难,有点恼怒,于是不欢而散(确实也没答太好)。
后来他知道这个面试官是司徒正美,顿时之前的恼怒变成了懊悔。
有些东西他觉得太偏门并不代表它没有存在的意义,在有些人的工作中,这些偏门知识是必须的。
已经好几年的工作经历还没有教会他谦卑,他错过了一次进入更广阔世界的机会。
后来的工作中,js用的越来越少。有两个事值得一说:
有次做内部研发项目管理软件,他想做一个可视化很强的源代码管理控件和一个更方便的多时间组件。
他用了flotchat来在主流浏览器中用canvas,低版本ie中用VML绘制来搞定了它。
另外两次由于刚从微软系阵营出来就要在linux实现一些需求,使用了nodejs(当时我学其他语言的学习成本会高一些)。
这就是我这个非专职前端开发人员十二年里使用javascript的故事。模仿维特努威一句有名的话,我觉得:
理想的jser应该既是工程师又是艺术家,他还应通晓产品,热衷于服务别人,精通厨艺,懂得后端知识,具有慈悲胸怀,深谙演讲技巧及与人打交道。
(原话:理想的建筑师应该既是文学家又是数学家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算。)
(好吧我知道我模仿的很烂,大家知道我厨艺好就行啦~)
我用了很长的时间才学会这些知识,我希望能帮助我厂的刚入行同学们更快地学会他们。
我不是一个专职的jser,而且离开一线js开发已经有段时间,这期间涌现了新的更好的框架与编程理念。
但是在js的每个方面,我厂都有足够强大与专业的高手来帮助大家。
那,现在问题来了:
我想给我厂十来位刚入行的同学们做js方面的培训,大家有啥好建议么~
我的初步想法是:
1.带动大家按照统一节奏看犀牛书(或选本别的),每个周期看一个指定章节;
2.大家一起开一个学习会,检查大家关于这个知识点的自学情况,结合工作中的案例扩展这个知识点,附带讲解调试技巧,编程理念,设计,权衡;
3.前两步骤由浅入深重复多次,覆盖工作中常用的基础js知识点。这应该包括犀牛书第一部分中除过于基础或正则等偏门知识外的所有内容,争取一个月完成;
4.讲解常用框架,设计模式,nodejs;
5.项目总结会,技术分享会,多样化专才培养。