临近毕业了,还没有收到任何Offer,实有感慨,所以回忆下这些年、最近发生的事情。边写边想,或许能更多地找到自己的不足,然后再继续发奋下,哪一天或许能修成正果。
算是出生在农村,小时候应该算十分清贫,之后好些了,父母能在我小学前盖上了自己的房子。那时候算是个荒野吧,四周都是大草原似的,小时候还能抓虫玩沙,现在却已成平民街道一条条了。
原是乡下地方,父母希望我获得更好的教育,让我读了另一个乡下地方里的一个民办全日制学校,就在那里被关了6年,半个月回家一回。
就是这么一所学校投资还不错,学费挺贵,有着两个电脑教室,有着计算机课程。我还记得那还是个DOS时代,上课的内容不大记得了,反正二年级就被电脑老师瞧上了。
其实他瞧上了不少成绩好的小朋友,然后大家被集中在一个时间里,学习着程序设计。对啊,那时候爱玩的就是DOS版的超级玛丽和一个学习打字的CAE软件了。
当时学的是Logo,小乌龟画图,以及很多计算机基础知识。还能记得“计算机是由控制器、运算器、存储器、输入输出设备组成”。日复一日,最后就只剩下我了,直到高年级的时候才有了新的伙伴。
小学的经历基本上是各种刷,各种程序设计比赛竞赛,小学时候就已经考了个现在看起来没什么用的二级BASIC,还去刷了下中学组的比赛。不过除了码字、体育、艺术,基本课程的教育水平和公办重点还是有比较大的差距的。
反正那时候的状态就是人从小被娇惯了,成绩也好,十分孤傲。老师一方面不断地批评我骄傲,一方面依然肯定着我的成绩。不过基本上我是最懒的那个孩子。
一面之缘,获得了深圳某Top重点中学的电脑老师赏识,让我有机会参与考试,进入了真正的大城市重点中学。当时的感觉就是乡巴佬进城,反正以前基本上算从未见识过真正的城市。小时候母亲曾经在深圳打工,虽然没发达,好歹帮身边的我拿到了一个深圳户口,让我有机会在还小的时候见识下世面。
为了能陪着我,老妈没让我住校,反正是这个亲戚这里住下那个亲戚那里住下,直到后来家里出了大问题我才在高二开始住校。
不知是福还是祸,总体来说我觉得这段中学经历其实挺好,让我在出来社会前就见识到了世面。不过跟大城市孩子成绩上的差距和心理上的落差却是越来越大,直到高考完都还是如此(高考才400多分)。反正记忆中那段时间回到家里总是一个人关自己在房间,父母没什么文化也不懂的什么教育,反正就是中国式的只有大骂数落等等了。
初一的时候刚入学不久就开始跟着老师特别学习,才让我知道这些不是数学题,而是“算法题”,第一次接触了这个词。短暂的学习后很快的拿下了一个NOIP一等奖。在深圳市倒是排第一了,不过在省里实际上差得远呢(这方面倒奇怪,深圳整体水平不知为何不高,还很低)。
这是我唯一的自信了,不过没多久就没多少了,因为成绩差或者因为一个乡巴佬看着城里孩子的自卑吧(上了中学许久我才知道什么叫阿迪达斯)。直到高一,在竞赛方面我也没再有什么建树。正好也发生了一些家庭问题(算是破产、欠债、闹离婚、吵架等等的结合吧,不便透露),我便开始住校了(想起来即使宿舍难申请,我家所在也是最远的那个了,当然也是最容易申请)。
虽然老妈做错了人生一些最大的错事,但是她还是有胆识做了件当时最具魄力的事情,纵受千夫所指也是当机立断。
在大家都对我在码农竞赛方面能力以及天赋失去信心的时候,在家里欠债连连的时候,老妈用尽办法地找到了15000(天知道这有多难才做到)出来,当时也算是个极大的数字了。她做了两件事,用10000给我买了一台笔记本,花5000请了某名校某名师10天(500/天)作我家教。我清晰地记得那10天的内容是,将我已经知道的基础算法,让我每一个按照“标准”的格式,写了一次。
然后?然后就重复了初一发生的事情,一个奖保我免去了高考上了某大学,不然估计我现在在做着社会底层的一些工作或者读着某技校吧。回想下,天生是个人肉计算机的老妈如果有机会接受完整的教育(地主成分,博客园也不许讨论政治,略),或许今天会在Cupertino的会议室里拍桌子(笑)。
仰赖与互联网和好学校(自由度高、课余活动多),虽然我成绩不好,但是却能让我将学习偷懒的时间花在了运动、围棋、时事以及各种各样的知识。就算再低落我也意识到我要并且在这几年里真正地尝试去学会做个人。
无论有一段多么低落的时期,我依然有着IT理想,希望将来有着自己的产品与世人分享,希望能站在一个顶端。我第一个想法便是走出家门、走出校门,先去看看这个行业到底怎么样。
一个屁都不懂的小屁孩也做不了什么,高二的那个暑假我做了两件事。一件事是到某品牌电脑专卖店去免费打杂,一件事是到一个大网吧去打杂,洗厕所。让一个小屁孩映像深刻的是,当一个顾客走进店门,我无法告诉他哪台电脑怎么样;当一个顾客游戏登陆不了、系统错误,我能帮得上忙的只有门外汉的应用经验。
这些经历让我严重地明白,要走出社会,我连最基本的做人都不会。
有幸在刚入学就能去区赛,十分感谢老师给的机会和师兄师姐的帮忙,08年的哈尔滨。自学了一周C++,走过场地第一次面对全英的题目,狂翻词典,个人只独立A了两题(虽然全队也就两题),也算是见识了下大世面吧,见到了Sun和IBM的高层,那时候对他们只有一个概念——哇。一年半里各种比赛都跑了一轮,不怎么太投入,之后也就慢慢地淡出了。
虽然我知道如果专注地做下去,毕业的时候要拿到一份顶级的Offer不会很难,但是我就是无法接受一些事情。我无法接受懂程序懂算法却不懂IDE不懂工程不懂项目不懂计算机应用,最重要的是不懂做人。我深深地觉得会生产却不会应用是IT行业里最大的缺陷。
无法想象大四了,许多成绩好的不得了的同学还不知道怎么装系统不知道怎么打补丁;那些计算机网络考九十几的人拿着一个新路由不知道怎样设置IP和Subnet Mask以假设子网。
大学有个好舍友,家里做计算机零售,我也自己在外面主动认识了人,去了解这方面事情。反正努力了一两个月,拿到了经销商等级的进货权,也了解了岗顶的一个商业体系结构。接着就是义工式地卖各种DIY、Notebook、电子产品。重要的是我一开始的目的只有两个:了解现时计算机应用领域的知识、学习如何在社会中为人。
现在看来,当时的工作方式虽然没赚到钱,但是没让我后悔。
先是从装机开始学起,被人简单地教导一下,但是却觉得不够,就去查了许多工序标准、哪里用什么螺丝、线要如何摆放;Sale的时候几乎每个硬件都看遍所有细节参数,主频、架构、工艺、评测、发热量、返修率、批次、价格、保修期、保修形式、品牌情况、代理商情况等等;跟客户沟通的时候每个细节都解释清楚,每个需求都了解清楚或者帮他了解清楚,每一块钱都帮他算清楚;售后因为以同学为主,也经常义务地帮大家坐着一些应用维护。
销售上来说我一定是不及格的,这是一种最低效率的方法,讲得太清楚其实也增加了客户的负担。虽然我着实为客户提供了顶级的产品(这个我有自信),最低的价格(没有利润,我对当时这种扰乱市场秩序的行为表示可耻)。
除了学到的最真实的技术之外,更重要的是学到了如何处理用户需求和与客户沟通,而这种能力应该是通用的了。
我的角色是一个专业的技术人员,并且对市场十分熟悉,而此时因为某些硬性的需求,客户来请求于我,需要一项产品。这个过程让我颇有获益,除了一些社交技能,还有更重要的社会经验。
我深深地感觉到,其实,客户永远不清楚他们需要什么。(记得IBM面试的时候他问过我关于处理用户需求的问题,面对Top企业,我也不知何来谦虚的心,回答的是尽量将用户素材粒度降低,设计之初将产品耦合度做松,以此应对客户在项目中必然会不断更变的需求,利用快速地需求变化反应为客户创造最大的竞争力。现在回想起来,这样对客户似乎太“客气”了,我只想到DI水平的用处没想到IoC思想的深意,只做了富士康而没做到苹果啊。)
一开始我将需求依赖于客户,但是客户因为非专业性,永远无法清晰地描述出自己的需求。我便从一开始引导客户(你什么专业,要用那些软件,有什么兴趣,将来这台机想怎么维护),慢慢地学会了快乐的客户合作,最终比客户更加了解客户需求(可惜没发达)。大四时看到《敏捷开发》,才发现,自己好像做“对”了,至少做好了。
很明确地说,其实客户即使了解自己的所谓需求,也只能了解自己见到的那一部分,由于专业性的原因他们没办法把自己所有的需求都描述清楚。就像是病人看病一样,只能想到要把病治好,很难理解到自己到底需要什么药。
不过比起那些随便的销售,我更不想“忽悠”客户,就像不想做随便开抗生素的医生。
又或许是,受到的诱惑还不够多,呵呵...
刚入学变加入一个有趣的社团。有趣在一个社团居然可以自负盈亏,不仅不用学校一分钱,还可以自己赚钱,并且模拟着一个企业的架构和环境。社团以网站命名,一开始我以为是个技术+运营类的社团,不过后来才发现不是,但是却让我学到更多。
也不知道是生不逢时还是天将降大任,让我在一个最困难的时期到来,当然也有着不一样的锻炼。
面试笔试似乎刷了一半以上的人,获奖和保送生的资历以及面试的淡定还是保我进来了。在这里我第一次接触到了两个影响我整个大学技术生涯的关键名词:ASP.NET和HTML。也不知道悲剧还是喜剧,因为一些变故,技术部剩下的一个大三主管师姐也是半路出家的美工。这里的意思是,所有的技术都需要自学。也因为这个原因,大一末我变成为了主管。
.NET十分合我胃口,第一次让我见到一个方向,让我期待已久的从写程序到写项目的机会放在我眼前(其实初中的时候用Delphi和MFC各写了个计算器的,不知为什么之后对计算器情有独钟,每项新技术想到的第一个Demo不是Hello World而是计算器,万恶的计算器!)。我便开始自己买了书,开始学习ASP.NET(现在发现是WebForm),不记得通宵了多少个夜晚了,不得不说.NET真的是一项艺术品,一件十分伟大的艺术品。大一开始能做到的就只是熟悉了.NET3.5的基本UI控件(后来许多控件都不熟悉了,因为后来的项目习惯都尽量避免使用.NET控件,一方面避免破坏分层,另一方面是希望尽量轻量级地解决问题)。
社团的情况不像我最初想象的那样一个网站,反而网站方面跑在一个P4+512M的服务器上,而且是低版本的ASP+PHP的混合物,毫无架构、规范、可扩展性(所以一直以来让我Update它的唯一想法和做法是做一个新的,也让我有一次次尝试的机会)。社团在建站之初就朝着一个综合性社团发展,独立运营、以商业活动和各种事体业务支撑收入,网站已经没有任何盈利和运营工作了。
一方面一些历史原因,出现了断层,老一辈也都快要离开了;另一方面在同辈中在自己领域和在社团事务中着实表现不错,在大二变成为了“CEO”,一个140人社团的Lead。能让我超脱技术以外,实践了一番技术以外的行政、营销、策略、人事、公关、财政等等等等。如果要细说的话,四年的事情,太长了,所以就把自己专业领域的事情说下吧。
社团主要用的是一个CMS站点,一共做了两次,第一次在大二到大三,用了三个月;第二次在大四,用了两个星期。
一开始我只知道做一个有CMS功能的站点,账户、发布新闻、评论、群组管理,不过最终没有投入正式使用,出现了许多问题。首当其冲的是样式问题,社团里因为之前说的人事原因,都是刚入大学的年轻人,没什么办法给出一个好的UI Design(我也很烦,因为长期被指责这是我技术的责任);新闻输入用着个Editor,功能强大,却需要操作人员有WEB功底,而且要有很强的规范性,否则各种转载会带来各种样式,导致同站点样式不统一。这样我们不得不在人员培训方面放很大投入,而且管理成本也很高;同社区网络已经有着2个大竞争对手(官网和一家私企),原本因为没有需求和投入,就没什么用户基础了,所以推广比较难。
第二次除了使用了更好的架构、使用了DI、使用了更好的代码规范外,更重要的是做出了调整。样式方面采用了中性色为主,单色点缀,样式选用了最简单的一类,主要是色块,只留背景图动态可变,而布局上纵向模块化,哪里有问题可以容易卸下来改需求。编辑框做了特殊设计,让编辑一段一段填入,去除所有样式,根据每段的一个Strategy在显示的时候选择现实为什么样式,规范了整站的样式,也不必再对人员进行什么培训管理。三是将经营模式开放,将项目做轻、做成了一个只要复制黏贴,改一下Site ID变可以马上建立新子站项目,同时添加了信息共享功能。这样做的目的是将内容完全外包,谁有兴趣就来要个网站,功能我提供,一项升级大家都可以享受,由做内容走向做平台。
当然还是有很多新问题,社团经历里也有许多恶心问题(比如某个我们做了七届的活动去借场地,结果以学校相关新政策不允许不借,不久后学校某部门却在学校做了一个同样的活动,欺负没后台的社团啊),留给后辈们吧,而且好像跑题了。
当时是大二中一次偶然的机会,网络学院(不是我的计院)有一个项目非常赶工,通过师姐介绍,让我有机会接触期待已久的真实项目,兴奋不已。工作内容是将一个.NET MVC网站的前端嵌入美工已经做好了得HTML Demo。虽然社团的自学经历让我较轻松地胜任,但也是这个机会让我认知到Web UI的松耦合,从一个Visual Designer做Web的菜鸟开始走向正式Web前端工程师。个中见识到JS和AJAX更让我向往了Web Application。
这次临时工受到赏识,让我在连正式员工都不够位置的开发部的一个角楼有了个和普通员工同样Level的办公位置和配备,这个位置也将为我留到毕业。
如果说社团让我有机会不断考虑实际需求而去进而去想办法找技术去实现,网络学院提供的资源和机会让我有幸不断地接触到最新的技术和解决方案(最根本的是这里是.NET底的,不是Java,不是LAMP的,亲!)。
这里是个好地方,当然跟Lead有关。自对计院极度失望后,我从未想过学校里还有这么个地方是真正地在不断地探索和追求新技术的。就像.NET MVC、Razor、EF、Mono、PhoneGap、**(机密)、**(机密),以及各个版本的iOS、Android、WP7开发,刚出现不久要去做较完整的研究,人员不足也尽力做着十足的技术储备,只不过不能做到十分深入。
领导的要求也比较高,即使不是专业出身,也都会积极跟进,比如常常可以见到院长和美工做在一起,一个个字体大小、位置、阴影、色调地调整。设备投入也比较大,学校里难得有个地方能一批一批Mac,一批一批工作站,一批一批设备地买。也难得它成为了学校的印钞机。
在这里的经历让我有幸从三层架构开始,学会了DI,学会了设计模式,学会了各种技术和学会了研究方法,同时还学会了工作。
在这里的学习方式基本上是:需求、目标、学习,一旦有需要,就去边学边做。在这里也被给予了足够信任,有些个项目都能允许我独立完成,像客户端、网站、Report。
其实忙不应该算借口,因为学业始终是本业。
至于有多差?应该挂了十来科吧。一方面整天逃课去做各种事情(当然没有做坏事),另一方面又不抄作业,又不借作业交,好赖都要自己做。其实没上课有些东西也不怎么会,有些东西也没什么兴趣,再坚持自己做也不会有什么好结果。算起来其实一大半挂的都是物理类的,像电子电路、组成原理。
特别有趣的是英语。这么多年来都考不好的英语从来没挂过科,而且神奇的是,我居然有一口好得让人骄傲的口语。不过至今依然木有六级,四级421之后就开始直接去考六级了,考得我不亦乐乎。
或许是跟长期使用英文版的软件和阅读英文的技术文档有关吧,英语不至于差,不过也不至于好。
秋季的校招对于应届生是十分重要的吧,不过这时候我却遇到了拖欠学费(还能有什么原因)。
拖欠了学费就不能上系统选课,特别是我还需要重修和补考,反正只能留在学校,一次次地往教务处跑,也算是前因后果吧。
不过没出去找工作的这段时间倒是没有闲着,做了个网站、一个WP7客户端、一个PhoneGap的iOS客户端和一份Report,可惜的就是没有工作。
从来都没死在笔试上,所以剩下的就全悲剧地死在面试上了。
第一次应聘是深圳某金融IT巨头,第一个面试官看了我简历之后直接扔给了HR,让我去找了第二个面试官。然后第二位同志问了我一些技术问题,映像很深刻。
...一堆废话之后...
我:“我成绩比较差。”
...大致是问了我的成绩细节后数落了我一下,所他还招过一些技术不错的,成绩也很好...
他:“你知道程序编译后再内存里是怎么布局的吗?”
我:“...不知道”
他:“你知道虚拟内存的作用吗?”
我:“扩展内存空间的不足?”
他:“那是最基础的理解,虚拟内存是用来分割进程的。”
我:“这个我真不知道。”(后来知道了,在Professional C# 2008里面的第一章也有写到)
“我比较熟悉.NET和WEB。”
他:“那就问你一下.NET的事情吧。”
“你知道怎么用DCOM吗?”
我:“不知道...那是什么...”
然后一阵数落之后,结论是我严重偏科,让我回炉重造,还推荐了给我《深入理解计算机系统》和《计算机的心智:操作系统之哲学原理》。
回去后前一本书我马上买了,后一本发现目录跟课本差不多,还没课本详细,就没买。然后回去后马上把他问过的问题都查了下,好奇吧,可惜晚了。
春季岗位不多,家里也不让我离开广东,所以一有在广深的机会我便都投了。
之后去过了UC社招的WP7岗位、3G校招的Android、Oracle的Graduate Trainee、IBM的Application Development,以及最后在YY校招的测试岗二面遇到了自称在微软干过的HR。他问了我关于测试的问题,不过基本都不会。.NET那里他问过我为什么要用delegate,MSDN上是怎么写的。我答不出来,对,我为什么不知道为什么要用delegate而仅仅地去用它呢?
最后他说了句话,“是你熟悉的领域就不要让我抓到任何漏洞,你还是到别的地方试一下吧。”
之后我发现了一个问题,我所“熟悉”的知识,无论是WEB还是.NET还是硬件上的,都仅仅是用积累的方式积累起来的,完全不够系统,也就是漏洞百出。
对啊,我所感兴趣的技术,使用了那么久的技术,怎能漏洞百出?怎能不够深入地研究呢?
虽然找不到工作很失落,不过还是应该反省一番,却是这么些年来总是没有集中地系统地学习过这些知识。所以还是决定好好收收心,从《C#高级编程》、《CLR via C#》第一个字开始看到最后一个字,一点不漏。然后好好地背下英语单词,尽快成为一个“半鬼子”,至少在技术方面要完全脱离词典。然后就找到了cnblog,积极地去参与社区(抱歉,以前只玩Q&A)。
所以这段时间,开始了每天看书、毕业论文、看博客、试代码的日子了。
希望集中的勤奋,能让我尽快地成为.NET和Web的一个Expert吧。
虽然很希望快点赚到钱,不过这么多年来最开心的,不过是每次用技术和创造解决了现实世界的问题后的那一刻。
我还想继续学习,期待有一天能在社会用技术创造一些美好;
我还想养好身体,做一个技术员做到很老;
我还想在我做好事情之后,获得大家的肯定;
我也希望,无论何时,职业道德都能战胜利益的诱惑;(当然,你们可以随便诱惑我。)
还希望,出了自己的领域,自己在其他方面也能变得博学;
希望自己还总是能保有对技术与知识的激情吧。