因为种种原因想要转行做程序员的人,总会有这样的困惑:我是否适合做程序员?让我们来看看知乎上Hugo Wu的回答
从人的角度看。
衡量一份工作是否适合自己的标准至少有三个:你所擅长的、你所喜欢的、对你最有价值的(最能挣钱的)。如果你把世界上所有的工作按自己的标准分类到这三个组里,理想的状态是这三个组存在交集上,然后你从这个交集里选一个。然而不幸的是,对有些人来讲,这三者的交集为空,还有更不幸的情况是任意两组交集都为空,最不幸的情况是这三个集合本身都为空。当一个人不知道自己擅长什么,也不知道自己喜欢什么,也不知道什么对最自己的人生最有价值的时候,就属于这种最不幸的情况。根据题目描述不难推测出:程序员这个职业目前不在题主的擅长集,也不在热衷集,或许在价值集。
从程序员这个职业的角度看。
判断一个人是否适合做程序员的标准很多。最关键的几个是:
0. 理解力(或自学的能力):程序员的起点。具有这个能力的特点是,如卡马克说的:“给我一冰箱的汉堡和互联网,我就能解决所有问题。”。如果你从小养成了个习惯或思维定势——觉得没有老师教就学不会,那你不适合当程序员。如果你学了的东西只是为了过考试,比如学完高中物理还买个仙人掌放电脑前防辐射,你也不适合当程序员。
1. 逻辑思维力(或推衍的能力):这个是做称职程序员的底线。比如不能写的代码出个Exception就抓瞎不知道哪里出了问题,而是有能力从Exception顺藤摸瓜反推出哪里出了问题。Code即逻辑,Code有问题即逻辑有问题。没有逻辑的人是无法找到逻辑漏洞的,也写不出条理清晰的代码。
2. 抽象思维力:这个能力大体可以决定一个程序员的上限。没有这个能力是做不出一切皆文件这种抽象的,可以试试学习函数式编程,如果无法理解并使用高阶函数,你不适合做程序员。再来几个更初级的例子。如果你学写代码的过程中,理解指针的指针的指针这个东西的时间超过了一天,那你不适合当程序员。(强调一下,这里不适合是指你无法成为一个优秀的程序员,你想做当然肯定是可以做的。)
3. 专注力:我理解的专注力只是兴趣的衍生品,你打Dota打CS打个几个小时能越打越精神,为什么?因为你觉得有趣儿。如果也觉得写代码有意思,那专注自然就不是个事儿。
4. 想象力与记忆力:这个不是说过目不忘的那种,只是说你大概记得有什么类,都有什么函数,每个函数里的大体过程是什么样的。然后走路、坐地铁的时候就可以用想象力在脑子里做代码的重构啦,找Bug啦什么的,然后回到电脑前就噼里啪啦敲代码。我听说有人在梦里也能写代码,我还没有锻炼出这个技能。当然,这些能力不是必须的,你随身带个笔记本也行,就是效率低些,影响职业成长的上限。
5. 英语:很遗憾地,目前多数有价值的东西都是英文的。所以无障碍阅读Stackoverflow的回答是起码的。
6. 阅读速度:我想不出一个和合适的能力名与之对应。大体是指看书、看网页、看和理解代码的速度、如果有需要,能从一大堆Log中迅速找出关键信息(当然不是仅仅阅读速度的问题,还确定于你所能熟练使用的文本处理工具)、能抓到在屏幕上一闪而过的异常讯息(不是说能记住,而是说一眼就能感觉出有些不对劲,然后回去细看。)有不少人也不笨,但是聪明反被聪明误,从小不怎么看书,阅读速度上不去,一个Stackoverflow的回答,有人扫一眼几秒就抓到重点,有人要看3分钟。有人看代码速度,一目十行,再善用佳软,再加强大的理解力和扎实的基础知识,找个Bug几分钟的事儿,有人看代码瞪着屏幕一个单词一个字地看,文件一多就阅读障碍了,如果理解力再差些,找个同样的Bug找一上午。当然这个技能不是很核心,因为它无法独立带来价值(有人看小说快,但是看代码慢,就是由于别的核心能力不足,阅读速度快也没太大用)。但是这个技能很锦上添花、拉开差距(阅读速度+理解力=更快的学习能力)。好在这个技能算是可以锻炼的,只是如果你比别人晚了20年开始锻炼的话,怕是再努力也要几年才能追赶上。
7. 沟通:很多人都觉得程序员不需要沟通,其实只是板砖码农不太需要而已。你起码要能清楚地解释自己的方案,更好地沟通是能把自己的好想法推广出去。当然,如果你1-4都是非常NB的水平,你不沟通也没有问题。桃李不言,下自成溪。你一个人把大家的代码都写了,你一句话不讲,大家也会把你当神的。
以上几个能力,0-6应该在学校就获取到80%,7在学校获取到50%。能把上面几点全部做到很好的人是极少数,能把其中的2、3点做好大体就算“适合”做程序,能在软件行业找到合适的岗位了。只是如果只有2、3点能做好,在软件业的职业发展不会很理想。