1、写做背景前端
2、各种型公司的环境氛围java
3、各种型公司的开发流程规范git
4、如何提升在公司的核心竞争力github
5、一些中肯建议面试
本人在大学期间有过三段实习,大二在一家外包公司,大三去了技术型公司,如今待在一个业务驱动型公司。认识我比较久的读者应该知道,我经历了一次优秀实习生,两次提早转正,最近这份工做本来半年的试用实习期,只实习了一个月就提早转正。数据库
- 纯粹地分享这三家的工做经历。
- 分享的同时,给在校生和未在这些公司中从事工做的同窗一些参考。毕竟在本身没有真正经历过以前,都只是别人口中所说,也是所谓的「围城」。
- 因为本人有阶段性复盘的习惯,对这三段工做的表现自认为还能够,这边也会针对不一样类型的公司分享一些提升核心竞争力的经验。
咱们当时团队有10我的,入驻到一家国企里面进行开发,分配给咱们的只有一个小房间,并且这个房间以前仍是仓库,在公司的最角落。设计模式
房间里面的氛围“很符合”开发气氛,只有到饭点了有人喊吃饭了才有声音,其余时候一片寂静。服务器
这家国企有本身的食堂,他们的员工都是包餐的,人手一张卡。可是这家企业给到咱们团队的只有一张卡,也就是咱们团队共用一张卡,因此到食堂以后咱们得排在一块儿轮流刷。吃完饭以后,团队的每一个人须要给CTO转12元做为中午的饭钱,CTO收完以后统一转给该企业财务,也就是咱们不包餐。架构
轮流刷卡,不包餐这些都还好,毕竟外包团队嘛,也能理解。可是食堂有时在节假日特地煮了汤或者其余什么的,一看到咱们团队来了,就直接说咱们没有。有一次中秋节,人事部在食堂门口发礼盒,团队的老员工要去领,人事部的人因为对咱们比较陌生,因而问了一下基本信息,一听到咱们是技术部的,赶忙挥了挥手说没有。ide
虽然这家外包996,一个月只发我800工资,并且还用支付宝转帐,但我仍是挺感激给予我这样的机会让我学习,没有“归属感”和“认同感”也告诉我仅仅只能实习,这两种感受相信在外包的朋友都深有体会。
这家公司是真正意义上的技术型公司,公司产品的核心竞争力就是技术,解决市场上其余竞品解决不了的。
该公司的创始人及管理层全都是技术人员出身,企业内部还设了一个大学,上面有必修课和选修课,上完课以后要参加考试,考试成绩做为年终绩效指标之一。上到HR,下到底层研发人员都得接受大数据知识的洗礼,随口就是各类Hadoop、Spark。除此以外,公司还会常常外界技术人士来公司分享,企业内部也会常常性作分享。
这种技术氛围也是每一个技术人所向往的,遇到什么难题,内部员工头脑风暴一下就能解决。
这种企业里的技术人员是具有核心地位的,核心部门也必须是开发部,而且针对不一样的技术,内部分工会分的比较细,具体到哪一个模块,哪一个功能。
在这种公司,开发部门正常都不是核心部门,但同时又是不可缺乏的。拿我如今的电商公司来讲,数据部门主要是为了给运营部提供一些数据让他们更好地去订价,定制活动等。
公司的核心竞争力应该是产品,其次是模式,而模式包含着运营、销售等。技术只是做为辅助这种模式创建的一份子,搭建一个平台,或者出一些指标数据,都是为了更好服务业务。
市面上大部分互联网公司都是业务驱动型公司,这类公司会把部分边缘业务外包出去,重点作核心业务,对于核心业务的技术又没像技术型公司同样苛刻,谋求最佳性价比。
无论是烂代码仍是冗余代码,只要能实现功能的就是好代码。大部分的外包公司或者说基本全部的外包公司都不会作code review,只要能把功能实现交给客户就行。
大二的时候,咱们团队虽然驻扎在一家国企里面,但真正作该企业项目的只有我一我的,其余人都在作不一样的项目。我那时既自豪又感概,自豪地跟同窗说我本身一我的搞一个国企项目,感慨公司心真大,把一个国企项目交给个人一个实习生来作。
那时也不懂什么叫好代码,都是冲着功能实现去的,各类调包,copy & paster,if else while for经常写出死亡三角,没人批评我说代码写的丑,没人让我封装,都是夸我功能实现的快,就是bug多了点。
产品经理时不时地走到我身边,跟我说要加哪些功能,哪些不要,业务逻辑都是freestyle,现场画逻辑图。刚开始不懂,认真地听产品经理说,而后拿小本本记。后来个人leader跟我说:别听产品经理的,有不懂的问我就行,到后来国企的运营部也来找我提需求,真的是人人都是产品经理啊!
团队里没有专门的测试同事,都是上线那天一块儿加班,国企运营部的人帮忙测试,咱们开发就在旁边实时解决测出来的问题,顺利的话当天发布,要是有遇到解决不了的bug就结束加班,明天继续。
这个项目通过我手以后写的是又大又烂,如今的我也看不下去那些代码了,这个项目在我走以后也下线了。
在这家公司,我从跟甲方博弈,到跟产品经理撕逼,再到前端后台数据库服务器,全搞了一遍。不得不说这也是一个可贵的学习机会,可是我在下一家公司尝了这家公司带给个人苦。
一年后来到了这家公司,这家公司是数仓行业的标杆,产品是To B的,客户都是各领域的KOL,又是中国第一个Apache顶级开源项目,不管是技术仍是开发流程规范说领先的应该不过度。
先看看咱们的开发流程和规范:
1. PRD/issue
若是是新功能,并且相对比较大的,须要产品经理画出原型图以及详细说明清楚;若是是bug或者比较小的功能,须要在github的issue上说清楚。口头说的永远无效,若是产品经理口头对咱们说什么,咱们都会要求他给文档、发邮件或者在issue上说明清楚,也是保留证据,防止互相甩锅。
2. 本地Reproduce 本地重现bug。也就是出现bug的时候,咱们开发要进行本地重现,只有重现出来才能从根本上解决问题。这一步是最难的,也是耗时最长的。若是连bug本地重现也重现不出来,后续工做基本难以进行。
3. 定位Root cause 对于Bug,咱们要先找到引发的根本缘由,这块最考验综合能力。mentor给个人箴言就是:「大胆假设,当心求证」。 把全部可能性列出来,而后一个个去证明。只有定位了Root cause,你才能开始去写代码。
4. Design review 这是代码架构设计上的一个review,是跟mentor或者leader对接确认的,在编写代码以前完成,避免设计不行,被所有推翻。这块也要写在github的issue,一方面为后人留下痕迹,便于后面维护或者迭代复盘。并且高层也常常翻阅issue,design review作的很差,也会被指出来,及时发现问题。
5. 代码编写(阿里巴巴手册,UT,IT) 写好代码是新手的基本要求,不写低质量代码。这边要求按照effect java以及阿里巴巴代码手册进行约束,以及每写完代码都要经过UT或者IT进行覆盖。
6. Test plan 当你写完代码以后,你须要制定一个测试计划,也就是测试用例,去解决以前相同操做下会出现的bug或者验证你的新功能。
7. Test evidence 也就是Test plan制定完以后进行实施,将验证成功的截图进行保留,贴到issue,做为你完成功能的证据。
8. CI Continuous Integration-持续集成服务,它会本身运行构建和测试,反馈过程当中是否存在Bug或者其余问题,看是否与咱们预期的结果一致。咱们是在Jenkins上完成的,当你的代码有点改动你就须要去跑CI,避免影响到系统的其余模块。
9. Code review 当你写完代码而且经过测试以后,经过pr的方式先给导师review,导师review完以后提交给leader,对于一些比较重要的模块,在leader看完代码以后还要进一步提交给CTO。看完这个你还敢提交烂代码?别说烂代码了,一个变量名定义的很差都得被打回来。
刚开始入职的时候以为这些操做很烦,改一行代码就得去issue上面写一堆,并且也要跑个几小时的CI。当后来吃了几回亏,真香。别看除了代码编写还有不少其余操做,其余操做也是为了让你更好地去编写代码,帮你梳理整个开发流程,也不自觉地提高你工做的严谨性。因此到如今,我来公司解决的第一个bug,我都还知道Root cause,以及其余细节。其余人也知道,由于我都贴在issue上面。
因为我在第一段工做中养成不少很差的习惯,好比说代码写的又快又烂,debug各类log乱打,为了实现功能破坏了设计模式等等。因此在第二段工做经历中被骂的狗血淋头,国庆7天看了4本关于代码设计的书籍并作了总结,对项目源码进行深刻阅读,学习一些设计模式等等。
在第二家公司,虽然被怼了不少,可是收获很是大,能够看我在第三家的表现。
业务驱动型的公司处于外包和技术型之间,也是以实现功能为主,又要注重后期维护,对规范处于中立状态,不挖坑,不矫情。
因为我从第二家公司出来后,对代码有必定的洁癖,因此到了第三家公司一有空就重构项目代码,leader也赞同个人行为,常常找我聊代码设计和规范。我也主动申请要补充部门的开发流程规范,数据库的字段规范,并补全项目代码的UT、IT等等。这也是我能提早转正的缘由之一。
在外包公司,不能局限于一个点进行开发,外包公司须要的是全能型人才,哪里缺哪里补上。在外包公司不须要你技术多厉害,但须要你会利用现成的资源以最快的速度完成项目开发。你会的方面越多,公司须要你的地方也就越多,你获得的也更多。
在技术型公司,不须要你会的有多广,你只须要针对公司产品的一个点进行深刻了解,不断地进行优化,这个点就是你的核心竞争力。再由这个点切入到相关模块,技术深度才是王道。
在业务驱动型公司,不能光会技术,当其余开发人员只会跟老板讲技术,而你能将具体技术落实到业务,而且能从业务层面反推到技术实现,老板能不喜欢吗?但也要记住,技术是生存之道,别顾此失彼,耍小聪明。
技术人员的核心竞争力终究是技术,但技术也分广度、深度、与业务结合的能力,在不一样的环境下,应该学会取舍。
在没有更好的选择下,能去,有总比没有好。并非因此的外包公司都是一个模样,说不定你的leader好,服务的又是又好又有钱的甲方,好吃好喝好款待。但大部分的外包仍是不咋地,这边调查好背景就行。
全部开源项目背后的公司都是技术型公司。好比开源Kylin的Kyligence,开源Dubbo、RocketMQ的阿里、开源Flutter的谷歌等等。而像阿里、腾讯这种大公司,每一个BU就是一个类型的小公司,有些负责技术,有些负责业务,有些外包。
建议去技术型公司或者核心技术部门。从个人案例就能够看到,技术型公司对我一个总体的塑造帮助最大,可能贯彻职业生涯。当你习惯了低标准的东西久了,就很难对高标准产生兴趣。
对于外包公司来讲,我以为会缺失“归属感”和“认同感”,毕竟作的不是自家的产品,还得去客户现场驻扎,并且对于外包的技术也是不太看好。
对于技术型公司来讲,对于我的成长帮助绝对很大,但在这种公司因为周围都是level比你高的人,解决的问题也都是比较难的,因此无形中会有压力而且会产生焦虑。
对于业务型公司来讲,最好是选择你比较擅长的而且有相关工做经验的业务。我第一段实习作的是电商项目,因此我如今的工做也是找的电商,毕竟业务逻辑都是相通的,就算以后跳槽,也会选择电商行业,毕竟除了技术,行业知识也是竞争力之一。
选什么类型公司,仁者见仁,能够根据本身的兴趣以及擅长的地方作选择。