谈谈在创业公司的几点感触
以我自身经历来看,有如下几点感触?
(1)全面发展;
(2)施展的平台的机会比较大;
(3)加班的频率;
(4)跟领导的关系;
(5)与同事的关系;
(6)自觉性;
一、全面发展
我们公司加上经理常在的也就是6个人。安卓两个,Java开发三个。人少自然就要多个方面用。
比如以上家公司为例,每当接到一个新的单子,我们老板都会派遣对应的项目实施人员去跟客户交互,一般就是跟客户聊聊需求之类的,然后整理成一个需求文档,当然了,在此之前老板会跟这个客户谈价格,这个价格分为两个方面,一个是只卖服务不卖源码,另一个是源码+服务一起卖。这也是办公自动化软件公司比较普遍的两套营销策略吧。话有些说偏了。而今在这家创业公司,我现在所处的这家创业公司主要是做共享经济方面的,比如共享车、共享洗浴等等诸如的。可以说是做自己的产品。做自己的产品有一种归属感,上家公司给我的感觉虽说是做办公自动化,但是在我看来跟外包没有什么区别,只不过相当于专一性型外包(专做办公方面的)
在这家创业公司,我做过可行性方案设计,以我的可行性方案设计,由于我们是自己做自己的产品,一般可行性有这么几个考量?
第一、技术可行性;
第二、成本可行性;
拿技术可行性来说,主要有这么几个考虑?
(1)成员熟悉度(以Java为例,我们主要用SSM框架,没有用SpringBoot或者SpringCloud,因为我们组成员普遍对这个框架非常熟悉);
(2)可靠性(比如Spring全家桶就很可靠);
(3)文档丰富性(就是如果出现什么问题,可以快速在现有的搜索引擎当中搜索获取对应的解决方式);
拿成本可行性来说,主要有这么几个考虑?
(1)时间成本;
(2)技术成本;
(3)人员成本;
(1)时间成本
时间成本主要指的是项目的开发周期,项目的开发周期取决于项目的复杂度和需求变更度,复杂度高变更度高,那么延期是必然的,当然了也可以是非必然的,可以用加班来达到按时交互的目的或者是一些强有力的手段。
(2)技术成本
技术成本有这么几个方面?
a.技术的实现成本(效率和时间);
b.服务器的成本(购买服务器);
(3)人员成本
a.五险一金;
b.工资;
关于全面发展,进入这家公司我不仅仅是一个后台开发人员,而且也是前端开发+运维+测试+DBA+架构(兼职)+技术支持(主要是安装设备+调试设备)+产品设计等。
能力虽然是得到全面的锻炼,但是除了后台方面相对过硬,其他基本都是浅尝辄止,可以理解为都不够深入。
比如运维方面,我仅仅只是知道对tomcat、mysql如何调优,以及Linux常见的性能测试命令(free、top等)和其他的常用命令(内存、CPU、线程、管理用户等)及其一些常用的shell脚本(比如部署、备份数据库、邮件告警等)。
比如前端开发,我除了比较熟悉HTML+CSS+JS(多亏曾经在学校的时候手动敲代码写了十几个网页,因此基础还是比较好)之外仅仅只是对jQuery+BootStrap+layui+Vue.js等前端框架比较熟悉,看了API知道怎么用和异步交互的方式,及其一些前端性能优化方面的,对于现在的服务端的Node.js仅仅只是停留在简单使用和环境搭建上面。
比如测试,除了非常简单的功能性测试之外,也就是用Jmeter做一些tomcat、mysql等性能测试(压力测试),还有就是开发常用的单元测试,至于网站的性能测试我是直接用国外网站测试的,可以参考我的这篇文章:网站在线性能测试分享。
比如DBA,除了授权分配对应的用户对数据库的权限之外,SQL能力相对较好(这也是一直以来使用MyBatis的原因之一)和一些简单调优及索引方面的等。
比如架构,这里的架构职责有两个方面,一个是技术架构,比如制定开发的规范,使用什么后台框架(SSM还是SpringBoot),采用MySQL还是Oracle,需要使用消息队列吗,或者是前端指定要什么框架(Metronic还是Vue或是EasyUI)、数据库的设计、究竟采用单体还是微服务或是是单体式业务拆分方式等;另一个就是业务方面的,比如分析业务需求、归纳整理、编写概要文档、编写详细文档和扩展业务等。
比如技术支持,比如配置路由器(因为门锁需要连接这个路由来达到通信的目的)等。
比如产品设计,前端方面的话,手动画设计图,大概是怎么样的(页面的布局之类的)和一些宣传动画的制作(用万彩动画大师制作产品宣传视频之类的)。
其实,大概看了看,感觉和一些外包公司的开发人员职责没有什么不同(因为有一些外包公司,也是一人身兼多个岗位)。当然了,好处也是有的,除了个人的学习能力得到提升之外,还有就是对于业务方面及其整个项目环节十分清楚,利于业务积累和技术积累吧。
二、施展的平台的机会比较大
施展的平台的机会比较大,为什么要这么说呢?
第一、你可以成为规则的指定者;
第二、你可以尝试引用新的技术(借此可以学习,但是前提是你要扛得住风险和压力(遇到问题临时解决不了怎么办));
1.规则的制定者
(1)编码规范,我可以大体上参考Java开发手册,然后在这个基础上重新一些规范或者是守则等等,当然了,团队成员虽然不多,但是由于每个的习惯不一样,所以还是需要在商议一下。
(2)建立代码Review的制度,有些人或许会问,就三个Java开发还需要代码审核吗?我给那些有这个看法的朋友的回答是:非常有必要。
首先说说代码Review的好处,好处很多,我这边只讲几个?
a.减少Bug率(知道有人会审核自己的代码,代码会写的严谨点,比如在学校的时候,老师没检查作业的时候,不写或者写的乱七八糟敷衍了事,当老师要检查作业并要求卷面整洁,哪怕你写的不那么整洁,但是至少比你之前敷衍了事或者写的乱七八糟要好的多;
b.提高代码质量(人都是有尊严的,码农也不例外,看到别人的代码质量很好,自己的很差,难免会心里不爽,于是追赶对方,想要比对方更好,我觉得在团队中这种良性竞争还是好的,这个代码质量的衡量指标,有这么几个方面,第一、看起来清楚整洁;第二、没有冗余重复的代码块。);
c.提高开发人员的责任感,有人说,项目bug一大堆很大原因是因为开发人员导致的,因为不负责任,完成任务就好,至于bug,管他三七二十一(实际上,从某个角度看,这也是没有办法的事情,因为如果不把任务完成的话,面临的就是项目经理的直接斥骂或者是其他一些成员的歧视或者是幸灾乐祸。之所以代码review能提高开发人员的责任感,一句话,没有对比就没有伤害,看到人家的比较自己好,自然心里嫉妒,这是人性的体现,包括我自己也有这样的心理。看到别人的代码质量好(即实现功能又美观),自己慢慢争取超过他或者是向他请教,我想一家公司的开发团队如果能有这样的氛围,那么软件的质量将会非常好的,但是就中国的这个大环境而言,中小公司对于代码Review并不是特别热衷,因为项目经理或者是项目组长觉得人少没必要多次一举;
d.熟悉彼此的代码,防止因为某人因为有事情需要请假,万一他的代码上线测试的时候有问题,需要改bug时,要么就是等他到时候上班的时候改,要么是自己硬着头皮看他的代码思路逻辑来改(当然了,如果他的代码写的优雅美观、逻辑清晰,那可是一件非常棒的事情,如果反之,乱七八糟,你将会怀疑人生),同时也在一定程度上,防止当这个人离职后,他负责的模块没人熟悉,当然了,也许会有人说,一般开发人员在提交离职申请书,都会有一个过渡期,让交接人员对接熟悉他的代码,但是如果有一个像淘宝、支付宝等这样的大项目呢或者是这个公司有很多业务,每个人负责至少二三十个模块等之类的,或许有人说,领导会考虑到这一点,让那个人离职延期直到交接全部后才批,但是现实是有的人直接会说,我半个月后就走,你必须给我批或者是你明天就要走或者下周,请问老板又能怎么办呢?所以说,从长远的角度看,代码Review就是为了防止这种情况出现,比如吴军先生曾经在他的一篇文章中,这样说过,“美国顶级的软件公司,开发项目从来不会因为一个人离开而进度受阻,你会发现有些人度假一周,整个项目还是在往前进行。但是中国很多大公司,大家得一起开发,任务没完成,经理不批准任何人的休假。这是开发管理水平不到位所致。”
2.引用新的技术,提高自己的学习能力
比如我当初觉得MyBatis不好用,于是便引用了一个开源项目MyBatis-Plus,当初用的时候,遇到很多困难,但是经过一段时间的使用,发现对它是越来越了解和熟悉了,包括它所出现的大大小小问题,我都能快速地解决,同时该技术对于我们团队而言,学习成本非常低,因为只要用MyBatis的使用经验,不需要一个小时就能学会怎么使用了。
当然了,并不代表引用新的技术就能提高自己的学习能力,引用新的技术,只能说明你的学习适应能力很强。我看了不少想guns、renren-security等这样的开源项目,发现它们的共同点其实就是咱们原有的那些框架的衍生或者强化,就如MyBatis-Plus本质上还是MyBatis,只不过做了一些强化罢了。
三、加班的频率
说到加班,记得刚刚进入这家公司的时候,刚开始第一个月基本是有双休的,但是第一个月后,为了完成老板的任务,基本就是周周六。每天也就是9点对8点,有的时候回来还得加会班完成工作任务。这个加班我还是能够理解的,创业之初,没有一个相对成型的产品,老板去吹牛拉投资也不好拉啊。
后来有一个阶段加了会班,是因为一个展会上需要展示我们的产品,为了保证产品在展会上不会出故障,我们那几周拼命调试改bug。
除了这个阶段外,还有一个阶段加班比较多,是因为我们团队成员(包括我在内)的原因,代码写的不够好,当初遗留的问题太多。
通常情况下,只要你工作足够认真负责,平时花点时间巩固下基础或者是接触一些新的技术,或者是看其他的书籍扩展扩展视野,提高自己的见识及其沟通能力,一般的话,是不用加班的。当然了,有一种情况除外,那就是公司团队人太少了,但是生意太好,一单又一单,这就是没有办法的事情了。
四、跟领导的关系
领导跟我是老乡,都是一个地方的人,我觉得,也许是因为老乡的缘故,感觉比较亲切,觉得相处也是蛮不错的。另外我们领导奉行的是“无为而治”。这个“无为而治”,并不是说不管我们和放任自如,而是指给我们足够的自由空间,任我们发挥,当然了,还有一个硬指标,那就是每周工作任务不得低于十项。
五、与同事的关系
公司人少,自然一些勾心斗角的事情是没有的,但是吵架还是有的,一般吵架都是因为业务方面的缘故,每个人理解不一样吧,比如你上午跟我要改这个功能和新增另外几个功能,然后我跟你确认两到三次后,你说没有问题,那我开始弄,弄完后,你却找我,说还是改为原来的吧。我想换做任何一个人,都会十分的生气。
除此之外,觉得团队成员还是蛮融洽的,没有必要为了勾心斗角而花费不必要的心力。
六、自觉性
我们领导没有对我们的电脑实现什么的监控之类的,同时,也没有根据代码提交的频率或者是功能的新增、bug的修改、功能的优化等指标来衡量我们的工作指标是否完成。
想偷懒的话,有一大把机会偷懒。但是我觉得没有这个必要。就好比南郭先生吹竽的故事那样,之前可以混在其中投机取巧,之后,想投机取巧都没有机会了。
我觉得我们开发人员对于个人的约束非常重要,确实有些公司对于员工的管理还是比较松懈的,但是有的员工却借此机会偷懒。
小结:
今天主要围绕全面发展、施展的平台的机会比较大、加班的频率、跟领导的关系、与同事的关系、自觉性等,阐述了我在创业公司的感触。当然了,感触远远不只这么几个而已,还有很多,以上的几个都是相对典型的。希望能给大家有所帮助。
最后来个问题解答:
有人问我:在大公司好还是小公司好?
我的回答是:能去大公司则去大公司,特别是对于应届生小伙伴们而言,大公司各方面条件都比小公司要好,至少大公司的培养人才机制还是很完善的,去大公司从实习到工作与小公司相比不会太累。
有人问:大公司分很多种,有像软通动力或者是中软国际这样的外包公司,也有像百度腾讯这样的公司,也许规模没有它们这么大。那么我该去哪个公司?
我的回答是:前提是你的面试通过拿到offer,我觉得你还是选择那些有自主产品的公司,原因是利于业务积累。
有人问:如果我没有进入大公司,却进入了一家小公司怎么办?
我的回答是:还是那句话,选择有自主产品的公司,当然了,如果你觉得自己编码能力不行的话,可以去外包锻炼锻炼一年左右或者两年。做过的项目足够多,编码能力自然能上来。
还有人问:万一找不到工作怎么办?
我的回答是:如果是因为能力不行的话,尽量一方面花点时间提高自我,临时抱佛脚总比天天打游戏要好,或者是你的眼光太高忽略了自己的实际能力,建议放低自己的姿势,不要眼高手低,要实事求是。
最后,给应届生朋友们几点建议?
1.离毕业越近的时候,不要过于恐慌,尽管IT这一行也可以说是狼多肉少,但是与其恐惧慌忙不如脚踏实地的多钻研钻研提升自我;
2.找到工作后,特别是对于第一份工作,特别是那些学的不是特别好的,建议,只要工资能解决温饱就行,其他以积累为主,在这家公司尽量待长一点,可以是一年也可以是两年,我相信只要你足够踏实努力,领导绝对会给你涨工资的;
3.那些一时没有找到工作的朋友和总是面试碰壁的朋友们,你们千万不能放弃,特别是总是面试碰壁的朋友们,你们一定要多多总结面试的经验,不仅仅要从面试官的看,还要想想自己的不足之处;
4.有不少没有良知的培训机构打着招聘的幌子,忽悠应届生来培训,建议应届生朋友们,要放亮自己的眼睛,特别对于那些写着致力于在IT界发展或者是对于应届生工资特别高(技术要求不高)的,要特别注意,最好还是百度或者其他途径搜索一下,看是不是培训机构之类的,或者是几个好哥们一起面试共享,看那些是培训机构之类,这样避免去浪费不必要的时间;
由于我自己工作年限不是特别长,给工作年限三年以内的小伙伴们的建议是:
1.专注于技能的提升,不断学习;
2.专注于业务的积累,提升自己的业务理解能力;
3.博览群书,提高见识;
4.虚心而不自大,人外有人,山外有山;
5.不要过于安逸(当工作一年或者两年后,你会发现工作上基本都能搞定,于是就显得懒惰和不思进取了,有些时候我觉得自己都有点开始安逸了);
6.多运动,跑跑步(有氧运动)或者是打打羽毛球(防止颈椎病),闲暇时,多走走,去公园走走,哪怕陪陪女朋友逛街也行,至少走也是一种运动方式;