如何确定自己是否适合做程序员?

怎样知道自己到底喜不喜欢编程?将来要以此为工作?
关注者
10,107
被浏览
4,351,846
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

从人的角度看。

衡量一份工作是否适合自己的标准至少有三个:所擅长的、所喜欢的、对最有价值的(最能挣钱的)。如果把世界上所有的工作按自己的标准分类到这三个组里,理想的状态是这三个组存在交集上,然后从这个交集里选一个。然而不幸的是,对有些人来讲,这三者的交集为空,还有更不幸的情况是任意两组交集都为空,最不幸的情况是这三个集合本身都为空。当一个人不知道自己擅长什么,也不知道自己喜欢什么,也不知道什么对最自己的人生最有价值的时候,就属于这种最不幸的情况。根据题目描述不难推测出:程序员这个职业目前不在题主的擅长集,也不在热衷集,或许在价值集。

从程序员这个职业的角度看。

判断一个人是否适合做程序员的标准很多。最关键的几个是:

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点能做好,在软件业的职业发展不会很理想。

如果实在分辨不出哪个适合自己,那就选自己最喜欢做的。