引言
本篇博文接着许久之前的一篇博文《浅谈程序猿的职业规划,看你如何决定自己的未来吧。》,继续探讨一下程序员行业相关的内容。
行业的选择不仅对于程序员来说非常重要,对任何一个人来说都是一样的。只不过对于程序员来说,行业更容易被忽略。从程序员每天热议的话题就能看出来,大部分的热议话题都是C#和Java哪个更牛B,或者IOS和Android哪个挣得钱多,很少看到程序员去讨论两个行业谁更有发展前景。
鉴于此,今天我们就来着重讨论一下程序员行业的选择,行业和语言一样,没有谁优谁劣,只是一种选择罢了。
另外在这里向猿友们汇报一下,上次博文中提到的艰难的项目已于8.1日按照预期上线,尽管LZ得到了CTO的好评,但LZ也非常清楚LZ付出了什么。后续LZ将尽全力保障项目的稳定运行,并在之后申请经费带着期间加班的同事一起happy一下,缓解大家之前加班的怨气。但就像LZ所说的,事情终归是办成了,所以LZ也算没有让猿友们失望,成了功臣而不是罪魁祸首。
浅谈行业知识的重要性
行业知识一直以来都是程序员非常容易忽略的,这主要跟程序员这个群体的普遍性格有关。
程序员的性格是什么?宅,闷骚,偏执,厌恶约束,有点自负,有点自卑等等一系列的特征,如果你不具备以上当中的任何一条,LZ只能说,“请联系我!”。
有不少猿友都对技术有一种偏执,也正是因为这种偏执,让一部分人成为了优秀的程序员,但也往往让他们失去了一些东西。作为一名程序员,技术自然是扎根之本,但只修内功,不修外功也是不行的。
以前LZ觉得程序员的内功是基础知识(比如算法,设计模式,计算机系统知识,网络协议等等),而外功则是解决各个问题的具体技术(比如解析excel需要poi,制作统计报表需要jfreechart等等)。现在想想,这样的划分其实是有问题的,像poi,jfreechart这类具体的解决问题的方式是没有资格称为外功的,它们只是像eclipse,pl/sql这类东西一样,最多算是一种工具。更形象的比喻应该是基础知识就是九阳神功,具体的技术就是乾坤大挪移,只要学好九阳神功,乾坤大挪移只需要在洞里花费几天就能学会。因此,如果你现在还沉迷于修炼九阴白骨爪,葵花宝典等各类顶级的杂牌武学,现在是时候醒悟了。
那么真正的外功是什么呢?真正的外功其实正是行业知识。
不少人肯定都看过武侠小说或者电视剧,内功与外功(或者叫招式)是相辅相成的。内功越强,同样的招式就会威力越大。更重要的是,外功越强,更能将内功发挥的淋漓尽致。
对于程序员来说,内功就是技术底蕴,外功就是行业积累。技术底蕴越强,当你带着同样的行业积累与别人谈判时,就会越具有冲击力。行业积累越深,就越能将你的技术底蕴彻底的发挥出来。
举一个不太恰当的反面教材。在LZ的公司里,有着这样一群人,他们被尊称为架构师,他们每个人都有着深厚的技术底蕴,但却只能每天无所事事,不痛不痒的插手着各个项目组的技术架构,技术体系,系统设计。
究竟是什么导致了他们尴尬的境地?相信现在不用LZ说,各位猿友也能猜到一二。正是因为他们整天处于一个相对来说比较纯净的技术环境,一些必要的行业知识或者说业务知识实在是太贫乏了,对系统当前要做的事情以及将来要做的事情缺乏深入的了解。因此哪怕内功再深厚,没有招式的话,是无法发挥出威力的。
或许有的猿友会说,不是无招胜有招吗?是的,没错。但是无招可不是说没有招式,而是要自己创造招式。
有不少程序员都会忽略甚至抵触行业知识,包括以前的LZ。LZ一度觉得,了解行业知识或者说业务知识就是浪费生命,原因很简单,如果换一家公司,不同的行业,那学习那些行业里的业务知识岂不是白瞎了吗。
现在想想,这个结论其实是有很大误解的。对于跳槽来说,如果是同行业的,那么在技术底蕴同等的条件下,更多的行业积累会让你的价值增加几倍甚至数十倍。就算到时候你真的换到了不同的行业,在之前的公司,通过你内外功兼修的方式,你也会更加容易挤入到更高层里,这样在换行业的时候,你的职位定位本身就会高出一些档次。况且,换工作本身就是一件重头再来的事,你最白瞎的是你在公司的积累,比如贡献的积累,人脉的积累等等,而不是其它别的东西。
以上结论都基于LZ到现在才认清的一个现实,那就是一般情况下,稍微大点的公司里,从来都不缺技术人才或者业务人才,但都缺技术和业务双双兼备的人才,因此这样的人在公司里是很容易得到重用的。
总之,成为一个技术大神固然是好的,但深入了解公司业务,让你的技术能力充分发挥,才能让你和你的公司更好的实现双赢。
浅谈面试中的行业选择
讨论完行业知识的重要性,我们来谈谈LZ最近面试的经历。最近LZ的项目组内,被LZ开掉了几位外包同事,因此需要一批内部员工补充进来。至于为什么要开掉这些人补充内部员工,这里LZ就不多做解释了,这些更多是管理方面的内容,与本文关系不大,这里只简单说说LZ面试的经历。
由于有了不少招人的指标,LZ也开始在繁忙之中抽时间筛选了大量的简历。LZ面试的人比较杂,从初级开发到研发经理都有,LZ问的问题也是千奇百怪。不过有一点是基本上不会变的,那就是只要是中程或中程以上级别的,LZ基本上都会问到一个问题,就是“你对我们公司是怎么看的”。
其实LZ问这个问题的目的很简单,就是考验面试者对行业以及未来的思考。如果抛开公司规模、公司性质(比如外企,私企,国企)等等这些属性,每一个公司最重要的属性就是它的行业。不过令LZ失望的是,真正能体会到行业选择重要性的面试者寥寥无几,甚至有6、7年经验的猿兄在回答这个问题的时候竟然跟LZ谈公司环境挺不错的,着实让LZ汗颜。
不过也有极个别的面试者对此有深入的思考,会着重强调选择我们公司是因为行业,而且会解释一下为何会选择这个行业。这种面试者会给人一种善于思考,目标清晰的感觉,就这一个问题就加分不少。
对于初级程序员,LZ一般不会问这个问题,因为初级程序员大部分情况下的原则是逮着一个工作就好,不太会也没必要去思考行业,而且也不一定有资格自由选择。这一点在之前职业选择的博文里LZ也提过,程序员刚入行的时候,行业并不是那么重要,除非你特别讨厌某个行业。但对于工作了三年以上的程序员来说,行业就是个人必须考虑的问题了。当然了,三年只是取个平均值,具体何时该考虑,也是因人而异的。
如果你现在正在准备面试,不妨对自己将要去面试的公司做一个简单的了解,或许会有不一样的收获。
浅谈程序员常见的几种行业类型
现在世界上现存的行业已经数不清了,但对于程序员来说,无非也就是几种类型。接下来LZ给各位猿友罗列一下这些类型的行业。特别要说一下的是,这些行业与语言一样,没有明显的好坏之分。
类型一:互联网
互联网分为传统互联网和移动互联网,激情与创新是互联网行业的代言,机会与风险也充斥着互联网行业。
程序员是一群喜欢激情与创新的人,因此互联网行业往往被程序员所青睐。或许真的是这样,互联网公司的气氛与文化可能与程序员更加契合一点,但凡事都有两面性,加班也是互联网行业的专利,因为时效性在互联网行业是非常讲究的。
互联网行业的代表公司也是大家耳闻能详的,比如著名的BAT。进入这些公司往往是大多数程序员的梦想,但事实上或许是因为得不到的才是最好的,很多时候,一旦得到了,或许一切并没有自己想象中的那么美好。总之,萝卜白菜,各有所爱,孰好孰坏,谁又能说的清呢。
类型二:甲方
甲方与乙方是相对的,一般这么叫是因为合同上的叫法。这里简单普及一下,甲方一般就是指软件的买方,乙方自然就是软件的卖方。两者是纯粹的利益关系,一切按照合同办事。但不管怎么说,买方的地位相对来说会比卖方高一些,因此甲方与乙方的项目经理往往完全是两种概念。
甲方公司一般充斥着各个行业,比如金融,物流等等。有的时候是直接购买乙方已经做好的软件,有的时候则是软件定制,也有的时候是直接外包给乙方开发等等。甲方的特点是客户的容忍度较高,毕竟是给自己公司做的,但缺点就是由于需求变化的代价非常低,因此甲方的程序员往往会面临频繁的需求变更。
这类公司的代表公司很多,比如LZ所在的公司,比如申通这类物流公司,都属于这一类。在这类公司里,一般能对某一个行业深入了解,但一般技术上的要求会低一些。
类型三:乙方
乙方就是卖方,一般定位在软件行业。乙方由于一般是根据合同内容服务于甲方,因此相应的需求变更会少一些,毕竟甲方的需求变更一般是需要加钱的。但缺点就是,由于按照合同办事,因此项目必须按期交付,否则尾款就成了问题。因此在乙方上班的话,或许加班会非常频繁。这一点上,甲方相对来说会轻松一些,但都是相对来说,并不是绝对的。
乙方的代表公司一般就是一些软件公司或者外包公司,比如金蝶,华为,瑞友等等。在这类公司里,一般能了解到各个行业,对技术上的要求会高一些,因为要应对各个行业各式各样的需求,但很难对某一行业进行深入了解。一个是因为要跟着客户走,一个是因为一些核心的业务一般是不会让乙方来做的。
类型四:游戏
游戏行业又分网游,手游等行业,游戏也算是一个类型的行业,总体来说,游戏行业与互联网的特点非常相似。相对于甲方乙方的这种公司来说,游戏行业和互联网行业中,程序员的地位会更高一些。但游戏行业与互联网一样,暴利之下隐藏的是巨大的风险,一旦失败,往往面临的只有倒闭,没有生还的可能。
游戏行业的程序员待遇相对来说会高一些,但也要看情况。凡事都不是绝对的,以某几个公司的工资水平来衡量一个行业,是有些不太合适的。游戏行业的代表公司也比较多,比如盛大,网易等等。
小结:
以上这几种类型只是LZ对程序员常见行业的大体划分,没有任何官方依据,只是LZ自己的思考而已。本文所说的行业知识的重要性,主要针对目前在甲方和乙方的猿友们,在这类公司当中,行业知识是相当重要的。对于完全一样的技术水平来说,你对目前所做项目所处行业的了解程度,基本上能直接决定你的地位与作用,也就是说,很大程度上,可以决定你在公司的发展。
对于互联网和游戏行业来说,靠谱的创意可能更重要一些。这就需要你了解市场环境,了解大众需求,了解盈利模式等等。如果你能在技术修炼的基础上,加入这类知识的修炼,或许能让你在这两个行业里混的更加风生水起,比如让你去开发DOTA2,你最起码得天梯2000分以上吧。
总的来说,不论身在何处,技术都不是最重要的,或者说不是唯一重要的。这么说,有点自黑的嫌疑,但事实确实如此,LZ也不得不面对这个现实。除非你可以创造出一种新的科技,比如当年第一台计算机。
或许LZ这里会打击到一些新手们对技术的积极性,但猿友们也需要了解这些,可以少走一些弯路。技术始终是在为人服务,所以了解这个世界,了解这个社会,了解人,才能真正创造出有意义有价值的技术。LZ这里无意评论行业的好坏,也没有这个资历去评论,具体选择哪个行业还是要猿友们自己决定。LZ这里只是为了提醒猿友们,好好钻研技术是好的,但切勿把技术当作你的全部,这样你会失去很多其它重要的东西。
浅谈程序人生
程序员的一生特别像玄幻小说中的修炼者。开始的时候,要先学会内力(技术)才能进入修炼者(程序员)的行列。随着内力慢慢精进,就需要招式(行业知识,或者与此相似的非技术知识)来增加战斗力(工作能力)了。开始的时候,一招一式都会大大增加自己的战斗力,慢慢的,随着招式越来越强,需要的内力也越来越多,内力逐渐显现出不足(技术跟不上需求要求)。此时,又需要全力修炼内力。如此反复,整个人就会从初级武士(初程)逐渐升到高级武士(高程),直到打破瓶颈,成就武神(项目经理或者研发经理等等)。
原本以为到了武神就到了武之最高境界了,谁曾想在成为武神之后,飞升来到了另外一个世界。原来,这个世界上还有神域(到了新的层次会接触到更高层的领导,比如其它项目经理或者部门经理,CTO等),这里最低的等级都是武神,自己开始所在的,只不过是最低等的人间罢了。后来会发现,武神修炼的不再是内力和招式,而是神力(能力,比如办事能力,交际能力,也包括技术能力)和天道(个人素质,个人修养,个人天赋等软技能)。
于是,你会忽然醒悟,原来之前的内力(技术)只不过是神力(能力)当中的一种罢了,外面的世界非常之大,内力只是让你接触这个世界(社会)的开始而已,绝不是你的全部。