1.该不该去这样的公司?
2.如果去了,如何自我提高和自我规划?
团队开发和单人开发的公司我都待过,先说说我自己的感受吧……
1.该不该去这样的公司?
理论上来讲,确实不建议去这样的公司,除非你有很强的个人能力,已经证明过自己能“耐得住寂寞”,不然要想快速成长,比,较,难,尤其是应届毕业生。当然,有时候,理论跟实际是两码事,所以你可以根据自己的情况来看,不要太在意这些,也许这里只是你到达最终目标要经过的一段路而已。
个人规划:首先问问自己想要什么,这个决定是否契合自己的目标和规划,然后再做决定。
其实,我自己当初做决定也是半模糊半清晰的状态,最终决定下来,一半因素是靠朋友建议,一半是靠自己去琢磨,当时我是在一个5~6人的团队中待了近一年的时间,对于一些基本开发流程,工程环境配置等等也都算比较熟悉了,自己也觉得待在一个现成的项目架构里面,写些业务代码有些乏味,后来正好有朋友找我,问我是否有兴趣从零开始做一个创业项目,后来我自己从各个方面考虑,觉得可以去折腾一下,一来锻炼自己的综合能力和自制力、抗压能力,二来是跳出舒适区,结合以前的经验和所学,从零开始,从基础架构,到网络层设计、技术选型等等,都要去独立解决,同时尝试很多不同的东西。不管最终成与不成,只要你认真去做了,总会有收获的,所以即便你以后再去另一个团队,也会有信心认为自己做得不比别人差。
时间:如果你是团队开发,你可能会有时间去深入研究某个方向或者功能,如果是单人开发,时间很要命了,所以这个时候很考验你自己的时间管理能力,你会意识到做事情要按优先级来分,有些事情可以直接舍弃掉,你会意识到技术难度和开发时间评估的痛点,你还会意识到做事情时不要陷入某一件事情里面去,否则不知不觉时间就过去了,结果后面还有一大堆事等着你(今晚又要加班/(ㄒoㄒ)/~~)。
我之前在团队开发时,有时间去研究如何让 UIWebView 在不降低体验的前提下支持 webp 图片,有时间去研究 MJRefresh 怎么实现,然后再仿造一个 ,有时间去实现过一个带特效的首页框架;像现在一个人开发的话,基本上是找轮子现拿现用了,要研究的话就得挤时间了。(最近我也一直在想怎么合理安排时间,)
工作量:一个人开发的话,就没有帮你分担开发任务了这个时候你就要合理安排时间,适当“砍”掉一些可以不做的需求。有些公司可能还要你干些其他的活,当然你会想“这关我什么事”,但是你还就得去做,其实,在做其他与本职不想关的任务(比如分析产品、UI切图)时,你会体验到“原来做这件事是这样的”,你也许会开始从全局上来考虑问题。环境:一个人开发,连个可以讨论交流的人都没有,碰到问题也不能跟懂你的人讨论,你只能找服务端的同学聊聊天扯扯蛋,所以难免会造成闭门造车的情况。另一方面来看,这样也就逼得你自己去独立思考,形成自己的解决问题的思路和模式。代码写的怎么样,也没有人评价,虽然有时候其他端的同事会偶尔帮忙看看,但基本上是没人管你,你也看不到别人是怎么工作(不只是写代码)的。一个人开发的好处就是整个项目都是你的天下,也是你的作品,你也许会想着好好经营下去,会有不断重构的意识。
团队合作:在使用 Cocoapods,git workflow /版本控制 时也谈不上团队合作的概念,commit 规范是什么也不会去在乎,有些团队合作的问题也许你永远碰不到。另外就是,单人开发时你跟其他岗位的交流会更密切,沟通会很重要,在比较大的团队里面,都是邮件来邮件去的,更多的是流程,你做好自己的事就行了。 在技术眼界方面,肯定会不如大公司,大公司有很多牛人,有成熟的技术体系,有极其复杂的业务场景,有很多你平时在网上搜不到的东西。比如微信每天有好几亿的活跃用户,如果你是微信开发人员,要考虑的问题就要比创业产品复杂的多。我记得之前看阿里“双十一”纪录片的时候,有阿里的同学说“很幸运能参与到这么震撼的活动当中”(原话记不太清了),那种体验确实难得。
薪资待遇:(把工资放到最后,不是想证明我很不在乎钱哈)如果是单人开发,薪资肯定不会比以前少,合不合适具体看你自己的情况。另外就是不要管他什么期权啊、股票啊乱七八糟的,薪水来的最实在。
2.如果去了,如何自我提高和自我规划?
这个问题的回答,也可以说是对我自己的期望吧。
个人规划:给自己定一些阶段性的、具体的目标。
查漏补缺。
要达到把学到的东西给别人解释清楚的地步,多写技术笔记,博客,记录+思考,把自己做的想的写下来就行,不一定要长篇大论。
对于自己实现的功能点要说得清怎么实现的,业界普遍怎么做的,自己有没有什么改进,改进的思路是什么。
对自己做的项目要有整体的概念,比如数据层,网络层,整体架构,设计模式。
多看书,一定要掌握基本知识,而且选书要选适合自己水平的,不然看了也消化不了,有些书要大量实践后再去读,才会有感觉。
关注大牛的博客、公众号,阅读一些优质的内容,了解行业新动态。
更重要的是,要注意合理利用时间,每个人每天都会遇到很多新东西,要学的东西太多了,不可能所有的都知道,所以学东西最好是能马上用到的,而且学到的新东西一定要去实践,不用很快就忘记了,你可以自己抽时间写个 side project,把学到的东西用上去。
业务代码能力的提高——不断重构,重写3遍,第二遍不再关注实现,而是关注如何组织代码。
合理安排时间和工作量:做事情要分优先级,要不然你会忙的精神紊乱;
“砍”掉一些可以不做的需求;
不“沉迷”于某一件事,避免“只见树木不见森林”;
做事情、解决问题,不要死磕,不要死磕,不要死磕;
交流:借助微信群、qq群、微博、等等,主要是自己要积极活跃,乐于分享。每学到一个新东西,可以去网上发帖回答,也可以自己写博客,想办法表达出来,或者去回答;
团队合作:参与 Github 开源项目,尝试弄明白 git 的整个工作流程。技术眼界这点那就没办法了,毕竟条件所限。
深度主要靠的是业务,但是广度可以看自己,假如你可以尝试自己实现整个技术栈,从前端 Android 、h5 到后端都去实践一下,至少弄明白用户手机 app 上的东西怎么来的。
ps:原问题只提了第一部分——该不该去,为了能帮助到更多的同学,我在问题中补充了一下第二部分——如何自我提高,希望能引发更有帮助的思考。