本帖最后由 狐克西 于 2011-8-1 16:02 编辑
看到这个标题, 可能你会笑, 因为你知道这出处是哪; 如果你表示不解也无所谓, 因为今天要说的和钢之炼金术师没大的关系.
理解, 分解, 再构成 - 做为<<钢之炼金术师>>里炼金术的原理: 首先你要理解一个物体的构成(分子), 然后掌握分解这个物体的方法, 最后再把分解后的元素重组成一件其他的物体(或同类物体, 不同形状). 虽然"理解分解再构成"是个虚拟的存在, 但它仍是包含了学习, 分析与实践 这3个现实的学习步骤.
也许在象牙塔里憋闷了的各位一看到"学习, 分析, 实践"就立马皱起眉头想逃跑 - 别急, 我今天不讲大道理, 就和大家"简单地" (*cough*) 谈谈我个人从"理解分解再构成"这个原理里领悟出来的一套学习方法.
理解
理解, 顾名思义, 对一件事物的认知. 换到程序/网站开发里是对一个现有的程序和站点的熟悉, 换到网络工程里是对一个案例的了解. 举个例子吧, 一个设计精美功能新奇的程序, 我通常会在从普通用户的角度体验过它大致的功能之后, 深入它每一个功能性的细节, 搜集列出每一个功能, 了解它们之间的互动性, 以及思考它们被使用在某个情况或者某个地方的必要性, 就好像你们读案例的时候, 需要知道网络的某处使用了某个设备, 而和这个设备相邻的其他节点上又使用了什么设备, 以及这些设备何故被赋予了这样或那样的设置.
经常有人觉得理解这部很多余, 或是只投入了很少的时间在情报搜集上. 要知道掌握信息是现代化战争胜利的先决条件, 也是现代化研究学习的重要前提 -- 如果一开始不掌握这些必要的情报就往下走, 我们往往会发现越走思路越窄, 甚至被卡进死胡同, 进退两难, 最后不得不推倒重来(相信很多人都有这样的惨痛经验). 所以, 我们宁可多投入些时间, 多了解点情况, 多掌握些情报, 也不要急着操刀上阵, 导致无谓的时间精力和信心的浪费 -- 磨刀不误砍柴工, 道理就在这. 时间和精力的浪费都在其次, 信心一旦被打击到, 人会萎靡不振好一段时间.
也许你会说, 以自己现在的学识, 如何才可以掌握对一个程序和工程的全面认知? 其实这个问题在理解这个环节里并不是非常的重要 -- 只要你不是个对程序开发/网络工程完全一无所知的门外汉, 你总会从你投入的时间里得到一定收获. 当你自觉已经搜集了所有自己力所能及的情报, 你便可以带着这些信息进入下一个环节.
分解
你可能在上一段里就想问我: 去试着了解程序功能/网络设备之间的互动性, 这应该是属于分解的范畴吧? 广义上说, 的确是. 理解和分解这2者之间, 在分析和萃取这个概念上的界限其实很模糊, 特别是当人的经验到了一定的程度, 看到一个步骤, 就能瞬间在脑子里对原开发者的意图进行还原, 好比你一旦学会了骑车, 只要双手一摸车把, 屁股一挨坐垫, 你就知道自己该干嘛. 当然, 也有人习惯先把搜集到的信息记下来, 然后才开始进行全面的分解 -- 这个可以说每个人的做法不同, 毋须拘泥.
然而, 狭义上, 也就是在这个帖子里, 我对这分解的定义, 却是真真正正的分解 -- 敲碎了, 拆散了, 然后再来一点点分析. 我们曾经学过庖丁解牛, 知道他对牛的"分解"非常的在行. 为何庖丁解牛可以游刃有余? 正是因为他对牛的肌肉和骨骼构造有了很深的认知. 因此, 理解的重要性再次得到肯定. 根据我们在理解这步搜集的资料, 我们便很快地可以把程序拆成单个的功能或事件, 把网络工程拆成单一的环境(一对设备一个环境), 如单个变量, 单个函数, 如节点上的设备, 设备的一些关键性设置等. 这每个单一的元素, 都可以由几种甚至好几种的办法来实现. 这个时候, 我们的脑子里可能已经开始重构造出好几种实现功能的代码或方案. 然而, 至于要在之后的再构造环节中使用哪一种方法, 我们则需要分析这单一的事件和其他关联的事件之间的互动来制定出一个最优的方案.
在分解的过程中, 我们同时还不停模拟着原开发者的角色, 置身开发的过程, 解析开发的思路 - 一开始应该准备什么, 然后添加什么, 最后再干什么. 这个思路将在之后的环节里引导我们再构造的秩序.
随着每个功能的细节被不断地拆分和分析出来, 他们之间的关联被不断地摸索和还原, 一条逐渐清晰的思路就会慢慢出现在我们的脑海中 – 你当然可以直接拿现成的工具来反编译一个程序, 然后直接读还原后的代码, 或是直接翻到案例后面看明细. 这虽然也是种学习的方式, 但我想, 你却正好错过了这种通过自己的思考, 动用自己的知识去解体一个程序, 一个工程时的那种美感.
当一个程序一个工程的逻辑被你完全地解体时, 你仿佛可以看见, 那些单一的元素正在你周边的空间里浮动着, 正等待着你用自己充满创造力的思维将他们重组…
再构成
具备了必要的知识, 掌握了重铸秩序的思路, 再构成这种实践性很强的环节也许不如理解和分解那样具有推理的趣味, 但再构成的过程是一种享受. 因为在这个过程中, 我们和真理是如此的接近. 我们会体验到那种只属于造物主的快感.
当你顺利(或历尽千辛)地还原出一个工程, 你已经具备了一个"炼金术师"的基础, 以及给你未来的学习和工作带来十足分量的肯定与自信: 别人能做出来的东西, 我也能通过我自己的方法, 用自己的双手打造出来! 在成功完成一次理解分解再构成之后, 你也许会对这种方式开始上瘾, 会不定期地去还原工程 -- 这是个好事, 因为你对知识和真理的饥饿感已经开始慢慢膨胀, 你发自内心地想去获得更多的学问, 想去探索未知的区域 -- 相对被动接受被授予的知识, 你在学习上会更具有灵活性, 选择性和主动性.
--------------- 后话.独立的炼成 ------------
也许有人会提出这种"理解分解再构成"的理论有山寨之嫌 -- 要知道, 一个方法是可以因为不同的用法而有不同的称呼. 好比你拿刀切菜那叫烹饪, 而你拿刀进银行那叫图谋不轨. 如果你拿理解分解再构成来获取知识, 经验和自信, 这叫学习, 但如果你把再构成出来产物揉捏点自己的东西, 然后拿去换取成绩, 职称, 甚至金钱, 那才是彻头彻尾的山寨. "网之炼金术"能让你迅速成长, 但其代价就是很容易套牢你在一个无法进行自主研发的迷局只内, 山寨也正是"理解分解再构成"衍生出来的负面案例, 它会在一个人创意枯竭, 思维定势, 并热衷急功近利的情况下会产生. 如果你是一个自强不息, 积极上进的人, 我相信你自己也不会甘愿被"山寨"思维给套牢 -- 只要你能举一反三, 取精去粗, 结合各家之长, 在各种不同的案例里都能给出自己独到的解决方案, 你很快就能突破这个瓶颈, 通过掌握的知识和积累的经验, "构成"出具有自己风格的东西. 这不是个能一步到位的过程. 也许一开始你只能很蹩脚地在某个案例里应用到之前的一个或两个案例里的实例, 但随着自身对独立的渴望和追求, 以及一次又一次的独立尝试, 你会慢慢地对自己掌握的知识和经验出现新的认识, 甚至有颠覆性的突破: 比如你可以看出前人使用的方案里的不足, 并能在很快地给出更好的解决方案, 或在读完第一遍客户要求只后, 心里就能拟出一份计划书的概要...
这里我列个进阶表, 希望能对选择修炼"网之炼金术"的各位起到个参考的作用
门外汉
理解: 能读得懂汉字
分解: 能使用破解软件, 能背诵案例
再构成: (ctrl+c) + (ctrl+v) + 改名字 = 老师我做完了
<- 这个沟很宽 | 如果你没有足够的基础知识, 你跨不过来 ->
新手阶段
理解: 只能理解一个工程里的一些单独的功能/设置/思路
分解: 能够完全分解和重现一些功能, 单元, 能还原出最基本的思路
再构成: 不能独立完成再构成, 往往需要参考源代码/原案例, 或者向他人请教
<- 这个沟很窄 | 在初次完成以后, 再多做几次理解分解再构成就能升级 ->
进阶阶段
理解: 能够理解80%以上的程序/案例中的网络构造, 以及开发/架设思路
分解: 能够很细地拆分程序模块, 网络单元, 能重现原开发者的大致思路
再构成: 能够独立完成再构造, 但对其中高深的部分, 需要通过添加其他许多简单的步骤来辅助完成
<- 这个沟不宽, 但也不窄 | 需要大量的理解分解再构成的实践 ->
饥渴阶段
理解: 能够很快理解和掌握一个程序开发的思路和细节, 或看到说明就能猜出有那些设备被投入使用
分解: 几乎在理解的过程中完成
再构成: <已不屑再重复这个步骤, 省下时间去研究新的工程/案例>
<- 这个不是沟, 这个是门槛 | 如果你没有商业化/工作经验, 你很难突破到下一个境界 ->
pro初级
理解: 能够理解客户的需求, 并且在脑海中搜索自己曾经还原过的工程/案例以对号入座.
分解: 已和理解同步率达到100%
再构成: 在利益的驱使下/拿钱手短的鸭梨下, 完成一个"山寨"品交差
<- 经过数次客户投诉, 老板训话, 连夜补作业这些惨痛的教训之后 ->
pro中级
理解: 能够在理解了客户要求的基础上, 给客户建议和改善
分解: 已经不太需要这步
构成: 能够在构造的过程中, 颠覆自己之前积累的经验, 获得新的知识, 能力得到延伸
<- 经过数年... ->
pro高级
理解: 能够通过和客户交谈, 实地勘察, 在很短的时间内给客户一个计划书, 并且不需要多的修改
分解: 你已经不分解别人的东西了, 你的东西现在是被人分解
创造: 你做的东西需要和客户签订保密协议
新能力: 能组织劳动力, 并且准确地分配工作下去给他人, 同时自己负责组织和监督各单元交上来的活
<- 经过数十年... ->
神级
双手合十后打开, 里面是一个新的世界...
|