茫然的求索

那一年,刚好经济危机,毕业了。经过了很长时间的“网上海投”而杳无音讯之后,终于发现“经济危机真的和自己有点关系了” ,曾经以为经济危机和自己巴刚子打不着。

拿着简历,开始到处去跑招聘市场,又发现,人才招聘市场里面的计算机岗位特别少,满街的招聘销售。即便有一两家招聘技术人员的,但是又被各种“硬性指标”拦在门外。

看着钱包里面的钱一张张的变少,没有时间郁闷,也不能待在家里,没有收入的日子,待在家里就是耗钱。武汉的夏天很热,在家里带着要吹电扇(没有空调,使用空调那是很奢侈的),另外在家里要开电脑,都费电。

  无奈之下,开始“地推“,开启了扫街模式:把创业街,软件园等地方的公司,一个个上门去死磕。

  记得很多次被门卫挡在外面,多次被前台美女婉拒,多次被保安赶出来,不管怎么样,最后终于找到了一个工作。

  给我的理由就是:挺有激情的,胆子蛮大的,人也很阳光,我们需要公司没有活力,招你进来调节气氛(这是多年之后,当年的HR美女跟我说的)。这应该也算是“拼颜值,靠脸吃饭了“(呵呵呵)。

  得到了一份理想的工作,同时也收到了一份馈赠---有了慢性因喉炎,因为天气热,水喝得少,干渴了,留下了这个小毛病,至今陪伴着。

前辈的警示

  终于找到了工作,工资很低,完全达不到交税的标准。

  虽然曾经在大学期间在一些公司做过项目,也参加多一些软件比赛,也在很多的IT社区回复很多的技术帖子,提升能力,但是终究没有实战经验,不管自己如何说,至少在别人眼中,你就是新兵蛋子。

  能力不是说出来的,是干出来的。

  在日企里面,做事比较的严格,可以明显的感受到了每天那种紧张的气氛,每天进办公室,听到的更多的都是键盘敲击的声音,虽然大家在聚在一起讨论需求,但是更多的是在会议室。即便有时候在工位上面谈论问题,大家也是很注意,尽可能的不打扰到别人。

  我终于明白HR美女说的那句话了,需要新人进来,注入活力。

  入职半个月左右,我旁边的一个“老程序员”,我们一般叫他----陈工,走了。来了这么久,没有和他说一句话,只是知道他40多岁了,而且是一个基础的程序员,在级别上面,Leader都算不上。听到同事在八卦,说是陈工被公司“请走了”,因为他的待遇可以请到2~3个新人…..

  看到陈工默默的收拾东西,轻轻的走的时候,那一刻,我思考了很多:陈工也儿女,老人要养,现在被“请走了”,怎么办?而且被请走的时候,没有看到他的反驳,换句话说,难道是真的是“弱者连谈判的权利都没有”?四十多岁,已经算是不惑之年,自己不想这样子。

  陈工的离开让我明白,至少等到我四十岁的时候,不能混成这样子。

生存的渴望

  进入项目组之后,终于看到什么是一个真正的软件项目,代码的庞大完全超出了自己想象。

  不要以为有人会来“慢慢的“的教你,这不是学校,而是公司。招你进来就是来做事的,不要以”我是新人,所以我不会“来扯理由。

  要么干,要么滚。

  

  项目leader丢给我几个文档,说是数据库的结构文档,让我看熟,之后给我分配任务。陌生的业务,陌生的行业,几百张数据表,肯定是一头雾水。很想找别人去问,看到大家都忙得像啥似的,也不敢随便去打扰。

  凭着自己所谓的“经验”,开始尝试理解各个表,也看着一大堆英文需求文档,开始磕磕碰碰的尝试理解需求,然后把问题都记录下来,每次看到有人在喝水,或者在上厕所了,我就马上走过去问几句。

  进入项目组,一直没有分配任务,心里反而着急,因为我知道公司不会养闲人,什么都做不了的话,天知道什么时候会被开除了。每天啃文档,看似轻松,心里却是度日如年。

  大概4天之后,我告诉leader,我把数据库表结构看熟了,也知道了系统分了那些大的模块,每个模块大致的功能是什么,更加具体的功能,就需要在项目中学习了。

  Leader也吃惊,于是让一个老员工开始带我,他开始把手头的一部分任务给我,让我尝试着做起来。心中开始有了一个大石头,因为真的要“实战”了,做一个“商业项目”。这和以前实习,比赛是完全不同的。

  每次任务了之后,自己开始捣鼓。很多时候发现,自己在业务的理解方面有偏差,明明上午写的代码,下午就感觉不对了,因为觉得业务应该是那样子的。于是,自己赶快急急忙忙的去修改,因为任务的时间是规定好了,必须在规定时间之前做好。

  于是,每天不断的琢磨,但是自己天资愚笨,很大问题搞不动。很多同事下班就走人了。但是我自己的任务没有完成,肯定走不了,也不敢走,但是有些业务点,技术点自己确实不清楚。于是就想出了一个招: 每天看自己哪些点不懂,然后看看那个同事比较对这个比较熟,只要他下班,自己就跟着他一起走,一起挤公交,走路,同时,在路上不断的请教各种问题。当把同事“送到”家之后,马上自己回到公司,开始继续捣鼓

  自己每天基本干到12点回去。回去之后,不断的反思,任务是否做好了,代码有没有问题。很多时候,感觉自己越想,问题就越多,越发感觉自己写的代码有问题。心里一惊,一夜都睡不着,早上4点起来,摸到公司,然后在上班之后,把代码改好。

身边的惊雷

  在公司呆了一个多月了,而且也开始完成一些小任务,总算是“做了点事情”,心里依然稍微好受了点,毕竟我不是闲人了。但是心里依然不踏实,因为离转正还很远,离“自如的完成任务”还很远。

  有一天,看到和自己一起做事的那个老员工和HR争吵,第二天,那个老员工就走了。

  我震惊了:一个月以内,我看到了两个人被请走了,而且第二个人就是和我一直做任务的同事。他有四年的经验都被请走了,我一个新人,岂不是…..

  

  HR找到我,告诉我,那个员工的走,不是因为能力问题,而是态度问题,让我不要担心,好好干,而且这一个月干的也不错。

  不管怎么样,我心里的念头就是:我要留下来。

  于是,我开始更拼命的做好手头每一个任务。如果自己做完了之后,反复的审核,在审核,如果自己手头任务搞完了,就看周围有没有同事需要帮忙的,不管是帮他们“填充测试数据”,还是调整文档格式,还是给他们顺手倒垃圾,我都干。

  我要留下来!!!我需要工作!!!

困境,突破

做任务算是上手了,也逐步的开始做一些有点难度,稍微大点的任务。当时依然发现,自己每次都是花别人几倍的时间在做,虽然自己把任务做完了,其实中途缝缝补补,反反复复的修改还是蛮多的,所以,只能通过拼时间,狂加班来向别人看齐。

这无疑是一个很危险的信号,如果遇到更大的任务,难度在复杂一点的,那自己就死翘翘了。

  于是,开始给自己“定目标”:争取在每次写完一个方法,或者几个方法之后,代码一次性通过编译。

  写代码更加用心了,不再犯不必要的低级错误。而且也感到自己的能力貌似真的有点长进,因为做任务开始有“多余”时间了。

  于是,都开始给自己“定目标”:争取在写完每一个方法,类之后,功能是可以跑起来的,业务逻辑是正确的。

  然后开始一步步的坚持,到了一定的时间,认为可以了,然后定更多的目标“写完几个类之后,功能OK”,“写完一个小模块之后,功能OK“。

  慢慢的,很多的功能都一次写完,除了一些问题真的没有考虑周全,一般都OK了。在写代码过程中,之前总是拿到任务,想了之后,就开始动手,边想边写,如果不对,代码删除,重来。很显然,这又是一个作死的事情。

  于是,自己拿到任务之后,不着急写,而是在纸上面画几下,然后大概的列出需要几个表,需要几个类,每个类大致有那几个方法,每个方法的基本逻辑是什么样的。开始的时候,不可能想的那么多,但是依然会想一些,然后边写代码边完善。所以,以至于后来,很多同事看到我一个在座位上面静坐很长时间,不敲键盘,然后过一段时间,就噼噼啪啪的狂敲键盘。

  刚开始的时候,这样思考很难,而且时间过去了,思考的结果也不咋样,这样导致任务可能会完不成。所以,自己依然会每天起早摸黑的把这段时间补起来。

后来,慢慢的开始熟悉,发现“心里有谱了”,写代码的速度质量都提高了。后来才知道,原来自己的那种折腾就是所谓的“设计design”,原来“软件设计师”中的“设计”是有含义的。

思维,出击

经过自己不断的折腾,各种尝试,不断的把各种任务完成,自己的信心也有了,也开始敢于在团队中慢慢的说出自己的一些观点和想法。

但是,很多时候,毕竟自己各方面不足,不是所有的意见都会被采纳,其实很多时候,都不会被采纳,但是自己又认为是对的。

  怎么破???

  这个时候,肯定不要抱怨,更加不要谩骂别人是傻逼。毕竟刚刚毕业,很多东西都摆在那里。

  信任需要一步步的积累,实力需要一点点的证明。

  很多时候,自己也会认为项目中的某些功能,或者技术点可以改善的更好,如果意见不被采纳,那么自己就下班之后,自己一个人开始捣鼓,自己开始验证,自己的想法是不是对的。当然,捣鼓完了之后,代码不会合并,因为要考虑到整个团队,不能随随便便擅自做主。但是作为自己,依然会去验证想法,即便最后没有不能再项目中使用,但是起码自己动手了。

  如果每次看到项目中的问题,我会问自己:如果这个功能是我来做,我会如何搞?

  如果看到别人带项目,带人方式有些问题,我也会问自己:如果我带人,我会怎么搞?

  通过现状,不断的反思自己。其实后来才知道:很多时候,不是因为你屁股上去了,你才对应的思考方法;而是你的思维先上去,等到有机会,你屁股就自然上去了,因为你一直以更高的角度在思考问题。机会是给有准备的人。

助人,助己

  每天都会不断的学习,看技术相关的书籍,泡论坛,逛博客。看到很多不同的言论,不同角度的解析。有时候,看完之后,甚至发现:一个知识点,很多地方的讲解都是相互矛盾的。

  搞的自己也很乱。因为自己一直在“吸收别人的想法”,最后很多的杂糅在一起,自己很晕。

  于是,开始自己梳理知识点,通过自己的思考,各种求证,然后把某个知识点理解,至少让自己”自圆其说“,不至于被各种言论搅晕。

  我常常用炼铁在比喻:把各种不同的矿石,丢在一个熔炉里面,这些矿石就是各种不同的知识点,各个不同的思维,流派。我们自己的到大脑就是那个炉子,需要把这些矿石全部融化,然后融合在一起,提炼出钢铁,然后把矿渣过滤出来

  自己开始不断的每天学习,也开始写很多的文章,基本是每天坚持写一篇,然后反复的推敲,看看是否有地方很牵强的,是否存在“含糊其辞”的地方。如果自己都讲不清楚,那么就不要发布,一直到自己的思路想通了,而且认为别人按照这个思路理解,可以最终想通,才把文章发布。

  开始发现,通过不断的写文章,自己很多模糊的想法都变得很清晰。

  也发现:一个知识点,你自己看懂了,那是一个层次;你会用,是另外一个层次;你写出来,你写出来让别人懂,那又是更高的一个层次;你用最通俗的言语,把知识点讲出来,让别人一下子明白,又是更高的一个层次

  【本文已经在InfoQ投稿,版本所有,未经授权请勿转载】

4年,如何从草根成长成为CTO-(第一篇)的更多相关文章

  1. python成长之路第一篇(5)文件的基本操作

    一.三元运算 我们在上章学习的if,,else,,有一种简便的方法 他的表达式是这样的:变量 = 值1 if 条件 else 值2 解释过来就是如果aaa等于sss则输出值1否则输出值2 二.类的概念 ...

  2. Python成长之路第一篇(3)_初识字典

    经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...

  3. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

  4. Python成长之路第一篇(2)-初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  5. PYthon成长之路第一篇(1)__字符串初识

    今天一起走进python的代码世界,一起领悟python的魅力 在很多学习python的书中都会以 print  “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,worl ...

  6. Python成长之路第一篇(2)__初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  7. 【转】Linux从入门到精通——运维工程师成长路线图——CTO马哥Linux视频教学

    加油! http://edu.51cto.com/roadmap/view/id-2.html#6853467-sqq-1-36881-57ccc7d95ea58df839decd91bd220170

  8. Python成长之路第二篇(1)_数据类型内置函数用法

    数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...

  9. C++自学成长之路(第一篇)

    今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...

随机推荐

  1. 使用libjpeg.framework压缩UIImage

    +(void)writeFile:(NSString *)filePath withQuality:(int)quality { //初始化图片参数 UIImage *image=[UIImage i ...

  2. mac远程桌面连接windows 8.1 update,提示: 远程桌面连接无法验证您希望连接的计算机的身份

    在网上找到解决方案: SolutionEnable RDP security layer in Group Policy on the machine: Verify that the firewal ...

  3. Silverlight及WPF中实现自定义BusyIndicator

    在开发Silverlight或者WPF项目时,当我们调用Web服务来加载一些数据时,由于数据量比较大需要较长的时间,需要用户等待,为了给用户友好的提示和避免用户在加载数据过程中进行重复操作,我们通常使 ...

  4. Functional Programming without Lambda - Part 2 Lifting, Functor, Monad

    Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accep ...

  5. [ASP.NET MVC 小牛之路]11 - Filter

    Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns).横切关 ...

  6. 使用WCF的Trace与Message Log功能

      原创地址:http://www.cnblogs.com/jfzhu/p/4030008.html 转载请注明出处   前面介绍过如何创建一个WCF Service http://www.cnblo ...

  7. appledoc 使用brew命令安装使用

    appledoc --project-name yushuyi12345677 --project-company "xiaoyu123" --company-id aaaa -- ...

  8. iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题

    最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...

  9. SSIS 处理NULL

    不同于SQL Server中NULL表示值是未知的(Unknown Value),没有数据类型,但是,在SSIS中,NULL是有数据类型的,要获取某一个NULL值,必须指定数据类型,例如,变量 Int ...

  10. Triangle - Delaunay Triangulator

    Triangle - Delaunay Triangulator  eryar@163.com Abstract. Triangle is a 2D quality mesh generator an ...