写点什么

微软开发主管临别诤言

  • 2007-11-28
  • 本文字数:1264 字

    阅读完需:约 4 分钟

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

2007-11-28 18:541133
用户头像

发布了 225 篇内容, 共 60.9 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

中国AIOps们,你们究竟是在骗谁?

观测观测

AIOPS

MS Office 冷门却实用的技巧及软件安装包分享(文末有福利)

淋雨

Office office365

手把手教你学Dapr - 4. 服务调用

MASA技术团队

C# .net 微软 微服务 dapr

gpushare.com_基于去噪Transformer的无监督句子编码【EMNLP 2021】

恒源云

深度学习 语音识别 transform

PK体系“配齐”!亚信科技数据库与麒麟软件OS、飞腾CPU完成产品适配

亚信AntDB数据库

AntDB 亚信科技

跟着源码学IM(十):基于Netty,搭建高性能IM集群(含技术思路+源码)

JackJiang

Netty 即时通讯 IM im架构设计

详解 HDFS 底层交互原理

五分钟学大数据

hdfs 1月月更

全国社保基金理事会副理事长陈文辉一行莅临青藤调研

青藤云安全

技术分享| 探索视频感知编码

anyRTC开发者

音视频 WebRTC 视频编码 视频压缩 视频感知编码

淘宝小部件 Canvas 渲染流程与原理全解析

阿里巴巴终端技术

小程序 淘宝 渲染

详细图解Netty Reactor启动全流程

bin的技术小屋

微服务 网络编程 中间件 Java IO netty

【实时渲染】3DCAT实时渲染云在BIM领域的应用

3DCAT实时渲染

云计算 渲染 BIM 建筑

线程的生命周期,真的没那么简单

华为云开发者联盟

Java 线程 生命周期 编程语言线程

阿里云弹性计算年度关键词:强劲、突破、开放

阿里云弹性计算

阿里云 弹性计算 计算巢 神龙架构 无影

视频智能生产及内容分析应用工具开源了!​

百度大脑

人工智能

从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践

字节跳动数据平台

数据库 字节跳动 Clickhouse 实时数据分析 bytehouse

【渗透技术】一个渗透测试工具人是怎样操作的

H

网络安全 渗透测试

手把手教你学Dapr - 6. 发布订阅

MASA技术团队

C# .net 微软 微服务 dapr

手把手教你学Dapr - 9. 可观测性

MASA技术团队

C# .net 微软 微服务 dapr

项目动态|Apache Pulsar 2.7.4 版本发布

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

使用轻量应用服务器部署Docsify在线文档平台

阿里云弹性计算

阿里云 轻量应用 征文投稿

手把手教你学Dapr - 5. 状态管理

MASA技术团队

C# .net 微软 微服务 dapr

Blazor是春天还是寒风里的挣扎

MASA技术团队

C# .net 微软 微服务 blazor

C#8.0 可空引用类型

MASA技术团队

C# .net 微软 微服务 项目

普通开发者,如何成为Apache项目的commiter ?| 人物专访

云智慧AIOps社区

开源 程序员 算法 运维 时序数据

深入解析 Apache Pulsar 系列(一):客户端消息确认

Apache Pulsar

开源 架构 云原生 Apache Pulsar 消息中间件

手把手教你学Dapr - 7. Actors

MASA技术团队

C# .net 微软 微服务 dapr

『内存中的操作系统』内存虚拟化又是什么

soolaugust

操作系统 内存

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

MASA技术团队

C# .net 微软 微服务 dapr

博文推荐|基于 Apache Pulsar 的分布式锁

Apache Pulsar

开源 分布式 云原生 中间件 Apache Pulsar

手把手教你学Dapr - 8. 绑定

MASA技术团队

C# .net 微软 微服务 dapr

微软开发主管临别诤言_研发效能_Niclas Nilsson_InfoQ精选文章