绝大多数新技术的学习,都是浪费生命

标签: 技术 学习 生命 | 发表时间:2011-01-16 19:17 | 作者:(author unknown) Justin
出处:http://www.feedzshare.com

来自: 博客园-首页原创区 - FeedzShare  博客园-首页原创精华区 - FeedzShare  
发布时间:2011年01月15日,  已有 6 人推荐


 

      很多程序员,在很多的时间,都会说出很多相同的话来,其中最为引起共鸣的就是这么一句话:“每天都要学习新知识,不然就会被淘汰”。

    嗯,这真是件很辛苦的事情,你看,老中医就过得很轻松,收银员也过得很轻松,官员当然过得更轻松。没别的,绝大多数正常的人类,学会一种技能,则无需进一步学习其他的,大致上就能够或轻松或艰难的生活下去。这个所谓绝大多数,应该是90%。

      那么,程序员或者好听一些,软件工程师这种职业,为什么就过得更辛苦一些呢?

 

     因为我们实际上完全没有必要每天甚至每个星期甚至每个月都要学习新知识,因为很多所谓的新知识都是些将简单的问题复杂化的东西,它们既没有令事情变得更简单,有时候甚至引起倒退,更多的时候是盲目的消耗了程序员的精力而一无是处。

      我们完全可以过得非常轻松。

 

      举个例子,大家知道微软的Wpf、Wcf和WF这些新的东西,其中任何一个专题,程序员都需要花费大量的时间去学习,当然,也许学习半年之后,还是碰到很多疑惑。人的一生有多少个半年呢?这样的学习对你究竟有什么好处呢?

       简单的拿Wpf做例子,你需要了解这种新东西诞生的理由。

       微软的工程师认为,桌面编程应该有一个类似Html的界面设计方式,使用一种规范的Xaml来描述界面,这是第一个动因。第二个主要的动因,是微软的.net框架,这上面需要有专门的本地应用开发技术,微软的工程师认为Winform形式太过落伍了。

       还有其他原因吗?

       当你看到非常炫目的界面效果之后,你会觉得震撼,震撼之后你会觉得不学习实在就太会落伍了。

 

       可是结果呢?

       你想要用他开发桌面软件,面临的第一个问题,就是每个用户下载的时候都需要下载好几百兆的东西,还不一定保险。因为XP也好、Vista也好、Windows7也好还是Windows 2008 R2也好,老实说你要下载的包都不相同。

       第二个问题是用户安装你的软件非常困难,这些打包附带的东西显然无法让用户在安装你的软件之后,还有更多的兴趣再看一眼。

      第三个问题是开发应用并不简单,有太多的概念,比如Xaml、比如样式、比如Trriger、比如StoryBoard、比如MVVM,没有图表控件、没有自动完成控件,完成一件最简单的任务你比以前可能需要更多的时间,而非更少。

       第四个问题是有太多的细节,比如Command如何带参数、比如进度条怎样后台展现进度,嗯,我敢肯定的说,包括微软的开发工程师在内,整个地球上用Wpf开发应用的程序员们,只有不到十个人有一个通用的方案,来使用进度条简单的在后台报告进度。

       第五个问题是慢,惊人的慢。大家可以看看“飞信”,这是一个微软控主导决策的,嗯,使用.net 2.0。为了解决程序发布的问题,专门弄了个微型的.net框架,但是你将它与QQ比,是不是觉得慢得太多?持续多年以后,移动的先生们不耐烦了,才有的现在的基于C++的原生版本,请比较一下速度。这里特别提醒一下,飞信的开发,是中国移动投入巨资、得到微软中国整个团队无微不至的支持的,这些高人甚至赤膊上阵亲自动手,这样使用他们的开发工具,历时数年也不过是做出一个被淘汰的产品。先生,请掂量一下,你比他们这些家伙更厉害吗?你比孩子的母亲对孩子更了解吗?

 

        嗯,最后可以看到,包括微软自己在内,地球上并没有太多基于Wpf的产品。少得可怜,但它确实浪费了至少一百万程序员的生命,基本上每个程序员因此短命了半年以上。

     微软则继续想在僵尸的基础上,祸害更多的人,于是出现在Web领域,老天,有了Silverlight,事实无情的宣告这种妄想进一步失败,依然找不到多少有点看点的Silverlight的商业应用。微软碰了一鼻子灰,但他成功的继续祸害了50万以上的另一批程序员,这个时间估计超过半年,因为据说Web程序员更固执、也更舍不得告别已经浪费的生命。

 

       故事还没有完结,微软开始将这一套东西转到手机领域。

      我仿佛看见一只野狗,被左边的一个人踢了一脚,这个人叫桌面应用;又被右边的人踢了一脚,这个人叫做Web应用;然后,他高高的跳向空中,嗯,空中等着他的那个人叫手机开发,他是不是也长着一双脚呢?

      他们推出WP7,这种微软最新的手机操作系统,开发工具是Silverlight,我已经看到他失败的那一天了……

 

      这是新技术典型的例子,你不用责怪微软,dos到Windows,是一种包装,将底层封锁住;Win32到.net FrameWork是第二次包装,继续封闭第二底层;.net“原生”开发到Wpf又是一种包装,这是封闭了WinForm的内容改用Xml呈现的包装。

      你能够想象得到,每一次包装,显然都带来运算效率的下降,这种包装如果成功,是有益的,因为硬件性能毕竟在快速的增长。当然,也正由于这种包装,电脑发展几十年之后,我们常见的应用基本上都没有真正的变快,甚至与二十年前比较更慢了。

      同时,开发应用软件,好象每经过一次包装,复杂度又增加许多,而开发成本又上升许多。

 

     这很矛盾,不是吗?多数时候,微软的目的都是让开发更简单,这是没错的。

     但什么是简单?

     我的理解是:第一是概念尽可能少,理解上简单。第二才是代码尽可能少,实现上简单。

     微软几乎百分之百的工程师,和几乎百分之百的高层决策人员,都不理解第一个问题,“概念要尽可能少”。

 

    嗯,你这么想想吧,刚刚看到有研究Prism的,我估计此人又要浪费半年以上的生命。

    这是个什么东西呢?MVVM框架吗?依赖注入吗?模块化吗?

    看看上面这句话,普通人定然看不懂,这也是我们绝大多数程序员渐渐变得不会说人话的原因。

    你只要看到Prism那些难以理解的代码,然后看到使用这种编程框架需要理解多少个概念,使用这种框架开发应用会使人多么发狂。对于一个团队来说,这又会造成多大的灾难。

 

    请记住,即使你误入了微软的贼船,也一定要记住:每次面临一项新的技术的时候,花费5分钟的时间了解一下,它的目的是什么?它是否达到了这些目的?使用这种东西需要理解的概念多不多?有无可能在一天内完全掌握?

    如果不能,忽略它。

    微软是没错的,错的是你,先生,你不知辨别,你也不知道自己究竟有多长的生命。

 

    想一想,还是列出一个清单吧:

    1、Asp.net Mvc V3:可以看一下,新的视图引擎确实更简单

    2、WCF:忘掉它,这是微软希望扩展和取代Web服务的东西,它不是标准,这些年也基本上很少有应用。

    3、WPF:忘掉它,要开发原生应用,还是老老实实的用VC+Mfc,要好看一点,用Vs2010里的Ribbon体系。

    4、WF:不需要关注,当然,如果你从事工作流范畴的开发,这个有一定益处,问题是性能也堪忧

    5、Sql2008 R2的数据挖掘部分:忘掉它,基于数据库的挖掘,基本上是很难实用的.

    6、Silverlight:请转向Html 5吧,或者现实一些,Flash。你不应该这样特立独行,遵循多数人的标准吧

    7、Wp7:躲远一点,买手机也不要买这种

    8、Silverlight手机开发:不要碰,赚不到钱的

    9、嵌入式开发WinCe或windows Mobile:转向Android或者linux吧

    10、Ado.net Entity FrameWork :忘了它,这只是微软在面临强抱的时候无力的呻吟,它希望能够实现数据库和对象之间的无缝连接、也希望解决领域驱动开发问题,但是老天,十年之内请大家不要幻想这种DDD的方式能为成为现实---这也意味着所有程序员失业先…

    11、linq:关注但一定要慎用,linq To Sql性能肯定不如原生Ado.net直接访问数据库,linq To Object很多基于IEnumerable接口的,很显然在针对数组和IList的时候较之直接编程性能大幅下降。

    12、TFS:重要,很好的工具,但记住一定要用基本安装,只使用源码管理和基本的项目管理,不要安装SharePoint之类,简单就好

    13、Tfs的Scrum模版:重要,这样一种方法论,对个人对团队都有益处

    14、Vs2010的单元测试项目:重要,这是改变个人变成习惯,改变心态的习惯。不会TDD的基本上是苦瓜程序员。会了,你就是蜜瓜程序员。

    15、.net Framework:出现之后,桌面应用开发工具出现断档,仅在Web领域应用,在桌面应用和手机应用中应该远离。

    16、C# 3.0之后:C#语言设计的存在一定问题,从细节的所谓装箱拆箱到高层面的linq之类,我猜想语言设计人员没有列出“开发人员应掌握多少概念、特定场景如何实现、结合.net Framework的主要领域是哪些”这样的清单。逻辑层次上下浮动的很厉害。但C# 3。0之后的扩展方法、匿名代理、lambda表达式、匿名类、动态类型等,可以多用,对简化代码和代码的清晰度确实有益。

作者: 玄歌 发表于 2011-01-15 21:49 原文链接

评论: 155 查看评论 发表评论


最新新闻:
· 好键盘,接上iPad就可以创作音乐了(2011-01-16 13:11)
· Windows Phone7类比苹果 解释缘何无法截屏(2011-01-16 13:04)
· 黑莓Storm3 2011新品细节泄露 计划9月上市(2011-01-16 13:01)
· 摩托Atrix暗示Android、Chrome OS将合并(2011-01-16 12:55)
· 哪些人将从Facebook上市中获益——Facebook的股权分布(2011-01-16 12:53)

编辑推荐:PhoneGap移动开发框架

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [技术 学习 生命] 推荐:

绝大多数新技术的学习,都是浪费生命

- Justin - FeedzShare
来自: 博客园-首页原创区 - FeedzShare  博客园-首页原创精华区 - FeedzShare  . 发布时间:2011年01月15日,  已有 6 人推荐.       很多程序员,在很多的时间,都会说出很多相同的话来,其中最为引起共鸣的就是这么一句话:“每天都要学习新知识,不然就会被淘汰”.

[原]如何学习技术?

- ndv - heiyeluren的blog(黑夜路人的开源世界)
文章来自baidu NY 同学的邮件,整理发出. 1. 想学的技术非常多,该怎么办. 区分重点,选定目标,循序渐进. 技术是无边际的,随着知识的不断增加,会发现未知的东西更多. 1) 找重点:区分感兴趣的技能和必须技能,将重点放在必须技能上. 如实在区分不开,可以这样问自己:不学这个技术会现在的工作是不是干不下去了.

免费的晚餐--Google技术学习

- - 企业架构 - ITeye博客
作者: 江南白衣,原文出处:  http://blog.csdn.net/calvinxiu/archive/2007/01/31/1498597.aspx. 如果说Google的搜索引擎是免费的早餐,Gmail们是免费的午餐的话,.      http://labs.google.com/papers/ 就是Google给开发人员们的一份免费的晚餐.

[原]区块链技术学习笔记

- - 陶辉的专栏
1、区块链技术是一个解决了拜占庭将军(百度百科 拜占庭将军问题)节点的分布式数据系统. 这是它最大的不同,也导致了这个技术存在诸多限制. 做服务器端开发的程序员,都对zookeeper不陌生,我们解决分布式ACP问题时,寻找一致性解决方案时都会想到它. zookeeper实际使用了paxos的简化版算法(本文不展开,请参考我之前写过的两篇文章: paxos分布式一致性算法–讲述诸葛亮的反穿越 以及 paxos算法如何容错的–讲述五虎将的实践).

[译] 理解机器学习技术

- - IT瘾-dev
第1讲 理解机器学习技术. 学完本模块的内容,读者将能够:. 讨论机器学习的技术和商业应用. 学完本讲的内容,读者将能够:. 解释各类机器学习方法和算法. “机器学习领域的突破,其价值10倍于微软. 你是否曾经为计算机能够下象棋或者机器人能够完成复杂任务而感到惊奇. 一旦你理解了机器如何学习和适应各种问题、提供合适的解决方案时,这些看上去很复杂的问题实际上相当简单.

前端技术学习路线图

- - 菜鸟教程
以下 Web 开发人员学习路线图是来自 Github developer-roadmap 项目,目前已经有繁体版翻译 developer-roadmap-chinese. 主要有三个方向,分别为前端开发、后端开发和运维. 可以看到,作为 Web 开发者,不管从事什么职位,下面这些技能点是必须掌握的:.

中国女性学习被富人爱上的技术

- Kai Chen - Solidot
常年招生 写道 "北京妇女德育中心(Beijing Moral Education Center for Women)是一个教授中国女性如何被富人爱上的学校,缴纳两万圆学费后,女性可以接受30小时的培训,学习诸如如何以更迷人的方式化妆以及如何通过面部表情识别男人的谎言等技术. 学校的建立者Shao Tong表示学习目的是辨识男性的地位和人品.

前端技术系列课程(No.4) – 深入学习JavaScript语言

- - Taobao UED Team
本次系列培训最后一课为诗鸣为我们带来的“JavaScript语言”,针对JavaScript语言的运行机制和原理、浏览器引擎和JavaScript引擎之间的协作、阻塞、以及DOM操作性能优化等方面做了详尽讲解,同时还给出了很多代码实例,适合初学者学习.

hadoop学习(七)WordCount+Block+Split+Shuffle+Map+Reduce技术详解

- - CSDN博客数据库推荐文章
纯干活:通过WourdCount程序示例:详细讲解MapReduce之Block+Split+Shuffle+Map+Reduce的区别及数据处理流程.        Shuffle过程是MapReduce的核心,集中了MR过程最关键的部分. 要想了解MR,Shuffle是必须要理解的. 了解Shuffle的过程,更有利于我们在对MapReduce job性能调优的工作,以及对MR内部机理有更深一步的了解.

深度学习技术可以给你带来第三只眼

- - 互联网分析沙龙
智能手机已经采用了多种技术,使得日常任务更易于完成. 打开谷歌地图或其他使用手机GPS传感器的导航应用. 但是美国普渡大学一位教授认为,当前的技术只能做到这些. 普渡大学研究员们正在研发一种技术,可以从根本上将智能手机转化成人的第三只眼睛. 这项技术使用一种被称为深度学习(deep learning)的算法系统,使智能手机摄像头立即辨识它看到的物体.