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