给程序员的一些宝贵建议(转)共勉

时间:2022-04-11 11:52:46

分享出来参考 ,微软收购了GitHub,什么时候开源,35岁以后的事谁知道呢,到时候看呗

对技术学习的取与舍

如果真的想在一个技术领域里成为大拿,那么你必定是要在这个领域里做很多年的沉浸才可以。即便像 Eric Gamma、Anders Hejlsberg 这样全球知名的技术领袖也是一样。Anders 被公认是全球最棒的编程语言设计师,他从 Delphi 到 C# 到 TypeScrip 做了快 30 年了,他在这个领域这么多年的沉浸,有这么多的经验,才能支撑他做出这么好的设计方案。

对所处领域要有 Passion,还是要做很多年才能够真正做到一个世界级的顶端的大师。所以我觉得这个是一方面,就是你对所处的这个领域还是要有热情。另外一个方面,需要对整个技术有一定的展望,对大的技术趋势要有一定的把握。比方说现在,如果不去学一点 AI 的东西,不去学一点机器学习的东西,可能对未来的技术的把握就会落伍了。

总结就是:先选定一个技术领域,沉下心来在这个领域里深耕,同时扩展技术的宽度。

从封闭到开源,转变为哪般?

 

以往,微软对于开源软件、Linux 抱着敌视的态度。现在回过头来重新再审视这件事,其实开源对微软是非常好、非常重要的方向,微软有很多特别好的技术,却被封闭在墙内。也因为没有拥抱开源,所以没有得到用户的认可以及参与。.Net 刚开源的时候,团队都特别紧张,此前也没有做过这么大规模的开源项目。第一次开源出去,完全不知道回馈会是怎么样,别人会挑什么毛病。并且许多工程师可能也曾经在代码里面发过许多牢骚,或者是写过一些不知所云的东西,大家都想开源前都把它删掉。

所以在正式的开源之前,其实做了很多工作,把整个代码都看了很多遍。但是在开源之后发现:用户对我们的反馈特别好,而且一开始就给了我们很多的帮助。甚至包括一个捷克的用户反映发现了一个 bug 等修复等了很久,现在开源了之后他就可以自己动手了。

开源这个事情,其实对于很多在校大学生来说,也是一个特别好的锻炼自己的方式。通过写测试、改 bug 等等方式,都可以参与进来。我建议在校大学生可以花一些时间在 GitHub 上,做一些贡献,也能得到锻炼。

包括 Visual Studio 在内,我们做的开发工具现在也有 For Mac,For Android,iOS 的等等。在常人看来,从封闭到开源是一个巨大的转变,但微软好像转起来毫不费力。其实在整个转变的过程中,团队里还是发生了很多故事,也遇到了一些困难的。

从开源这个角度来讲,团队内部都非常欢迎,但真要开始着手做的时候,还是有非常多的挑战。团队里面大多数的人都是在 Window 平台上面沉浸了很多年,另外我们的工程师做测试、构建等等,都是基于 Windows 平台,也都是内部的。如果要开源,首先就得把这套系统做到可以在 Windows 上运行,也可以在 Linux 上运行,所以对工程师能力的挑战本身就挺大。

另一个大的挑战就是我们当时准备做的开源和 Android、Java 不一样。因为 Android 和 Java 的开源,其实都是在内部已经做好了,然后把代码一次性地再放出去。用户可以对其做小的修补,但对于其大的架构是很难起到影响作用的。

我们准备做的是一个全开源的、开放式的。具体怎么做的?我们每星期都有内部的讨论,包括下面的架构怎么做,要有什么样的新功能等等。我们会用摄影的方式把讨论录下来,放在网上供大家讨论。我们根据用户对此的讨论,再决定我们要做哪些功能。开源的开发工具 Visual Studio Code (VS Code)也是用类似的方式。

程序员跟年龄关系大吗?

程序员有没有这个年龄限制这个问题,其实这是一个中国挺独特的问题,其实国内现在有很多程序员都在担心 35 岁之后是不是就不能做程序员了,或者说要转行回老家,对这个其实我也觉得是挺奇怪的。因为我觉得对程序员的定义我们要稍微改一下,如果一个程序员什么都不知道,就是你老板叫你做什么你就写代码,这种是最单纯的一个程序员的定义,那么这种程序员我觉得做几年之后,一部分人确实可能会遇到很多瓶颈。

我们团队里的 Anders Hejlsberg,好像大家喜欢称呼他“海神“,他做了 30 年还在写代码,他还能这么有激情?你说他是程序员吗?他每天也是在写代码,还在写代码,但是他另外一个身份是全世界最好的编程语言设计师,而且他对整个行业的分析、对行业的认知,他的前瞻性是一流的。有很多的问题,我们两个会讨论,我会充分听取他的建议和意见。

我们一开始准备做 VS Code,Anders 也是积极的推动者,他虽然自己不做,但他觉得这对我们来说是一个非常重要的领域去介入。他的这种前瞻性,对战略的把握,实际上对他的程序员生涯是非常重要的,如果没有这种战略的把握,没有这种前瞻性,他不可能在我们公司做到和全球资深副总裁同样的级别。但是同时作为一个程序员来说,他又是一个非常牛的程序员。

在第一个版本做出来之后,已经有了很多的用户。Anders 看了之后,觉得还可以写得更好。于是他就花了几个月的时间,一个人把 TypeScript 编译器的部分重写了一遍。重写完以后,总代码量只有原来的三分之一,运行速度提升了好几倍。

所以每次有人问起,对程序员的考核标准,要不要用写的总代码量来衡量,我总是会跟他提起海神的这个故事。如果用这种考核标准,能招到海神这样的大牛吗?我认识很多 35 岁、40 岁朝上的程序员,他们对领域的把握、资深的认知是年轻程序员所欠缺、难得的。所以即使他们还是在做程序员这份工作,但也不是像大学毕业的新进同事只写代码。资深的程序员对于公司来说,是非常宝贵的资源。

另外像我们团队里的另一个大神,Erich Gamma,他就跟我说他团队里的人不要超过 20 个人。超过 20 个人,他就要花很大的精力去管理,他希望把时间更多地放在技术上面,然后能够把技术做透。

很多时候中国的文化很看重管理的人数多少,其实并不是管理的人越多越好。Erich Gamma 只管不超过 20 人的团队,Anders Hejlsberg 一个人都不管,但是他们对于产业的影响力却是很多管理大型团队的领导者所难以企及的。

从程序员迈向领导者

不同的企业,它的需求是不太一样的。我只能从微软的角度,从产品的角度谈一谈怎么从技术转向管理。

一般来说,如果技术都做不好,是不会做到管理者的岗位的。因为你一定要有信服力,你一定是技术做得好,被大家所认可,才有机会做到技术主管,步步升迁。微软的技术主管不仅要管人,还要管这个产品的技术实现。

很多时候,团队里的工程师会说想要去做技术管理。通常我会说,你可以去试一下,如果觉得做不好再转回做技术。有的时候,我会更直白地说,你要是做技术,只需要管理好自己一个人,可能升职反而会更快。但如果你做了技术管理,团队没带好、功能没实现,反而会影响到后续的升职和提拔。

微软的工程师有两条线,一条是纯做技术,一条是技术管理。至于微软的项目管理,虽然跟技术管理一样,都是用 Manager 的职称,但是他其实不一是一个真正意义上的领导者(People Manager)。项目管理者更多可能只是一个个人,在统筹项目的进度等等。所以微软里面做团队管理的,基本上都是技术管理。

拿架构师来举例,国外的很多传统的架构师,像微软公司的架构师,其实并不是用职称来反映的,越资深的工程师,本身要负责的问题就越大,然后对此要有一个相应的很大的解决问题的框架,落地其实就是架构了。另一方面,从负责制的角度来说,如果管架构的和主管开发的经理不是一个人,或者有不同的理念,万一最后做出来的产品有性能上的问题或是功能上的问题。究竟是架构不好呢?还是开发不好呢?

所以,一定要在一个认知合一的情况下看问题。程序员转管理岗,并不是条容易的路。

给女性程序员的贴心话

我刚进微软做开发的时候,确实开发组里女程序员数量非常少。那时候不像现在,微软做工程师的华人也是非常少。我刚进开发组的时候,一个大老板问我说:“你高中毕业了吗?看着还像个高中生就来上班了。”我当时还觉得挺没面子的,被别人看成高中生。

我觉得很多时候,女程序员面临的第一个就是对自己的认可。从全球的角度来看,有很多数据支持的一个现象是:对于一个职位的要求,男程序员可能自我审视到满足 60% 就会去申请,但是女程序员很多时候是在达到 85% 甚至 90% 以上,也就是说基本满足要求的情况下才会去申请这个职位。

所以对于女程序员来说,第一就是要知道跟男程序员在这种情况下会有不同的反应,很多时候对于自己的自信和自我认可是很重要的。但很多女程序员,在团队里作为新人的时候,会刻意地去控制自己,在研讨会的时候觉得别人的发言都很有逻辑很有道理,认为自己作为一个小白还是多听少说。

但实际上我觉得作为一个不管是男性还是女性的程序员,对自己的自信心还是非常重要的,在团队的搭建过程中和在团队的合作过程中要勇于表述自己的意见,如果你没有意见表述,就算你心里面很有想法,别人也是猜不到你的意见的和想法的。所以很多时候你不表述你的意见,别人可能认为你就没有想法。

这实际上是对女性成员是非常不利的。很多时候,我觉得女性成员还需要做的事情就是要据理力争。你认为有道理的要用一个比较合适的方式跟整个团队做讨论,而不要躲在后面不发声。我觉得这跟中国的文化有点关系,老师给我提什么我就做什么,但实际上很重要一点就是不管男性和女性,你要真的弄明白你老板叫你做的事情,为什么要叫你做这个,他想达到的效果和目的是什么?

微软里很多女程序员,不仅是在结婚之前做技术。结婚生孩子之后还在接着做技术。我也有孩子,我觉得孩子和家庭并不影响你,不会说结婚生子后,突然你的架构能力,你的写代码能力就没有了,就下降了。我觉得其实女程序员在很多时候,尤其是在团队合作中,在交流中实际上相对于男性程序员还可能还会有更多的优势。而且我觉得女程序员天生对用户的体验会比较敏感,而且我觉得一个团队里面有男程序员也有女程序员,其实对你产品整个的用户体验来说会更合适。

对于女性程序员来说,总的来说,第一是不要被别人影响,要自信,要勇于去挑战别人对你不行的偏见。中国的女生,高考数理化成绩都很好,数理化能学好的,学好计算机有什么问题?