守得云开见月明。
程序员是做什么的
抛开不实的高薪光环以及加班秃头等不良形象,就从一个纯职业角度来看,程序员是一个手艺活:
-
通过逻辑、设计和表达来构建和创造动态可变的软件系统;
-
需要大量智力活动(即使是作为最基本的新生代农民工),持续学习和好奇心,保持 Smart 和 Agile 的工作状态;
-
需要大量的投入和开阔的思维,其中以逻辑思维和抽象设计思维为重;
-
如果你有艺术家的追求,可以代码如诗;如果你有侦探头脑,可以代码如小说;
-
如果你善于借鉴,你将有无量前途,因为工作所需的绝大部分问题的求解别人都已经做过了,甚至有相当量的代码可以直接参考;
-
喜欢它的人能得到许多乐趣;不喜欢它的人难以忍受。
国家已经为程序员群体正名: 新生代农民工。对比一下:
面朝黄土背朝天,一生只祠锄头事。
日晒雨淋不畏难,盼有一年秋收来。
面朝屏幕背靠椅,惟有击键万般高。
八哥需求辗转修,为有新品奉万家。
程序员的能力与实力
近年来,随着大量人员涌入 IT 行业, 996、中年危机,各种词汇甚嚣尘上,甚是热闹。知乎上,“程序员的悲哀是什么”、“感觉中国程序员的前景一片灰暗,是这样吗?”各种奇奇怪怪的问题。那么,究竟真实情况如何?该如何面对呢? 我个人的想法是:
中国软件开发在经过一番野蛮生长之后,一定会越来越注重质量和品质。而那些持续注重品质的程序员会迎来春天。
未来的几十年,将是程序员逐步占据社会舞台的几十年(国家为程序员正名就是例证)。我毫不怀疑:接下来,仍然是程序员的“白银时代”,也将是中国程序员的白银时代。
但是,首先要配得上“程序员”的称谓。并不是每个能写代码的人都配得上程序员这个称号。
这是我多年开发提炼出来的程序员能力与技能图:
虽然程序员戏称码农,IT 民工,新生代农民工,但它真的是一门专业性很强的职业。并不是上个培训班就能真正登堂入室的(入门可以)。
一个高级程序员,具备的并不仅仅是编码能力,而是极强的理解力、结构化思维、系统与全局思维。由于程序员一开始接触的就是人类当前最先进的生产力工具和最前沿的技术思潮,他在思维认知上不存在上限;能持续做三至五年的程序员,在智力和技能上也不存在任何问题,只是在资源上有所匮乏。这样的人即使不做程序,也能快速领会现实世界里的那些规则。至于能做到什么程度,就看个人造化了。
因此,我想首先说的是:真正的程序员可以成为什么样子。他并不局限于一个职业称号。很多人被这个称号所迷惑,以为程序员就是写代码的。这是很狭窄的看法。就像从一口井去看程序员这个职业一样。
程序员职业三阶段
初始期
一定要打牢专业基础,广泛学习各种经典技术书籍,掌握计算机组成、数据结构与算法、操作系统、网络、数据库、编译原理等基础课程,培养良好的编程风格和编程习惯。这些不一定立即能获得回报,却是软件开发领域的基石,可以增强对技术的理解和领悟能力,决定了一个人能抵达的技术上限。
比如我忽视了 编译原理的学习,在学习和使用calcite 做项目就感觉困难重重;网络学得不好,理解 docker 网络模式就很难。
基础打不扎实,反过来也会限制一个人只能做低含量的事情。很多人觉得工作中都是些 crud 的事情,却没有意识到正是因为技术能力没有达到一定高度才没有能力争取到做高技术含量的事情。这里的因果可能是反着的:不是需要用到了才去学,而是先学到了才能争取到机会去用。
发展期
需要努力学习和实践各种具体的技术,在项目中提升实战能力和经验,提升综合能力和素养,建立缜密的逻辑思维、抽象设计思维、结构化思维、系统与全局思维,提升理解力、思考力、总结力、表达力、资源整合力、风险意识,探索和领悟技术与设计之道,同时,也要广泛学习写作、项目管理、产品设计、经济思维、心理学、理财、商业模式等非技术领域的思维和方法。这一阶段需要打造未来进可做管理、退可适应广泛领域的资历。
成熟期
在对程序员职业建立全景式的理解、具备丰富充分的项目实战经验、具备从项目管理到架构设计、技术专研的基础能力后,需要选择一个有前景的行业领域,深入钻研这个行业领域的一切东西,保持开放与好奇心,领悟事物之间的关联,建设服务能力和贡献社会价值,从社会价值的角度来思考自己的价值,构建职业之途。
程序员的职业前景
说了程序员的能力和实力,程序员职业的三阶段,再来说说程序员的职业前景。
事实上,职业前景往往是综合因素的产物,并没有所谓的单纯的职业前景。职业前景往往与行业紧密结合在一起。一个互联网行业的程序员,往往比一个化工行业的程序员更有前景(钱景)。
高级程序员真的不如两个初级程序员?
一个常见的说法是:两个初级程序员加班就能比得过一个高级程序员的价值,因此与其花3w 聘用一个高级程序员,不如用 1w 聘用两个初级程序员。
这样的说法对,也不对。两个初级程序员 != 一个高级程序员。确实,从工作量来看,两者是基本等同的,甚至前者高于后者;但从维护成本来看,两个初级程序员做出来的东西可能会反复修改,导致后续资金不断投入到原有功能的维护中。但高级程序员是有能力一次性做干净的,减少后期维护成本。而后期维护成本往往是长生命周期软件开发中占大头的成本。此外,遇到疑难问题,两个初级程序员只能打酱油,最终还得高级程序员来解决问题。
只不过,过去属于野蛮生长期,资本的目标是尽早占领市场,享受行业红利和人口红利,因此,两个初级程序员的价值高于一个高级程序员。但在存量时代,由于大家都必须想办法把东西做好,才能赢得用户的青睐,因此高级程序员的价值才会凸显出来。我相信这样的时期一定会到来。资本是很聪明的,他也一定会意识到这个最基本的道理。
任何一种观点都有其合理性,但一定有其适用性。这样,就需要判断形势,再结合自身技能去做事,而不是埋头做事。判断形势很重要!
内卷?
这个问题,我觉得很大程度上是综合因素导致,与中国特定的软件发展水平、供需比、程序员的技术水平都有关系。
- 中国整体软件水平还停留在比较低端的 APP 时代。 APP 时代是求量求快不求质,对高级软件技术的需求不旺盛;
- 低端工程师的供应量大大超出需求量,导致一两年的程序员要具备三年程序员的技术水平才能在众多同行从业者中脱颖而出。
如果一个行业或职业的供应量低于需求量,或者与需求量基本持平,那么,这个行业或职业的人并不需要复杂的技能,在平均工作时长下就能获得比较好的收入。或者说,具备了复杂技能的人总是能获得更好的收入。这就是“行业红利”,一个行业在成长期和高速发展期给人们带来的收入红利;而当行业进入成熟期或衰退期,如果供应量大大高于需求量,那么就可能需要具备更复杂的技能才能获得平均水平的收入。这是经济规律决定的,这种力量的体现远高于程序员个体的技术水平所能左右的。拥有更佳的技能水平诚然不错,而时机也尤为重要。在合适的时机切入合适的行业也很重要。事情总是由多方面的综合因素而导致的,而不能仅看某一个维度。
所谓的“人口红利”,不过是一把双刃剑,给部分人带来了红利,但对于更多人呢?带来的是无形的职业竞争压力。
35岁危机
35 岁是一个很重要的槛。作为一种技术淘汰筛选机制,它是有存在意义的。一些三五年甚至七八年的程序员只是多写了几年代码,缺乏思考、积累、沉淀和提炼,缺乏系统全局的思维视角。很难通过 35 岁这个槛。
但我非常不赞同知名企业直接禁招 35 岁以上的程序员的一棒子打死的策略。知名企业本身很有影响力,但他们滥用这种影响力,这种招聘策略会带坏中国软件产业的氛围。由于赶超西方国家,中国的软件质量水平本来就参差不齐,就像一根还没有充分成长的小苗一样。缺乏富有经验的高级程序员带队,很难想象这棵小苗会长成什么样。它是否能茁壮长成大树,还是在过程中就歪歪扭扭最终枯萎,这是个很重要的问题。中国软件质量水平要想提升,要想作出中高端工业级软件,非得高级程序员带队不可。
为什么程序员有这种忧虑呢?因为程序员是一个新职业物种。这个职业物种很新,中国第一代第二代程序员也就 35 岁到 45 岁,几乎没有什么职业样板可供参考,加之国内软件环境一开始就没有规范,野蛮生长,导致诸多困惑。但随着第三代第四代更多代程序员踏上社会舞台,程序员将逐渐成为一个普遍被接受的职业群体,程序员的职业前景才会真正明朗起来。市场也会逐渐冷静下来。
如何应对 35 岁危机? 与其忧虑,不如起而行动。
找到人生的大目标,确立人生的下一阶段目标; 探索合适的策略和方法,勇敢面对和解决问题,提升综合实力和背景。
守得云开见月明。
程序员的出路在哪里
很多人都没耐心做几年程序员就担心这担忧那的。没搞清楚自己的价值在哪里,怎么才能更好体现。不去计较自己在技术和能力提升上投入了多少,却把精力耗费在这些担忧上。
编程技能,无疑是通往信息化智能化时代的关键钥匙之一。但这把钥匙怎么用好,是值得深思和探索的问题。目前我们很多人的用法,只是把这把钥匙作为资本实现目标的工具,无怪会产生各种消极的想法。
我是一位 8 年的 Java 工程师,这并不意味着我只会写 Java 代码,只会写代码,—— 我还会写文章哩! 哎,码完代码码文字,人生真苦!
称呼不过是个称呼,人应当是完整的人。
我可以带项目、可以带业务线,可以带新人;比我还牛逼的程序员还懂商业、产品、业务、行业、政策,懂得怎么做才能让企业效益更大化。
很多程序员的问题在于:看问题太单一。刚开始觉得技术为尊,做到后面发现技术只是占一部分比重,开始怨天尤人。看到一口井,就觉得看到了天空。问题在于:一开始心态就没调整好,视野有局限性(当然我也不例外)。
从一个产品或品牌的角度来看自己。如果一个程序员的基本服务是写代码,那么他一定是靠增值服务来挣钱的。很多成熟互联网软件都是靠增值服务来赚钱了,没有一个单靠写代码就能挣钱的。看看 360行,哪个职业不是要身兼数技之长?难道程序员就可以例外?有非常之多的维度可以横向拓展。遗憾的是:很多程序员一方面不愿多思考和拓展自己的非技术能力(甚至还觉得非技术能力没有必要,还有抵触情绪,我也有过),另一方面又害怕在技术上多投入精力得不到相应回报。哪有那么容易的事呢?人家干股票的还有承受倾家荡产的高风险呢!既想要保住铁饭碗又不愿去拓展新的途径,出路就只有死胡同:技术出路上被堵死,其它出路又看不到希望。
我是36岁程序员,至今还在写代码,刚开始担任小组组长。为什么我迟迟不转管理?每个人都有自己的衡量。并不一定是能力不够,而是时机或者自己的心态还没到那个时候。为什么我现在要做一点管理?因为我觉得自己比较喜欢的职业状态是六分交流四分技术,或者是四分交流六分技术,两者相得益彰更好。通过大量阅读,我看问题的视野已经比之前开阔很多了。相比人类的所有领域的智慧结晶,程序技术只是计算机科学这树上的一个小分枝,而计算机科学只是整个领域的一个小分枝。而且我也做好了“舍小我取团队”的心理准备。
我不会放弃技术,但技术并不是全部。一个人在技术做到一定程度,一定需要寻找新的途径来拓展(T型人才,X型人才)。请记住:沟通能力、组织能力、资源整合能力,非常重要!与技术能力同等重要!有非常、非常多的维度可以去拓展,只要花时间去想、去做!
我自己也做得不够好,到比较晚的时候才意识到这些。但我觉得,心思单纯一些,做事靠谱一些,天下哪有不容身之处?如果这样的人都没有容身之处,那这个世界也不值得待下去了(跳湖、跳江、跳海,卧轨,请任选一种)。
(待在这个世界有什么益处?声色之味,躯壳之劳。色即是空,空即是色。离合聚散,因缘生灭。一切都会消逝,了无痕迹。我们不过是这个世界上一抹浅浅的终将被抹掉的印记)
选择、专注、努力;少想些有的没的,想也没用。实干才是上策。
阶层逆袭的职业?
最后我想说的是:我来自一个很普通的家庭(没有背景、家底很薄,父母都是做小生意的个体户),我个人资质也很普通。但凭借八年写程序的努力,在武汉买套房,没有向父母要钱,没有向朋友借款。
当然,我的建议是:如果你想回老家发展,一定要在老家早点买个房,打好基础,然后在外面工作几年。用外面的收入回老家过年。
我在买房这方面很迟钝,上车很晚。花费多几倍的代价才上车。因为踏入社会时几乎没有财富的意识。只知道埋头干活,错过了最好上车时机。希望大家不要重犯这种错误,尽早找到安身立命之处。
财富投资意识也很重要!一个缺乏财富意识的人,也不要奢望自己能够把握住时代给予的机会。
所以,如果不愿去了解技术领域外的世界,就不要埋怨人家不理你。
程序员只是一个普通职业。要想有前景,有钱景,更多还是靠自己的领悟和审时度势,与程序员这个职业无关。
一个背景普通的人,做好程序员这个职业,至少能比之前的境遇好很多,但它并不能帮你实现阶层逆袭。
生活从不容易;要在社会大潮中仔细掌好人生的舵,努力谨慎前行。