• 做技术的,就这么难吗?


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

      嗯,这真是件很辛苦的事情,你看,老中医就过得很轻松,收银员也过得很轻松,官员当然过得更轻松。没别的,绝大多数正常的人类,学会一种技能,则无需进一步学习其他的,大致上就能够或轻松或艰难的生活下去。这个所谓绝大多数,应该是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表达式、匿名类、动态类型等,可以多用,对简化代码和代码的清晰度确实有益。
  • 相关阅读:
    kubenetes-学习
    k8s-字段
    Spring Boot集成mongodb
    synchronized关键字
    Scala手记
    Python数据结构&封装解构
    Scala基础之集合
    Scala基础之集合常用方法
    Scala(2.12)之collection基本操作
    Scala基础之集合(数组)
  • 原文地址:https://www.cnblogs.com/lhws/p/2351286.html
Copyright © 2020-2023  润新知