用五年时间跨越鸿沟——“大学未毕业程序员”的流水帐

2024-01-18 05:32

本文主要是介绍用五年时间跨越鸿沟——“大学未毕业程序员”的流水帐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(本文发表于 《程序员》2007年第2期,发表时有删节。)

用五年时间跨越鸿沟

——“大学未毕业程序员”的流水帐

禅宗说学佛有渐修顿悟之分。说到“跨越鸿沟”,总让人觉得像是习武之人一夜间打通任督二脉,霎时间神清气爽身轻如燕,原本百思不得其解的大难题突然就迎刃而解。这般境界着实令人神往,可惜我从参加工作以来五年有余,回想起来竟然没有这么一个天人合一的顿悟时刻。遗憾之余,只能安慰自己说:这就是所谓“资质”吧。没有当下开悟的聪颖天资,所以也难以体会跨越鸿沟的愉悦了。

不过想想五年前的自己,却也不是全无变化——不管技术、写作还是待人接物,就连头顶冒出的几根白发,都见证着自己的成长。不过最大的变化还是在自己心里:当年背着书包和无法完成的学业黯然离开校园的男孩,现在已经可以淡然地拿自己这段经历打趣了。能够坦然面对自己心中最不堪回首的往事,这也算是跨过一道鸿沟了吧。

北京理工大学,我的母校,是一所有着严谨学风的高校。在受她严格的理工科基础训练而获益匪浅的同时,我终于也没能达到她期望的标准。2001年,在学业还剩下一年尚未完成时,我不得不选择了离开母校——以一个失败者的身份。从那时候开始,我常常会做一个梦,梦见自己正在高三的教室里复习准备高考,一边还鼓励自己说“这次终于有机会把大学读完了”。能够顺理成章地拿到本科文凭的大多数人,恐怕是体会不到这种怅然若失的缺憾感的。

如果说梦中的缺憾感只是令人心绪不宁的话,白天需要面对的就是更加现实的问题了:一个机械工程系的肄业生要如何找到一份工作来养活自己?虽然一直热衷于编程,在学校里也有些小小的实践经验,但我实在没有自信能靠这样的背景留在IT圈里。好在当时供职联想的孟岩热心相助、《程序员》杂志蒋涛总编不拘一格、再加上当时创刊刚一年的杂志正需要青壮劳力,我的提前退学反倒成了因祸得福,早早地就给自己找到了一份工作。

这“因祸得福”之说并不纯是发扬阿Q精神:虽说薪水不高加班不少,但《程序员》杂志编辑部仍然是一个难得的优秀团队;更重要的是,在这里可以接触到前沿的技术和高端的视野,这对于正在渴求知识的我来说无疑是天赐良机。而且做杂志编辑还能近水楼台先得月地接触到图书出版机构,我的《重构》、《最后期限》、《与熊共舞》等几本译作都是在这段时间里完成的——对我而言,从事翻译工作最大的受益者还是我自己,因为翻译的过程让我真正将一本书读得通通透透。试想一下,这些书籍都是Martin FowlerTom DeMarco等前辈的心血凝粹,能将它们读懂又怎会不大有裨益?

但作为杂志编辑的一个缺陷也逐渐显露出来:虽然能够看到到很多技术文章和案例分析,但毕竟没有机会亲手开发一个真正的软件。每天只是高谈阔论,毕竟站着说话不腰疼,一来二去就成了个眼高手低的毛病。就算自己尝试写些程序,但一如温伯格所说,不从事专业的软件开发,就永远只是业余选手,对于“专业”的问题终归想不明白。况且媒介传播——纵令是关于“软件开发”的媒介传播——与软件开发始终是两码事,所需的心理状态和技能是截然不同的。于是在2003年初非典肆虐的日子里,我那颗程序员的心又开始躁动起来。要去做一些真正的软件,我才会知道软件究竟应该怎么做,模模糊糊中这就是我对自己说的话。

想要去做真正的软件也不是那么容易的,我的学历问题仍然是求职路上的拦路虎——我甚至不知道该如何在简历里写自己的教育背景,只好含糊其词地写上“曾就读于北京理工大学机械工程学院”。这样一份简历铁定入不了HR主管们的法眼,我这样告诉自己,所以还得另辟蹊径。这时候一位老友,在BBS上认识的石一楹成了我的贵人:此人经验丰富,技术精湛,做着某公司的技术总监和好几家公司的顾问,而且正好还在我素来向往的人间天堂杭州。于是几番电话之后,我便定下了前往杭州的机票。

石一楹给我第二大的帮助——最大的帮助自然是帮我在杭州找到一份工作——是教给我敏捷开发的理念。尚在北京时,我曾经通过电话问他:需要准备哪些背景知识。他既没有叫我去学J2EE,也没有让我补习SQL,只是要我把《解析极限编程》再读一遍。(当然我是刻苦的好学生,我把整套XP丛书都买来重读了一遍。)到了杭州以后,除了西湖的迷人风光之外,他的工作方式同样令我震惊:测试驱动、持续集成、故事卡、结对编程……这些似乎只有在书里、在老外的办公室里才可能出现的东西,就这么活生生地出现在我眼前。这让我第一次产生了一种朦胧的感觉:我们也可以用正确的方式做优秀的软件。

后来由于种种原因,这些敏捷的因素在我们的项目中出现得越来越少。到最后,除了一套尽管谈不上完备、但至少还频繁执行的测试和时常进行的重构之外,我们的项目已经基本回到大家更熟悉的、“普通”的工作方式了。这个现象引发了我的很多思考:为什么明明知道敏捷是更好的方式,我们却无法做到呢?说来有趣,最后解开我这个疑惑的竟然是《坛经》中一段禅宗典故。

五祖弘忍座下大弟子神秀偈云:

身是菩提树

心如明镜台

时时勤拂拭

勿使惹尘埃

更多人记得的是六祖慧能与之针锋相对的那一偈。但很多人似乎忘记,以一目不识丁的獦獠之身,能听人颂《金刚经》而有所悟,六祖的根性不是常人能比的。这世上有圣人能凭过人灵性而顿悟成佛,但更多凡夫俗子做不到这一点。这根性愚钝的凡夫俗子,难道就不用修行、无须上进了么?别忘了,五祖读了神秀的偈,也说“依此偈修,免堕恶道;依此偈修,有大利益”呢。

于是我开始观察,观察身边的同事,也观察自己。我观察到一个有趣的现象:很多同行(也包括我自己)想要偷懒、想要逃避那些严格的纪律时常用两个借口。其一曰“但求顿悟”——“Stallman/Linus/Gates……emacs/Linux/Basic……的时候做单元测试了吗?”(所以我也不用做单元测试。)其二曰“不耐渐修”——“昨天就有一块代码没有单元测试了。”(所以今天这块代码不写测试也不算太糟。)亲爱的读者,不妨和我一道来摸着胸口拷问一下自己,这是不是我们常用的两套说词?

回答其实很简单:第一我们不是Stallman/Linus/Gates,他们是天才而我们不是;第二我们的工作还得继续做下去,而且我们希望把它做得出色。熵增加是宇宙的定律,为了让我们的程序、我们的项目、我们的团队、我们的工作环境有序而不混乱,我们就必须不断地向其中注入能量——既然还做不到“菩提本无树,明镜亦非台”,我们就必须“时时勤拂拭,勿使惹尘埃”。(两年后,当我成为一名ThoughtWorker之后,我才真正明白了这件事。这是后话,暂且按下不表。)

在杭州的日子里,除了与软件开发的技术和经验之外,我的另一大收获是开始信佛。照着佛经所说“观身如身,观心如心”的修行方法,我学会了如何去观察——当然包括观察别人、观察外界,但更重要的是观察自己。观察自己的身体感受和心理活动,并时时调节身体与心理状态,使自己身心平和安定。(除了别的好处之外,这种练习让我近两年很少生病,偶染小恙也心知肚明该如何调理痊愈,这算是信佛之后的一个意外收获。)就这样带着一些经验、一些思索和一些收获,2004年,在离开学校正好三年的那一天,我再次拨通了蒋涛的电话。

这次回到北京、回到传媒的原因有二。其一,我已经亲眼见到好的经验能够如何有效地帮助软件开发,我希望创造条件让更多好的经验被传递给更多的人;其二,除了软件开发之外,我仍然对麦克卢汉的大众传播理论怀着一份向往——有些事,你知道自己不会一直去做,但如果没有过足瘾就会一直惦念。媒体工作于我,就是这样的一件事。此时蒋涛的工作重心已经从《程序员》杂志转到了CSDN网站,我也就成了网站的技术主编——在Web 2.0热潮到来之时为一个拥有超过100万用户的网站工作,谁又能说这不是一种幸运呢?

在他的代表作《理解媒介》中,麦克卢汉提出了一个影响整个大众传播领域的理论:媒介即是内容。从一个非常狭窄的意义上来说,这就意味着经营媒体的重点不是制造内容,而是打造一个传播平台,让内容的生产者与消费者在这个平台上互通有无、各取所需。在根源上,这正是我重新回到传媒领域的原因:除了开发软件、享受编程的乐趣之外,我一直向往成为一名“技术传播者”——通过我的工作让更多人了解软件开发的知识和最佳实践,用我的思想去帮助别人获得成功,这给我带来的满足感丝毫不亚于解决一个技术难题。但与此同时,我也越来越清楚自己的个性并不适于从事媒体工作:对技术的热爱使我无法中立地对待各种不同观点,而“中立”却是媒体的一大要素;而且我喜欢解决具体问题胜于人际交往,这也决定了我无法成为一个优秀的记者或主编。就在不断努力和认识自我的过程中,又是半年时间过去了。Martin Fowler来了。

直到现在,每当被问到“最尴尬的事”时,我总会讲这个故事。我们跟上海交大借了一间大教室,我们拉出了醒目的横幅和招贴,我们邀请了三百位客人和十多位知名专家,这全都是冲着Martin的面子。但就在讲座开始前4个小时,Sidney Pinney(时任ThoughtWorks中国公司总经理)在电话里告诉我:“Martin因病不能来现场,我很抱歉……”尽管事后有各种关于我当时如何镇定自若的传言,不过说实话,我脑子里冒出的第一个念头是“赶快刮台风全城戒严吧……”也许又是一次因祸得福,这桩倒霉事让我和ThoughtWorks一下子对彼此有了更多的认识。回到北京以后,郭晓(现任ThoughtWorks中国公司总经理)告诉我:也许我真正想做的是咨询。那么好吧,还能有比ThoughtWorks更让我心仪的咨询公司么?

但即便如此,当时的我其实也没想到,自己究竟会有多么心仪ThoughtWorks这家公司——也来不及想,唯一的想法就是“终于可以尽享编程的快乐了”。第一个项目对我来说熟稔多过生疏:卡片墙、大白板、圆桌和随意滑动的椅子、免费的可乐、两人一台电脑……正是我寤寐以求的工作环境啊。2006年春节刚过,公司又派我去印度参加了ThoughtWorks University的学习。拿到毕业证的那一刻,泪都几乎要下来——好歹是张文凭啊,哪怕并不是真正的大学呢。

ThoughtWorks的时间稍长,特别是先后拜访了印度班加罗尔和澳大利亚墨尔本两处办公室之后,我渐渐明白了一件事:这世界上的天才比我们通常想象的要少得多,但凡人所能达到的成就却也比我们通常想象的要伟大得多。没错,我的意思就是:ThoughtWorks并不是“天才幼儿园”,这里的800多名员工都是有七情六欲、食人间烟火的凡人。这些凡人做出了令人刮目相看的事情、营造了令人向往的环境,仅仅是因为他们保持着自己向上的心。

ThoughtWorkers常用的一个比喻,每个人都是一个热气球,在地心引力的作用下总想往下掉——累了,病了,心情不好了,打球受伤了……无数的理由让我们想躺在沙发上度过又一个无所事事的安闲夜晚。要让气球越飞越高,唯一的办法就是不断地给它加火。个人是如此,项目的运转、企业的环境也莫不如此。良好的项目不会自然而然地永远良好下去,它要靠每个人不断改进它的质量;振奋人心的工作环境不是从天而降的,它是靠每个人从一张贴纸、一个玩具开始积累出来的。有些热气球飞得那么高,也许只是因为它们一直没有放弃向上飞。

于是我真正释然了。五年的时间,我已经走到了这里。尽管自己还是那么微不足道——我学习新技术总是很笨,我到现在还不懂编译原理,我的英文口语结结巴巴……但我知道自己会一直向上飞。哪怕只有一点点进步,只要每天都比前一天更好一点点,我就不会再让自己失望。不过生活总是这么充满戏剧性:当我为自己的学历问题担忧时,其实从来没有人因此歧视过我;而当我能够坦然地拿这个话题开玩笑时,却着实被歧视了一把——因为没有本科学历,美国大使馆根本不考虑给我发放工作签证。在未来的若干年里,这也会是我的一个有趣谈资吧。

回想这五年来的经历,曾经有过好多次的因祸得福、好多次的贵人相助。我很愿意说这是因为自己命好,不过另一种解释也多少有些意思:每件事情的“意义”,其实是我们在事后给它加上的;如果用平和的眼光看待已经发生的事实,用积极的态度迎接即将到来的明天,也许所有的塞翁失马都可以变成焉知非福。是的,这似乎与因果律不符,但宗教信仰原本就不同于因果律。我信所有的事情都是神祗的安排,所以我欣然接受。

但听天命并非无须尽人力。神会给你祈求的一切,前提是你知道自己想要什么。关于“发现自己的兴趣和特长”,已经有无数人讲过无数次,实在不必再作强调。我想说的是,仅仅知道“了解自己”的重要性还是远远不够的,我们需要做更细致的工作来真正了解自己。借助一些专业而全面的心理、性格测试,你可以找到自己的性格特质和缺陷;然后你可以制订出具有可操作性的计划,充分发挥自己的长处,同时避免性格缺陷造成严重损失——举例来说,假如你害怕演讲,你不必费心(也不太可能)把自己培养成口若悬河的天才演说家,但可以(并且应该)想办法避免因为紧张而忘词;而且你还可以发挥自己善于收集资料的特长来帮别人准备讲稿,让别人替你去演讲。当然,最重要的还是自己的感受:花一点时间让自己静下来,然后问自己到底喜欢什么、想要什么。做自己喜欢的事情更容易做出成绩;而每天浪费8小时来做自己深恶痛绝的工作,不啻是在慢性自杀。

尽管辍学这件事困扰了我数年,但我并不因此而愤恨——甚至有些感激。因为没有文凭,让我比别人少了一道可以依靠的墙,因此也逼迫着我不断努力前进,不敢须臾懈怠。虽说自认为已经跨过了这条鸿沟,但我并不想忘记那种害怕一觉醒来一无所有的危机感。就让那个怅然若失的梦一直伴随着我吧,做一个“大学未毕业程序员”,我已经习惯了这种状态,感觉还真不错。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1504161


这篇关于用五年时间跨越鸿沟——“大学未毕业程序员”的流水帐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618167

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

未雨绸缪:环保专包二级资质续期工程师招聘时间策略

对于环保企业而言,在二级资质续期前启动工程师招聘的时间规划至关重要。考虑到招聘流程的复杂性、企业内部需求的变化以及政策标准的更新,建议环保企业在二级资质续期前至少提前6至12个月启动工程师招聘工作。这个时间规划可以细化为以下几个阶段: 一、前期准备阶段(提前6-12个月) 政策与标准研究: 深入研究国家和地方关于环保二级资质续期的最新政策、法规和标准,了解对工程师的具体要求。评估政策变化可