01 小厂项目:做程序员不难,难的是做职业程序员 你好,我是叶芊。- **- 欢迎来到访谈现场,今天我们会从毕玄进阿里之前的经历聊起,他的这段经历少有人知道,却格外有趣,又格外现实。- **- 2002年从江西南昌大学毕业的他,在大学因为兴趣,从学盲打,到玩组机,到写网站,早已练成了网站编程老手,但毕竟是生物学毕业,第一份工作他是怎么找的?能顺利转成程序员吗?- **- 我们正式开始对谈。


极客时间:你大学生物系毕业之后就想转去做程序员,虽然背景是非计算机专业的,但大学做了很多商业性的项目,这种条件你也还是非专业吗?你第一份工作怎么找的?

毕玄:是非专业。我当时不想在江西呆,觉得还是应该去大城市,就想去北上广深,第一选择是北京。但北京真的太难了。

极客时间:那会在北京你是怎么选择目标企业的?

毕玄:那个时候哪能选择目标企业(笑)。我大学的背景又不好,尽管南昌大学号称是211,但可能就江西有名声,在外面大家基本都没听过,北京就更不用说了。另外我学的还是生物系,要找的还是计算机系的工作,哇这个太难了。

我在北京逛了一圈,那个时候还必须去人才市场。我去人才市场逛了一圈就知道北京肯定没戏,所以觉得我还是不要在北京了,北京太难了,以后可以去,现在就算了。

后来我去了深圳,因为我有个朋友认识某家公司的人,就推荐了一下,我被推过去之后,别人觉得我不是学计算机的,但是我从大二开始就在外面的公司写商业的网站,有很多经历,这是拿出来很硬的,就跟现在找工作一样,至少我的项目比较实际,所以他们觉得也可以,就说那你来试试吧。

这算是彻底转变了,因为你想你的第一份工作是计算机,就进圈子了,后面其实没有人会关注你大学学的什么,已经无所谓了,也不会因为大学不好就刷掉你,不会,他更关注你的工作经历。但第一份确实挺难的我觉得,尤其跨专业,非常难。

图片

极客时间:深圳那个公司是什么业务?你是做什么的?

毕玄:那个时候有一家做手机的上市公司叫科健,我们是科健旗下专门做政府软件的子公司,都属于科健集团,背景说起来很挺好的,但这家公司知道的人很少。

为什么说跨专业难,我招进去的时候其实都不是程序员,我是负责做实施的,公司做了一套软件卖给了政府以后,要有人去现场安装、教人用啊各种,现在叫交付,以前叫实施。

我刚进去的时候他们其实让我干的这个,原因是我真的写不了程序。虽然我在大学确实写过一些网站,但是完全不一样,第一次进那家公司,到现在我都印象非常深刻。

当时项目组正在做佛山市政府的OA系统,去了一看,所有的人电脑上打开的,因为他们不是写ASP的,他们做OA都用的VB(Visual Basic),VB我完全不懂,当时我就看到一帮人打开VB在那“哇哇哇”写代码,写得可熟练了,我真的惊呆了,就很仰慕。

但我觉得这活我是真干不了。因为开始我也不想做实施,我想写代码,后来我去看了一眼之后觉得确实自己干不了这个(笑),我还是先做实施。然后就被派去佛山的一些政府部门帮他们装上OA,解答一些问题,陪他们聊天。当时政府部门虽然能讲普通话,但习惯讲粤语,我跟他们混了半年,听粤语的水平就是那个时候训练出来的,虽然我不能说,听没有什么问题。



极客时间:总搞实施,个人发展应该比较受限,那你后来是怎么开始写程序的?

毕玄:半年后,当时我直属的老板,他决定给全部新人一次机会,我记得,印象很深刻。

当时我们有些人对写程序很感兴趣,加上又都跟项目组的人住一起,所以做实施的时候,我们会跟人家学一下VB怎么用,怎么写程序、搭系统等等。

然后经理他可能也觉得需要更多人写程序,因为说白了实施的人很容易找,但写程序的人有点难,尤其写软件相对还是有要求。后来半年左右,他想看看能不能从这批做实施的新人里面,挑几个人来写代码,就给我们出了一道题。那道题是要在他们现有的程序里改一个功能,限定所有人三天改完,并且交付出来。

刚好在第三天的时候,我终于找到了要改哪里,其实就一行,那个需求只用改一行代码,关键它可能有上万行代码,你要从这上万行代码里找出到底要改哪一行,但因为不是他们(写的人),我们不懂,也不大熟。反正刚好在第三天,我找到了然后改好了这行代码,我的角色从此就变了,变成了一个专职程序员了。

极客时间:这个直属老板你觉得,当时对你是什么样的影响?

毕玄:这就是机会问题,说白了没有这个机会,你其实走不进这个行当的。非专业的人最大的挑战,一你的学校不够好,二你是非专业的,真的想进入一个行当,你的门槛会比别人高很多。

如果你是个名校生,还是学计算机的,程序员的工作随便找,还肯定是大公司,这就像很多人说的我工作很多年以后,才有资格跟你一起坐在那喝咖啡,但人一起步就是那样,我觉得这是事实,必须得承认。所以我跟他说还好当年有了这一次机会,让我正式开始做这个行当。

图片


极客时间:这次通过了考验,你也抓住了机会,成专职程序员之后有比较顺利吗?慢慢通过做项目提升自己的技术水平?

毕玄:那没有。

我的主职变成写代码之后,就跟着他们做佛山的项目,项目做完一年以后就调回深圳,开始做整个深圳市的电子公文交换系统。

比如说我这个政府要和另外一个政府部门联合办公,就要发红头文件,之前是纸质的。但广东的电子化非常早,深圳是2003年开始建电子公文交换系统,各家就可以直接发电子公文,我们公司就承担了深圳市的那个项目。但那个项目我参与的很少。

极客时间:为什么没有参与进去?应该是个大项目。

毕玄:因为那个项目主力成员是写Java的,就这原因。

但我的背景对吧,以前学校做网站用的ASP,到佛山之后跟着项目学会了VB、Delphi,因为我们有些是用Delphi写的,有些用VB写的,这两个我慢慢也比较熟。然后深圳比较缺人嘛,把我调回深圳,一看Java,我又傻眼了,我说这啥,好不容易VB和Delphi我已经用得特别熟了,因为真的也特别好用,然后一切到Java,我就觉得这玩意简直烂到极致。

因为Java那个时候的IDE,说实话跟VB、Delphi比,即使到今天这俩还是神器,当时Java,哇塞连IDE都找不到,Eclipse是后来的事情,最早Java我们都用记事本写的,哇那效率简直低到离谱,后来才有了一个简单的IDE去学Java。

所以我就从那个时候开始学习Java,学这玩意到底该怎么弄,因为我确实外行不懂,所以在深圳那个项目里我就没进入多少,公司有非常主力的Java成员去负责,然后那个项目做成了。其实深圳这段经历让我很难忘。

极客时间:难忘的是什么,因为工作需求自己紧张学习新语言?还是说当时自己不太做的上事,心态上可能比较挫败?

毕玄:因为不像我在佛山,说实话佛山一年我已经混的很熟了,而且已经是那个团队里比较主力的程序员,像公司在顺德这些地方的项目就是我自己去搞的,我一个人,面对需求方,直接改代码,然后交付给他们,可以全部自己干完,所以在佛山过得挺爽的。

结果调回深圳后,直接就啥也干不了,全部是别人干,你是一个啥也不懂的人,所以挺不爽的,那段时间本来我想走的,找另外的。但是发现也很难,那个时候我找到华为。

极客时间:你去面试了?结果怎么样?

毕玄:那肯定,那个时候深圳最好的是华为,互联网公司像腾讯我们都看不上的,因为我们这种人在大学多数是做过网站的,会觉得不就做一个网站,能有多难,我几天就可以做一个,腾讯这样的公司,在我们这都是玩烂了的,互联网公司?我们觉得那都是做不了软件的人才去的公司,做政府软件还是要求挺高的。后来我们都后悔了。

极客时间:没有早进去(笑)。

毕玄:因为我以前的公司就在现在腾讯深圳南山区总部的隔壁,那个时候,园区是没有互联网公司的,全部都是软件企业,至少在圈子里,大家会觉得软件企业的程序员肯定比互联网公司的程序员更厉害。

当然这是因为我们这群做软件的人,根本不懂互联网的人面临了什么问题,后来我们了解了之后,才知道,哇还是你们牛。



毕玄:当时本来我想如果能离开,就去深圳最好的公司华为,我去华为面试了一下,然后面试不上,那我还是继续在现在公司待着。

而且我在那家公司刚好有了一个新机会,因为深圳项目快收尾,我第一任老板他也从佛山回来了,他那个时候已经是软件部的副经理,回来以后被任命了一个新项目,中山市的网上审批系统,非常类似现在浙江做的“最多跑一次”。

极客时间:材料网上审批这么早,那个时候是几几年?

毕玄:所以说广东非常领先,那个时候是2004年,当时中山市就决定做。你要去政府办的所有事情,可以在网站上一次提交所有材料,提交完了就到政府内部去流转,流转完了之后,你最后去现场把所有资料拿走就可以了,几乎也只用跑一次。

当时我们公司中标了中山的这个项目,我之前的老板就跟我说,要么你别做深圳项目了,跟我做中山项目去。

极客时间:你有做过什么考虑吗?还是说很果断就直接过去了?

毕玄:当然,我们这么熟的人,我当然跟他走(笑)。于是我就跟他去了中山,这个项目在当时是非常大的纯软件项目,我们中标的金额应该在1000多万。

但去的时候我们就3个人。

很多同事当时是不大想去的,因为我们老是做项目要到处跑,很漂泊,虽然我号称在深圳工作,但你看我在深圳的时间非常短,第一年根本没在深圳,我都在佛山。

所以就我们3个人,要去做一个1000多万的纯软件项目,而且我们都不知道是个什么东西,什么都不懂,去了以后就发现有很多问题。比如说我们当时面对了中山市的市长、市委书记和秘书长,这是秘书长亲自牵头的一个重要项目,但当时正逢换届,做的挺不容易的。但也不是坏事,所以后来我们也明白政府项目真的太难做了。

极客时间:这个项目可以具体聊聊吗,你当时负责什么?

毕玄:这个项目金额大,公司给的支持还是很够的,允许招更多的人,但因为我们仨去的最早是绝对主力。我老板本来就负责这种项目很多年了,人脉很广,所以他主要对外搞定各方,另外一个同事负责写更上面一点的东西,我负责写网上审批系统整个大的基础,那个时候我已经偏向写框架了,很类似现在很多公司做的低代码框架。

因为我们做的东西是这样,中山市的项目要上线1000多个流程,如果你写代码上线,那做10年也做不完对不对,所以你必须要让别人很容易直接把这个流程配出来,这就需要在下面抽象一个东西。

极客时间:需求这么急,项目又很大,当时你们有考虑买个商用的自己改吗?

毕玄:最早我们当然也准备买商用的,后来觉得不大好用,所以决定自己写一套流程引擎、表单引擎等等所有东西,我就写这个。那个时候我还有一段神奇的闭关体验。

因为我们判断这套流程引擎和表单引擎对这个项目至关重要,决定了这个项目到底能不能在2、3年收尾掉,而不是说要很多程序员去堆,最好的方案是一套框架加上大量的实施工程师、配置工程师。所以我们发现了这是核心。

然后我的老板就问我,多久能搞完?我说我一个人就行了,给我半个月。于是我就享有了整个项目组最高的待遇,我就圈了一间会议室,那个会议室就我一个人,闭关写了半个月代码,半个月后有了一套雏形,后来很多人就基于这个东西配流程上去。

极客时间:就你自己一个人半个月搞定了?

毕玄:对呀,我就在那里面,吃喝什么的都有人送过来,全无打扰的环境,过的很爽(笑),写完了之后,反正也基本能用,他们后来就边用边改,撑住了系统后来的整个实施过程。



极客时间:但是当时写的时候,没有遇到什么难点吗?毕竟这应该是你第一次做这么大的项目。

毕玄:其实还好,因为工程说实话没那么难,很多只是抽象的问题,写计算机程序其实是个逻辑过程。

极客时间:写代码是逻辑过程我大概能明白,怎么理解是工程?是抽象问题?

毕玄:就是数学。我现在特别理解写程序的人有两项技能特别重要。一是英语,这没办法,因为你看的大部分资料是英文,你写的代码也是英文;第二个是数学,写程序其实就是一个数学过程。

数学是一个什么过程呢?是我有一个问题要求解。程序也一样,程序是我有个问题,然后求解,所以程序的整个代码就是解问题,就像以前数学题我们写第一个字“解”之后的所有部分,那就是个逻辑。

对数学特别好的人来说,数学题可能会变,但他能从变化中找到一个规律,抽象成一个函数,变成一个公式,核心问题是举一反三。为什么高斯特别牛,从1加到100,首先他找到了一个规律解答了1加到100等于多少,但在这个基础上,他还能把1加到N变成一个公式等于(N+1)/*N/2。这就叫抽象能力,他可以把一个问题抽象成一个公式,然后这个公式可以运用在所有场景里。

其实写程序就是这个过程。不好的程序员是有一个问题就解了,解完了以后问题稍微变一下,这个代码就得重写;但写的好的是看到这个问题,我可以做一个抽象,之后不管上面怎么变,我可能只需要换换参数之类的,但代码是不用改的,就能完成所有需求。

极客时间:所以像你当时在那个项目里负责写框架,就会更需要抽象一些?

毕玄:对,我们写底层框架的说白了就是这个过程,底层框架为什么相对更难,是因为它对抽象能力的要求比上层代码的要求更高,上层是我面对一个需求,做到就可以。

所以做一个程序员不难,做一个职业程序员其实很难。程序员就是我有一个需求,然后翻译成代码而已嘛,这个东西小朋友确实能干,所以现在少儿编程很多。我就跟我家小朋友说你们学的那些东西,只能是写着玩,想拿这个当饭碗,少儿编程学100年也不会变成职业程序员,因为职业程序员学的东西,在那个阶段你是根本体会不了的。

但是如果你数学很好,你写代码的逻辑性、抽象能力会非常好,其实后面自然能领会,因为你想,写代码我们就是写一个方法,方法是什么?方法不就是个函数,一个典型的数学函数。

当然也不一定就能成为,毕竟你后面还有很多挑战,但至少有一个基础在,离成为职业程序员更近。但数学不好的人,说实话我们觉得是不合适做程序员这一行的,因为你逻辑性不够,抽象能力不够,就导致你写的代码经常要改。

图片


极客时间:最开始我们聊的时候提到非科班的程序员和科班程序员的区别,我记得你之前还特地写过一篇文章讲业余程序员和专业程序员的区别。这两种区别,是一样的吗?

毕玄:不是,我是非专业的系,但我应该是职业的,就像现在大家都觉得好像是个人都能写程序,这我不否认,每个人都能写程序没错,多数人只是把这个问题翻译成了代码而已。

但是这段代码要变成能稳定执行的商业性的代码,这是职业程序员才能干的。说实话这我完全不相信任何人都能干,所以我最讨厌说什么人人都是程序员(笑),太鄙视这个行当的专业度了,其实每个行业都有专业度,有人觉得到最后AI可以替代所有,但那个真正的专业度,我觉得还是有一定难度替代的。

所以做中山市项目那段时间写偏基础的东西,对我自己还是有锻炼的,没有碰到太大的困难,可能因为我的数学比较好。一直以来我只有两门好,一门是英语,一门是数学,语文和物理、化学都非常糟糕。

极客时间:根据你的理论,那你可能注定走上程序员这条路(笑),有一点好奇,你数学好,为什么物理没有那么好?

毕玄:我也很好奇。大家都认为数学好,物理一定好。我后来想因为物理是解释现实世界规律的,数学不是,数学其实是个工具,所以很多物理学家同时是数学学家。但物理我就很难理解,我的物理和化学都在及格线上徘徊,但数学就是在满分线上徘徊。

不过说实话我认为跟老师也有很大关系,因为后来我们在阿里听过一次北大前校长讲物理学,他是物理系出身的,讲完之后大家都觉得哇物理太有意思了,我说以前自己要是遇到这样的老师,物理至少应该不会那么差。

其实生物也一样的,最近我在看很多生物的东西,就觉得很有意思,一些非常知名的教授讲生物研究是要去解决人类的什么什么问题,你就会觉得,哇如果我真的能研究出这种问题,那在人类历史上,跟计算机系的人根本不是一个档次的。我就跟我家小朋友说,如果我以前看到的是这些,我应该不会去做计算机这行。

因为说实话我现在会觉得计算机只是个工程,你可以认为计算机是个工具,但对人类不会有根本性的变化。但生物、物理,可能会给人类带来非常巨大的改变,而且它有很多问题要解决,但计算机说实话对那些人类问题没有任何帮助,可能是个好工具可以帮我来让那些问题解决掉,但它只是个工具而已。


水友讨论区

今天的对谈就暂时结束了,针对毕玄大学毕业之后找工作的经历,我们林林总总聊了很多,不知道有没有引发你对他之后经历的兴趣。

虽然是生物系毕业,但大学四年他基本都在玩计算机做了很多商业项目,也能算一名准程序员了,即使这样,找第一份工作也非常难,哪怕找到了,想正式成为程序员也是抓住了稍纵即逝的机会。想想大佬起步居然也这么难,突然有点安慰了:)

“啥也干不了”的艰难开局后,让我印象最深刻的是聊编程、计算机和职业程序员的部分,毕玄说职业程序员是需要专业度的,但计算机只是个工程,是个工具。

不知道你最感兴趣的是什么,这里我列了几个话题,欢迎自由讨论:

  • “非专业的人最大的挑战,一学校不够好,二你是非专业的,真的想进入一个行当,门槛会比别人难很多,是个机会问题”,你的第一份工作是怎么找的?是非专业吗?
  • 有人说人人都是程序员,毕玄说写计算机程序是个逻辑抽象过程,但职业程序员是需要专业度的,你怎么理解“职业程序员”?
  • 毕玄现在觉得计算机只是个工程,是个工具,关于计算机在人类社会的作用,你的想法是什么呢?

如果你有其他更有发言欲的话题,欢迎交流,期待和你在留言区碰面。

下一讲我们接着毕玄在小厂做项目的波折经历聊,下讲见。

拓展阅读

  1. 毕玄很早就开始写博客了,考古挖到了他工作三年写的复盘:程序人生(工作三年的回想)

  2. 如果你对业余程序员和职业程序员的不同感兴趣,可以看毕玄后来写的一篇文章:从小朋友的一道数学题聊聊职业程序员

参考资料

https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e8%b6%85%e7%ba%a7%e8%ae%bf%e8%b0%88%ef%bc%9a%e5%af%b9%e8%af%9d%e6%af%95%e7%8e%84/01%20%e5%b0%8f%e5%8e%82%e9%a1%b9%e7%9b%ae%ef%bc%9a%e5%81%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e4%b8%8d%e9%9a%be%ef%bc%8c%e9%9a%be%e7%9a%84%e6%98%af%e5%81%9a%e8%81%8c%e4%b8%9a%e7%a8%8b%e5%ba%8f%e5%91%98.md