优秀的程序员
魏文侯问扁鹊:“你兄弟三人,哪个软件开发水平最高?”扁鹊说:“大哥最好,二哥其次,我最差。” 文侯甚为不解。扁鹊解释道:“我大哥不等Bug出现就提前预防了,所以没啥存在感,裁员的时候最早就被优化了。二哥在Bug出现时就顺手解决了,所以名声传不出技术部门。我呢,每天像打地鼠一般到处救火,所以在公司没人不知道我。
什么是优秀?
优秀就是好。比别人强就是好。
在百度工作的时候,我们都是代码熟练工。每天就是做无穷无尽的需求。我们的工作就是需求评审,方案设计,技术评审,代码实现,测试上线,回归验收。或者是写数据报表,架构优化,服务拆分。PM源源不断的产出需求,RD的代码写的又快又好,这就是好程序员。
那时的我,真是纯纯脑瘫啊。因为当你把自己认为是一个程序员的时候,你就已经输了。
首先,正常人都不会想敲代码。原因很简单。敲代码这件事本身就很反人类。很枯燥。乏味。和社会接触的比较少。想敲代码的人是极少数的。即便在国外,这帮人也被称为nerd,是没人瞧得上的一帮人。进了这一行就像和尚进庙,关门念经;人会逐步丧失社交能力,不如同龄人能说会道、会来事。
其次,对于老板们来说,程序员就是一帮在复杂机器上执行难懂操作的人。老板不会关心你是怎么把代码敲出来的,老板只关心你能不能把事情做成。另外,老板们不喜欢不确定性,不希望某个人是不可替代的。老板就希望你变成螺丝钉,能够完全控制你。所以,整体的价值观导向就是这样——简单可依赖,就是希望你当好一只牛马。
第三,程序员很会造轮子。你掌握了很多平台的使用,代码的优化,但是这些并不是知识,只是门槛。如果你换了一个业务,一个语言,这些东西便通通没用了。就像java八股。能整理成文档、流程化的东西,都算不上是核心竞争力。敲代码,不是靠意志、理想或者信念就能解决问题的。需要找到正确的解决问题的方法。否则,付出的劳动便没有意义。也就是白白的盯着电脑,失去你的头发、视力和颈椎的健康。
所以,当你想更多更快的敲代码的时候,这说明你的精神已经不正常了,已经被洗脑了。程序员的生活在正常人的眼里就不是正常的。互联网公司把这样一帮不正常的人聚在一起,这种群体的精神病就变得难以发觉了。这就是职场驯化。
最后,就我认识的程序员来说,尽管大部分程序员都比较单纯善良。但是都具有以下一个或多个特质:
- 头发稀疏,秃
- 沉默寡言,像死人一样
- 抠门吝啬,喜欢穿参加活动发的衣服
- 单纯死板,情商较低
- 体型肥胖
- 心理变态
- 性别混乱。男的很娘,女的纯爷们。
真正的高富帅是没有人会当程序员的。就我个人而言。就算年薪百万,我也绝对不要变成油腻肥胖的秃头老汉。对我来说,刚工作这几年,敲代码,是探索世界的一部分。我一定不会永远从事这样一线的编程的工作。
综上所述,优秀的程序员本身就是一个悖论。当一个程序员足够优秀的时候,他必须超越程序员,进化成其他的形态。
即便你不愿意超越,程序员也会被自然淘汰。只有25-35之间的这帮人能保持旺盛的精力和活跃的思维。35岁到40岁的这些职场人士,如果职位做不到中层,人力成本是很贵的。把你优化掉,雇佣那些刚毕业的年轻人,对公司是更优的选择。他们更有体力,也更听话,执行力也更强。很多公司裁员时,第一考虑的就是中年的中低层职员。
所以,核心问题是,我们作为程序员如何进化?程序员进化后的下一个阶段是什么?
说实话,我也不知道。但是我可以说一下自己的理解。
第一,让自己创造更多的价值。代码是有价值的。但是代码的价值和平台是绑定的。除非你主动做一些有影响力的事情,否则编程大部分时候都是在拧螺丝。
不要成为代码熟练工。编程跟搬砖是一样的,都是学习实施的细节。一旦外部环境变了,原来的实施细节就没用了。
当代编程由于层层的抽象和封装,我们已经不必接触底层真正具有通用性的知识了。大部分时候,所谓编程就是在写某个抽象层的配置。
大部分的工作就是表设计、接口设计、内部逻辑的拆分。工作会逼着你成为CRUD程序员。而你的目标是脱离CRUD程序员。
第二,关注前沿技术和瓶颈。代码是有技术含量的,技术是可以造富的,我们需要朝着技术的风口。
成功的人生是螺旋向上,从会一件事到会多件事。
第三,转职。从初级码农到高级码农的道路上,都会经历一次转职业。要么是从架构、工程、数据等等等技术的细分领域中选择一项,成为技术大牛。要么是转管理。
管理:世界需要领袖。难点就是人际斗争、玩弄权术。可能会失去自己的生活。
高工:在数据/前端/架构/工程/领域,或者某种语言,有自己的特别深入的理解。在自己的方向上做到最强。让自己不可或缺。包括不限于写只有自己能懂的代码,做自己独特的设计。
不要什么技术都懂一点,但是哪一项都不精通。
如果你什么都会干,前端、后端、数据库、服务器管理都能上手,那么哪里缺人手,就会让你顶上去。但是,一旦遇到疑难问题,又指望不了你,因为你不是那个方面的专家,解决不了。
反过来,你精通某一项技术,其他都不懂,公司反而会觉得你更有价值。因为你可以把这个技术做得很深,克服技术难点,超过竞争对手,所以你的晋升会快得多。
但是,高工之路也是一条痛苦的道路。因为简单的事情都被人做了,一般的设计人们都理解了,剩下的技术点一定是非常晦涩难懂的。
你能在某件事上赢过别人,原因很可能不是你比他强,也不是你比他更热爱这个事业,而是你比他更抗打击。生活虐你千百遍,等到别人都放弃的时候,你还没有放弃。
第四,未来的大方向:程序员的自我革命。做项目需要的编程的工作量一定是越来越少的。不要自我感动,而是看自己真正的从头到尾完成了多少产品功能。把自己想象成一个创业者。
技术的方向
技术是无穷无尽的。当你的时间是有限的时候,什么样的技术是值得学习呢?
我觉得有这么几个原则:
- 效率高。省钱。比如golang。
我面试字节的时候,字节的面试官给我科普过一些Golang的好处。包括以下几点:- 高效。节省服务器的资源
- 语法简单,容易学
- 支持真正的微服务。微服务不仅仅是代码模块的划分,更包含流量控制、服务切换等等。
- 编译语言。很多bug在编译期间就能发现,不容易出问题。
- 社区资源丰富
比如Java。没有人会因为选择Java被指责。当然Java现在已经是一片红海了。不推荐。 - 前景广。能做的事情多。比如python。
技术的终点
码农到底有没有出路,是不是青春饭,能不能永远做技术?
很遗憾的说,目前来看是不能的。按照互联网公司的调性,361的设计,不论是什么级别,每年总是会有10%的研发会被砍掉。你能保证自己总是在前90%吗?
凡是一万小时定律以内的,都不算核心技术。每门技术有它的门槛。每加一层抽象和概念,就能筛选掉一波人。如果你做的事情不难,那么你很容易被替代;如果你做的事情很难,那么它可能只是很复杂,也不一定足够的有价值。
一般来说,技术很难成为业务的瓶颈。目前互联网公司的壁垒是什么?很难说是技术上的优势,往往是已经建立起的垄断优势。
除非你领先别人一个时代,有很多天才的概念和创造,否则只能搬砖。
最后更新于 2024年4月8日 by qlili
程序员的优点:
我练拳击的时候,曾经和一个初中生对打。打之前我还想下手轻点,打完后发现这个初中生能把我打死。于是我得到一个道理:看着相似的两个人,一个经过专业训练,一个业余爱好,实力差距有天壤之别。
作为一个程序员,我们每天做的思维训练是很重的。因为我们每天思考的都是机制性的、深度、复杂、精细的问题。这就导致我们的思维又深又快。像一把利刃一样。
就业方向固定+流动性差+市场小=教出徒弟饿死师傅
面向老板编程:只做对升职有利的事情。给领导、PM、有话语权的人留下好印象。任何没用的事情全部不做。
人的能力是有限的。但是知识是无限的。有多少东西是你的核心竞争力,是网上找不到的?有,但不多。你真的不可替代吗?无非就是你的人力比较便宜罢了。
很多人压根不需要懂你这些狗屁技术,更不需要考虑所谓的前程。
皇上不需要知道如何能耕出漂亮的田,更不需要懂如何挑种子,天时节气。
你引以为傲的求生技能,美其名曰吃饭本领,人家已经活得开心自在何苦再委屈自己。
不要在自己的轨道有那么点领先就沾沾自喜,优越感爆棚。
过好自己的生活,追自己想要的东西就好了
重新规划管理方法,物尽其用人尽其才就好
再好的程序员,能力也是有上限的。
开发者可以合理维护的项目数量,可以看作是他们的”承载能力”。如果你的负荷超过了你的承载能力,你维护的一些项目就肯定会死掉(表现为年久失修)。
问题是开发者对自己的承载能力,是没有感觉的。他们总是会不自觉地接受新项目,所以我们才会有这么多不再维护的老项目。
TODO
什么是工作中的脏活 累活?
对未来的职业生涯有没有帮助?
对加薪升职有没有帮助?
TODO 谈谈 老板 总监 经理 高工 员工 之间的博弈关系
& 产品 研发 运营 之间的博弈关系
兵无常势,水无常形
二十岁进入工厂流水线人生真的会废掉吗? – 知乎
https://www.zhihu.com/question/423630816/answer/2611998474
对技术的追求和热情
业务比较容易理解
不像是数学或者科学 一个函数对应固定的逻辑
对于热爱这一行业的人来说,它依旧很难。
职场驯化