有关“非计算机专业如何转行做程序员”的一点思考

今天老夫半夜爬起来等着看世界杯预选赛法国vs西班牙的比赛,在新浪微博里看到@程序员的那些事 发的一封粉丝来信如下:

XXXX:员员好,我是12届的大学生,读了一所还可以的大学,但所学专业我很不喜欢,我因为性格较内向同时又感叹编程的神奇,所以很想进入这一行,但 我去面试几家后发现就算是实习岗位也需要一些基础,虽说大学学过C语言但感觉也基本不会用,那些面试单位是建议我去学习这方面知识再去找他,但我又对这些 培训机构不太放心,怕花费了一大笔学费结果却不好,现在我有些迷茫不知道该去找找其它工作(人才市场很多都是些销售和工厂的一些岗位)还是去学习,希望广 大的员员们给我些指导,非常感谢。

看完还是有一些感触的。作为一个科班计算机系毕业,第一份工作就是软件开发,然后又在咨询和销售领域工作了很多年,再回归到开发领域的老码农,老夫对于该同学的纠结心情是非常理解的。但是,要把一份工作持续地做下去,光有热情是不够的,如果你总是不能把事情做得比你身边的人更好,你的热情就会慢慢地消退,会开始怀疑自己的决定是否正确,自己的坚持是否有意义。所以,我的建议是给自己一段时间打好基础,也借此过程验证自己的决定是否明智,就算最后的答案是否定的,学会一些编程的技术也会对培养自己分析问题的思路有所帮助。

好了,说到正题,非计算机专业的同学如何为成为一个程序员打基础呢?我建议走如下的步骤:

  • 1. 学会一门编程语言。随便什么语言都可以,其实python很适合初学者,有本书叫《与孩子一起学编程》用的就是它。不过考虑到步骤2,还是选个流行的教学语言吧,比如C++或者Java。
  • 2. 学好离散数学,重点是高等代数、数理逻辑、集合论、图论,最好再学会概率论。计算机科学的本质是离散数学,不掌握这些知识你如何能真正理解矢量、逻辑运算、最短路径、涂色算法这些概念呢?
  • 3. 非常非常非常非常非常非常认真地学习《数据结构》这门课。你作为程序员功力几何,很大程度上取决于你在这方面的造诣。
  • 4. 自己做一个小项目,尽可能把你学会的东西都用上。这不仅能向招聘者展示你的功力,也是一个把所学知识融会贯通的过程,只有做了一个项目,你学的知识才真正变成为了你掌握的技术。

有人看到这里可能要说了,码农对编程语言熟悉就行了,学那么多不相干的又何必呢?

老夫打个不太恰当的比方,离散数学和数据结构就像一个武林高手的内功,编程语言则是招式。内功不行,就算会很多招式,可以吓唬吓唬武功一般的人,但是碰到打硬仗这些花拳绣腿就不管用,会死得很惨。可惜现在很多人不重视内功,不少计算机专业毕业生连堆栈和队列是怎么回事都不知道,更别提二叉树、链表、图结构了。不管碰到什么需求,上来就定义几个大数组,你能指望他编出多高效的代码?比如现在互联网热门的大数据,算法效率是核心问题,如果谁整出个O(n^2)的算法,信不信老板分分钟砍死他?

再说远一点,学会一门编程语言容易,精通很难,难就难在理解它的精髓。有很多开发者热衷于最新潮的技术,今天玩玩NoSQL,明天搞搞Html 5,说起来头头是道,但是都深入不下去,从来没有真正没有理解这些技术的精髓,也就做不出一个能发挥出它们真正优势的产品来。这往往就是因为内功不行而心态又很浮躁。(补充一篇文章:《叶正盛:再次写给我们这些浮躁的程序员》)但是程序员是靠代码说话的,只是善于对某个技术侃侃而谈没有任何价值。Linux和Git之父Linus Torvalds说过:“Talk is cheap. Show me the code.”(空谈无价值。拿你的代码来看看。)所以老夫要说,作为一个程序员,不先练好内功就写不出优雅的代码,这样是走不远的。

怎么学呢?这些不需要花很多钱去培训机构,而且从我面试过的很多培训学校学员的表现来看,绝大部分人学完了连MVC的概念都没搞明白,花半年时间就学会了if…else,何必去糟蹋这钱呢?现在一些大学有旁听的学分课程,花几百块钱就可以听一门课,还可以交作业做实验(比如:http://zhidao.baidu.com/question/245256206.html)。建议你尽可能去选最好的学校,不仅仅是老师水平高,关键是同学的高水平会促使你对自己有更高要求,这和培训学校的氛围是完全不同的。

如果你在以上4步都做得很好,那么你应该可以在码农这个行业获得一些机会,剩下的就看你在工作中的表现和积累了。码农的修行是一个长期过程,计算机领域每年都有新技术出现。做了码农,就得活到老学到老,注定一辈子苦兮兮的。如果你喜欢这种感觉,那么你的选择可能就是正确的。

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

4 14 收藏 33 评论

关于作者:老码农

搞得定代码,罩得住娃;治得好跟腱,踢得了球。Hi,我是老码农,蜀黍有练过,小盆友们不要随便模仿喔。(新浪微博:@老码农的自留地) 个人主页 · 我的文章 · 122 ·    

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 潜意识   2013/03/28

    窃以为,“如何确认自己适合从一份程序员工作做起”,比“如何成为合格程序员”,对初学者更重要。

    见过不少优秀的程序员,有科班出身,有半路转行,他们成长为合格程序员的方式千差万别,有的重剑术(技术实现,快而准),有的重内气(逻辑和洞察),有的纯粹靠勤奋战胜平庸智商,甚至有的靠坦诚会做人让无数高手愿意帮他输入真气。

    从数据挖掘角度看,说明以上这些方法只是充分非必要的成功因素集合中的一小部分。普通人一旦拥有某种优点并坚持下去,只要长期放在合适的位置,必如锥立囊中,出彩是迟早的问题。

    但是,更多的情况是,认清自己是最难的,把不合适的人放到不合适的位置上,对自己对公司都是一种打击。

    再加上人本身是不断变化的,这种“是否合适”的预测本身很难说是靠谱的。因此很好奇楼主如何从咨询销售转型再次进入开发这一行,请不吝赐教啊!

    • 老码农 其实,我是一个作家 2013/03/29

      转到咨询销售领域是因为自己想开阔一下思路,了解一下公司在商业运行方面是如何进行的,加上当时做咨询的收入比当码农要高(其实后来看,只比较短期内收入这个思路是错误的,导致我在咨询销售领域多浪费了几年时间),所以去两家大外企干了一段时间,后来考PMP做项目经理,带了一些项目。回归码农是因为学习的目的达到,而且自己不喜欢这种需要和各种人打交道的工作方式,所以下决心转回来了。

      转型的过程其实是很难的,很多技术都丢下了,花了好多时间来补,薪水也低了很多。而且一开始老板觉得他们现在的开发平台我都不会,根据我以往的经验更适合做售前售后。

      所以我只能用业余时间来编码,碰到客户提出比较难实现的需求,开发不愿意做,我就说服老板让我来做,后来老板发现最难的开发活都是我干的,就这样花了3年时间才转回了开发。

      • 潜意识   2013/03/29

        原来可以这样走。谢谢分享,真的是很难得人生经历。

        我的经历比较难堪:

        起初是各种海外外包,虽智商平平,情商低下,通过以勤补拙加上习惯自省,居然也能解决不少核心难题,并成为主力;

        后合伙创业,内外压力所至,不得不走上所谓的技术管理路线,期间工作用一句话来说,就是白天忙团队管理,晚上忙技术攻关。结果被事务驱动着走,忽略了修心明性,被推到了CTO这个位置,虽然业绩不错,甚至HR也兼任得有声有色,但基本迷失了自我和方向:内心不认同管理哲学,但行为却把自己推上神坛;内心喜欢分析人性观察组织行为规律创造破解新法,但日常只能规规矩矩去找现有算法找开源实现推动团队实现客户需求;

        人近中年,不停地对比外部社会需求与内心信仰,发现心理已有点扭曲,按自学自医老习惯,读分析心理学,觉得再这样下去非发疯不可,于是辞职专心学习心理学和恶补数学基础。

        虽然现在还能写点代码(最近曾生吞活剥ITU/高通的无线信令体系,活生生把自己从一个软件架构/DBA逼成一个信令协议开发/网优分析),但发现自己最喜欢的还是从数据分析行为并寻找破解规律这个类似情报人员的工作。于是开始找数据分析相关的职位,头衔/待遇我都不在乎(资深宅/很好养),只要有需求有数据有反馈就行。可是好难找啊,要不就是嫌年纪大不好管,要不就是嫌数学算法背景不强,要不就是还是希望我做回平台研发或团队管理。

        LZ给我的提示是曲线救国,看来也只好如此。

        希望和LZ交个朋友,因为个人缺点在于不会做减法(兴趣太多,老好人一个),很想得到指点。

        PS 我在广州,邮件workformydream at yahoo.com

        • 老码农   2013/03/30

          指点二字可不敢当,你的经历比我丰富多了。我的新浪微博是:老码农的自留地,欢迎来讨论。

  • 我就是非计算机专业的,大学时自己专业的可基本都没咋学进去,经常去图书馆借计算机方面的书自己看。后来学校有java培训,交了1K+的费用,学完了,自己出来找编程方面的工作,一直到现在都没有人带过,一个人慢慢历练吧,特别是第一年,不要浮躁,慢慢来。其实这行业内大部分都是自己学出来的.

  • 王熙宸   2013/04/01

    这位大神说的,很对,但是我虽然是科班出身,马上要实习了,但是感觉自己什么都不会,很害怕,不知道怎么办?基础也不是很好,但是喜欢这个专业,想求你指点一二,不胜感激。

    • 老码农   2013/04/04

      我想说的其实还是正文里那些,抓紧在学校的时间补上自己不足的地方吧。

  • clown   2013/04/03

    即使python很适合初学者,但最初对于程序员最有用的应该是能用编程赚到钱吧,而国内用python语言的并不多,而且教程少的可怜。现在国内大部分人用的都是php,而且网上的教程也很多,所以我觉得是先学php,赚点钱够养活自己,再过渡到python或其他语言。不知道我这个程序小白想的对不对...

    • lvjian700   2013/04/04

      找一门语言学,先培养兴趣。语言方面都有障碍,何谈赚钱。

  • 一个非常迷茫的菜鸟码农   2013/04/04

    算是已经出来实习了接近一个月多了(其实也把自己当成待转正的员工看待),三年学了数据结构、java、c#、c++、vb、javascript等等,现在接近一半的知识都还给老师了,现在干C#的活儿却想着java的事儿。

    其实我还是很喜欢跟人打交道的,在学校的时候混个主席和外联部部长什么当当,但本行学的还是计算机,又不想让家里人安排我去干公务员什么的,只想自己混出个名堂,但发现只身一人来到广州真是真心的不容易。

    说回正题吧,现在突然发现让我调试代码状态实在良好,但编代码却有时候写着写着忘词了(尴尬,只能赶紧百度一下)。现在都是白天上班,晚上恶补。争取晚上把时间分为几块,一块恶补C#一块看看数据结构另外再温习sql。白天不算很充实,晚上的时候却异常忙碌。其实我也为自己找了个借口:”以前弄的都是cs结构,现在是bs结构,我当然不熟练啦“,但这借口实在太乏力了

    但这样的我却自己心里明白:”到现在为止,自己还完全没有一个程序猿的心脏!!“迷茫!迷茫!迷茫!计算机是我学的专业没错,但至今我还没对它爱到入骨啊

    一个刚刚踏入IT行业的愣头青留

    • 老码农   2013/04/04

      喜欢和人打交道何必做码农,可以尝试做技术支持

      • 一个非常迷茫的菜鸟码农   2013/04/04

        技术支持,一开始我也考虑过,而且半个月前在公司的时候一开始被派去接触了一个多星期。

        还行吧,但就我公司的情况一共有几点原因我就不想去在公司里干技术支持了。

        一、工资而言没程序猿高。

        二、长期出差在同一个地方(虽说我很喜欢到另外一个城市看世界),居住环境简直是还没一晚40块的小旅馆好。

        最无奈的是在当前的这公司居然还被程序猿看不起(不过从程序猿的角度来说,还真的只看得起写得了牛逼代码的人),当然这是另话。

        三、等六月份还要回去毕业答辩,怕到时候工作交接有难度(毕竟,这家公司的规模还没那么大。就100来人,而且分布各省份)

        在我不希望家里人为我安排工作的时候,想要自己混出一个名堂的时候,我只能去干我一开始的专业——码农,呵呵。虽说我也想过去干销售,销售来得快去得也快。但在不清楚任一行业的规则下,我还是选择当个码农。其实码农也算是以前的一个梦想吧

        • 老码农   2013/04/05

          个人看法:起步的时候不要挑三拣四,首先找到自己喜欢做的工作,能让你每周一早上起来就很兴奋,周五下班的时候略感失落;然后找一个能让你在这个领域发挥自己的长处和持续学到东西增长经验的工作机会。珍惜这个机会,不要在乎薪水、待遇、别人的看法,只要你能坚持几年时间,你的水平就会上一个台阶,所有的薪水、待遇和别人的尊重就都有了。

          • 一个非常迷茫的菜鸟码农   2013/04/06

            现在我就是朝你所说的,找到自己喜欢做的的工作和找到一个发挥长处和增长经验的工作计划而迈进。现在我也不求待遇,(之前还想自己租房子的,现在我连这个念头都断绝了)只求薪水能养得起自己顺手能买得起一些设备给自己罢了。

            坚持几年?其实我也想过,或许当还没找到自己真正喜爱的某一行业的时候先当个程序猿锻炼些逻辑思维吧

  • lvjian700   2013/04/04

    刚开始学的时候没必要深挖数据结构和算法。在程序语言还没熟练掌握的情况下,深挖这两门课,绝对要倍受打击。
    建议在做了几个小项目之后,已经能够熟练掌握编程语言的情况下再专门去学数据结构和算法。
    如果你没什么动力,报个软件设计师考试,这绝对是个值得尝试的方法。我当时就这么干的。

    • 一个非常迷茫的菜鸟码农   2013/04/04

      也不算深挖,只是以前的一些知识忘记了,有时间想看看而已。

      你的建议是可以借鉴的,先谢过了。
      现在我的动力是越来越减退了,之前就有种去报个软件设计师的去受虐的想法。但经常给忽略了。

  • 我是外行   2013/04/04

    各位巨巨能介绍外行转入编程的经验吗?现在学着学着就不淡定了

  • 随便吧   2013/04/04

    请问前辈,我是非计算机出身,而且学校一般,转行做程序员,需要考研拿个计算机专业的“执照”吗,没有这个在找工作和以后的工作过程中是否有障碍?或者请推荐一些比较实用的证书我去考。谢谢了。

  • 感同身受   2013/04/08

    如在下的姓名,特别的感同身受,本人就是一个非计算机专业转来做程序员的,回想找实习的经历真是人生一大痛苦和纠结。在楼主提到的4点中,我做的较好的是1和3,《java核心技术》,《数据结构》两本书被我看的几乎要烂掉了,此外还辅助看了《Java程序员生存手册》,《深入理解java虚拟机》,《spring 2.0》,《编程之美》等很多书,都是看的很仔细的,没日没夜的看,坐地铁的时候都在看书看算法。第4点算是做了一点点,基本相当于没做,找师兄做过的一个项目看的代码,基本可以理解。离散数学从来没学过,时间上也不允许从这种基础开始学了。

    找实习的时候,面试了不下10次,当然可能是对自己定位不当,投的都是些百度腾讯微软这类地方,其实不是自不量力,而是感觉本来转行就不容易,当时已经研二,破釜沉舟找个给力的,以后好好表现争取能拿到正式工作的offer....最后还是坚持不住,拿到个IBM的测试offer就去了,好在对于我这种外行来说,接触真正的工作,使用相关的工具还是有所帮助的。有了实习经历,后来找工作倒也没有过于痛苦,主要是心理上也坚定和自信了一些。

    对于楼主说的,有同意也有不同意的地方。楼主毕竟是计算机专业的,对于转行的情况还是不完全理解。

    个人认为只做到那几点还是不够的,想得到面试官的认可,除了基本的这些,必须至少有一样特长,可以是算法,或者框架的了解之类的。哪怕只是纸上谈兵的,也比没有特长强。毕竟面试的时候多数不考你实际动手能力。

    真的很理解转行做程序员的同学们,一方面想给你们加油,坚持住总会有机会。另一方面也真的想劝你们三思而后行,如楼主所说,做程序员注定活到老学到老,苦逼的很,而且在中国这种体制下,大家交税养着国企的一群猪,软件方面国企非常少多数为私企,工作的性价比真的可以说是倒数,户口、孩子的问题更是完败,三思后行吧。

    • 老码农   2013/04/09

      很实在的总结。

      • 砸锅卖铁码代码   2014/11/22

        请教一下老码农:“感同身受”的帖子里提及的“《java核心技术》和《数据结构》”这两本书,你知道分别具体是指哪本书吗?

    • 哈哈,国企里的一群猪,我在里面呆着,认同这一点啊

  • 大三学生   2013/04/10

    感觉受益匪浅,我现在大三,过几个月就要去实习,因为不知道工作单位的工作流程需要什么,所以还在回头深究JAVA的东西,对java还是比较偏爱,c跟c++倒是还给老师了,数据结构真是学的很头晕,想请教如果实习做JAVA的工作需要深究数据结构吗

    • 老码农 其实,我是一个作家 2013/04/10

      数据结构和算法基本是一回事,如果你做算法设计的时候,不是首先考虑用何种数据结构,很可能做出来的算法是不理想的。日常工作中很多程序员觉得数据结构没有用,比如就调调界面或者做个SQL查询,似乎用不上。但是如果你遇到如下的问题,就会意识到数据结构的重要性:

      1. 假如你是架构师,做一套新系统的时候,如何设计持久化层结构,使数据库访问次数最少,效率最高?

      2. 作为前端工程师,在页面如何利用javascript实现多层嵌套的选项控制?(例如第一级选项类别:中餐、西餐,如选西餐,展开第二级选项:日餐、法餐、意餐、美餐;如选中餐,展开另一套第二级选项:川菜、粤菜、鲁菜、湘菜,然后再根据第二级选项的选中结果展开第三层、第四层。。。注意:这些选项所在的html是从JSP动态生成的,每次有几层也不固定,所以不能固定写在javascript代码中。

      3. 做后端开发,如何维护一套人事系统中的组织结构?该单位的组织结构分成很多层次,还经常调整,有时候合并一些部门,有时候新增一些部门,有时候还会让某个部门去管理其他几个部门,人员也会在部门之间调动,还有升职、降级等变更。

      上面只是几个例子,实际工作中如果没有数据结构的意识,往往很多活干出来之后,老板或者客户都觉得差点意思,自己也会觉得不满意。数据结构更重要的是一种思维训练,让你用正规的思路去考虑问题,所以它是基础性的。比如堆栈,你可能会用Java里Stack类的push()和pop()方法,但是不知道堆栈内部的实现原理,一般情况下也够用了,但是你对递归和迭代的理解就达不到足够的深度。遇到比较复杂的问题,高手80行代码优雅地解决,而你可能累死累活写了2000行,在各种边界条件上还漏洞百出,这就是基本功的差距。

  • neo   2014/06/15

    看了这么多评论,力劝学习计算机 三思后行。。在我看来,大多数人并不适合学习计算机,所谓的兴趣,也不过是在门口张望了下的肤浅认识。计算机 是门枯燥的专业。国内环境如果去不了BAT之类的公司,直接去小公司是在浪费青春,会非常辛苦。我实验室同学基本最差去百度。

  • 我大学专业是环境保护,但现在也就程序员 ~

  • 离散数学对编程真的很重要吗,我做的前端主要做JS,但是数学不是太好

跳到底部
返回顶部