荣获2015微软.NET MVP称号!

引子

2015.7.2 早晨上班,得知获得微软2015年 .NET MVP.

确确实实的,小小激动了一个上午!

  • 终于可以使用正版Visual Studio 软件了
  • 终于可以使用正版Office软件了
  • 终于可以使用正版Windows 操作系统了。
    12天后,从微软美国总部快递到西安的MVP证书和奖杯到了:

image

 

image

而此刻,距离我离开市场团队,重返研发团队,刚1个月。

 

故,些许心得和感想,一并成文:

      记得刚入行做.net开发,那个时候MVP的含金量很高,对找工作具有非常关键的加分项。故,很多年,我个人一直对MVP非常的敬仰,没有想到多年后,我竟然申请通过了。周围一个朋友(原来也是资深.NET, 目前转行做Android了,他说“没有想到,我身边也有1个MVP啊,哈哈。”)。— 可惜的是,目前的环境下,找工作,MVP貌似已经过气了 微笑

 

以往做.net开发的点点滴滴,请参见前年写过3篇总结的博客:

我新的工作,虽然不是专门开发微软平台的技术,但也会使用微软的Visual Studio 2013开发工具, C#.NET编程语言,故,微软相关的技术,依旧会占我日常约50%比重。

    新的工作,和以前的业务截然不同,但是软件开发的流程和理念是可以复用的,如同《士兵突击》里面说的,对于一个士兵而言,“上膛、瞄准、射击”,这些深入骨髓的东西,是不会忘的,唯一不同的是当年新入行,周围80年的人多; 而如今,85后已经担当主力,紧随其后的90后已经崭露头角了。
      下面就最近几个月非技术的一些思考,分享出来:

     

    团队分拨

    在IT团队,无论大小,按照日程工作对内、对外的主要沟通方式、工作地点等,可分服务团队和研发团队。

    image

    • 服务团队:含市场、销售、运营、服务、工程岗位,主要是对外沟通,必要时候需要定点驻守用户现场。
    • 研发团队:含软件开发、需求、测试、美工等岗位,主要是对内沟通,一般集中在总部办公。
      我过去的工作经历,大部分经验是在研发团队养成的,故内部沟通多一些,而对非研发的团队了解的少一些,有时候交流中不够耐心,对服务岗位颇有不解。而去年在市场、服务团队工作1年多,结合实战经验–和用户直接沟通多次后才发现,服务团队,更要有胸怀和忍耐力. 一个曾经在服务的同事自嘲—“用户虐我千百遍,我待用户如初恋”。  服务团队工作性质,可见一斑。
      研发团队中,尤以软件开发团队的程序员最桀骜难驯,年纪轻轻的,年薪10万的比比皆是,且业内猎头虎视眈眈,故靠谱的程序员很难管理和沟通,不过,也有一些法则能够“无冕则王”—只要你技能过硬、勇担重任,则往往威望会升的很快。

      研发的流程

      研发团队的多个工种,虽然日常工作共处一地,但是细细说来,也破费笔墨的。

      对软件角色而言,输入是美术提供的素材、需求的文档、以及自己的技能灵感。产出则比较简单,一个可运行的软件,文档是辅助产出。

      对需求角色而言,输入是用户的需求,(有时候是甲方的合同和规范),主要产出物为需求文档,

      image

       

       

      下面这个流程是我依据实际项目裁剪的,少了很多环节。

      其中最最重要的是使得项目干系人沟通、沟通、沟通,从而为产出一个可运行的软件万众一心。

       

      image

       

      可能对2、3个人的小作坊而言,流程不是很重要;但是要开个大店,想往大的做,越早的梳理流程,且日积月累,这个将来会增值的。

       

      记得早期刚入行那会,3~5个人开发,原型产品是国外知名的软件,我们就“山寨”之,照猫画虎,开始一个阶段忙的很,后来大部分时间不忙,就穷开心的搞框架、重构代码,如Chat视图,我记得我自己都手刃了7个不同的版本,学到了非常多的设计、框架的知识,影响至今。个人技能虽然增加了不少,但对组织而言,却很少有组织财富,因为那个时候大家的共识—对小团队而言,流程这玩意很鸡肋。

      而后,团队规模急速扩大了3倍,但是,文档模板没有,流程没有—准确的说,包括我在内的大部分人很“土包子”,不懂这些是何物。 故15个人做项目,还不如5个人做的好,做得挺不爽的:忙中有盲也。

      其后3年,公司关门了。

       

      研发的纪律

      image

       

      作为一名老程序员,再熟悉不过程序员的秉性了:看别人代码希望有详细的注释、自己写代码很少写注释。

      研发中的每项纪律,拿出来说事,都显得吹毛求疵一般,但是往往“千里之堤毁于蚁穴”—编码规范、研发流程、checklist等的忽视,导致基本问题日积月累,尾大不掉。

       

      最爱看的一部电影:《角斗士》带兵的一句重要的纪律是—“Hold the line, stay with me”.

      极为简洁,但很实用

      image

       

      附录:什么是微软MVP?

      MVP(Most Valuable Professionals,最有价值专家)是指具备一种或多种微软技术专业知识,并且积极参与在线或离线的社群活动,经常与其他专业人士分享知识和专业技能,受人尊敬、信任,而且平易近人的专家。微软对上述专家在技术社群专业贡献的一种正式认同。

      image

      MVP正是这样一群拥有丰富知识和实际经验并乐于分享所学知识的微软技术专家。他们不是微软的员工,但是非常乐于通过在线或离线社区的方式帮助技术人士。

      在全球90多个国家拥有接近4000多位最有价值专家,而中国大概有250位,这个是以一年为任期的人数,包括成功连任的和新当选的MVP人数,也称为活跃MVP人数,一年有4次申请MVP的机会,所以平均下来,在中国每一期MVP人数大概为50人左右(包括连任的新当选的)。

      10年微软MVP路(如何成为一个MVP?)

       

      为什么本次我能获得MVP?

      本次能获得MVP,充分肯定了技术积累+市场运作==好的产出

      Unity3D项目实战笔记(1):prefab的插件方式

      大家好,从这篇开始,Unity3D新的系列博客开始了:《Unity3D项目实战笔记》。

      主要就项目中用到的技术和难点整理为博客笔记。欢迎大家拍砖。

       

      对于软件项目,解耦合的插件架构设计很重要:

      一是方便多人协同工作,以提高沟通能力,减少单兵种作战的孤独。

      二是为了里程碑的产出,以使得软件有节奏的进行构建。

      三是为了维护方便。

      同理,Unity3D项目也有自己内置的“插件”来进行解耦合设计。它就是prefab东东—我在开始自学Unity3D的时候,并未对prefab深以为然,仅仅看到NGUI大量提供了prefab的图集和控件;而在实战项目中,我们也用到大量的prefab。

      此处省去制作prefab的若干字,有兴趣的读者,可看看2年前雨松的博客:《研究院之预设的使用细节(五十一)。

      prefab动态加载

      在编辑器中,拖入prefab即可加载到场景中。而在实际使用的时候,动态加载是更常用的功能–需要把把prefab放到Resources文件夹下(多深的文件夹都可以的)

      prefab = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("ball")); 

      这样的话,在开发阶段,可个人负责一个prefab的UI界面、代码逻辑,然后再按照目录存放好prefab。还是动态加载的方式,还是挺方便的。

      prefab动态定位

      实现了动态加载prefab后,有一个刚需问题就是动态的定位了。例如

      image

      a.prefab被加载到了A的子节点下面,要使得a显示b点位置,一个办法是把a挂接到B下; 另外一个办法是用transform提供的2个方法,转换局部坐标为世界坐标,实现动态定位。

              //
              // Summary:
              //     Transforms position from local space to world space.
              public Vector3 TransformPoint(Vector3 position);

       

              //
              // Summary:
              //     Transforms position from world space to local space. The opposite of Transform.TransformPoint.
              public Vector3 InverseTransformPoint(Vector3 position);

      如:

      Vector3 pos = A.transform.TransformPoint(a.localPostion);

      b.localpostion = B.transform.InverseTransformPoint(pos);

      动态定位非常容易的。

       

      prefab注意事项

      !!! prefab要注意勤保存文件,如制作一个prefab花了30分钟,那么正常关闭unity3d,不妨喝水休息一下,我最近连续2周,已经丢了超过3个prefab—-Unity3D的一个bug,当不正常关闭Unity3D后,就会导致正在编辑的prefab不可用(unity3D在调试过程中,偶尔会死机,导致通过进程杀掉它)