为了避免误解, 重新声明一下, 本文纯粹针对"博客园风气如何如何, 博客园的话题如何如何"这些说法, 不含有任何不用基础学习或者必须学习某一方面/最好广泛学习或者必须深钻一门等倾向, 如果有的话说的有偏向性, 请当作一时表达不清. "我可以不同意你的观点, 但我誓死捍卫你说话的权利". 我觉得每一个声音, 除了有些人的声音有点在无意中贬低和伤害其它作者, 总的来说都是对社区的贡献.
最近园子里有一个话题, 说应该多练基本功, 这个我是赞成的, 但是我觉得, 一个程序员的基础, 也有个范围问题, 总不能说讨论A才是有水平, 而对于每个人来说恐怕A都是不同的. 吾生而有崖而知也无涯, 大家都只能把时间花到刀刃上, 而每个人对知识的需求, 都是根据他的具体情况所决定的. 比如, 我不知道 "图论、概率论、统计学、数据挖掘", 这些, 哪些有一个人能全部及格. 我想谁不能说了解些理论知识就算及格吧? 为什么会有科学, 科学本身也不是为了科学而科学. 很多科学家自诩为追求什么(比如美)才从事的, 从他个人的角度出发, 很可能是这样. 但是从人类集体来看, 其实他们之所以能从事这些研究, 还是因为社会给他们提供了这个空间, 因为生产力要进步. 可见, 科学尤其是基础科学本身, 也是以实用为目的出发的. 一个程序员选择自己学习的内容, 对当前情况, 对自己的未来, 最该掌握什么, 再随意也有内在的原因.
比如关于TCP/IP值得研究, 还是MVC值得研究的问题:
这其实就是个角度问题. 有人说到什么什么是站队, 其实无论你在任何层面做出什么选择, 就已经开始战队了. 比如我的队伍是: 除非工作需要, 绝对无须学习如果发明者当年不是这么设计, 就很可能是另一种用法的东西. 再我看来, TCP/IP对于程序员, 和DOS使用大全对于操作员, 根本没有区别. 这根心态无关, 而是认识事物的不同队伍, 有人站在那边, 而我站在这边. 我个人认为这些站法都是合理的: 比如这两天给一个朋友帮个小忙, 涉及点图像算法, 我本身不是做这个的, 数学基础也不是特别牢靠; 那么我是否就应该悔恨自己没有好好学数学, 没去学图像, 甚至没有把OpenGL(相对于上面的TCP/IP)好好了解一下? 但事实是, 我通过搜索, 已经能很好的把这个忙到位, 没必要去翻相关基础书籍, 再进行算法->代码的翻译过程了.
有人可能会说, 没有互联网你不歇菜; 没有互联网, 我可以抄书不是? 书都没有? 如果我作为一个程序员的生存环境是那样的, 我自然就会去锻炼那种生存环境下所需的各种技能, 也未必比一些人差. 那么又有人说了, 万一你这个朋友, 要求高点怎么办? 他要是想做个PhotoShop或者3DMAX, 他也不会找我了, 专精的专家也不是没有不是. 在我看来, 程序员的主要矛盾, 主要是如何将一个应用在计算机上较好的实现这一问题.
回头说MVC这类东西. 其实拿MVC来说并非什么新鲜玩意. 但这些玩意解决的是软件构件中的一些问题, 也有点学问, 用得着的时候, 就需要去掌握. 但一些人选择了另外的站队, 而因为他们个人站在了其它的队伍里, 就藐视其它一切比如架构模式OO之类的学问, 或者至少看不起这些学问的一些较浅层次的讨论. 其实我个人相当重视基础科学的科普(但不是深入, 因为说实在的哪怕有一个人比我聪明一倍, "图论、概率论、统计学、数据挖掘"这些学问想要变成专家, 我看也得好几年). 我想有些人忽视了这一点: 正是因为软件构件领域内也存在着复杂性, 才出现了这些在他们看来不是学问的学问, 即使这些学问比基础科学可能容易得多. 另外也许一些讨论被当作无意义的, 可能是词汇问题: Java社区也拽这些不是学问的学问, 但是人家用词精准/广博/高深, 就不那么容易被攻击. 只是各种说法要是严格的掌握, 也需要花掉不少时间, 作为一种经验性质的讨论, 哪怕只是简单的说说, 我看也是不无裨益.
如果谁说这些学问就是举手之劳, 我想也不必和广大劳动人民说, 可以去找Martin Fowler之流. 他们现在这么出名, 最开始不过是写些简单脚本的, 可想而知在算法之类的领域里也就是三角猫.还可以找更专业些的GoF之流, 我倒想知道没有他们, 计算机领域的应用是发展更快, 还是更慢呢?
园子里某些高人的水平我是拍马也赶不上, 相当佩服, 但某些论调我不能苟同, 比如博客园风气如何如何, 一副不屑的样子. 想必这些哥们也看过, SICP上说, 计算机科学既不是科学, 也不是一门艺术. 说实话, 我个人觉得, 计算机科学只是工匠之术. 牛到一定地步, 就是鲁班. 鲁班要知道一些科学, 以发展应用, 但难道我们要求鲁班的学问非和墨家的学者去比吗?
说实在的这又是个站队的问题. 以己之长, 比人之短, 然后鹤立鸡群, 虽然这些兄台的出发点未必如此, 但是那种说话方式, 不免造成这种效果. 同样的效果的还有某些其它社区的一些小圈子. 所以什么博客园如何如何的话, 我想最好别随便说. 你根本无法通过自己的长处比别人的短处, 就证明自己比别人聪明/有能力/为社会创造了更大的价值, 只能让别人知道你站的是什么队. 达到让别人了解自己是做什么的擅长什么的这个目的, 用一些礼貌的话足矣.
Gates的贡献一定没有爱因斯坦大, 甚至没有图灵大; 但是Gates的贡献一定比一个一般的基础科学精深的计算机工程师大, 也比一个会用计算机编程或者为计算机工程服务的科学家大. 说说普通的程序员, 大家在各自的工作岗位上, 只要还没被开, 哪怕再差也是勉勉强强完成工作, 既然完成了自己的差事, 就是一定对某个角落里的某个组织有所贡献, 这个组织能生存, 必然就是对社会有贡献, 能说这些工作, 和这些人所掌握的某工具如何使用等知识就是没用的吗?
再说说某工具如何使用这些知识的帖子, 这是博客园最受攻击的地方. 过去我也经常这么想, 这些人水平低级, 这么点破事还拿出来说. 但我只能说过去我还不成熟, 我在这里对任何一个我曾经在心里觉得"你这点东西还拿出来说"的兄弟, 致以最忠诚的歉意. 随着我工作时间变长, 年纪变大, 精力不济, 我发现, 每次真正救我命的, 不是任何高人, 就是这些普普通通的兄弟. 有时候一个最简单最基本的问题, 我也可能犯错, 而且在一段时间内找不到; 有时候因为临时需要, 我经常会进入一个根本不熟悉的领域, 怎么起头都不知道. 现在好了, Google/Baidu一下, 这些兄弟实际上都在帮助我, 让我能把精力从TCP/IP或MFC或OpenGL或某算法如何实现这些具体问题上释放出来, 专心考虑如何组织应用. 当然, 某算法不符合要求, 或者查不到, 这些事情经常发生, 但是至少, 我节省了别人已经解决的很好的问题花费功夫的时间, 我也节省了翻找MSDN的时间. 正是这些节省出来的时间, 让我能更好的去对其它难点攻坚, 这总好过什么都我自己来不是?
有些人可以说我不是合格的程序员, 我注册时第一帖就说过, 我是不是程序员都是个问题. 可我要告诉这些人, 好吧, 我不是一个程序员, 你B4一个不是程序员的人, 更何况再编程领域的方方面面, 你还不见得在哪个方面都比这个不是程序员的家伙强. 至于对其他人评头论足, 我只能说, 人家是不是合格的程序员, 人家的老板, 人家所从事的业务本身自然会评价, 也轮不到外人去说. 说到文章, 我发现很多使用某某方面的文章对很多人都相当有用, 虽然我自己不擅长写这种文章, 但是我也多次受过这些文章的帮助, 我想受帮助的个体的数量, 已经是对这种类型的文章的肯定.
随着工作年限的延长, 一些人选则一些队伍站进去, 然后走的更远; 另一些人则没有. 对于后者作为一个IT从业人, 我是很反感的(但是对人生的各种选择是应该得到尊重的); 至于前者, 我要说的是, 队伍不只一个, 也不存在哪些队伍更正确的问题. 这些队伍的大小, 都是社会用看不见的手调整的.人都各有长短各有专攻, 打击别人的队伍又何必呢?
比如Flickr/Youtube从技术角度看又算个毛? 可是从社会角度讲, 他们更好的普及了计算机的某一种应用, 一个人就是在熟悉JPEG或者视频流的压缩算法, 你能说这个人对社会的贡献比Flickr的创始人还大么? 这些人开始的时候就是一般的程序员, 我相信他们中很多人创业埋头写代码时的水平比平均水平高不到哪里去; 这些程序员如果都去研究其它东西, 以他们比技术社区中少数高人慢的脑子, 未必出什么东西; 但缺少了他们对技术在某一粒度上的应用, 社会是进步的更快呢还是更慢呢? 微软的那个测试高手叫什么来着, 不是到了Google一年多, 发现Google一团糟, 测试工作都没法好好干, 就又跳槽了么? 那么Google这个大型程序是不是至少在2000~2010年之间方便了我们呢? 这不是Google中每一个程序员, 无论他水平高低, 集体的贡献吗?
对社会有贡献的, 也不只是Google一家. 那些更小的组织, 更小的项目, 他们的程序员不也都在产出吗? 互联网上一大半我们已知的应用, 都不是技术性的项目, 不可否认的是他们丰富了我们链接世界的通道. 中小企业里一大半应用, 也都不是技术性项目, 但是他们毕竟有一些成功运转了, 为客户发挥了作用. 还有那些不太成功的项目, 没有这些不成功的探索, 恐怕也没有未来的成功. 况且, 这些项目的不成功, 正说明, IT领域内, 并非只有核心问题需要去学习去解决, 这些非技术性的学问, 也大大的有研究的价值.
程序员就是工程师, 程序员不是科学家, 而且说实在的, 也不怕得罪谁, 即使我不了解发言的每一个人, 我也知道即使咱们中间再牛的, 离科学家甚至一个像样的学者也远者呢, 何必因为站队不同, 就去用自己的长处去压抑别人的自尊和积极性呢? 更何况这自尊还和饭碗息息相关, 同时好歹是被社会通过他所在的组织及他所针对的读者群体本身所认可的. 难道谁还能比人类社会本身伟大么?
最后说一句, 基本能力的培养是我一直所强调的, 对大家都有好处, 但是要说哪方面的钻研就是正路, 哪些讨论就是风气好, 我坚决不同意. 至少从实际利益出发, 没有了那些某些高人看不上的文章和帖子, 我个人的干活速度至少慢3倍. 也许高人们都是又精通Windows又精通Linux, 又精通TCP/IP又精通OpenGL, 算法至少顶的上迪杰斯特拉, 架构啦模式啦等不是学问的方面用屁股就能想明白; 你们不需要, 但是我们每个人, 每个普通的程序员和非程序员, 就是这样互相扶持的.
最后要对所有踏踏实实写文章的人, 无论你是某方面专精的高人, 各方面都精的超人, 还是掌握某东西如何使用的向导, 说声谢谢, 你们不只帮助了我一人, 也帮助了千千万万挑灯夜战的幸苦的IT工作者. 只不准哪个其它的高人超人舍不得花阅读MSDN或你所擅长的方面相关资料的时间, 正在专注的看你的文章呢. :)