问答|我适合做软件开发吗
最初我在运营微信订阅号“程序视界”时,设置了两个免费的互动栏目:“程序员的职业规划”和“有问有答”。很快就不断有人加我微信,找我聊程序员职场相关的话题。短短两个月内,线下与5个人当面讨论过,微信和QQ上聊过的人就太多了。
后来我把聊天记录都汇聚在一起,回顾了一下,发现在初入行这个阶段,有一些共性的问题,特此写这篇文章,希望对将要加入计算机软件行业,从事开发工作的朋友和刚刚开始做软件开发的朋友有所帮助。
对于初入行的朋友来讲,有很多的忧虑和担心,我从整理的聊天记录里发现了下面7个问题:
●我是否适合做软件开发?
●哪个方向好,比较有前途?
●学哪种语言?
●怎么学?
●第一份工作怎么找?
●怎样才能变优秀?
●怎么才能开始行动起来?
这次我会着重说第一个问题,捎带着可能会提第7个问题,其他的问题我们留到后面去聊。
三位朋友的提问
2016年1月1日,“小眼睛”在微信上问:
您好,我是一名23岁的建筑系刚毕业学生,对目前的工作确实提不起兴趣,没有成就感,想尝试考研转到程序员行列,不知道自己是否合适,很迷茫,不知道您有什么好的建议吗?
2016年1月6日,“想飞的小鸟”在QQ上问:
你好,我大学学的专业是电子信息科学与技术,毕业快5年,但毕业之后转行从事了建筑建模工作近5年,而后跳槽,接着公司破产,现处于待业状态。现在又想转行做回IT,我马上29岁,外面有些iOS和安卓开发的培训,我在疑惑这些培训是否靠谱,我的年纪对于重新学习IT会不会有点迟……
2016年1月9日,“谁夺走了我的爱”在微信上问:
您好!我29岁,在北大青鸟培训Java、C#,初级课程学完,中级开始,但是学得并不是很好。总是处在迷茫中……
前面是几位想要从事软件开发工作的朋友问我的问题,昵称是我随便起的。还有一些朋友问到类似的问题,这些问题归纳起来,其实是一个问题:我是否适合做软件开发?
我是否适合做软件开发
这其实是一个非常难以回答的问题,业界并没有一个标准,说哪种人适合做软件开发,哪种人做软件开发就一定能大有成就。
温伯格在《程序开发心理学》一书的第8章,专门讨论了性格因素对程序开发的影响。温伯格认为:
相比较为稳定的智力因素,性格特征对软件开发的影响更大,甚至远远超过人们通常的估计。
他提到了专业程序员需要的一些性格和能力,诸如“在高压力的环境中坚持一个多星期的能力”“适应变化”“爱好整洁”“谦逊”“幽默感”等。然而他后来又说,我们从正在从事软件开发工作的人身上来寻找适合这个职业的性格,可能错过了那些适合这份职业但还未进入这个行业的优秀人员身上表现出来的其他性格。
MBTI把人分为16种性格类型,每一种都有相对适合的工作。其中,INTJ和INTP这两种类型的典型职业里有提到程序员、计算机软件设计/开发人员。
也许我们做个MBTI测试就可以明确自己是否适合做软件开发?也不是的,我的MBTI类型是INFP,但我都做了十多年软件开发了……
看起来似乎没有一种明确的方法可以判定一个人是否适合从事软件开发工作……这是一个令人沮丧的结论。
然而我们也不必因此而失落,实际上MBTI性格类型、还有霍兰德职业兴趣理论,都提供了一些手段帮助我们界定自己适合的职业范围。温伯格列出的一些性格特点也确实是程序员需要具备的。
所有这些都从群体特征上,帮助我们缩小了选择范围。但对一个个体而言,到底是否适合做软件开发工作,还存在很多的具体因素需要区别对待。
验证适合与否的实操方法
我知道一套具有很强可执行性的实操方法,能让一个个体在比较短的时间内判断出来自己是否适合从事软件开发工作。非常简单,就是:先评估性格和兴趣特征,然后通过实践去尝试。
性格特征评估可以用MBTI,兴趣特征可以用霍兰德,都有标准的量表,这些理论和量表,得出的结论仅供参考,而且它们通常也不会板上钉钉那般给你一个方向,说“就这个了,去吧,信我者得永生”。
量表测试只提供一个相对适合的参考职业范围,更重要的是我们如何通过实践去验证某个职业真的适合我们。
结合提问的朋友的情况,还有我自己的经历,我觉得要从个人具体情况来谈如何通过实践验证自己是否适合软件开发,大概有三类:
●即将走向社会的学生。
●正在从事其他行业的职场人士。
●暂时无业者。
当下的职场状态,会在很大程度上影响你的选择。上面的划分,正是从个人的职场状态来的。
有的人可能很不满意现下的工作但又忙得像高速旋转的陀螺,根本停不下来,更别说花时间去实践了。而对于学生来说,则会有比较充裕的时间在较轻的压力下来验证(没压力也可能难以有动力^_^)。对于无业者来说,如果没有积蓄,也没有父母或另一半的经济支持的话,生活压力会比较大,会大大地影响选择;而如果还能过得去,就可以相对从容地去验证自己是否适合从事软件开发。
不论哪种情况,都不要随随便便把自己像“行货”那样交出去,政府、家人都不能为你负责,只有你自己才能为你的选择担起责任来。
注:王小波有篇杂文,《“行货感”与文化相对主义》,可以看看。
好啦,现在可以来聊聊实践验证的三个步骤了。
1.职业信息搜集
想必你考虑是否要成为一个程序员时,已经了解了很多信息了。比如计算机软件行业是怎样一个行业、软件是什么、开发人员怎么生产软件、行业就业前景、典型的业内公司的情况等。
那这些信息够不够呢?要回答这个问题,得从职业的定义说起。
通常我们所说的职业指职能,比如医生、教师、程序员,实际上包括两个维度:职能和行业,职业的定义应该是这样的:
职业=行业×职能
行业是指其按生产同类产品或具有相同工艺过程或提供同类劳动服务划分的企业或组织群体的集合,如饮食行业、服装行业、机械行业等。从这个角度看,构成行业的很重要的基础因素就是知识组合,一个行业就有一套知识系统。
职能则着眼于企业内的岗位的技能分工,比如会计、出纳、招聘专员、软件开发工程师,要求的技能都不一样。
基于这样的认识,我们在搜集职业信息时,要了解行业信息、行业内产品信息、知识范畴、行业内的企业构成、行业的前景、企业内的岗位信息、对应岗位的人具体干什么事情、需要什么样的技能、有什么样的社会地位。
所有这些信息都是相对客观的信息,可以从网络、传统媒体、图书等各种渠道获取到。要大量的,详实的收集相关信息,这将有助于帮助我们判断某个职业是否适合我们。
比如一个人对使用计算机完全不感兴趣,对编程语言完全不感兴趣,那基本上就可以排除做软件开发的可能了。
2.生涯人物访谈
我们搜集了客观的职业信息,还要了解从事某一职业的个体的感受,说白了就是从事某种职业的人的状态如何。
以快递行业为例。当我们想做快递员时,了解快递员的日常工作情况、正在做快递工作的人员的感受,对我们的选择影响非常之大。比如你很难接受在寒风和雾霾中开着电动三轮车走街串巷,那么快递员职业就不适合你。
以软件开发工程师为例。很多人搜集了职业信息之后会对CBD、高薪、27寸大显示器、Mac Book、规律、专业、智慧等感兴趣,觉得所有这些点都是自己想要的,就准备报名上培训班了。然而,如果你不实际接触一个从事软件开发工作的活生生的人,就很难了解真实情况:需求经常变更、加班是行业潜规则、技术更新快、多数领导只关心进度不关心人、压力大、Bug会让你抓掉所有头发、随时可能被炒鱿鱼或者被告知公司关门……
所以,找到从事相关目标职业的人聊一聊非常有必要。我大学毕业时找工作,眼前一片茫然,不知道每个行业如何,也不知道找谁去问,可是我远在农村种地的父亲却深知了解具体工作情况的重要性,居然拐弯抹角托了一长溜人打听了四川成都一家航天研究所的情况。所以,有时我们找不到从事目标职业的人物,只是因为我们没把生涯人物访谈当一回事儿,没有意识到其重要性。
有时我们也会找错人,比如我们想了解程序员的工作状况,如果你找到一个祥林嫂式的人物,他强大的负能量和裹脚布一样长的抱怨,很可能误导你得出错误的结论。所以,我们要找那些看待事物比较客观的人,有时为了避免受单一样本的失真影响,还要多找几个人。
其实每一个人谈论的都是自己。看起来他在说公司、说产品、说团队的氛围、说加班的感觉、说需求的变更……其实都是在说自己的感受,而同一件事对人的影响,在不同的人身上差别很大,有人觉得无伤大雅,有人可能就痛不欲生。所以,我们在做生涯人物访谈时,也要有区别的对待、批判性的思考,不能学过河的小马。
了解、接触软件开发到底是怎么回事儿非常必要,可能你找个行内人聊上一个小时,就能得出自己不适合干软件开发这样的结论。当然也可能你聊着聊着眼睛就会越来越亮,越聊越发现自己适合干这个,那就可以进入职业情景体验环节了。
3.职业情景体验
现在有很多儿童职业体验馆,可以让孩子们在不同职业体验主题店中扮演各行业成人职业角色,在玩乐中培养职业理想,规划自己的未来。
对想要进入某个行业从事某种职业的成年人来说,职业情景体验非常重要。如果你能在实际工作环境中待上一天,就可能改变你对某种职业的看法。
我个人认为,职业情景体验分两个层次:
●近距离观察。
●实作体验。
(1)近距离观察
近距离观察,可以在你无法立刻从事相关工作的情况下采用。比如你已离开学校,进入其他行业,就像前面提出问题的“小眼睛”那种情况,就可以先采取这种方式来观察。具体展开,又有很多不同的方式。
●到软件园附近,观察过往的人的精神状态。
●中午混在去吃饭的人群中,留意大家在聊什么,是吐糟需求又改了,还是Bug找不着,还是领导又强制加班了,这些信息都能得到,到软件园附近的小饭馆,也可以听到很多有趣的谈话。
●找一个从事软件开发的朋友,到他的公司待一天,看看大家的工作状况,多观察几个人,看他们的精神状态。
●到车库、必帮或者3w等咖啡馆喝杯咖啡,支楞起耳朵听听周围的人是不是为创业疯魔了
……
只要有心,有很多途径可以让你较为深入地从活生生的人的角度来了解一种职业。
有时你看看从事某种职业的人的表现,就能笃定自己是否适合做这个。同一个行业的人会有很多共同表现,你看到的那些人可能就是你将来的样子,你可以选择是否成为那个样子。To be, or not to be,往往就在一瞬间。
刘邦见到秦始皇出游,说了一句话——“大丈夫当如是也”,后来建立汉朝。
克林顿原本在读音乐系,吹萨克斯管,17岁的时候遇到肯尼迪总统,后来决定从政当总统,真当上了总统。
这些例子可能离我们较远,但他们确实说明了榜样的力量。你要成为什么样的人,就和什么样的人在一起!所以,你近距离地观察程序员的生活,留意上两天,就可能会做出正确的决定。
(2)实作体验
你观察了某个职业人群,觉得自己就是要成为那样的人,那就可以再往前走一步,看看是否真能做起来。
去做做看,这就是验证是否适合软件开发的终极武器。
正在上班的人可能会说工作挺忙的没时间去做做看,其实时间总是有的,就看你是否真的渴望去做这件事。白天上班,那晚上呢、早上呢、周末呢?如果你真的重视一件事,就可以为它挤出时间来。当一个人不想做一件事时,总会找到理由的。
对于软件开发来讲,试试看的成本很低——因为自己一个人就可以开发点东西出来。
所以,我给那些想转做软件开发的朋友的建议,基本上都是这样的:
先找本教授写的编程语言的书(视频等)来自学,看自己能否学进去,能否自己把环境搞起来做点小实验,坚持一段时间,看看自己是否还有兴趣,如果还有兴趣,那就把它学完。也可以去报一个软件开发培训班,培训可以带你快速熟悉一个技术方向。但不能只依赖培训,更重要的是坚持自我学习和自主练习。
一旦你能通过自我学习掌握一门编程语言,就可以继续往下走,做更深入的体验。比如自己去做一个解决实际问题的小软件(像图书管理系统、记账、博客系统、待办事项等),或者寻找免费兼职的机会,这样你可以锻炼自己掌握的技能,也可以进一步积累经验,判断自己是否适合继续往前走。
如果有机会,能免费进入一个公司去实习或兼职也是非常好的,在一开始,重要的是锻炼的机会。为将来正确的方向,花上一点时间和代价,非常值得。
四句话总结
洋洋洒洒好几千字,其实总结一下,核心意思就四句话:
●从性格和兴趣角度判断是否适合做软件开发。
●搜集客观的职业信息,从知识、技能、工作内容上帮助判断。
●通过生涯人物访谈了解别人对某种职业的感受和看法。
●通过近距离观察和实作这两种方式的职业情景体验,进一步验证软件开发是否适合自己。
如果我们能按照上面的方法走完整个过程,我们的决定就会靠谱很多。