在我的一篇有关个人经历的文章《艰难的路,艰难的行走——读疯狂的程序员有感及近2年来的个人总结》在论坛和博客发表之后,收到了很多朋友的热情的鼓励,在此我深表感谢,阳光总在风雨后,对我而言现在经过几年的辛苦奋斗,风雨基本过去了,我现在生活过得很充实也很开心。今天收到了一封特殊的私人留言,是一个即将毕业的大学生给我的留言,希望我能给他一些建议,其实我曾经想过在《asp.net夜话》系列中讲讲我个人的经历以及我的学习方法的,今天就把我给他的留言整理一下发表在网上,供大家参考吧。

希望周公能够帮帮忙,我真的很困惑。谢谢

周公:

    您好。冒昧的打扰,希望您不要介意。看了您的《艰难的路,艰难的行走》,感觉很受触动,突然觉得应该给您写封信,不管结果如何。

    我是一个马上就要毕业的计算机科学技术专业的应届毕业生,对自己的前途很是困惑,在这个世界如何生存是相当的迷茫,知道周公在IT圈里打拼多年积累了丰富的经验和阅历,相信您肯定不会拒绝解决一个毛头小子发自内心的迷茫。为他指点迷津,谢谢。

    当初不知计算机编程为何物的我,也不知为何选择了计算机专业,就算是到了大学也是这样,就这样混了四年。现在面临就业的困惑,这些天没少跑了招聘会,可现在我们的就业是相当的不易。就是有要我们专业的也是得需要有工作经验的。现在我才深切的体会到人无远虑,必有近忧这句话的分量。

    现在自己没有丝毫的就业优势,后悔当初即使对编程不感兴趣,也应该硬着头皮学点东西,这样的话至少现在不至于那么迷茫。现在我深刻的意识到了这一点,知道别管怎样,只要哪怕有一点技术的话,也不至于落到这步田地。因此我想学点什么,学点什么以至于半年后毕业了好哪怕有个工作干,虽然四年了什么都没学到,要想在这半年能够学好有点痴人说梦,不过我觉得现在哪怕学点东西,也能有口饭吃。可面对这浩如烟海知识的海洋,我有点眼花缭乱,有点不知如何下手。您作为一个过来人,作为一个在IT行业颇有阅历的长者,以您的眼光,认为我要想在专业方面的工作上生存的话,该选择什么,该学点什么才能找到工作,才能生存?

    恳切的渴望周公能够给指点迷津。

此致,

敬礼

一个痛彻心扉的失败者 


 
to一个痛彻心扉的失败者:

    首先,非常感谢你对我的信任,向我说了这些话。其实当年我也有类似的迷茫,前几天我无意中发现了2003年左右我在csdn论坛发表一篇求助的帖子,询问做编程工程是否需要考证的问题。

    经常有一些初学者向说自己的以前如何没有把握好学习机会,自己基础如何差等等种种客观条件,其实我从事IT这条路也不是一帆风顺的,我早先在学校学的专业是工民建专业,就是负责楼房的设计和施工指导的,当年我从学校毕业之后还从事过一段时间的建筑施工工作,每天在别人休息和睡觉的时候我就会借整理资料的机会偷偷敲代码联系(之所以不敢光明正大的学是如果被领导看见了会被认为不务正业的),我想着先学好基础,如果有机会转向自己喜欢的计算机方面的工作。
 
    “机会不是时时有,却要时时准备。”

    “机会不是时时有,却要时时准备”,这是我经常对自己说的一句话,用以鼓励自己继续前进。没多久公司要信息化,成立了一个信息部门,负责公司的日常网络维护和公司内部的项目开发(算是自产自销吧)。因为我经常给同事装系统解决软件问题什么的而被公司同事当作计算机高手(如何这样也算计算机高手,那计算机高手就海了),所以公司决定组建信息部门的时候有人就建议抽调我进公司信息部门,就这样我如愿以偿可以光明正大地学习和做编程开发了。当时总经理还觉得很遗憾,因为当时我在众人眼里是一个很出色的工程技术人员了。在没有进公司之前我平常练习的时候喜欢给朋友做一些小软件用,以真实的需求来严格要求自己,所以我当时进去的时候很多人都觉得我已经有一两年的工作经验了(说这些主要是经常有人抱怨没有做实际项目的机会,其实只要你愿意任何一次作业和毕业设计都可以当作实际项目来完成,你还可以给周围的人或者自己免费做点小软件以提高他们的工作效率什么的。什么叫工作经验?就是处理真实业务的经验,你如果真的像我说的那样做,在学校你也能有工作经验)。在后来我在业余就给一家手机游戏公司做J2ME手机游戏方面的优化工作了。
 

    “没有人会在乎你从哪里来,只会关心你到哪里去。”

    以前在面试别人的时候以及现在对一些编程初学者经常说的一句话就是:“没有人会在乎你从哪里来,只会关心你到哪里去。”你以前基础差、底子薄是别人不关心的,别人更关心的是你要成为什么样的人。起点并不重要,重要的是你给自己设置的终点,如果你真要想达到自己设定的目标,你肯定就会找到方法。
 

    “成功就是简单的事情重复做。”

    “成功就是简单的事情重复做。”学编程也是这样,在去年我的笔记本硬盘和移动硬盘没有坏掉之前,我还保留着我当初学习Java和C#时做练习的代码,甚至对于同样的问题可能做了好几次,每次的答案都是不同阶段对编程有不同认识的时候写的,每一次都会在前一次的基础上提高,有些是性能上的,有些是安全性方面的。

    这里讲一段我以前学习英语的经历。我以前英语非常好,从初中到高中英语课本里面的每一篇文章都能背下,所以每次考试成绩都不错(98年高考失常的情况下考了129分),可是我就是不会分析什么主谓宾结构什么的,一道选择题一读过去不看答案我就能感觉缺什么,为什么?因为通过大量的练习我已经有了语感。我感觉写程序写多了,遇到某个问题的时候第一反映就会想这个问题该怎么处理,我自己称之为“程序感”,这恐怕就是所谓的经验吧,这些没有大量的实践是找不到这样的感觉的。所以我不建议在初学的时候今年从这里那一本书来看看,明天再从另一个地方拿另一本书来看,却几乎不动手去练,这样是没有太大的效果的。


    “最快的路不一定是最直接的。”

现在的就业形势确实很不容乐观,我有个老家的邻居的孩子今年7月份就毕业了,在武汉和北京找了几个月的工作最后无果而终回家去了,说要搞生猪养殖,把他爸爸气得不行。我想之所以出现这样的结果可能跟个人心态有一定关系。在我2002年毕业的时候就已经有“先就业再择业”的说法了,算算我也算是“先就业再择业”的典型了。我喜欢计算机,可是当时我的情况跟别人比就没有什么优越性,所以我当时就先从事建筑方面的工作然后自己想办法获得编程方面的经验,一旦到合适的时候再从事编程方面的工作。对于第一份工作我个人觉得不要太看重工资,说实在话在学校里可能学到了一堆理论,可是我们还没有学会怎样把这些知识用到实践中去,我个人觉得我在大学最大的收获就是掌握了比较正确的学习方法,而不是我所学的知识。你工作的第一家公司是你从学校步入社会的一个连接点,让你体会到如何把理论联系到实践上去,在这里你会学习一些与周围人和谐相处的技巧,这一点尤其重要,很多人刚出来就像我当年一样“指点江山,粪土当年万户侯”,觉得什么人都不如自己,这种心态是有害的,我们应该虚心学习,学习知识还有学习做人。成功的人做人首先做人都非常成功。单枪匹马的个人英雄时代已经过去了,现代社会非常强调协作。

 
    合理的安排时间

    以前的时候朋友喜欢看一本杂志叫《8小时之外》,一天24小时,上班8小时、睡觉8小时,除了这16小时之外还有8小时,造成人与人之间差别很大的一种重要原因就是大家对这8小时的用法不同。在这里我不是说要一定要把这8小时完全用来学习,那样就成书呆子了,我是不赞成的。我本人就是一个非常喜欢玩的人,特别是旅游,工作后的这几年我的足迹几乎踏遍了中国的每个省、直辖市了,业余我海喜欢写作、打蓝球、台球保龄球等。

 
    做好第一份需求分析

    做软件的人经常挂在嘴边的一个词就是需求分析,需求就是客户的要求,只有满足了客户的要求,客户才会乐意掏腰包买单的。找工作的准备工作就是做一个需求分析或者说市场分析的过程。

    我虽然从事软件行业方面的工作有6、7年了,但是在这方面我没有太多的发言权。我早先在大学里学了点C语言,99年左右开始学Java的,学习Java并不是因为别的是因为它在语法上很接近C语言,理解起来更容易一些,等我学得差不多的时候Java就在国内比较火了,我早期就用它做了不少Web项目。后来因为项目中需要一些应用程序,而早期的Java开发GUI(图形用户界面,即c/s程序)应用程序确实不敢恭维,所以就用C#来开发(C#的语法和Java非常类似),后来就主要用C#来做开发了,因为IDE支持不错。对于即将走出校门或者刚刚走出校门的朋友来说,我建议首先确定一下自己想在哪个城市找工作,虽然很多时候经常有人说语言只是一种实现思想的工具、编程语言没有高低之分,学好哪种语言都能挣钱,但是由于某些原因某些城市里某种语言就比较好找工作,在某些城市里就没有那么明显,比如某个城市大部分是做外包的那可能用Java比较多,如果你是学C#的建议暂不考虑去那里找工作。选定一门编程语言之后,对于同一门编程语言还可以细分的,比如可以分为普通应用软件、嵌入式开发还有Web开发,每种开发需要的知识也不大一样,比如做嵌入式开发就不怎么关注数据库这方面的知识,需要对算法和性能分析方面了解多一些,而做Web开发就需要了解HTML、CSS、JavaScript、Ajax以及数据库等方面的知识。我建议当你确定要在哪个城市找工作之后,你去一些招聘网站上看看这个城市里的软件公司的招聘要求,比如大部分公司的招聘岗位是做什么的,主要用些什么数据库等等之类的,这样做到有的放矢,把有限的时间用在刀刃上。这样去面试的时候就比编程技术和你差不多的人多了一份胜算了。目前比较流行就是Java和C#了,搞偏重于硬件方面的开发就需要学好C、C++及汇编了,用到的数据库主要是SQL Server和Oracle及MySQL。

 
    阳光总在风雨后

    在生活偶尔一些挫折没有什么,不经历风雨见不着彩虹,大家都曾经有过失意和挫折的时候,不过有些人从此消沉,有些人越挫越勇,从挫折中发现自己的不足,以后挫折的次数就越来越少了。再送你一句话:“虽然所有的开会未必都能结果,但是正如所有的果实都要经历开花这个过程一样,所有的成功都在努力付出之后。”

    这几年我一直对技术超乎寻常的关注,已经有一些效果了,除了目前极高提升了我的薪资待遇之外,也给我带来了很多机会,最近一段时间经常跟一些小公司的老板一起喝咖啡,有很多公司之所以公司小很大一个原因就是技术这个软肋的限制,我遇见过好几个公司的老板非常有想法,可是公司的技术人员没有办法把他的想法编程产品,所以每天只能接一些没有太大技术含量的小单子维持生计,下一步我可能我会考虑跟某个公司合作开发一些产品了。技术人员的缺点是有时候太关注技术而忽略了市场,学习技术最终的目的是要改善我们的生活,毕竟大部人是把技术当作一种谋生手段而不是兴趣或者爱好,把技术提高了找一个懂市场的人一起合作,强强联合未必不是一件双赢的事情。

    最后,希望你在毕业之前的这段时间抓紧时间有针对性的准备,争取毕业之前找个好工作。
                周公(周金桥)
                2008-12-17 00:23