2023年6月20日发(作者:)
(转)⼀个6年java程序员的⼯作感悟,写给还在迷茫的你原⽂地址:前⾔很多年前,刚刚从⼤学毕业的时候,很多公司来校招。其中最烂俗的⼀个⾯试问题是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某⼀⽅⾯能够独当⼀⾯的技术专家“。后来经历了⼏家不同的公司,换了不同的⽅向,才知道这个真是⼀个很难的问题。因为兵⽆常势,什么东西都是在不断的变化,⼀早的时候看好的东西可能会被淘汰。(⼏乎)没有⼈能够看准技术的下⼀个⽅向,因为这个问题实在是太难了,能够做到这⼀点的你就成为了技术界的巴菲特了。⽐如说11年加⼊Google,14年加⼊Facebook,16年加⼊阿⾥巴巴。做到这⼀点的⼈肯定有资本也有眼光去做风险投资,就算不做风险投资那么财务⾃由也是妥妥的。现在毕业六年,从北京到上海到硅⾕,从国内互联⽹公司外企,看到了公司好的地⽅和坏的地⽅,这⾥只是根据⾃⼰的经历写⼀些⼤⽅向选择建议,仅供参考。⼀、⾏业背景很重要⾏业背景⾮常重要;⼯作3年后必须确定⾃⼰的⾏业背景,⽐如⼀直从事电信⾏业,⼀直从事银⾏项⽬,⼀直从事ERP⾏业等等。⼀个程序员不可能是⼀直写代码的,就是写代码也要知道业务逻辑,满⾜什么需求;俗话说隔⾏如隔⼭,每个⾏业的业务都不⼀样,甚⾄差别很⼤,⽐如你⼀直从事流媒体的研究,让你跳槽到⼀家银⾏项⽬,完了,⼀切从头学吧,以前的⾏业经验都⽤不上了;⽽且,⼀个公司公司招⼈,就是希望找到那些很容易上⼿,不需要培训业务很久的程序员;频繁跳槽的朋友,⼀定要注意这点;⼀直在⼀个⾏业呆久了,就可以成为这个⾏业的专家;我们可以经常看到,⼀个项⽬组的某个leader,代码写的⼀般,但是却可以跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;⽽客户也很愿意跟他打交道,因为那些⽼的项⽬只有他能维护,他甚⾄熟悉系统的每⼀张表结构——-可想在这个⾏业呆的时间有多久啦。第⼆、合理的职业规划什么是职业规划—-就是你短期或者长期的⼀个职业计划!⼤道理不讲,咱简单点。先问你⼏个问题:a.你⼯作⼏年了,你愿意⼀直和新⼊⾏的新⼿⼀样就是个简单的程序员吗?b. 你愿意⼀直写代码,⽽不关⼼其他吗?c. ⼀个项⽬的前期需求,设计,后期部署维护,领导找到你,你说咱搞不定,⾏吗?程序员不是敲代码的机器。第⼀年太多东西不懂,你可以⼀切听从⽼⼤的安排,敲敲代码,看看数据库,测试⾃⼰和别⼈的代码;但是第⼆年,你还是这样吗?不可能的,⼀年的经验你完全可以⼊⾏了,是时候该学习怎么进⾏需求分析,怎么设计数据库,怎么写各类⽂档,怎么写更好的代码?这是⾼级程序员的要求!三、什么是⾼级程序员?具有分析设计能⼒,能进⾏技术攻关,⽽且具有某⾏业深厚背景的程序员!所有,⼀个项⽬⽴项后,你要积极的参与到前期设计中,跟⽼同志们⼀道思考分析问题,学习经验!OK,你这就成长啦!千万不要认为程序员就是写代码的哦⽽且,通过⼀个项⽬的开发,你要能粗略的统计出⼀个功能的开发时间;⽐如⼀个模块有20个⼩功能点,你开发了80个⼩时,每个⼩功能点平均2⼩时——这时在前期就能评估⼯作量啦。当然每个⼈的效率和⼯作质量是不同的,因⼈⽽异,但是⼤概的⼯作量应该是可以统计出来的,⽤于统计⼀个项⽬的⼯作周期;四、不要觉得业务代码⼀样很⽜逼有⼈认为写业务代码⼀样可以很⽜逼,理由是业务代码⼀样可以有各种技巧,例如可以使⽤封装和抽象使得业务代码更具可扩展性,可以通过和产品多交流以便更好的理解和实现业务,⽇志记录好了问题定位效率可以提升10倍等等。 想要获取更多学习资源的,可以加群:454377428业务代码⼀样有技术含量,这点是肯定的,业务代码中的技术是每个程序员的基础,但只是掌握了这些技巧,并不能成为技术⼤⽜,就像游戏中升级打怪⼀样,开始打⼩怪,经验值很⾼,越到后⾯经验值越少,打⼩怪已经不能提升经验值了,这个时候就需要打⼀些更⾼级的怪,刷⼀些有挑战的副本了,没看到哪个游戏只要⼀直打⼩怪就能升到顶级的。成为技术⼤⽜的路也是类似的,你要不断的提升⾃⼰的⽔平,然后⾯临更⼤的挑战,通过应对这些挑战从⽽使⾃⼰⽔平更上⼀级,然后如此往复,最终达到技术⼤⽜甚⾄业界⼤⽜的境界,写业务代码只是这个打怪升级路上的⼀个挑战⽽已,⽽且我认为是⽐较初级的⼀个挑战。所以我认为:业务代码都写不好的程序员肯定⽆法成为技术⼤⽜,但只把业务代码写好的程序员也还不能成为技术⼤⽜。五、别以上班太忙没时间学习为借⼝很多⼈认为⾃⼰没有成为技术⼤⽜并不是⾃⼰不聪明,也不是⾃⼰不努⼒,⽽是中国的这个环境下,技术⼈员加班都太多了,导致⾃⼰没有额外的时间进⾏学习。这个理由有⼀定的客观性,毕竟和欧美相⽐,我们的加班确实要多⼀些,但这个因素只是⼀个需要克服的问题,并不是不可逾越的鸿沟,毕竟我们⾝边还是有那么多的⼤⽜也是在中国这个环境成长起来的。我认为有⼏个误区导致了这种看法的形成:1)上班做的都是重复⼯作,要想提升必须⾃⼰额外去学习形成这个误区的主要原因还是在于认为“写业务代码是没有技术含量的”,⽽我现在上班就是写业务代码,所以我在⼯作中不能提升。2)学习需要⼤段的连续时间很多⼈以为要学习就要像学校上课⼀样,给你⼀整天时间来上课才算学习,⽽我们平时加班⼜⽐较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松,所以就没有时间学习了。实际上的做法正好相反:⾸先我们应该在⼯作中学习和提升,因为学以致⽤或者有实例参考,学习的效果是最好的;其次⼯作后学习不需要⼤段时间,⽽是要挤出时间,利⽤时间碎⽚来学习。六、做的更多,做的⽐你主管安排给你的任务更多。我在HW的时候,负责⼀个版本的开发,这个版本的⼯作量⼤约是2000⾏左右,但是我除了做完这个功能,还将关联的功能全部掌握清楚了,代码(⼤约10000⾏)也全部看了⼀遍,做完这个版本后,我对这个版本相关的整套业务全部很熟悉了。经过⼀两次会议后,⼤家发现我对这块掌握最熟了,接下来就有趣了:产品讨论需求找我、测试有问题也找我、⽼⼤对外⽀撑也找我;后来,不是我负责的功能他们也找我,即使我当时不知道,我也会看代码或者找⽂档帮他们回答。最后我就成了我这个系统的“专家”了。虽然这个时候我还是做业务的,还是写业务代码,但是我已经对整个业务都很熟悉了。以上只是⼀个简单的例⼦,其实就是想说:要想有机会,⾸先你得从⼈群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!想要获取更多学习资源的,可以加群:650385180怎么做得更多呢?可以从以下⼏个⽅⾯着⼿:1)熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的这样做有很多好处,举⼏个简单的例⼦:需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进⾏排查处理⽅案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的⽅案2)熟悉端到端⽐如说你负责web后台开发,但实际上⽤户发起⼀个http请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx等),服务器⼀般⼜会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝⼤部分⼈是不可能去参与写代码的,但掌握了这些知识对你的综合⽔平有很⼤作⽤,例如⽅案设计、线上故障处理这些更加有含⾦量的技术⼯作都需要综合技术⽔平。“系统性”、“全局性”、“综合性”这些字眼看起来⽐较虚,但其实都是技术⼤⽜的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。3)⾃学⼀般在⽐较成熟的团队,由于框架或者组件已经进⾏了⼤量的封装,写业务代码所⽤到的技术确实也⽐较少,但我们要明⽩“唯⼀不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了⼀家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,⽽机会和挑战只会分配给有准备的⼈,所以这种情况下我们更加需要⾃学更多东西,因为真正等到要⽤的时候再来学已经没有时间了。以java为例,⼤部分业务代码就是if-else加个数据库操作,但我们完全可以⾃⼰学些更多java的知识,例如垃圾回收,调优,⽹络编程等,这些可能暂时没⽤,但真要⽤的时候,不是google⼀下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。以垃圾回收为例,我⾃⼰平时就抽时间学习了这些知识,学了1年都没⽤上,但后来⽤上了⼏次,每次都解决了卡死的⼤问题,⽽有的同学,写了⼏年的java代码,对于stop-the-world是什么概念都不知道,更不⽤说去优化了。据不完全统计,截⾄⽬前(2017.07)为⽌,中国Java程序员的数量已经超过了100万。⽽且,随着IT培训业的持续发展和⼤量的应届毕业⽣进⼊社会,Java程序员⾯临的竞争压⼒越来越⼤。那么,作为⼀名Java程序员,怎样努⼒才能快速成长为⼀名⾼级的程序员或者架构师,或者说⼀名优秀的⾼级⼯程师或架构师应该有怎样的技术知识体系,这不仅是⼀个刚刚踏⼊职场的初级程序员,也是⼯作三五年之后开始迷茫的⽼程序员,都必须要⾯对和想明⽩的问题。为了帮助⼤家少⾛弯路,我总结出⼀个Java程序员的⼯作2-5年成长路线图。想要获取更多学习资源的,可以加群:454377428针对上⾯的技术我特意整理了⼀下,⾥⾯的技术不是靠⼏句话就能讲清楚,所以⼲脆录制了⼀些视频,很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习的朋友可以加我新建的Java架构群:454377428,我会在群⾥分享我从业多年的⼀些⼯作经验,也会将我的⼀些实战项⽬和Java⼤型互联⽹技术的视频免费分享给⼤家。
2023年6月20日发(作者:)
(转)⼀个6年java程序员的⼯作感悟,写给还在迷茫的你原⽂地址:前⾔很多年前,刚刚从⼤学毕业的时候,很多公司来校招。其中最烂俗的⼀个⾯试问题是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某⼀⽅⾯能够独当⼀⾯的技术专家“。后来经历了⼏家不同的公司,换了不同的⽅向,才知道这个真是⼀个很难的问题。因为兵⽆常势,什么东西都是在不断的变化,⼀早的时候看好的东西可能会被淘汰。(⼏乎)没有⼈能够看准技术的下⼀个⽅向,因为这个问题实在是太难了,能够做到这⼀点的你就成为了技术界的巴菲特了。⽐如说11年加⼊Google,14年加⼊Facebook,16年加⼊阿⾥巴巴。做到这⼀点的⼈肯定有资本也有眼光去做风险投资,就算不做风险投资那么财务⾃由也是妥妥的。现在毕业六年,从北京到上海到硅⾕,从国内互联⽹公司外企,看到了公司好的地⽅和坏的地⽅,这⾥只是根据⾃⼰的经历写⼀些⼤⽅向选择建议,仅供参考。⼀、⾏业背景很重要⾏业背景⾮常重要;⼯作3年后必须确定⾃⼰的⾏业背景,⽐如⼀直从事电信⾏业,⼀直从事银⾏项⽬,⼀直从事ERP⾏业等等。⼀个程序员不可能是⼀直写代码的,就是写代码也要知道业务逻辑,满⾜什么需求;俗话说隔⾏如隔⼭,每个⾏业的业务都不⼀样,甚⾄差别很⼤,⽐如你⼀直从事流媒体的研究,让你跳槽到⼀家银⾏项⽬,完了,⼀切从头学吧,以前的⾏业经验都⽤不上了;⽽且,⼀个公司公司招⼈,就是希望找到那些很容易上⼿,不需要培训业务很久的程序员;频繁跳槽的朋友,⼀定要注意这点;⼀直在⼀个⾏业呆久了,就可以成为这个⾏业的专家;我们可以经常看到,⼀个项⽬组的某个leader,代码写的⼀般,但是却可以跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;⽽客户也很愿意跟他打交道,因为那些⽼的项⽬只有他能维护,他甚⾄熟悉系统的每⼀张表结构——-可想在这个⾏业呆的时间有多久啦。第⼆、合理的职业规划什么是职业规划—-就是你短期或者长期的⼀个职业计划!⼤道理不讲,咱简单点。先问你⼏个问题:a.你⼯作⼏年了,你愿意⼀直和新⼊⾏的新⼿⼀样就是个简单的程序员吗?b. 你愿意⼀直写代码,⽽不关⼼其他吗?c. ⼀个项⽬的前期需求,设计,后期部署维护,领导找到你,你说咱搞不定,⾏吗?程序员不是敲代码的机器。第⼀年太多东西不懂,你可以⼀切听从⽼⼤的安排,敲敲代码,看看数据库,测试⾃⼰和别⼈的代码;但是第⼆年,你还是这样吗?不可能的,⼀年的经验你完全可以⼊⾏了,是时候该学习怎么进⾏需求分析,怎么设计数据库,怎么写各类⽂档,怎么写更好的代码?这是⾼级程序员的要求!三、什么是⾼级程序员?具有分析设计能⼒,能进⾏技术攻关,⽽且具有某⾏业深厚背景的程序员!所有,⼀个项⽬⽴项后,你要积极的参与到前期设计中,跟⽼同志们⼀道思考分析问题,学习经验!OK,你这就成长啦!千万不要认为程序员就是写代码的哦⽽且,通过⼀个项⽬的开发,你要能粗略的统计出⼀个功能的开发时间;⽐如⼀个模块有20个⼩功能点,你开发了80个⼩时,每个⼩功能点平均2⼩时——这时在前期就能评估⼯作量啦。当然每个⼈的效率和⼯作质量是不同的,因⼈⽽异,但是⼤概的⼯作量应该是可以统计出来的,⽤于统计⼀个项⽬的⼯作周期;四、不要觉得业务代码⼀样很⽜逼有⼈认为写业务代码⼀样可以很⽜逼,理由是业务代码⼀样可以有各种技巧,例如可以使⽤封装和抽象使得业务代码更具可扩展性,可以通过和产品多交流以便更好的理解和实现业务,⽇志记录好了问题定位效率可以提升10倍等等。 想要获取更多学习资源的,可以加群:454377428业务代码⼀样有技术含量,这点是肯定的,业务代码中的技术是每个程序员的基础,但只是掌握了这些技巧,并不能成为技术⼤⽜,就像游戏中升级打怪⼀样,开始打⼩怪,经验值很⾼,越到后⾯经验值越少,打⼩怪已经不能提升经验值了,这个时候就需要打⼀些更⾼级的怪,刷⼀些有挑战的副本了,没看到哪个游戏只要⼀直打⼩怪就能升到顶级的。成为技术⼤⽜的路也是类似的,你要不断的提升⾃⼰的⽔平,然后⾯临更⼤的挑战,通过应对这些挑战从⽽使⾃⼰⽔平更上⼀级,然后如此往复,最终达到技术⼤⽜甚⾄业界⼤⽜的境界,写业务代码只是这个打怪升级路上的⼀个挑战⽽已,⽽且我认为是⽐较初级的⼀个挑战。所以我认为:业务代码都写不好的程序员肯定⽆法成为技术⼤⽜,但只把业务代码写好的程序员也还不能成为技术⼤⽜。五、别以上班太忙没时间学习为借⼝很多⼈认为⾃⼰没有成为技术⼤⽜并不是⾃⼰不聪明,也不是⾃⼰不努⼒,⽽是中国的这个环境下,技术⼈员加班都太多了,导致⾃⼰没有额外的时间进⾏学习。这个理由有⼀定的客观性,毕竟和欧美相⽐,我们的加班确实要多⼀些,但这个因素只是⼀个需要克服的问题,并不是不可逾越的鸿沟,毕竟我们⾝边还是有那么多的⼤⽜也是在中国这个环境成长起来的。我认为有⼏个误区导致了这种看法的形成:1)上班做的都是重复⼯作,要想提升必须⾃⼰额外去学习形成这个误区的主要原因还是在于认为“写业务代码是没有技术含量的”,⽽我现在上班就是写业务代码,所以我在⼯作中不能提升。2)学习需要⼤段的连续时间很多⼈以为要学习就要像学校上课⼀样,给你⼀整天时间来上课才算学习,⽽我们平时加班⼜⽐较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松,所以就没有时间学习了。实际上的做法正好相反:⾸先我们应该在⼯作中学习和提升,因为学以致⽤或者有实例参考,学习的效果是最好的;其次⼯作后学习不需要⼤段时间,⽽是要挤出时间,利⽤时间碎⽚来学习。六、做的更多,做的⽐你主管安排给你的任务更多。我在HW的时候,负责⼀个版本的开发,这个版本的⼯作量⼤约是2000⾏左右,但是我除了做完这个功能,还将关联的功能全部掌握清楚了,代码(⼤约10000⾏)也全部看了⼀遍,做完这个版本后,我对这个版本相关的整套业务全部很熟悉了。经过⼀两次会议后,⼤家发现我对这块掌握最熟了,接下来就有趣了:产品讨论需求找我、测试有问题也找我、⽼⼤对外⽀撑也找我;后来,不是我负责的功能他们也找我,即使我当时不知道,我也会看代码或者找⽂档帮他们回答。最后我就成了我这个系统的“专家”了。虽然这个时候我还是做业务的,还是写业务代码,但是我已经对整个业务都很熟悉了。以上只是⼀个简单的例⼦,其实就是想说:要想有机会,⾸先你得从⼈群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!想要获取更多学习资源的,可以加群:650385180怎么做得更多呢?可以从以下⼏个⽅⾯着⼿:1)熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的这样做有很多好处,举⼏个简单的例⼦:需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进⾏排查处理⽅案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的⽅案2)熟悉端到端⽐如说你负责web后台开发,但实际上⽤户发起⼀个http请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx等),服务器⼀般⼜会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝⼤部分⼈是不可能去参与写代码的,但掌握了这些知识对你的综合⽔平有很⼤作⽤,例如⽅案设计、线上故障处理这些更加有含⾦量的技术⼯作都需要综合技术⽔平。“系统性”、“全局性”、“综合性”这些字眼看起来⽐较虚,但其实都是技术⼤⽜的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。3)⾃学⼀般在⽐较成熟的团队,由于框架或者组件已经进⾏了⼤量的封装,写业务代码所⽤到的技术确实也⽐较少,但我们要明⽩“唯⼀不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了⼀家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,⽽机会和挑战只会分配给有准备的⼈,所以这种情况下我们更加需要⾃学更多东西,因为真正等到要⽤的时候再来学已经没有时间了。以java为例,⼤部分业务代码就是if-else加个数据库操作,但我们完全可以⾃⼰学些更多java的知识,例如垃圾回收,调优,⽹络编程等,这些可能暂时没⽤,但真要⽤的时候,不是google⼀下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。以垃圾回收为例,我⾃⼰平时就抽时间学习了这些知识,学了1年都没⽤上,但后来⽤上了⼏次,每次都解决了卡死的⼤问题,⽽有的同学,写了⼏年的java代码,对于stop-the-world是什么概念都不知道,更不⽤说去优化了。据不完全统计,截⾄⽬前(2017.07)为⽌,中国Java程序员的数量已经超过了100万。⽽且,随着IT培训业的持续发展和⼤量的应届毕业⽣进⼊社会,Java程序员⾯临的竞争压⼒越来越⼤。那么,作为⼀名Java程序员,怎样努⼒才能快速成长为⼀名⾼级的程序员或者架构师,或者说⼀名优秀的⾼级⼯程师或架构师应该有怎样的技术知识体系,这不仅是⼀个刚刚踏⼊职场的初级程序员,也是⼯作三五年之后开始迷茫的⽼程序员,都必须要⾯对和想明⽩的问题。为了帮助⼤家少⾛弯路,我总结出⼀个Java程序员的⼯作2-5年成长路线图。想要获取更多学习资源的,可以加群:454377428针对上⾯的技术我特意整理了⼀下,⾥⾯的技术不是靠⼏句话就能讲清楚,所以⼲脆录制了⼀些视频,很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习的朋友可以加我新建的Java架构群:454377428,我会在群⾥分享我从业多年的⼀些⼯作经验,也会将我的⼀些实战项⽬和Java⼤型互联⽹技术的视频免费分享给⼤家。
发布评论