爆栈思想 – 为什么别人升职比我快,赚钱比我多?

机会

在上一篇文章 爆栈思想 – 开发人员的层次和水平发表之后,反响不小。

有网友说:

你所提到的这些技术,越往上越难有机会让一般的工程师接触到。为什么呢?一方面,很多时候,问题发生在生产环境或者CI/CD的pipeline上,online fix 问题,风险高不好操作而且一般都是level 很高的工程师主导。另一方面,就算这类问题在系统设计期被发现,这本身就证明了那个技术负责人团队很牛,要查出、测试这样的问题,需要大量的测试数据,写benchmark,模拟真实业务场景。能参与解决这些问题,不但需要你技术上本来就处在比较有影响力的角色上(credential),还需要你有很强的组织协调能力(你需要别人的support来你解决一些非核心问题)

所以,你能掌握这些很不容易。这要放在我们公司,至少也是principal 或者 senior principal 这个级别了。。。

 

首先,需要时间,一些开发人员很浮躁,缺乏充足的经验,却动辄自称精通。其次,还是看动力。修行在个人,见缝插针,像海绵那样去吸收。学习的机会如果都在被动地等,那是和别人主动地去学不一样。

一些同学技术修行还没达到天花板,就已经在说/想:反正到了天花板,领导还不是我,他们还比我们年轻,技术没我们好,但却做我们领导,所以我们努力来干嘛?

机会是需要创造的,我来澳洲之前在中国已经做到部门小头目,来到澳洲重新做起,花了4年当上部门经理,现在是Head of Architecture,虽然只是给名字,但起码说明坚持不懈的努力是有回报的。

 

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 开发人员的层次和水平

开发的层次

极限编程之父Kent Beck曾经说过,软件开发的过程,就是:Make it work, make it right, make it fast。其实就像是敏捷开发,先是让软件能跑起来,然后把功能和实现都做对,最后才考虑优化。

Image result for kent beck make it work

 

过早的优化

软件开发大师Donald Knuth曾经说过的一句名言:过早的优化是罪恶之源。

Image result for premature optimization is the root of all evil

 

软件开发里面有魔鬼

王四哥个祖师爷、计算机开发大师Tony Hoare更尖锐地指出:过早的优化是软件开发的罪恶之源。

Image result for premature optimization is the root of all evil

王四哥曾经说过,一些开发人员把上述名言作为借口不做合适的设计,写垃圾软件。

 

开发人员的层次

古代,人分三六九等。曾经有人把人分成七层:奴、徒、工、匠、家、师、圣,并做了如下解释:

  • 奴:指非自愿和靠人监督的人。
  • 徒:指能力不足,又肯自愿学习的人。
  • 工:就是老老实实,按规矩做事的人。
  • 匠:指精通一门技艺或手艺,靠劳动生存的人。
  • 师:就是掌握了一些规矩,又能将规律传授给他人的人。
  • 家:有固定的信念,让别人生活得更好的人。
  • 圣:精通事理,通达万物,大公无私,为民立命的人。

现代社会,各个岗位都分层次、级别,我在之前多篇文章中指出,开发人员也分多个级别。我们常自我调侃说自己是“码农”,还有一些贬义的更低层次的,被称作“码奴”,当然还有不能登大雅之堂的,如“码畜”.

如果简单粗暴地分,我们可以分为3个级别:

  1. 能写软件
  2. 会写好软件
  3. 会把软件优化好

我多次指出,为了提高面试命中率,太多开发人员把不想称的精通写入了简历。实际上,大部分开发人员只达到“能写软件”这个级别,一部分能通过多年的努力达到“会写好软件”这个层次,极少数的开发人员能成为塔尖的“会把软件优化好”。这个优化,不是贬义的提前优化。

我在多篇文章和多个场合,反复吐槽各种不合格的开发人员常犯的错误,细到语言特性,大到系统架构。然而,吐槽是一回事,现实是残酷的,很多公司对这些质量问题没有特别的追求,开发人员也就无欲无求,多年后,带新人,把这些坏态度像病毒那样传下去。

拿数据库系统SQL Server举个例子:

  1. 懂CRUD,能写个业务模块的那叫“会做SQL Server数据库开发”
  2. 理解SQL Server各方面的功能,优缺点,坑,怎么在不同的场景如大量并发 vs 低并发大批量数据处理 用不同的解决方案,那叫“会写好的SQL Server系统”
  3. 深入掌握SQL Server的原理、机制和上限,掌握数百种性能监控指标、数百种安全漏洞防御措施、使用多种方法全方位地进行优化改造,那叫“能把SQL Server优化好”。

再深入一点,那就是充分利用SQL Server支持的特性,实现高可用性、安全、横向扩容的方案。

所以,业界中,真正出色的开发人员,是极少数的。

 

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 如何强迫开发人员提高代码质量

劳逸结合

在微博看见有同学说花了不少时间修警告,修上瘾了,不想回家吃饭。首先,这位同学,身体健康是自己的,热爱工作也好,给老板卖命也好,也得work life balance,劳逸结合。

警告有什么不好?

首先,为什么要把警告给修了呢?一般来说,警告来自编译器,分几种情况:

  • 编译器认为有潜在错误的可能,譬如类型转换丢失数据等
  • 冗余代码,譬如多余的变量等,在C#中经常遇到的是try/catch(Exception ex),这个ex异常变量很多开发人员都不会使用,所以就成了警告。

这些警告,说白了,首先是碍眼、闹心,像我这种推崇代码质量追求性能的有代码洁癖的开发人员,我就不能容忍警告。

然而,代码洁癖不是最重要的,如果因为像long <-> int之间类型转换过程中导致数据丢失,那这种警告必须修复,因为错误到了生产环境后的修复成本会高很多。

怎么修复警告?

有同学说:把警告屏蔽掉,世界就安静了,problem solved!但是,这种掩耳盗铃的伎俩迟早会导致麻烦找上门来。

我曾经在一个公司做过,其主系统几百万行代码而已,几百个警告,修了我好久,都修好了,一段时间之后,发现又有几十个,身心俱疲。这显然是开发人员完全不理解为什么警告要修复,也不理解怎么避免警告。

在另外一家公司,2200万行代码,70万个单元/整合测试,没有一个警告,因为任何警告都被视为错误无法编译通过。当然,开发人员的平均水平高也是很重要的一个原因。

所以,要么狠下心把警告视为错误让开发人员老实修复,要么培养提高他们的素质。不过,根据我10多年的开发经验,不能相信开发人员的自律,必须两手都要抓,两手都要硬,因为你永远不知道哪天被猪队友坑了。在这点上,Visual Studio有“把警告视为错误”的选项。

Visual Studio大法好,你值得拥有!

怎样强迫开发人员提供技术水平?

在某司呆过,他们自己从头实现了一整套的分布式编译、测试系统,没错,简单来说他们实现了自己的Team City。这套重新发明的轮子有很强悍的地方,譬如几百种的非常严格、全面的代码风格、质量控制规则,你想到和没想到的都有,譬如,多一个空格都会被视为错误无法编译通过,一般新开发人员来到,会被逼疯。但是,这样下来,整个系统看起来都像是同一个开发人员写出来的。

当然,大部分公司都没有这样的资源去做这样的一套系统,但是,我们完全可以引入一些比较严格的自动化代码质量控制规则(即便通过插件)。

关于被动、主动的层次,英文里面是:passive(被动)-> responsive (反应)  -> active (主动) -> proactive (积极) -> pre-emptive

在代码质量控制上,我们也应该用各种规则防止被坑爹。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 我究竟值多少钱?

价格和价值

首先,我们需要明白,价格不一定等于价值。价格就是大家去购物看见商品上的那个标价,但是价值往往是另外一回事。

我究竟值多少钱?

我经常和那些找工作的朋友说,对薪资要求,一般有3种心态:

  • 我宁愿现在要求少一点,先把offer拿到手,进去之后再好好表现争取升职、加薪
  • 我会看市场,结合自身实际情况,合理地要求
  • 我会尽量抬高要求,譬如我现在拿10万,我会更下一家公司说我现在拿15万,这样他们为了追逐我,就一定会给15万以上

我多次提及,一个公司养一个员工,远远不止工资这么多,譬如你拿工资10万,加上各种税、年假病假、招聘费用、资源(工位摊分成等等)、培训,实际上公司要为你付出15万甚至更多,而且商家都是逐利的,公司会从你获取20万甚至更多,这意味着,你要求10万,公司会尽可能地榨取你起码20万的付出。

简单地来说,没有免费的午餐,你获得多少,付出的必须更多。

我没有跟进中国的市场,我只知道BAT等互联网公司哄抬了开发人员的身价,动辄几十万、上百万工资加一大票的期权股份。

单纯澳洲来说:

  • 人年平均收入大概是7万多(这几年的大概数字,没有跟进最新的)
  • 悉尼的开发人员(笼统地平均,忽略前端、后端、数据、爆栈的区别)
    • 初级开发人员(0 – 3年经验):5-7万
    • 中级:8-10万
    • 高级:11-13万
    • 小头目/架构师:14-16万
    • ….如此类推

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 偏好与偏见

偏好

相比英剧,我更喜欢美剧。相比现代流行歌曲,我更喜欢70年代-90年代的经典爱情歌曲。这是偏好。

偏见

偏好和偏见还是有很大区别的。譬如:

  • 一些开发技术文章,同类对比的时候,只字不提C井,尽管这些文章中的截图C井很明显地出现在突出的位置(排名很高)
  • 比较cloud服务的时候说Google的、IBM的、AWS就是不说排名第二的Azure
  • 开源领域不谈微软的贡献,又譬如宁愿离开GitHub去gitlab
  • 《最强大脑》那个组合拆了的汉字的游戏,用的Hololens,就没说微软的

当然,你们可以说是这是选择自由。

很多时候,这些偏见来源于坐井观天,他们对微软的认识还停留在10年前,现在:

  • .NET可以在各个平台上跑,完全开源,而且性能(语言+平台)在各个性能比较网站上的评分追平甚至超过Java,远远抛离你们想象中的那些主流解决方案
  • SQL Server不仅能在Windows上跑,而且还能在Linux上跑
  • Visual Studio不仅仅是给Windows开发者做桌面程序的,现在MacOS和Linux越来越多开发人员拥抱Visual Studio Code了
  • 大家常用的SO(StackOverflow),使用了大量微软的技术,包括C#和ASP.NET

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。