百科问答小站 logo
百科问答小站 font logo



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

  

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有啥区别 ,直接在界面上选上要几台机器,多大内存,啥时备份,啥淘汰策略,下一步,下一步点就行了,剩下就关注自己业务代码这一块就完事了。




  

相关话题

  如何看待 WePhone 创始人自杀? 
  如何看待没有学历的程序员? 
  为什么一部分人宁可买几个机械键盘换着用,也不愿意给自己敷一下面膜? 
  35岁以后程序员都在干嘛? 
  请问各位码农你们喜欢开会吗? 
  如何看待南京一程序员业余帮网友鉴定毒蘑菇,一年鉴定 2000 多次,成为拥有百万粉丝的网络大 V ? 
  有没有有钱却不幸福的真实案例? 
  如何评价某985老师所说的「C语言至少学10年才能懂」? 
  创业公司如何和大公司竞争,找到优秀的开发者和技术合伙人? 
  如何看待南京一程序员业余帮网友鉴定毒蘑菇,一年鉴定 2000 多次,成为拥有百万粉丝的网络大 V ? 

前一个讨论
有多少人讨厌瑞克与莫蒂中的莫蒂?
下一个讨论
如何评价钱雁秋?





© 2024-05-18 - tinynew.org. All Rights Reserved.
© 2024-05-18 - tinynew.org. 保留所有权利