Jay Bazuzi曾任C#编辑器的开发主管,现正离开微软。他在离开之前令人惊讶地给旧日伙伴留下了一些尖锐的临别赠言:“OO不是一时三刻的流行”,“用用别人写的代码也不要紧”。

Jay一开头就说:

在我离开之前,想要说说我对微软的软件开发的一些想法。

他的帖子火力集中在他认为改进潜力最大的5个主题:

  • 最清晰的代码是最好的。
  • OO不是一时三刻的流行。
  • 用用别人写的代码也不要紧。
  • 用设计来赶走问题。
  • 最重要的:我们可以做得更好。

虽然Jay已经掏心掏肺,不过并没有多少人回帖。Alex Barnett觉得这些话在微软关起门来说说就好,但除此之外这个帖子倒是没有出现想象中的口水仗。

可悲的事实是,Jay说的问题并不是微软才有。如果换掉微软的名字,很多公司恐怕都会觉得说的是自己。比如,关于清晰的代码,Jay写道:

微软的大多数开发者都还没有认识到尽力编写清晰的代码能带来多么巨大的价值。有一次我看见有人提交一段代码,他在一个600行的函数里增加了200行。这个函数本就有差不多597行属于太长了。用“Extract Method”方法把函数分成小块;用“Extract Class”方法来驾驭由于前一步骤而霎时间出现的方法数量大膨胀。别停下,还可以继续改进。

谈到缺乏面向对象的思维时,Jay举了近年由于安全原因而处理缓冲区溢出的例子。他们写了很多工具来检查,保证当操纵缓冲区时,总是额外传递了一个参数来代表缓冲区的正确长度。Jay很不满意这种解决方法:

喂,当你发现自己总是将几个数值一同传来传去,为什么不把它们放到一个类里面?先做到这一步就好,多态、继承、封装可以以后再说。

正确处理对象不是易事,重用对象就更难了。微软似乎患上了流传多年的“不是自家发明(Not invented here)”综合症,而且排斥的对象不仅仅是来自微软外部的代码。

目前,Visual Studio代码库里有大约十来种C++ String类的实现,大多数都是从MFC硬改出来的。用这些类已经比把缓冲区传来传去强多了,但是,喂……那些编写类库的家伙可是拿工资全职干这个的(难道不比你干得好)?为什么你还不用STL或者ATL?

不光是C++有这样的问题……在.Net Framework的最初实现中,哈希表的实现我都数不清。同学们!我们还是来点类库吧。

Jay给全世界的开发者们送上的最大礼物,还是他对如何持续提高的讨论。Jay说他曾经担任一个非常没经验的团队的经理,而在一年后,比起工作内容相近的其他更富经验的团队,这个团队的工作效率和代码质量都要更高,而且每次都能按计划完成。

Jay将之归功于团队能够持续地提高自身。他列出了一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题:

  • “要保证这个问题不会再出现,我该怎么做?”
  • “要想少出些Bug,我该怎么做?”
  • “要保证Bug容易被修复,我该怎么做?”
  • “要保持对变化的快速响应,我该怎么做?”
  • “要保证我的软件的运行速度,我该怎么做?”

如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。

查看英文原文: Surprising criticism from parting Microsoft development lead

微软开发主管临别诤言相关推荐

  1. Vista开发之旅:微软开发技术20年回顾

    自Windows 1.0问世到今年11月份,微软Windows操作系统已经走过了它辉煌的二十一年.沧海桑田一瞬间,让我们再次追随Windows的踪迹,了解微软核心技术发展史,评析她当时所处的位置并展望 ...

  2. 基于微软开发平台构建和使用私有NuGet托管库

    本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...

  3. android app 移植到pc,微软开发新应用把Android app“移植”到Win Phone

    依据微软2010年公布在Tweet上的一份专利申请书,微软正在开发一种新服务能够在不同的手机操作系统中"移植"应用和应用数据.这是说Android,iOS应用以后可以跨平台&quo ...

  4. 如果彩虹QQ算非法外挂,那么运行在windows上的非微软开发的程序算什么?

    如果彩虹QQ算非法外挂,那么运行在windows上的非微软开发的程序算什么?你腾讯QQ不也是利用了一堆微软提供的信息,开放的API了吗?你腾讯QQ不也是windows上的外挂程序吗? 也许有人要说腾讯 ...

  5. 如果微软开发了 Android,会有何不同?

    虽然这种事情永远也不会发生,但是假如当初是微软开发了 Android,那么如今科技领域的局面会有很大的不同. 作者 | Steve Ranger 译者 | 弯月 责编 | 屠敏 出品 | CSDN(I ...

  6. 微软开发的网页浏览器-IE10(Internet Explorer 10)提供下载

    IE10浏览器是微软开发的网页浏览器,在IE9浏览器的基础上增强了CSS3解析及硬件加速功能,并也支持了HTML5.IE10浏览器在硬件加速.数据处理速度.网站页面打开速度上都有了提升,在页面处理和视 ...

  7. 技术面试要点 —— 如何准备微软开发工程师面试?

    最近越来越多的开发工程师朋友来找我帮忙内推,同时也会问我面试的流程和面试要点.所以今天我想聊一下微软开发工程师的面试要点和面试技巧,希望能帮助开发工程师朋友更好地准备面试. 『面试流程』 开发工程师的 ...

  8. 清华规划院 伟景行 诚聘 Jsp/Java/Web高级开发工程师 互联网开发主管 测试工程师 etc.

    Jsp/Java/Web高级开发工程师  3人 岗位职责: 1.  参与公司网站(www.Gvitech.com)和数城网(www.diciti.com)的分析.规划.开发和维护工作: 2.  负责公 ...

  9. 《软件研发之道:微软开发团队的经验法则》目录

    目录回到顶部↑ <软件研发之道:微软开发团队的经验法则>  第一部分 1995  简介 2  有关软件的思考 3  项目的阶段 6  开局阶段 7  组织 7  质保人员是"少数 ...

最新文章

  1. 京东热点key探测系统发布,单机 QPS 提升至 37 万
  2. 做好准备迎接崭新的BCH了吗?
  3. ubuntu16.04开机卡死解决方案
  4. arm编译安装openCV整理
  5. asp开发工具_VSCode搭建完美的asp.net core开发环境,看完这篇就够了
  6. crackme 逆向寒假生涯(22/100)
  7. Vue入门教程:node安装vue命令行工具及启动项目
  8. 栈和递归的关系 144:Binary Tree Preorder Traversal
  9. ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study
  10. java学习(六)多线程 中
  11. 13. Magento 后台top栏开发(二)
  12. 使用vue element-ui 打印组件
  13. Linux下ftp搭建
  14. OpenCV绘制点线
  15. 阿里云视频点播服务(上传,删除,获取播放地址,获取播放凭证)
  16. FPGA串口接收学习
  17. android 横屏竖屏设置,Android中强制设置横屏与竖屏,与横竖屏生命周期的设置
  18. scrapy——抓取知乎
  19. 什么是IBinder
  20. IC基础知识(十四)Flip-Flop和Latch的区别

热门文章

  1. 07 - 日志服务器的搭建与攻击
  2. python xlwings 获取单元格横纵坐标_xlwings查找包含值(日期)的单元格坐标
  3. Gartner报告:未来一年48项即将大热的技术趋势 (Hype Cycle for Emerging Technologies)
  4. 小技巧--使用异或来替换原本的常量交换
  5. 应用在电源MOSFET驱动器中的光耦
  6. 如何用纯 CSS 创作一个小球上台阶的动画
  7. mysql date和time组合_使用 MySQL Date/Time 类型
  8. 【干货】微信私域运营打法和案例拆解(附78页pdf下载链接)
  9. certbot证书安装--nginx
  10. 抖音盒子是什么?2022年抖音独立电商将成为最大风口,务实社海哥教你如何入驻抖音盒子