新闻资讯
如何确定自己是否适合做程序员?
子「爸,我想当程序员。」
父「哦,那你先买40公斤面粉来!」
子「啊?为什么?我一个人怎么搬?」
父「自己想办法。20分钟之内搞定!」
子「时间也太短了吧!」
父「还有,不要面粉了。要低筋粉。还剩5分钟。」
子「要求变太多了吧!」
父「儿啊,我看你当不了程序员。」
——Twitter.StarKnight 译
摘自朋友圈...
#################分割线###############
感觉要破百,第一次。事先感谢下点赞的朋友们和发此朋友圈的哥们。
会不会更完这条就再也没人点赞了……
#################再割################
诚惶诚恐,第一次这么多赞,其实有点歪楼,像各位大神说的,确实乙方的状态都差不多,只是在不同行业上具体实现形式上有所不同。
所以不管做什么,个人认为还是兴趣最重要,在这种工作状态下,就算对本身工作兴趣十足,到最后都有可能被磨的不想干了;那么,如果没有兴趣,可能真的就呵呵了。
如果题主说,就是不知道自己兴趣是什么,才这么问,那真的,哎。各路大神有好多已经答了这个行业大概是在干什么,剩下的,多去了解,多思考,多做,多体会。
最后祝题主早日找到自己的兴趣点,好好坚持。
爱运动。这是一个可以坐一天的职业,没有下课铃,没有课间操,一年到头,天天如此,自己不动,没人拉你。没有运动习惯,干个十年八年,身体就顶不住了。最好有一两个运动爱好,这样才能长久。
可以不说话。就像狗每天需要溜溜,人也有交流的需求,但程序员往往一天说不了几句话,一说话就是改需求,修bug,如果自己要靠说话释放压力,愉悦心情,就要考虑考虑了。
一个人战斗。别说这个我不会,别指望别人告诉你怎么做,自己找,自己学,不揪头发想几个小时,不要开口问别人。
英语阅读能力。不需要能读报纸小说,但至少能阅读文档,看Stackoverflow,给变量起名字的时候,不用拼音。
动手。会吹的是老板,能做出来的,才是程序员。思考如何实现,动手配置环境,一行行的写出细节,不论结果多简陋,依然能从中获得成就感。
容忍抽象。什么层呀,类呀,栈呀,堆呀,都是抽象,是摸不着看不到的东西,是由逻辑和行为来定义的,一开始会觉得很难理解,最好的办法是自己实现一遍。
不断学习。程序员的快乐来自于学习和实现,如果学习让你感到痛苦,乐趣也就少了一半。终身学习,也算是职业特点。
能够对着屏幕一整天。这是职业现实,没什么好说的。
直接敲代码就行。
怎么知道自己是否喜欢素描?怎么知道自己是否喜欢唱歌?这答案应该不需要问别人吧。
有挺多妹子私信问过我这个问题,但是她们的特点是:都还没起步。还没开始敲几行代码,就开始担心以后的职业稳定性,收入,适不适合女生等等问题。
这问题其实你自己敲段时间就有答案了,别浮躁。对我而言,看到自己做出的东西能有种正向激励所以就一直自学下去了。
1.老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个。当晚老公手捧一个包子进了家门。老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道:因为我真看到卖西瓜的了。”
2.前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug。
从人的角度看。
衡量一份工作是否适合自己的标准至少有三个:你所擅长的、你所喜欢的、对你最有价值的(最能挣钱的)。如果你把世界上所有的工作按自己的标准分类到这三个组里,理想的状态是这三个组存在交集上,然后你从这个交集里选一个。然而不幸的是,对有些人来讲,这三者的交集为空,还有更不幸的情况是任意两组交集都为空,最不幸的情况是这三个集合本身都为空。当一个人不知道自己擅长什么,也不知道自己喜欢什么,也不知道什么对最自己的人生最有价值的时候,就属于这种最不幸的情况。根据题目描述不难推测出:程序员这个职业目前不在题主的擅长集,也不在热衷集,或许在价值集。
从程序员这个职业的角度看。
判断一个人是否适合做程序员的标准很多。最关键的几个是:
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点能做好,在软件业的职业发展不会很理想。
如果实在分辨不出哪个适合自己,那就选自己最喜欢做的。