ITPUB

程序员从幼稚到成熟的标志是什么?

今天在知乎上看到这样一个问题:"程序员从幼稚到成熟的标志是什么?"
Image

问题地址:

https://www.zhihu.com/question/642449547

回答

整理了几个不错的回答,分享一下。

苏州de酱醋茶的回答

刚毕业的时候:这谁写的屎山?这么垃圾?我要重构!!!在重构中学习,成长!!!

现在:虽然这个代码确实挺屎,但是万一写这代码的哥们当时加班很猛,被催的很急呢?啊呀,屎山,人之常情,算了算了,我写个拓展方法,搞个拓展类库迁进去吧,重构就算了!

Tony He的回答

“与垃圾代码和解”

老胡聊Java的回答

1、意识到写代码无非就是调用接口api,做业务无非也就是抄些增删改查的现成代码。也就是说,编程没想象中那样高大上,也就是谋生的一种手段。

2、知道提升能力不是单纯靠学,而是得靠解决实际问题。比如在做项目时,提升技能的最好方式是,去解决些值钱(比如分布式高并发或devops等)方面的问题。同时更知道,单纯做增删改查的业务,其实顶了天也只能算个初级开发。

3、知道其实在做项目的过程中,写代码的技能相对来说是比较不值钱的。比较值钱的技能点是,排除解决问题的能力,确保项目高质量的能力(即测试能力),运维项目的能力(比如容器和devops),组件的使用能力和配置安装分布式或微服务组件的能力。

4、知道在自己领域,哪些技术比较值钱,同时更知道,如何在面试中证明自己的技能,更知道,在下次跳槽时,自己该去哪些类型的公司,知道该如何要到更高的薪资。

5、知道衡量程序员能力和水平的标准是薪资+公司,在公司都差不多的情况下,谁薪资高谁能力强,在薪资差不多的情况下,谁公司好谁厉害。这话另外一层含义时,在跳槽时,对方公司衡量程序员能力时,第一看之前公司的规模,即大公司背景,第二看薪资。随后再通过面试看技术。

6、知道公司的领导在给自己提建议时,出发点大概率是为了公司好和为了项目组好,在此基础上顺带会给些对自己有帮助的建议。这种情况下,对领导的话是会有选择性地听。

7、知道不少公司领导留人的方式不是靠加薪,而是靠画饼。更知道,如果在同一家公司,每年涨薪顶多1成,而且还得使劲加班,同时如果是跳槽,涨薪3成都算低的。

8、知道在面试中证明自己能力时,不能单纯靠自己做过什么,也不能靠自己学过什么,而是靠自己能靠说证明什么。比如能在面试中,通过说自己解决过的值钱技术方面的问题,能证明自己在这方面的能力,至于自己是否做过,面试官很难核实。

9、知道程序员要过大龄这道坎,不是靠技术,而是靠公司,即得找个能容纳大龄程序员的公司,而一些小公司,对大龄程序员可能未必友好。

10、知道身体比挣钱重要,知道家庭比工作重要。而程序员这个职位,只是提供了用加班用艰辛换取高薪的机会。

11、知道有些公司,尤其是小公司外包公司,仅仅是过渡,在其中不应该呆过3年。别看其中的领导信誓旦旦或者宣扬狼性,但可能他们自己都知道,自己的业务线甚至是公司未必能撑多久。

12、会越来越感受到,大多数代码、框架乃至和技术相关的东西,其实都是虚的。当然一些高端技术(比如当下的大模型)不能说是虚的,这能实打实挣钱,但一般程序员接触不到这个层次。做到后面就会发现,再要进一步挣钱,首先得看人脉,有人脉才有渠道接单,业务量大了才能有所谓的盈利模式,有了盈利模式才能进一步雇人做大,所谓是扩大再生产。

13、比较成熟的程序员具备复制别人成功模式的能力。举例来说,比如某Java开发当下只会增删改查,但他能通过观察组内的资深架构平时干了什么事情,解决问题的过程,通过多问多复盘多实践,慢慢把人家的本事学到手,然后提升自己的能力。

14、再进一步讲,成熟或者说资深的程序员,更具备从各种试错过程中找到正确方向的本事。比如当下某人的外包公司,接触到的技术天花板是单机版的增删改查,所谓的组内大牛也只是熟悉业务。这种情况下想进好公司,比较成熟的程序员一般能通过尝试,知道怎么写简历怎么找猎头能拿到大公司的面试机会,再进一步,知道在当下技术储备不多的情况下,经过各种无效学习的试错,知道如何掌握大公司面试所需的技能,再进一步,经过各种面试的尝试,知道该如何面试成。

15、做久了以后,知道做项目时应该用最安全的方式修改bug,而设计模式和重构之道之类的理念,只是存在于教科书,而且只会在面试时用到。这句话更加通俗的说法是,在当前系统修改bug时,不该看的代码不看,不该了解的代码不去了解,不该碰的代码不碰,一旦看了了解了碰了,改出问题,责任就是你的。而且在改牵扯到多方的疑难bug时,一定得拉上领导或相关人。

16、在面试场景,知道证明自己用过某个技术的方式是,说业务场景和API细节。这块具体展开下,比如在面试中要证明自己做过机器学习,可以先说项目里引入机器学习模型的场景,再说用过哪些模型,其中的api接口、语法和配置细节是什么样的。而且同样是在面试场景,证明自己能力的方式不在于说自己做过哪些业务,而在于说自己排除解决技术问题的方式,解决过的问题越值钱(比如含高并发机器学习或AI)那么面试官只能相信你的能力。

17、顺着上一点和第8点继续说下去,在面试时,比如求职者有3年公司经历,那么应该就有3年Java(或Python或其它技能)的项目经验。这种情况下,如果求职者通过业务场景和API说技术,再通过说解决过的问题证明能力,面试官只能相信求职者的能力。一些会面试的求职者,2,3年跳槽一次,每次薪资涨个3成,或者以此进好公司,这其实不是难事。回到主题上,较为成熟的程序员都知道一些面试技巧,而比较幼稚的程序员,面试时只说自己项目做过哪些事情,更只会通过做业务证明自己的能力,这样的跳槽和面试的能力是有待改进的。

18、较为成熟的程序员一般给人的感受是,面试时,被普遍认为能力强,因为具备足够的面试能力,刚开始进项目组时,会被认为很菜,但很努力,因为接触到了更值钱的技术,而之前没接触过,所以很菜,但在新环境里能通过努力高效学习。过了一段时间,这位程序员能在解决问题、沟通和写ppt汇报等方面展示足够的能力,再过了一段时间,这位程序员会跳槽到更好的公司里,迭代上一次的流程。而较为幼稚的程序员则会认为,只要我能力强,能解决问题,就能在当前公司一直干。

19、在自己当下技术不高的情况下,知道如何最大程度上变现自己的技术,因为成熟的程序员都知道,技术不能当饭吃,生活还得靠技术变现得来的钱。

20、这甚至已经可以作为“老油子程序员”的标志了。知道解决哪些bug能给自己带来收益,知道解决哪些bug,虽然对项目有帮助,但牵涉到一些人或一些事,未必会对自己有帮助,知道项目里的哪些bug应该报出来,但不应该立即着手解决,而应该开会找相关人讨论,知道项目里的哪些bug,甚至都不应该报出来。

ps:经历一次裁员,绝对能让程序员从幼稚到成熟。

李峰的回答

绝大部分的程序员根本到不了成熟期,他们很快就会理解代码只是用来实现业务,功能不过层层调用API,认识到写代码不过CRUD的机械重复,甚至写代码的时间都远不及沟通测试线上救火。意识到原来自己不过是业务的吊线木偶。
虽然说更加贴近业务,更懂得与团队沟通,懂得取舍和权衡。有很多很酷的技术想去学习,无奈没有足够的时间,学也只是学个皮毛,也不能学以致用。从一个技术极客变成了业务流水线上的螺丝钉。
大多数的程序员就停留在这个阶段,他们后面的道路有3条,转型业务,管理,或者ppt架构师。无论是哪一种都宣告着技术生涯的终结。

Studio TBsoft的回答

快50岁的前码农(现在偶尔也当码农)随便说⼏句,想到哪⾥说到哪⾥,不⽤太当真:

1、不要认为⾃⼰学习付出最多的技术就是最好的技术,这实际是“输不起”⼼态。当年的DOS汇编语⾔开发如此,今天的各种框架也是如此。 

2、没有什么技术和⼈是不可取代的,知乎上“裁员裁到⼤动脉”的故事很多是某些技术⼈员臆想出来的爽⽂,当真就上当了。 

3、有些开发,做出来的系统是要负责任的,例如工业软件开发,某些行业软件开发等,出了致命Bug,出了大事,不是损失钱那么简单,负责人和主要责任人滚蛋、赔偿都是轻的,进去几个人不稀奇。

4、⼀⽂钱真能难倒英雄汉,⽤爱发电和理想主义不可能⾛远,带兵先筹饷才是正理。

5、不要乱堆砌所谓的新技术,需要负责任的系统开发优先选⽤经过多年考验的成熟技术,尽量不要使⽤近⼏年,甚⾄近10年内的所谓新技术。 

6、开源通常意味着在具体业务场景出现问题时无法提供有效的技术⽀持和服务,开源软件和框架在⼀个具体的应⽤场景中,需要经过⼏年⽅案整合、磨合和改造,如果要有质量的快速上线,宁愿使⽤商业软件⽅案,在预算时把正版商业软件的成本算进去。 

7、互联⽹软件和开源软件可以⽤快速迭代新版本的⽅法代替传统软件⼯程中的α、β1、β2等测试, 甚⾄可以简化单元测试 ,但需要负责任的软件开发可以说是千万不能这样做。 

8、到了⼀定层⾯,搞好⼈际关系在哪⾥都重要,没有哪⾥真正不需要处理⼈际关系,包括国企⺠企、国内国外,如果真碰到了不⽤处理⼈际关系的“理想”环境,这种环境中的⾃⼰⼀般是可以随时被代替的螺丝钉。 

9、勿妄⾃尊⼤也勿当舔狗,⼩利勿争但⾃⼰必有底线,关键是尺度把握。 

10、程序员思维在现实⽣活中经常会处处碰壁,因为简单的线性计算模型 ,即便算⼒再强,也不能真正处理复杂系统。程序员思维只能⽤在技术上。 

11、建筑⽼板可能是砌砖出身,煤⽼板可能是挖煤出身,但不是砌砖⼜快⼜好就能当建筑⽼板,不是挖煤⼜多⼜快就能当煤⽼板。同样道理,IT⾏业⽼板是码农出身的不少,但不是只精进垒代码的⽅法就能当IT⾏业⽼板。 

12、当⼀个⾏业不赚钱甚⾄做不下去的时候,怀念和不满是正常的,但躺平和内卷是终将⽆济于事的,沉浸幻想甚⾄破⼝⼤骂更是⽆能的。积⾕防饥,拒绝过度消费主义和某些智商税,居安思危, 早⽇筹备迎接新机遇转型。时代⻋轮滚滚向前,⼏乎从未怜惜过被抛下者。

教父Kim的回答

1. 身体最重要,其他都是浮云

2. 商业逻辑>管理逻辑>技术逻辑
3. full picture>具体技术要点
4. 沟通能力>coding能力
5. 存在的就是合理的

6. 时间是最昂贵的,空间是白菜价

EagerToLearn的回答

做到心中无码^_^
个人成长经历:工作第一年,喜欢研究语法。工作第二到五年,喜欢研究框架源码,设计模式,clean code,test driven。工作第五到八年,系统架构,云计算,微服务,大数据,机器学习,开源,算法。如今工作十年多的我,开始思考投入产出,风险收益,商业模式,创业,产品。
有段时间痴迷于刷leetcode,系统设计,想想时间成本高,收益低。如果把自己局限在一个资深搬砖工,有点不值,未来也不想往首席搬砖发展,职业风险太大。

至于当下的代码架构,能用就行,我要卷卷回报更高的赛道。

Image