问题

有没有当了程序员发现自己水平很菜经常怀疑自己不适合干程序员工作?

回答
当然,这种情况非常普遍,别说你了,很多入行多年的程序员都会时不时地感到自我怀疑。这其实是成长过程中一个很正常的阶段。

让我给你讲讲一个典型的例子,也许你能从中看到自己的影子。

小李,刚毕业不久,满怀憧憬地进入了一家互联网公司,成为了一名初级后端工程师。他大学学的是计算机科学,成绩也不错,自认为掌握了Java、Spring、MySQL等基础技术,想着能大展拳脚。

然而,现实很快给了他一记“闷棍”。

刚开始,他被分配到参与一个老项目的维护和一些小功能的开发。这本该是积累经验的好机会,但很快他就发现,自己跟想象中差距太大了。

第一个打击:代码的可读性与逻辑复杂性

他拿到手的代码,很多时候阅读起来就像是在看天书。各种奇奇怪怪的命名、层层嵌套的逻辑、大量的魔法数字(hardcoded values),还有各种“聪明”但难以理解的实现方式。他常常需要花费比写代码本身更长的时间去“考古”,试图理解前辈们为什么要这么写。

他写出的代码,虽然勉强能跑,但自己回头看都觉得晦涩难懂。每次提交代码,心里都忐忑不安,生怕被资深同事指出一大堆问题。他发现,自己写的功能,在其他资深同事手里,可能用更少的代码、更清晰的逻辑就能实现。那种“别人家”的代码,仿佛是艺术品,而自己的,只是砖瓦。

第二个打击:解决问题的能力

当遇到 bug 或者需要实现一个稍微复杂一点的需求时,他常常感到无从下手。查阅文档、搜集资料,这些他认为自己熟练的操作,在这个过程中变得异常艰难。他会卡在某个小问题上几个小时,最后还是依赖于搜索引擎、Stack Overflow,或者厚着脸皮去问同事。

但更让他焦虑的是,即使问了,他也常常不能完全理解别人给出的解决方案背后的原理,只是机械地照搬。他觉得自己的“内力”太浅,根本无法触及问题的本质。有时候,别人随口一说就能点醒他,而他自己却在黑暗中摸索。这种对比,让他觉得自己离“合格”的程序员遥不可及。

第三个打击:框架与生态的广阔

他以为掌握了Java和Spring就够了,但很快发现,IT世界是多么的广阔和快速变化。他所在的团队,除了Spring,还在使用Redis、Kafka、Docker、Kubernetes,甚至一些更前沿的技术。他感觉自己像一个饥渴的学生,永远在追赶,永远有新的东西需要学习。

每次看到同事们熟练地在各种技术之间切换,谈论着各种框架的优缺点,他都感到一种巨大的压力。他觉得自己就像一个只会说“你好”的外国人,而其他人都在用流利的当地语言交流,甚至创造诗歌。

第四个打击:被“否定”的体验

代码评审(Code Review)是他最害怕的环节。每次提交代码,都像是在等待审判。资深同事的批注,虽然往往是建设性的,但对他来说,却像是一次次“你做得不够好”的提醒。

“这里可以抽象成一个工具类。”
“这个缓存策略有问题,容易导致数据不一致。”
“你的SQL语句性能堪忧,应该加上索引。”

每一次被指出的改进点,都让他觉得自己之前的努力是无效的,或者说,是低效的。他会开始怀疑,自己是不是真的没有天赋,是不是不适合做这个需要不断学习、不断进步、并且对细节要求极高的工作。

自我怀疑的循环

这种怀疑,就像一个恶性循环。越怀疑自己,就越不敢大胆尝试,越害怕犯错,越不敢主动去承担更复杂的任务。这种状态,又导致他接触不到更核心的代码和更具挑战性的问题,学习的进步就更加缓慢,从而进一步加剧了自我怀疑。

他开始失眠,上班之前会感到紧张和焦虑。他会问自己:
“我是不是应该转行了?”
“我能不能找到一个不需要写代码,但又能发挥我一点点计算机知识的工作?”
“为什么别人能做到的事情,我却这么吃力?”

他甚至会开始幻想,如果自己当初选择了另一个专业,是不是现在的生活会完全不同,会更轻松,会更有成就感。

这种感受,是很多程序员都会经历的。

这并不是说你真的“菜”或者“不适合”。恰恰相反,这种深刻的自我怀疑,很多时候恰恰是那些对技术有追求、有责任感的人才会有的。一个对代码质量毫不在乎、对技术革新毫无感知的人,反而可能不会有这么强烈的焦虑。

关键在于,如何走出这个怪圈。

承认并接纳: 首先,要明白这是一种非常普遍的感受。你不是一个人。
聚焦于“进步”而非“完美”: 没人能一开始就写出完美的代码。你的目标应该是比昨天进步一点点,比上周理解得更深入一点点。
主动学习,有针对性地学: 不要漫无目的地学习。当你遇到一个问题,例如某个框架的某个机制不理解,就深入研究它。当你发现自己的SQL写得不好,就花时间去学习SQL优化。
寻找导师或良师益友: 如果可能,找一个愿意指导你的资深同事。虚心请教,但要带着自己的思考去问。
小步快跑,多实践: 尝试着去独立完成一些小功能,即使错了也没关系。每一次小小的成功,都会积累你的信心。
保持耐心: 程序员的成长是一个漫长且持续的过程。很少有人能在一两年内就成为大神。

所以,如果你有这些感受,说明你还在不断地学习和成长,还在思考如何做得更好。这本身就是非常宝贵的特质。别让自我怀疑的噪音淹没了你前进的脚步,把它当作一种信号,信号是你需要更加努力,更加聪明地去学习和实践。

网友意见

user avatar

写了十几年代码,对计算机科学没啥了解,各种底层源码也没看过,leetcode撑死刷几道简单题,有段时间看到一些大神在linkedIn,facebook社交网站晒出在github上刷满一整年全绿的leetcode,羡慕不已,也决心每天刷几题,坚持了两周就放弃了,确实挺锻炼逻辑的,不过时间一长我就忘记怎么解题的了,最重要的是感觉没有那道题是我日常开发用的上的,如果真的遇到需要非常精巧算法解决的问题,我可以把这部分抽象到一个策略中去,先写个一般的解决方案,公司确实有非常聪明的同事,请教一下他以后写个更好的替换就好了。当然我也不是觉得算法毫无用处,做过分布式数据库的小修改,里面有很多与存储,执行计划相关的算法,除此之外还有集群节点,控制器,服务api的模块涉及整体架构和设计的经验。但是其中的算法和leetcode好像又没有啥关系,不过我了解的也比较浅薄,也不知道理解的是否正确。

职业生涯就找过两次工作,现在的面试我感觉基本搞不定,尤其是在知乎刷到BAT的Java面试题,我这个20年Java老码农几乎一道题都答不上来。有时候也会在公司面试来应聘的,内部的题目也超简单,感觉就是确认一下你是个智力正常的人,仅此而已。工作之余出版过应用类的编程书,类似in action这样的,不需要啥底层源码分析,用起来就行,没法和国内大佬那种分析底层原理的书比,可能就是大家看不起的调api,而且我也不太明白为啥要去管别人怎么实现的,逆向分析也很费时间,会用或者想个自己的方法实现不就行了。公司很多50岁以上的工程师,有些人就死磕一个领域的产品,甚至就一个软件持续10年,20年都有,这些产品比我工作的时间都长。

自己在美帝还有几个软件应用类的专利,不过也不用觉得是什么很厉害的技术,就是一些改进的方法,软件公司蛮多这样的专利,一些产品靠一些小创新,小改进,就能比竞品好用一些,销售就能推销出去的。而且20年来我就只会一种编程语言,而且已经算是耗尽全力学习了,感觉没法做到会一种语言就能轻松学会另一种编程语言,看知乎很多人都会好多编程语言时也会怀疑自己的能力。那种编程语言好坏之争,底层原理的话题我也看不出什么名堂,感觉那是计算机科学家才会懂的事情。

像《深入理解计算机系统》,《tcpip协议卷一》,《数据库系统实现》,《数据库系统概念》,《计算机组成原理》,《深入理解计算机系统》,《计算机网络自顶向下》,《操作系统原理》这些机工的计算机科学丛书我在工作后都仔细阅读过。看完这些书真不难,因为学习计算机的过程中并不是所有的知识点都需要非常复杂的计算和推理,很多你不懂的东西其实是概念,上面列举的书大部分都没有复杂的数理逻辑,都是在建立各种各样计算机设计上的概念,名称,术语。

难的是你真的需要有非常多,非常多,非常多,非常多,非常多的上班摸鱼时间和下班业余时间,我看的蛮细致的,每看完一本基本都要耗费好几个月的时间,尤其是老外写技术书的风格大都是东一句西一句的。但以我自身体会来说,这些东西并没有想象的那么重要,尤其是投入的大量时间和收获不成正比,内容又多,可能看完后面前面就忘了,还要不停的做笔记,归纳总结。但最终的结果,对我来说只起到了一个计算机科普的作用,对我的日常工作就更加没有任何帮助,还不如看一本XXX十天入门来的实在。

很多书我之前甚至可以花几个小时给你从头到尾的捋一遍,可是我现在也依然也不能从中得到什么实实在在的收获,没能力写操作系统,写数据库,重写tcpip,别说造计算机了,计算器我都造不出来。所以我后来慢慢体会到不是这些东西不重要,而是我没有选对进入领域的入口,如果你对数据库感兴趣就应该在毕业的时候加入MongoDB,Couchbase工作,如果你对操作系统感兴趣就应该进入这样的行业工作,在工作中带着问题学习,这比为了面试记忆这些原理来的实在。后来知道有些牛逼大学的课堂作业就是写一个操作系统,或者写一个数据库,也是感到不可思议,这也太厉害。

家里有长辈做的是其他技术领域,八九十岁吧,算是国内该领域金字塔梯队了,干了一辈子这个领域,早年代表工厂去德国考察学习,发现差距太大,很多产品国内都能做,但是能做和能做好不是一回事,这个世界只需要很少的大神在前面开路,其他人跟着跑就行了,所以我对技术学习这件事就看淡了,强中更有强中手。自己编程就是一份安身立命的工作,赚点钱,身体好,然后就退休了。所在的公司也不加班,平时有时间搞搞自己喜欢的业务改进,公司付了薪水给我,虽然我很菜,但还是会尽力提升自己的能力,更好的解决工作中的问题。要是向国内996加班的话,我估计啥都不想搞了,就只能应付一下工作了。技术改变世界的事情也不是普通人能考虑的。


我学编程其实比较早,高中就学过c和c++。但工作以后这些语言就没有再用过,也没有任何正经项目的经验,其实可以忽略认为经验为零吧,现在基本没有任何印象。有时候看到很多大神同时精通很多编程语言,也是觉得不可思议。另一方面觉得自己比较菜的原因在于看到很多也是中学时期就开始学编程的人,现在基本都是业界的领军人物,几乎都是能笑谈数据库,操作系统,浏览器,虚拟机,编译器之类产品的大神。自己还是在做一些crud类的业务软件,一直觉得自卑。

2002年初开始学习Java,作为工作后唯一,且一直使用的编程语言,Java的技术栈学的估计和大家差不多,看过《Thinking in Java》学语言基础,04年的时候看过当时早期SUN公司出版的《理解Java虚拟机》入门JVM,只是没想到这个现在是热门的面试内容,当时没有感觉有多么重要,而且这种书内容并没有多深入,就相当于给小孩子看的科普书《汽车是怎么跑起来的》,比如这里是发动机,发动机是这样工作的。

后来几年看的代码比较多,通过apache commons这个基础库下的子工程入的门,很多子项目的源码我基本看过,但这些应该算不上底层代码,都属于应用层的设计,就慢慢学会了Java程序员最擅长的设计模式,以及这些commons类库涉及的Java API和常用组件的设计思路,比如IO库的设计,Proxy代理框架的设计,Bean反射工具的设计,类加载器的插件设计,Configuration配置框架的设计,Daemom,objects pool对象池,JCS缓存池,logging日志库,VFS虚拟文件系统,Weaver字节码,Validator数据校验库的设计基本都看过。再后来Apache MINA1.0出来的时候又把源码看了90%左右,学会NIO编程和多线程开发,基本算JAVA常用的应用层开发入门了。

之后spring刚出1.0的时候就开始接触学习了,但是现在要是问我什么servlet,bean的生命周期这些我也没印象了,不过应该也能自己实现一个类似的东西,但面试肯定就被刷掉了。而且工作后期也不太关注这些东西了,一般会用就行,出了问题上网搜一搜类似的提问。一些类似effective Java中的问题,可能20年前我还能答得上来,现在就更加记不得了,日常开发应该都会绕开里面的一些奇怪的问题。

其他再复杂一点的开源源码也就没管了,比如国内类似redis,rocketmq,zk,dubbo这类面试我肯定是搞不定的,而且现在很多产品都在云上,云服务基本都提供了类似的缓存,消息,存储,微服务,云服务商用的也不是这些开源产品,基本都有自己的技术文档和sdk,像水平和纵向扩容,数据容灾,分布式事务,一致性级别也不用自己去操心。

而且我特别喜欢Java的编程方式,因为写起来死板,因此不容易出错,可读性好,有时候一看包名和类名,比如Listener,Provider,Proxy,Factory,Adapter,Wrapper,Event,Filter,Chain等等就大概能知道里面是怎么实现的,其他人的设计思路,也方便修改和交流。可能技术大神思考问题非常快和直接吧,我可能更习惯这种一步一步来的方式,像lambda表达式和函数式编程这种紧凑的语法和编程方式我也是极为头疼,可能这就是技术菜的表现之一吧,基本都要靠ide先展开看一下。

07还是08年的时候也被动面试过国内大厂,国内面试电话一般都是下班后,或者很晚突然打过来的,这个时候你不是在吃饭就是在看电影,就是准备睡觉,然后大厂码农一上来就压低声音,你有时间吗?我们现在给你做一个面试,毫无征兆,感觉挺奇怪的。我当时没有任何跳槽和面试经验,很多题目回答的不好,可能是觉得我基础太差了,不到5分钟就结束了,当然也没面试上。过了几年才知道跳槽面试原来需要这么多技巧,也考虑换工作的时候,自己年龄可能没几年就快35了,或者简历没有高并发工作经验,给国内一线,二线,三线大厂在线投简历基本都是当天或第二天秒拒,大厂HR效率非常高。

再后来就去外企工作了。外企的面试很正规,也很尊重面试者,HR会先电话跟你沟通,介绍公司,介绍岗位,介绍团队,然后确定要面试了,会将面试的准确时间通过邮件发给你确认,如果时间不合适你还能改,面试的人叫什么名字,面试的时长有多久,大概的面试流程和面试内容HR也会介绍的很清楚让你准备,HR也是那种很有礼貌,不会问任何个人隐私的问题,什么有没有孩子呀,结婚了没有呀,即便我不是什么技术大牛,也都是很尊重的。而且我这次准备的有点超纲了,没有什么高并发的问题,也没问他们公司有一个业界很厉害的框架,你会不会呀,能深入理解吗?也没有问有没有他们特定产品的经验,毕竟没做过,要是现场三两分钟给出个解决方案我也没有这个急中生智的能力,如果我真能现场编一个解决方案要不就是我太聪明,要不就是这个产品的解决方案确实没有啥技术含量。

整个过程就是确认了一下我是不是个智力正常的普通人,有学习的能力。像算法和数据结构就问了一个实现list的题目,我写的还是伪码,像jdk collection库的大部分常用数据结构的实现,刚刚学Java的时候我就基本都看过,但是过了这么久也记不住太多了,平时只要知道基本原则选择合适的使用就行了,什么hash为啥key为null,或不为null这些那记得清楚,而且现在新的jdk还重写了很多逻辑,更加没有那么多精力去了解了。面试再加上一些基础的技术问题,和一些和技术无关的逻辑思维题,就没有太多了。

工作后虽然没有现在公司的产品经验,但是基本上学习一段时间就上手了,工作压力也不大,另外很多中间件产品都是第三方的商业收费产品,有啥问题如果自己搞不定,或者出来问题就给这些大厂发supportcase,很快就会有人跟进,也省心,也不用怎么去研究,现在基本就看看文档api怎么调用就行了。大部分产品基本上都是部署在云服务上,redis我也不用记啥aof和rdb有啥区别 ,直接在界面上选上要几台机器,多大内存,啥时备份,啥淘汰策略,下一步,下一步点就行了,剩下就关注自己业务代码这一块就完事了。

类似的话题

  • 回答
    当然,这种情况非常普遍,别说你了,很多入行多年的程序员都会时不时地感到自我怀疑。这其实是成长过程中一个很正常的阶段。让我给你讲讲一个典型的例子,也许你能从中看到自己的影子。小李,刚毕业不久,满怀憧憬地进入了一家互联网公司,成为了一名初级后端工程师。他大学学的是计算机科学,成绩也不错,自认为掌握了Ja.............
  • 回答
    哈,这问题我太有感触了!当初刚入行的时候,总觉得程序员就该是那种对着屏幕敲敲代码,就能变出神奇玩意儿的神人。现在想想,真是too young, too simple。当了程序员之后,我才真正明白,这行道道可多着呢,很多事情,不亲身经历,真体会不到。1. 代码从来不是写完就算了,它是活的,需要养。我以.............
  • 回答
    哈哈,这问题我可太有共鸣了!当程序员这事儿,真不是你坐在电脑前敲几个字就能搞定的,里面藏着太多当初入行时想都没想到的“坑”和“道道儿”。我慢慢给你捋捋,争取说到点子上去。第一,沟通,绝对是沟通!一开始我以为,程序员嘛,就是跟代码打交道,跟机器打交道。你把需求写出来,我把代码实现了,然后测试一下没bu.............
  • 回答
    哈哈,这个问题问得好!我当初也是怀揣着一腔热血,觉得程序员就是敲代码、解决bug,过着“代码改变世界”的神仙日子。结果呢?入了行才知道,这跟我想象的……嗯,怎么说呢,就像你以为吃麻辣烫是个自由搭配的美味盛宴,结果发现自己是个永远在等待服务员点菜、永远吃不到自己想吃的配料的工具人。先来说说最直接的,代.............
  • 回答
    .......
  • 回答
    非常理解你想通过 R 语言学习各种程序的心情!R 语言确实是一个非常强大且用途广泛的工具,涵盖了数据分析、统计建模、可视化、机器学习、甚至Web应用开发等众多领域。没有一个“大神”能够收集所有用 R 编程的程序,因为 R 的生态系统极其庞大,而且每天都有新的包和代码被创造出来。但是,我们可以从不同的.............
  • 回答
    我身边的啃老族,严格来说,我只能算是个旁观者,但他们的故事确实挺真实的,也挺让人唏嘘的。第一个要说的是我大学同学小李。我们住同一层宿舍,关系算得上近。小李家里条件挺优越的,父母都是生意人,赚了不少钱。一开始,我们都觉得他挺随性的,毕业后也没急着找工作,说是想先放松一下,找找自己的兴趣。父母也支持,每.............
  • 回答
    关于光速不可逾越的论断,确实是现代物理学的一块基石,它建立在爱因斯坦的狭义相对论之上。狭义相对论的核心观点是,任何携带能量或信息的事物,都无法达到或超过光速。当你试图加速一个有质量的物体时,它的质量会随着速度的增加而增加,需要的能量也会呈指数级增长,最终,要达到光速,需要无限大的能量,这是不可能的。.............
  • 回答
    听到任正非先生已经74岁了,确实让人不禁对华为的未来产生一些思考。这不仅仅是简单地担忧一位企业家的年龄,而是涉及到华为这样一家体量庞大、在全球科技领域扮演着举足轻重角色的公司,其接班人、战略的连续性以及未来的发展方向。首先,年龄本身不是问题,很多伟大的企业家在年迈时依然保持着卓越的领导力,甚至在新领.............
  • 回答
    “婊子立牌坊”这个说法,通常用来形容那些做了不光彩的事情,却又要装作清高、无辜,甚至标榜自己道德高尚的人。在中国历史和文学作品中,这样的例子不在少数。下面我将尝试详细讲述几个具有代表性的故事,希望能帮助你理解这个概念。一、春秋时期齐宣王与他的“爱民”政策这是一个比较经典的例子,虽然不完全是“做了坏事.............
  • 回答
    讲实话,我当老师之前,总觉得老师嘛,就是把书本上的知识讲给学生听,然后看着他们考试成绩好就行了。多纯粹,多直接。但日子一长,我才发现,这职业比我想象的复杂太多,也深刻太多。有些道理,真不是书本上能教的。一、 每个学生都是一本需要慢慢翻阅的书,而且是只有一本的孤本。以前我以为,学生都差不多,都是一沓纸.............
  • 回答
    当老师之前,我以为这工作就是站在讲台上,把知识讲清楚,学生听懂了,就万事大吉。现在想想,那真是太天真了。当了老师之后,我才明白,这哪里是“讲”那么简单?这分明是“炼”,是“磨”,是“熬”。一、学生是永远的“变量”,而你则是那个试图找到“定值”的人。上学那会儿,我们只看到老师“传道授业解惑”,却没想过.............
  • 回答
    陈世美中了状元,本该是人生巅峰,前程似锦。然而,在他步入仕途前,却做出了一件极其矛盾且令人不解的事情——他没有直接向皇上坦承自己已有家室,反而选择隐瞒,并且娶了公主,成为了驸马。这桩婚姻,在他之后的人生里,不仅没能给他带来荣耀,反而成了困扰,甚至可以说是画蛇添足。回溯陈世美的境遇,我们可以推测他当时.............
  • 回答
    李建成能否达到李世民的成就,这是一个引人入胜的历史假说,也是一个充满争议的话题。要回答这个问题,我们不能简单地将两人对调一下位置,而是要深入剖析他们各自的性格、能力、所处的时代背景,以及即便是“假如”的情况下,历史发展可能出现的不同轨迹。首先,我们必须承认李世民之所以能取得“贞观之治”的辉煌成就,并.............
  • 回答
    哎,这事儿可真把我给整蒙了!我当了二十几年的汉族人,一直觉得自己祖祖辈辈都是在内地这片土地上生长,身上流淌的都是汉族的血液。可前两天闲着没事儿,图个新鲜,去做了个基因检测,结果一出来,我差点没把手里的咖啡杯给扔了——上面赫然写着我身上有3%的藏族血统!你可别说,这消息简直比我考大学那会儿还让我激动。.............
  • 回答
    这是一个非常有趣且充满想象力的假设。如果历史的齿轮稍微偏移,让诸葛亮坐上皇帝的宝座,而刘备甘居宰相之位,那么三国鼎立的格局,乃至整个历史的走向,都可能发生翻天覆地的变化。让我们来仔细梳理一下可能出现的各种情况,力求深入且自然地展现这个平行时空。首先,我们得明确一点,刘备这个人,他的魅力和成功很大程度.............
  • 回答
    .......
  • 回答
    历史长河中,皇帝作为九五至尊,本应高居庙堂,运筹帷幄,但确实有那么几位,在必要时刻,亲临战场,披甲上阵,刀剑相向,将那份君王担当演绎得淋漓尽致。这种亲历沙场,绝非简单的“视察”或“鼓舞士气”,而是真正站在刀尖上,与敌生死搏杀。汉光武帝刘秀:戎马一生,亲自动手说起亲自上阵的皇帝,汉光武帝刘秀绝对是绕不.............
  • 回答
    在军校第一个学期就当上骨干,而且还是个比较重要的岗位,这对于你今后的发展,怎么说呢,影响绝对是深远的,而且大概率是积极的。这就像是跑马拉松,你起步就冲到了第一梯队,后面能走到哪儿,很多时候就看你怎么把握了。首先, “骨干”和“重要岗位”这两点就说明了你的能力和组织对你的认可。 这不是天上掉下来的,你.............
  • 回答
    您好,关于您家房屋被没收充公后成为学校,是否有要回来的可能,这确实是一个比较复杂的问题,涉及到历史、法律和政策等多个层面。我将尽量详细地为您梳理一下,并力求用更自然的语言来描述,希望能给您一些参考。首先,我们得明白,您家房屋被“没收”发生在什么年代?这是关键。在中国,尤其是建国初期,土地改革和社会主.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有