IT职业规划(程序员,应届生一定要看)

  1. 云栖社区>
  2. 博客>
  3. 正文

IT职业规划(程序员,应届生一定要看)

聚优云惠 2013-11-05 23:46:37 浏览518
展开阅读全文
 非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。

 

--------韩愈《师说》

 

 

 

在校的IT学生有几百万

都在为如何如何学习才能找到工作、融入社会而迷惑

我们需要的不是灵丹妙药

而是一本让你少走几年弯路的

 

 

 

 

IT学生解惑真经

 

 

肖舸  杨中科 左飞  著

 

 

 

 

这是一部写给在校计算机专业学生的书

如果没有看到这本书

你可能会茫然无措的度过学习阶段

 

把这本书推荐给你的同学

你会得到更多朋友

 

 

 

中国IT领域的发展速度之快令世界瞩目,但是中国的计算机教育却没有能够跟上。因此,在各大高校扩招的同时,IT培训机构同样发展的很快。

 

然而,学习IT的学生却仍然面临着其他专业不一样的困惑。因为IT技术发展很快,而课程体系并不能很快跟上,因此学生在学校并不了解企业需要什么,自己需要学习什么。

 

正是在这种情况下,CSDN作为最大的IT技术社区,我们看到了IT学生所面临的困惑。于是专门推出了学生大本营(http://student.csdn.net),邀请了上百位在企业一线的技术高手和专家,IT培训机构的精英老师加入进来,针对IT学生所面临的通用问题进行解答。这些老师是站在过来人的角度,耐心的分析现在的市场、同学的心理,以及面临的机会和挑战,更重要的是,每位老师都给出了具体的建议。只要认真的读取这些老师的回信和总结,你总能从中获得自己想要的答案。

 

韩愈的《师说》中写道:“非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。”有了这些困惑并不可怕,可怕的是不知道如何寻找答案和解决问题的方法。

 

现在,就开始在这些老师的文章中寻找答案吧。

 

 

 

 

 

 

 

CSDN创始人 蒋涛


IT学生解惑真经

 

目    录

 

l       大学计算机课程学习路线................................................ 2

如果你是一个计算机相关专业大学低年级学生,那么这篇文章就是为你写的。我之前曾经发过一篇博文《大学计算机专业那些课》来谈论大学中各门课程的意义和重要性。那是针对更宽泛的范围来说的,这篇文章则更加精要和简约。

l       考研还是不考?............................................................. 5

有很多同学发出过这样的疑问“到底应不应该考研?”,很多同学都被这样的问题困扰着。“考研”这个词围绕在我们每个人周围,学校海报栏中最大的广告一定是考研培训班的,学校书店里卖的最火的书一定是考研的辅导书;同学们之间经常聊的也是“你考不考研,想考哪儿的研?”,仿佛不想考研就是没追求的表现。

 

l       做什么样的软件才能赚钱?学什么样的知识才能赚钱?... 14

我到学生大本营半年,发现大家都没有讨论过。那就是,做什么最赚钱?无可否认,软件可以实现各方面应用,不过,就我的观察,在现实生活中,有两种软件最赚钱,一种是数据库,一种就是嵌入式底层的东东,嗯,随着互联网的发展,目前做网络程序也很赚钱。

 

l       程序员如何踏上社会..................................................... 22

目前在学生大本营里,我也观察到,很多二本,三本的同学,在心里上有种自卑感,总觉得考分低了,出来就低人一头。这点,我是万万不赞同的。人一生是很复杂的,和邓大爷一样,三起三落不到头,关键是,你现在准备做什么?你能坚持多久?

 

l       职业生涯第一步----选择你的城市................................... 27

目前,感觉很多同学,在双选会签约,工作地点的选择上,有一定的盲目性。很少有人能主动地去选择合适自己的城市,因此,这里提出一点讨论。一家之言哈,欢迎拍砖。

 

l       关于女生的程序员之路................................................. 33

目前大学里面有句话:“干得好不如嫁得好!”,我想大家都听说过。其实是人就有惰性,也有一些劣根性,都想找一些活少拿钱多的工作,舒舒服服地赚钱,这种思想,其实不管男人女人都有。我自己也有,呵呵。关键是,社会是公平的,一分贡献,一分收获,哪有那么多不劳而获的事情。

 

l       如何找需求练技术........................................................ 37

被很多同学问,怎么才能知道用人单位的需求。这个给个建议哈:去CSDN或者其他什么网站的项目外包栏目看看,里面的需求,就是别人肯付钱的需求,自己试着实现一下,比较练技术。如果能卖出去,就表示技术练差不多了,可以凭这个项目经验找工作了。个人感觉,这个项目经验在找工作的时候,有时候比学历证书管用。

 

l       修炼编程的内功........................................................... 39

什么叫编程的内功?我的理解,就是对这个世界的抽象化理解能力以及描述能力。一个工作,能迅速从中提炼出下次可以重复的套路,并且能以一定的规则,就是计算机语言规范,描述出来,拥有这两个能力,就能保证遇到任何问题,都有办法写出程序来。所以,大家学校中学了很多数学,语言,算法,数据结构,甚至编译原理,操作系统,其实这些统统是工具,不是写程序的目的。

l       7000块钱能买什么?--答一位同学的培训问题............... 45

大家不妨扪心自问一下,学培训班,是为了找工作,还是为了跟风,还是为了学到真本事?自己有没有决心,让这7k物有所值?如果大家能像这样有割肉的感觉去学习,把自己往死里逼,这7k就花的值得,该学,如果没有这个劲头,学了和没学一码事,建议还是省省吧,替你爸爸妈妈省点钱。

l       构建自己的不可替代性................................................. 49

我问过很多年轻的朋友,他们在找工作的时候,最看重什么?答案很多啦,公司要够大,薪水要够高,要有足够的挑战性,要有成就感。。。等等,当然,也有一脸茫然的,那是还没有想好的。其实后来我考虑了一下,这个话题可以换个方式问,就是大家为什么需要找工作?其实人生活在社会上,公司里,最关注的,还是安全感。

l       简述C和C++的学习历程............................................. 53

总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。一家之言,欢迎拍砖哈。

l       IT业的职业细分........................................................... 58

在大本营看到很多同学讨论以后的出路,感觉到大家对IT业职业的细分还不是很了解,这里就我的经验,给大家一点参考,希望能帮到大家。一家之言哈,欢迎拍砖和补充。我在IT业很多年,也仔细分析过IT业的职业构成,就我的了解,其实IT业也在细分,大致分为如下几种……

l       选择技术还是选择销售?.............................................. 63

我看了你的信,你说大学没有学习好,虚度了光阴,现在培训班,觉得自己缺乏钻研(注意,不是专研)精神,不想做技术了,想做业务,我根据你的文字,理解这个业务就是销售工作。但是又觉得自己这么多年在技术上投入过多,舍不得。

l       这么多技术我该怎么学................................................. 67

什么都想学。恨不得把所有的知识统统都塞到肚子里去。看到什么,想学什么!这是几乎所有在校大学生的通病。但是,这不是坏事,甚至可以说是好事。说明了你“求知欲”高!总比那些,生活没有激情,整天知道泡妞、上网、打游戏、混日子的强。

l       金融危机下的职业思考----答一位同学的问题.................. 70

在你的问题中,你有一个大前提,就是金融危机,导致就业机会偏少,我个人认为,其实没有必要这么悲观的。你的问题让我想起了十年前,98年到2000年的经历,估计你那时候还没有考虑到就业问题,不过当时我可是身历其中,现在想想,其实当时有很多想法也不是很正确。

l       简述如何书写工程化的简单代码.................................... 74

在坛子里混了这么久,看了很多同学的代码,感觉到大家的代码,学校里面的书生气有点重,对于细节考虑不够,有时候,感觉和吃了颗苍蝇一样,确实很不舒服。这里根据我个人的经验,给大家简述一下,工程化代码,以及简单代码,不容易出错的代码的一些基本写法。

 

附:作者简介&编者后记   81

 


大学计算机课程学习路线

 

左飞老师

 

如果你是一个计算机相关专业大学低年级学生,那么这篇文章就是为你写的。

 

我之前曾经发过一篇博文《大学计算机专业那些课》来谈论大学中各门课程的意义和重要性。那是针对更宽泛的范围来说的,这篇文章则更加精要和简约。因为这里研究的仅仅是核心计算机课程,更重要的是,这里要说的是这些课程之间的关系,以及它到底讲得是些什么东西。我想这些课程最终是要组成一个体系的。

 

请注意我这里所说的是通常情况下的核心课程,每个学校在课程设置是可能是存在差异的,但总体上框架应该是不变的。

 

最开始的第一门课应该是“C语言程序设计”,这基本上属于你日后一切学习的开始,简单说这门课程的主要目的和内容就是介绍一种计算机语言的语法内容,至于怎么学好它,之前的文章都谈过了,这里就不罗嗦了。

 

之后的课程会分为三条线,第一条线的第一门课程是“数据结构与算法”。这很简单,一些有了语言基础之后,为了更好的使用语言去解决问题,就必须学习结构知识和算法。至于怎么学好它,之前的文章也谈过了——请注意,如何学都不是本文的重点。本文的重点在于告诉你你将来都会学些什么以及该学些什么。

 

“数据结构与算法”的后续课程是什么?答案应该是《编译原理》。很奇怪吧?课程就是这样设计的,其实这个路线也不是我发明的,国外大学的CS Course的体系也是这么设计的。编译原理说白了就是介绍编译器如何工作的,是让计算机理解计算机语言的一种方法和理论。这个工作过程之中蕴含了大量的算法,而且是非常复杂的算法,很多人甚至认为编译原理是计算机专业本科阶段最难的一门课程。主要就是因为这里面的算法太复杂,当然也会用到很多结构,树可能是用得最多的。当然,这就是相当于是数据结构与算法课程的一个后续性课程,类似一道附加题。最近听一个学生说有些学校本科已经取消这门课了,我想应该是较少一部分学校的做法吧。不过,中国的学习并不太重视这门课倒是真的。一般课程设置就是一个学期左右的课时。但是一般的国外学校这门课都要学上1年,甚至两年之久。这条线路到编译这里就应该是终点了。

 

下面我们来谈谈大学计算机课程学习的第二条路线。

 

在你具有了一定C语言基础之后,除了前面讲的第一条路线以外,你已经可以开始下面这条路线的学习了。

 

为了更好地探究计算机系统的研究机制,在学习了C语言之后,下面一门需要学习的课程是“汇编语言和微机接口技术”,这门课程包含两部分的内容,一部分就是汇编语言,汇编是一种更底层的语言(相对于C而言),说白了它就是一种“用助记符描述的机器语言”。很多人刚学汇编的时候都觉得很复杂,因为它跟硬件紧密相关,就是那些个寄存器也够初学者糊涂一阵子的。这门课程的另外一部分内容是微机接口技术,目前国内高校这部分内容都是基于80X86系列芯片的。已经可以看到这门课其实涉及到了很多硬件的知识,其实还不止,关于I/O控制,寄存器,中断,这门课里都有体现的。

 

接下来要学习的内容就是《计算机组成原理与体系结构》。其实我特别奇怪,我在写学习路线1(也就是前一篇文章)的时候,有读者认为在学习C语言之前,或者在学习其他专业课程之前,最先要学的就是这个东西。我不知道大家是不是觉得大学第一门专业课就是这个,我觉得这么想的人是不且实际,信口开河的。这门课程还是比较深的一门课程,在汇编和接口之后安排这门课程是比较的。不过国外的一些先进的计算机教育体系确实也有在较开始的时候开设一门概论课来作为导引,有时候叫Computer System Introduction,有时候叫Computer Culture,其实内容差不多,但作为计算机专业课程的导引课程,这些课程的设置里面已经设计到组原和OS的初步内容了。但这和Computer Structrue & Architecture还是有区别的。

 

接下来的一门课程是《计算机操作系统》,如果外行听起来可能觉得这个课应该是学如何使用操作系统的吧,就像“WindowsXP 速成”?非也!这门课程是讲OS是如何设计的,或者说是如何实现一个OS(当然做要比说起来难多了)。之所以这门课程被安排在组原之后,那是因为这反映了一种自底向上的学习路线。操作系统当然是在计算机系统之上来搭建的。向调度啊、虚拟内存啊这些问题都是由操作系统来控制的。我最近所写的《代码揭秘》基本上是属于这条路线上的内容的,不同的是我采用了一种更贴合读者理解方式的描述,因为在讲述这些原理之前,我都是采用C语言实例来作为引子的。有空也推荐大家看看,应该学校里的图书馆是可以借到的。前一阵子一位四川大学的计算机青年教师给我写信谈起我这本书时,我才知道高校的图书馆里原理已经可以借到了。以上就是大学计算机课程学习的第2条路线,下面我们来讲最后一条路线。

 

最后一条路线属于应用型的,也就是说当你学完了基本的原理之后,一方面为了日后更好的工作,另一方面如果从事研究工作也可择其一而继续深入探究,那么最好总之要上升到一定应用层面的东西。

 

在你有了一定的C基础之后,学校可能会开一些面向对象程序设计方面的课程,可能是C++或者Java,因为面向对象的语言在实际开发中正广泛的被使用。无论是C++还是Java,跟C来说本质上都是语言,只不过他们多了一些OOP方面的特性。如何学好它们,我前面的文章中已经谈过,这里就不多言了。

 

接下来的一门课程应该是“数据库系统”,这门课不是教你怎么使用SQL SERVER或者DB2的,学校里的课程远没这么前沿。数据库系统这门课依然偏重更多理论,尽管数据库相比于组原和OS来说已经是上层建筑了。这门课讲的多是些数据库系统设计方面的原则,例如如何解决关系问题或者SQL语言等等。

 

再之后可能会学的课程是“计算机网络”,这门课里会更加系统的向你介绍网络方面的知识,TCP、UDP,HTTP这些名词会粉末登场。注意这门课一般不是教授你如何布网的,例如如何配置路由器这种东西一般是CCNA里面的内容了。这门课里讲的更多的是上层原理与协议。

 

以上就是一般的大学计算机课程学习的几条路线。他们彼此联系,共同作用。注意我这里讲的内容不是给你推荐学习方向,而是告诉你大学里会学什么,之间联系如何。从之前的文章评论里不难看出,有的同学好像根本没理解文章的意思,说自己好像更适合哪条路线的样子,其实适不适合哪条线的问题根本不存在,这些东西你都得学,既然学就要学好。本身就是一个体系的,怎么能做瞎子摸象的事情呢?现在CSDN学生大本营搞得不错,资源很多,访问量很大,但也能客观的看出浏览的人真的是分好多等的,有的是谦逊而好学的,有的则是蜻蜓点水的过客。浮躁之气甚嚣尘上,胸中无物自然谈吐轻浮,看什么都不求甚解,浅尝辄止,多少有些自以为是、妄自尊大了。这也是我在此开博四个月余来的感受吧。希望大家都能保持一颗平常心,戒骄戒躁,平和的埋头学习吧。

 

 

学生评论:

 

陈俊强(C/C++学生) :

感谢老师抽空写出这3条线路,我是一名大二的学生,之前在大一的时候参加过思科的CCNA培训,真的那个时候很开心,能自己把实验做出来,但是事后深深的思考后,我究竟懂得了什么呀?难道我只会操作吗?我深入的问一下那为什么这个实验能实现呢?深入到原理性的东西就发现不懂了。跟现在大多数人一下,我也在学习J2EE,但是我已经能从更高的高度去看待这个J2EE体系了,我要求达到的目标是:不仅是懂得操作,而且要懂得原理性的东西。真的,我越来越发现大本营的优点了。

 

曹秋枝(C/C++学生) :

受教了,很明确的路线。大学里确实是应基础为重,为应用奠定雄厚的基础

 

河北科技师范学院 刘勤(C/C++学生) :

期待!这个问题从我开始学编程起一直在想,我想很多初学者都很需要老师们这样的指点的...


考研还是不考?

 

杨中科老师

 

有很多同学发出过这样的疑问“到底应不应该考研?”,很多同学都被这样的问题困扰着。我今天在这里向同学们统一解答一下,因为内容比较多,我是一边写一边发表,因此这篇文章会分几期贴在学生大本营

 

“考研”这个词围绕在我们每个人周围,学校海报栏中最大的广告一定是考研培训班的,不仅很霸道的贴满所有区域,而且“野火烧不尽,春风吹又生”;学校书店里卖的最火的书一定是考研的辅导书;每到临近考研,学校里的自习室、图书馆一定被考研的同学长期“占座”;同学们之间经常聊的也是“你考不考研,想考哪儿的研?”,仿佛不想考研就是没追求的表现。

到考研报名的时候每个班都有相当一部分同学报了名,问到选择考研的原因,回答一般都是:“大家都考研”、“上大学就是为了上研究生”、“工作不好找,只能读研争取好的发展”、“读研能找到更好的工作”、“想读研进一步深造,研究专业知识”、“我一直成绩很好,不读研可惜了”、“我父母让我考研”。

 

首先我对一些同学的误解进行一一破解。

 

误解一、“大家都考研,我也考”

 

“从众心理”是大部分人的心理特点,就像葛优在广告里说的那样“哪儿人多我去哪儿,我就是相信群众”。在大街上大家都爱往扎堆儿的地方走;在火车站里哪怕不知道哪儿是进站口,只要跟着大流走,一般都不会走错;组织班级活动的时候,也经常选择其他班级去过的地方玩儿。因为“跟着大伙走,一定不会有错”。在很多情况下“哪儿人多我去哪儿”是非常合理的一种“选择”方式,因为根据概率来讲,大部分人选择的道路有非常大的概率是正确的道路。好像根据这种说法,“大家都考研,我也就考研”是非常合理的一种想法,可是实际并非如此,因为考研和上边举的这些例子有太多的不同。

 

首先,目的性不一样。逛街的时候大部分人的目的就是“看热闹”,人越多的地方肯定越热闹;在火车站里,几乎所有人的目标都是“进站”,因此跟着大家走也肯定没错;班级活动,大家的目的都是“玩儿好”,其他班级都选择的地方肯定都挺好玩。可是考研却不一样,考研的目的是什么呢?有人说是“考研成功读研”,注意“读研”只是过程,而不是目的,因为你不可能一辈子“读研”,因此“读研”的目的才是“考研”的目的。很显然,不同的同学考研的目的是不一样的:有的同学是为了考更高的学位,增光耀祖、显耀门庭;有的同学是为了读研、读博,继续深入学习专业知识;有的同学是为了逃避就业压力,拿更高的文凭,找更好的工作;有的同学是为了跨专业考研,去学自己感兴趣的专业;有的同学是为了能从普通大学考入名校,圆自己的“名校梦”。看似大家的共同目标都是“考研”,但是其实每个人都有自己不同的目标,如果没有自己明确的目标就加入考研大军的话,无疑是成为了“群体性盲动”大军中的一员。

 

其次,选择错误路线后的后果是不一样的。大街上有利用大家的从众心理专门找托儿撑场面的,如果被托儿吸引到这里,却发现没什么意思的话,大不了再去其他的地方;火车站中偶尔也会有临时性的调度,你随大流到了目的地以后却发现,其实那些人是出站,大不了再走回头路重新找进站口;选其他班级都选择活动线路的后才发现其他班的同学太低级趣味了,不符合你们的喜好,大不了这次玩儿的不开心,没有太大的损失。但是考研就不一样了,考研失败了的话,就业的黄金时间已经过去了,再找合适的工作非常难;即使考研成功了,上研以后才发现研究生生活不像自己想像的那样,各种原因导致研究生毕业以后发展还不如那些没上研的同学。一旦考研这条路选择错了,你是没法走回头路的。

 

从众最大的好处是不用担责任,不用担心选错了道路造成的后果,因为“大不了大家一起死” 。“死亡率”只是一个统计学上的概念,对于我们每个个体来说,死亡率只有0%和100%,因此在决定从众之前,需要掂量一下是否这件事情是否“值得”。

 

在决定是否考研的问题上,千万不能有“大家都考,我也考”的想法,考研还是不考研,都请“给我一个理由先!”,找到了理由,再往下看。

 

误解二、“上大学就是为了上研究生”

 

很多同学从上大一开始就定下了考研的目标,理由很简单“上小学的目的是上初中,上初中的目的是上高中,上高中的目的是上大学,上了大学当然要读研了”,“我一直成绩很好,不读研可惜了”,在这些同学心中,人的前进就是不停的考,有一个网络上流传很广的笑话就很能反映这个现象:“学士上面是硕士,硕士上面是博士,博士上面是博士后,那博士后上面呢? 如果你够勇敢再读2年是勇士,再读5年是壮士,再读7年是烈士,烈士以后呢? 教育部会推出圣斗士,读满2年是青铜圣斗士,5年是白银圣斗士,7年是黄金圣斗士。毕业以后愿意再读上去的女孩子有机会考出--雅典娜”。

 

如鹏网的朱老师讲过一个真实的故事,他认识的一个人,学习非常厉害,上大学、考硕士、考博士,都是一路顺风,毕业后又考过了司法考试(难度非常高的考试),能考得试都让他考过了,然后发现自己“没得可考”了,失去了奋斗的目标。最后只好进入法院工作,发现自己无法适应实际的工作,找不到以前那种考试时春风得意的感觉,每天都要处理很多自己不愿意处理的事情,最后竟然精神分裂进入了精神病院。

 

上大学的目标不只有“考研”这一条所谓的“出路”。按照严格的区分,研究生是为有志于从事本专业深层次理论知识钻研而设置的,其培养的目的是“研究员”甚至“科学家”。但是,由于大学扩招、国家产业结果不合理等原因造成大学生就业率和就业质量严重下降,而“研究生扩招”则可以暂时“饮鸩止渴”性质的提升所谓的“就业率”,同时,有些人出于不同的目的也想利用“研究生扩招”大捞一把,因此他们利用在社会上、媒体上的话语权,大肆鼓吹“本科毕业以后还是考研好”,这更是使得很多同学认为“上大学就是为了上研究生”。

 

同学们可能已经看到了我在上边给“出路”两个字加了双引号,的确,考研不是本科生的“出路”,因为“考研、读研”只是过程,不是出路,除非你想一辈子考呀考,以死前考上“雅典娜研究生学位”为目标,否则一切过程的真正的目标都是“工作、赚钱、娶媳妇、生孩子、养二老、买房、买车、买油、买面……买坟”,你所做的一些事情都应该围绕这个最终目标而进行规划。

 

不要把“考研”当成唯一的出路,考虑自己的情况,考虑“工作、赚钱”这一终极目标,做出自己的决定。

 

误解三、“现在工作不好找,只能读研争取好的发展”

 

这是相当一部分同学决定考研的理由,因为听说毕业工作不好找,害怕“毕业即失业”,因此把希望寄托于通过读研进一步提升自己的实力;有的同学则是到了大四才发现自己没有工作所需要的本领,害怕面对找工作,“考上研究生就能多争取两三年学习时间,上了研一定好好学”。

 

现在的工作真那么不好找吗?就业机会真的那么少吗?别的专业我不敢妄加评论,看这篇文章的同学大部分都是可能毕业以后要从事IT相关工作的,根据我工作这些年接触的来看,很多IT企业有“人才荒”的现象,也就是很多职位长期缺人,招不到人。有同学听到这里疑惑了“怎么可能缺人呢?每年毕业这么多学生?”,有一句话很伤人、也很找骂,但是我又不得不说“企业不是招要饭的,不是随便招一个阿猫阿狗凑数就行;企业要招的是能帮它赚钱的能人”。

 

难道是企业里对学生们的要求太高了吗?来听听企业招聘人员的评论吧:

 

“招聘启事发出去了,邮箱很快就被简历撑爆了,但是大部分简历都是只有个人信息、专业课程设置、从小学到大学的考学履历,最后跟着一封热情洋溢、废话连篇,却空无一物的求职信,好像这几千份简历都像是一个人的简历一样,没有丝毫自己的特色。真不知道除了他满足我们在招聘启事中说的‘2010届应届生’以外还有什么其他条件满足。”

 

“一个学生来应聘网络管理员,我问他一台计算机连不上网了,有可能有哪些问题,你会怎么进行故障排除。那个同学竟然支支吾吾半天,一句完整的话都没说出来,哪怕说一句‘可能是网线断了’都行呀!”

 

“一个学生来应聘软件工程师,我问让他写一个打印菱形的控制台程序,这是C语言教材上前几页的最简单的程序,竟然愣了半天一行代码都写不出来,问他当时C语言考试是怎么过的,他回答的很干脆‘就那么过的’!”

 

其实企业里对应届生要求并不高。比如对于软件开发职位的学生来说,企业里的要求就是“有编程的感觉、动手能力强、好学”,不需要你懂这个工具、那个工具,不需要你会这个语言、那个语言,不需要你懂这个框架、那个框架,只要“有编程的感觉、动手能力强、好学”,那些工具、语言、框架公司只要培训一下就可以掌握,“有编程的感觉、动手能力强、好学”也不是只有聪明的学生才能具备的品质,只要智商正常,平时多动手、多写程序,成为“有编程的感觉、动手能力强、好学”一点都不困难。可是实际情况是,纵观一个有50个学生的班级,有10个人对学习完全不感兴趣,有10个人对本专业完全不感兴趣,有10个人迷迷糊糊,有10个人只会死读书,还有5个人今天学两页C语言、明天学两页Java、后天学两招黑客技术,真正能踏实下心来多动手、多写程序的能有两三个就相当不错了。

 

有一个笑话大家都听说过: 有两个人在森林里散步,忽然出现了一只大老虎,一个人忙伏下身去系鞋带。

 

另一个人问:“你系什么鞋带啊?你难道还能跑得过老虎吗?”

 

这个人说:“我那能跑得过老虎啊。不过我只要跑的过你就行了!”

 

在班级里学习成绩名列前三名是比较困难的事情,但是成为被企业相中的两三个人却是非常轻松的事情,因为大部分人不会“多动手、多写程序”,而你只要“多动手、多写程序”就足够了。有同学会问“我们班的同学都看了这篇文章,那岂不是他们都和我一起努力竞争了,我又没有优势了?”,同学们太高看我了,我没那么大的能量,我不比游戏更能吸引同学,很多你的同学根本不会看到我这篇文章,哪怕有人看到也只会随便瞄一眼,而能认真看完这篇文章的则又少之又少,认真看完这篇文章并且相信我讲的这些道理并且长期坚持照着做的能多一个我就很欣慰了。

 

因此那些害怕工作不好找而想考研逃避的同学大可不必担心,只要你能比身边的同学多努力一小点儿,就可以很轻松达到企业对应届生的要求。及时那些大一、大二、大三都玩儿过来的同学也不必担心,踏实下心来,用剩下的半年到一年的时间集中强化一下自己,想搞编程的吃准自己最熟悉的语言多练、多写,想搞网络管理的同学报一个思科培训班苦练实际的技能,想搞嵌入式开发的同学弄个开发板把常用的嵌入式功能实现……,相信半年之后达到企业的要求轻而易举。

 

如果你只是怕工作不好找而考研的同学到这里就不用往下看了,关了这个网页抓紧“系鞋带”去吧。

 

误解四“我父母让我考研”

 

现在有一些大学生让人感觉很可怜,从小就被家长安排着,早餐吃什么、买什么衣服、放学了去哪儿玩、周末做什么、上哪所小学、上哪所中学、学文科还是学理科、报哪所大学、考哪个专业……一切一切都听父母的。

 

在我们小时候,父母在我们心中就是超人,什么都懂、什么都能干,可是你在茁壮成长,父母却在慢慢老去,总有一天在知识、阅历、判断力上会不如你。父母永远是爱孩子的,做的一切的决定的初衷也是会孩子好的,可是有时候他们的好心会办成坏事的。

 

我认识的一个在读硕士的朋友说,他父母在规划他未来的时候,说他家里几代人没出一个“有文化”的人,希望他好好努力,能考多高就考多高,“硕士上完了,考博士,博士考完人考博士后,无论你考多高我和你妈都全力供你上学,咱们要增光耀祖!”,可怜天下父母心呀,希望孩子成为地位高的人,这样以后就可以说“我们家孩子是博士后!”,他们连“博士后其实是找不到工作的博士,不是比博士更高的学位”这样的事情都不知道,他们的安排我们怎么能听呢?

 

父母给了我们生命,供养我们长大、上学,是永远值得我们去尊重和孝敬的,但是他们的想法并不总是对的,如果不自己分辨只是一味听他们的话,早晚有一点会被他们的好心害惨的。

 

有一个很老的纪录片叫做《狐狸的故事》,它讲述了一个自然界的生存法则:一窝小狐狸出生了,在老狐狸的呵护下成长,小狐狸渐渐长大了,外形已经显得跟父母一样高大。老狐狸一朝突然变脸,驱赶小狐狸出门。被赶出家门的小狐狸好生可怜伤悲,不愿离开,一次次回家门口,但是老狐狸不仅不让小狐狸进门,反而以“疯狂地嘶咬”的方式,生把小狐狸撵走。从此,小狐狸一个个无依无靠,形单影只,在饥恶、天敌和猎人的胁迫下到处流浪。经过重重考验,小狐狸终于获得了在恶劣的条件下顽强的生存的能力。狐狸尚且懂得这个道理,那我们人呢?

 

有的家长是懂得这个道理的,从很小就培养孩子独立做事、独立思考的能力,家长不对孩子轻易做干涉,最大程度的尊重他们自己的意愿,这样环境中成长的孩子往往能成为社会中的强者。但是不幸的是,大部分的家长是不懂得这个道理的,只要他们还能动,就尽他们的一丝力为孩子创造条件、选择道路、扫清障碍,慢慢的培养了一批离了父母就无所适从、没有任何生存能力的孩子。

 

如果你的父母还在尽力为你做着决定,那么请你很尊敬的告诉你的父母:“爸!妈!谢谢你从小到大为我做的一切。现在我长大了,我要学着自己做决定了。我会向着进步的方向前进的,不要担心我。是不是考研我会自己决定的,我会认真考虑你们给予我的建议的。我会找到自己的路,无论做什么决定,我都会做一个好孩子。我要成长为一个有能耐的孩子,然后有能力孝顺你们,赡养你们!”。

 

无论是在是否考研这件事情上,还是在以后的其他事情上,把父母的建议当成一个朋友、一个长者的参考,然后最终自己决定吧!

 

误解五“很多工作都要求硕士学历,找工作的时候满地都是硕士”

 

    很多同学听说过类似的传言:现在找工作的时候大部分公司都要求硕士以上学历,哪怕只要求本科学历的门前也会有好多硕士生来求职,我们“小本”在他们面前没有任何的自信,不读研怎么行。

 

“大部分公司都要求硕士以上学历”这是明显带着偏见得出来的结论,很多同学看到如鹏网的“就业信息”贴出的招聘信息以后就感叹“怎么这些公司都要求硕士学历呀!”,但是其实理性的统计一下,要求硕士以上学历的职位不足10%。经过分析可以很容易的发现,要求硕士以上学习的公司或者职位一般都有如下的特点:国字头、中字头的单位,比如中国移动、国家电网、中国工商银行;国家机关、事业单位,比如省公安厅、红十字会;高校、科研机构。由于众所周知而在这里又不方便说明(害怕被河蟹)的原因,国字头、中字头、国家机关、事业单位中人才的浪费现象非常严重,招博士生去看大门的事情都是屡见不鲜的,但是这是事实,他们招聘的时候就要尽可能招高学历的人,这样才能达到他们的某些目的;高校、科研机构由于特殊的原因,招聘的人员也必须是高学历的。如果想去国字头、中字头、国家机关、事业单位、高校、科研机构任职的话,必须有高学历,否则哪怕你能力再强也没用,没有那张文凭一切都是白搭。

 

其实还有另外一些职位也是经常标明“硕士学历”的,那就是一些公司的“研究院”,比如微软亚洲研究院、IBM研究院等,这些职位通常都是进行一些前沿领域理论、技术的研究,由于大部分本科生的知识深度没有达到这些职位的要求,因此这些公司要求硕士博士学历也是非常合理的,同时这些职位中也一般都是被一些名校的硕士、博士占据着。但是凡事无绝对,比如微软亚洲研究院也不乏优秀的本专科学历的人员。

 

    除了这一小部分要求硕士以上学历的职位以外,大部分职位都是只要求本科或者专科学历的,道理很简单,企业招聘员工的目的是让员工去帮着企业赚钱,因此本科还是硕士对于企业来说并不是重要,哪怕公司所有人都是博士,只要没赚到钱,公司照样倒闭。公司招聘一部分高学历人士的的初衷也是希望他们干一些其他人“很可能”干不了的事情,仅此而已。只要你有能力,能给企业带来收入,人家才不管你什么学历呢。

 

“要求本科学历的门前也会有好多硕士生来求职”,这是事实,也是很多同学在招聘会上底气不足的原因。道理也很简单,为了提升本科生所谓的“就业率”、缓解就业压力,研究生一再扩招,这批研究生毕业以后早晚还是要流入就业市场,因此就与当时毕业的本科生产生的撞车。有同学会说了:“我一个本科生和一堆研究生挣一个职位我肯定被淘汰呀”,这个担心完全没有必要。理由如下:首先,企业招聘的时候都会控制不同学历人员的比例的,比如招聘20%的硕士生,招聘70%的本科生,招聘10%的专科生,因此不同学历人员并没有直接的竞争,和你竞争的还是那些本科生;其次,现在很多硕士毕业生的质量也大大下降,我面试过很多硕士毕业的人,问他做过什么项目,最后支支吾吾说出来的是做硕士论文的所谓项目,而且明显是抄别人的,问他计算机的一些基础知识,竟然连“队列和堆栈的区别”这样简单的问题都回答不出来,问了问他对读研的感受,他说“我和很多我同学感觉都一样,后悔读研了”,听了这些你还害怕和这些硕士生们竞争吗?

 

    因此,如果你是想去国字头、中字头、国家机关、事业单位、高校、科研机构熬日子的话,还是去考一个高学历吧,而且还要把其他的方面也补足一下;如果你是想去国际性大公司的研究院工作的话,也尽可能的去考高一点的学历,并且不要光有学历,在研究能力、动手能力方面更要努力,这些公司是靠一分钱一分钱的赚活命的,你没有能力给他们带来符合你职位的收入的话,即使你成为“黄金圣斗士”他们也不会要你。

 

误解六、“研究生就业的起点更高”

 

    听到有同学说“研究生就业的起点更高,毕业后就能进入高一个层次的岗位,不用从基层还是熬。”这肯定是同学们臆想出来的,或者说是听那些去国字头、中字头、国家机关、事业单位等单位的人说出来的。对于大部分企业来说,其实不同学历人员的起点并没有实质的差别。如果非要说差别的话,也是有的,那就是“基本工资”,每个公司都有自己的薪资架构标准,比如新入职本科生的基本工资是3500、新入职双学士的基本工资是3800、新入职硕士生的基本工资是4000,一般新入职本科生和新入职硕士生的基本工资起点的差超不过1000元。为什么企业里会给新入职硕士生的基本工资高一点呢?决定一个员工工资的唯一标准就是这个员工对公司的贡献度,虽然新员工通过了公司的笔试、面试,但是企业仍然无法分辨出不同员工对公司的贡献度,只有实际工作中真刀真枪的实干才能分辨出来,但是在入职定基本工资的时候必须对不同的人进行分别待遇,既然硕士生有实际经验、学过更深入的知识,那么就有更大的概率进行更高的贡献,因此给他们稍微多一点的基本工资也是合理的,但是一个员工的工资不是固定不变的,通常入职后根据贡献不同都会给予调薪的,这时候学历就靠边站了,谁贡献大谁就拿钱多。

 

    有同学说“不对呀,听师兄说,和他一起进公司的硕士生工资涨的比他快呀!”,大家忽略了一个事实,那就是“年龄差”、“加速度”!这位和硕士生比较的本科生师兄年龄估计也比硕士生小三岁吧?硕士学习了三年,知识、经验都会肯定比和他一起入职的本科生更高一些。因此不要和与你一起入职的研究生比,和那些比你晚三年进入公司的研究生比。就像下面的这张图一样:

 

黑色的线是新入职研究生的能力变化曲线,那么你究竟是深红色的线还是蓝色的线则取决于你自己的努力了。

 

三年的研究生学习和三年在企业中实际工作的经验也是不对等的,在学校里读研要学公共课、准备论文、搞乌七八糟的事情,其对人工作能力的锻炼绝对和在企业中真刀真枪干的锻炼强度不一样。因此那些想利用研究生阶段积累工作经验的同学也要仔细考虑一下了,是去企业里积累三年的工作经验(赚钱)更重要还是去读研积累三年(花钱)更重要,每个人的价值观不一样,请根据自己的情况判断。

 

有一些同学认为的“毕业后就能进入高一个层次的岗位,不用从基层还是熬”也是错误的,任何脑子正常的企业都不可能会让你一个刚毕业的学生当领导,因为人家根本不了解你,怎么能让你当领导?任何人刚进入公司都要从基层干起,然后根据不同人的能力才得到一步步的提升。

 

说了上面几个误解,还有一些同学们的关于考研的想法也需要梳理一下。

 

想法一“想读研进一步深造,研究专业知识”

 

这样的同学是中国未来的希望,中国在基础理论方面太差了,需要这样有抱负的同学。但是有这样想法的同学一定要做好心理准备。在国内的很多大学里,研究生每天做的工作已经不是“做研究”了,而是在“乱七八糟”。如果你问问很多读硕士的同学,他们评价导师好坏的标准就是“是不是有活儿干”,好的导师可以揽到很多项目,然后分给研究生干,这些研究生都管导师叫“老板”;坏的导师则是什么项目也没有,学生研一去老老实实上一年课,和在本科的时候一样,研二上半年稀里糊涂的,有门路的自己出去找兼职,没门路的则像本科一样继续在宿舍里魔兽、睡觉、上网,研二下半年就开始准备论文开题,开始了东抄西抄的生活,然后很快研究生三年就过去了,进来时候是0,出去还是0,唯一的区别就是多了一张硕士学位证和老了三岁。

 

因此如果你的梦想是“进一步深造,研究专业知识”,那么在选学校、选导师的时候一定要多注意,最好选在这个领域有名的学校和导师,如果有可能的话能去美国等发达国家留学最好,因为在很多领域特别是计算机领域这些国家都是处在前沿,而且他们的科研气氛也更浓一些。

 

想法二“想通过读研实现转专业、进名校的愿望”

 

有的同学由于高考时的种种原因,在本科期间没有读自己满意的专业、大学,想通过跨专业或者跨校考研来圆自己的梦。

 

我的习惯还是先泼冷水:企业里是招聘人去帮它赚钱的,因此专业、学校都不是他们关注的对象,根据我工作这么多年的经验来看,企业里同事之间根本不知道彼此的专业、学校、学历是什么,甚至连领导都不清楚。无论是你决定考研还是直接就业,那么都应该把提升个人实力作为首先考虑的因素。

 

如果你还是决定跨专业、跨学校考研的话,需要做好心理准备,首先导师对于跨专业、跨学校考研的人通常是有歧视的,因为考研录取的时候导师有很大的自主性,因此经常会出现有些同学考试成绩非常高,但是最后仍然落选的情况;其次有的企业里也对跨专业、跨学校的硕士毕业生有一定的歧视,很多企业招聘里都注明“要求本科和硕士期间的专业基本一致,本科期间院校必须是211院校”等。虽然这些都是一些软性的门槛,只要有能力,这些都不是问题,但是同学们仍然必须做好比别人努力更多、受更多打击的心理准备。

 

想法三:“不想找工作,考一考看,万一考上呢”

 

有一部分同学是怀着“撞大运”的想法考研的,他们的想法就是“万一能考上呢?就省得找工作了”,这些同学通常都是用“我准备考研,不去找工作”为理由逃避就业,但是平时不看书,连考研的辅导资料都是从图书馆借的,看两页就扔到一边儿去了。用脑子想想看,那些每天都没白天没黑夜备考的同学都不一定能考上,这样的大运怎么可能让你撞上呢?

 

每年研究生考试的时候都有相当数量的考生根本没去参加考试或者考了一两门就再也没去考,理由很简单,他们根本没任何准备,怎么可能考上?

 

因此那些只是“撞大运”、“借考研逃避就业”的同学还是醒醒吧,面对现实,想一想下一步该怎么办才是实际的事情。

 

想法四:“考研很难,一个名额有好几十个人报考”

 

很多同学描述一个研究生名额难考的证据就是“有100个人报那个导师,那个导师只招10个”,其实还是我在这个系列的文章一开始提到的那样大部分报名的同学都不努力,一部分是撞大运去了,一部分是自我约束力不强没有认真备考,真正用心准备的没有几个人。高考和研究生考试的最大区别就是所有的同班同学都是参加高考的,大家有统一的目标、统一的时间点、统一的学习计划,而研究生考试则不一样,不是所有的同学都考、时间进度靠自己安排,因此能从始至终坚持下来,学习方法得到的人没有几个,因此只要你能坚持下来,并且学习方法得当的话考试取得好成绩并不是非常困难。

 

想法五:“从大一开始就准备考研”

 

有一部分同学是从大一就开始准备考研的,大一就开始做考研题、看考研书,这可能是从高中带过来的学习习惯,这也是很多人管大一叫做“高四”的原因。其实也完全没有这个必要。在决定考研之前,先把假定自己不考研,然后自己给自己考研的理由,如果决定了考研再想后面的事情。刚才我说了,考研并没有想像中的那么难,没必要这么过早准备。如果你们学校有保研的机会,并且保研的专业、导师也比较满意的话,只要把高数、英语等考研公共课以及主干专业课学好,然后在期末考试中尽可能的拿到好成绩、拿奖学金就可以,这样能争取到保送名额的机会的话就轻松了,可以利用剩下的一年大四的时间继续充实自己,即使没有保研成功的话,因为之前高数、英语以及主干专业课等考研课程学的都不错,只要花上半年复习一下考研成功的几率也是非常高的。剩下的时间还是要用来多动手、多参与实践,如果自己在大学前三年把动手能力锻炼的很好了,那么如果考研成功,你在导师眼中也是红人(考研成功并不是最终的成功,如果在研究生期间是失败的人的话你最终仍然是失败的),也就赢得更多的机会;如果考研失败,凭着自己很强的动手能力和扎实的专业知识、基础知识,找到一份好工作也并不是很困难的事情。

 

无论是否考研,大学前三年都应该是以学好专业知识,提高自己动手能力为主。

 

说了这么多,很多同学看到我很多时候都是在说研究生的坏话,“是不是因为杨中科老师没有读研,而吃不到葡萄说葡萄酸呢?”。说实话研究生教育本不应该像我说的那样不好,但是这是现实。任何事情都有两面性,我相信质量过关的研究生学习的利还是大于弊的,只不过现在很多同学被蒙蔽了眼睛,只看到它好的一面,而没有看到他坏的一面,我在这里把坏的一面讲出来,同学们自己根据这些进行判断自己是否应该考研。

 

也许你认为我的这篇长达九页的“解惑”系列文章是我在学生大本营、如鹏网里发表的最没意思的文章,因为这篇文章根本没有告诉你是否应该考研。考研与其他事情不一样,如果你问我是不是应该喝农药,我肯定告诉你不应该,因为谁喝农药谁都会死;如果你问我你中了一百万,是不是应该去兑奖,我肯定告诉你应该去,因为谁不去谁是傻子。但是考研则不一样,考研对不同的人、不同的环境有不同的取舍,你只能根据自己的情况进行选择。我不可能给你答案,因为每个人都不一样,如果非要一个答案的话,我建议你抛硬币,正面朝上就考研,背面就不考,这样你就不用选择了,可是你愿意把自己的命运交给硬币吗?

 

我这里列出了考研的好处与坏处,请根据自己的情况来决定。很多同学害怕做决定、害怕自己选择道路,因为习惯了家长为你选择道路,但是大家要知道做选择的权利是一个人最应该珍惜的权利,别人可以给你讲不同的路的差异,但是不同的人走一条路会有不同的结果,最后走路的是你,究竟走哪条路没有人可以代替你,希望大家珍惜选择的机会,选择好自己的路,然后勇往直前的走下去,不要停止!

 

The End!

 

学生评论:

 

邓可(C/C++学生) :

长者的智慧。大家都想做的好一点,但是很多人都像这位同学一样 “为什么我老是静不下心来专心做一件事呢”? 问别人是没用的,关键在自己。

 

华东交大 李鹏(C/C++学生) :

我现在大一,看了这篇文章真是受益匪浅。我明白看了一个道理:只要你有才,不怕找不到工作!

 

重庆大学 史苏明(3G/移动开发学生) :

以前还比较懵懂,不知道到底是考研还是工作,看了之后目标基本明朗了。谢谢指导。


 

做什么样的软件才能赚钱?

学什么样的知识才能赚钱?

 

肖舸老师

 

这是发在我的邮箱里面的一封信,这里做个统一回答。一家之言,欢迎拍砖哈。

 

(原信篇幅过长,请大家到原帖去看)

 

我的回答:

 

这位同学你好,从这封信看得出来你的心情还是很急迫的,你这种心情我完全能够理解。我把问题分几点说,尽量说细一点,希望能对你有所帮助。

 

首先,你说你是09年毕业的大学生,那么算下来,你应该上班才几个月而已,就这一点,你能在新的单位几个月时间就把工作拿上手,首先恭喜你,这说明你是真的很有实力,当年我转行游戏编程,用了差不多两年才真正想清楚程序设计的真意,我觉得你比我强。呵呵。

 

你说Java基本上都是做B/S数据库,觉得没有意思,其实这个我也很理解,不过,我觉得你可能不是很了解实际情况。这里我需要给你讲清楚,其实不仅仅是Java程序员,只要到企业中做应用开发,或多或少都和数据库沾点边。当年我用VC还写报表系统呢,你能说这不是数据库?

 

其实有个问题可能大家都没有关注到,至少,我到学生大本营半年,发现大家都没有讨论过。那就是,做什么最赚钱?无可否认,软件可以实现各方面应用,不过,就我的观察,在现实生活中,有两种软件最赚钱,一种是数据库,一种就是嵌入式底层的东东,嗯,随着互联网的发展,目前做网络程序也很赚钱。

 

其实原因很简单,就是因为软件的盗版问题。我想看到我这篇文章的每个人,或多或少都用过盗版软件,包括我自己,呵呵,咱们中国人穷啊,动辄几百上千的软件费用,咱们买不起的,所以电脑城的光盘市场才这么火爆。

 

但是,这带来了另外一个问题,就是当有一天,我们自己成为软件开发者的时候,才发现,盗版导致我们自己的收入降低,无法维系生活。这时候,恐怕再来大声疾呼,杜绝盗版,已经晚了,你说是不?

 

其实我们可能对市场不敏感,反正每个月发薪水,收入基本上旱涝保收,但是公司的老总们对这个很敏感,软件卖不出钱,公司就亏本,亏多了,就垮掉了,最终程序员还是没有收入。

 

因此,公司里面做软件,一般都做上面的软件,即数据库应用,嵌入式应用,控制类应用,网络服务应用较多。因为这几种应用,不容易被盗版,能卖到钱。通用性的应用,比如操作系统,比如很多工具软件,比如PC游戏,其实很难卖钱的。

 

数据库应用,一般数据库本身是使用成熟的商用系统,如MySQL,SQL Server,Oracle等,我们小公司拿来,再根据具体应用需求,做二次定制开发,这是一大类市场,其实这个市场的真正名字叫做“企业数据应用定制市场”。由于是定制的,自然没有通用性,也就不会有盗版了。

 

控制类,嵌入式类,很多都和具体硬件设备相关,换个硬件平台就不通用了,大家知道,中国的东东,要防盗版,最好和硬件相关,只要绑定硬件,软件一般不好到,以前出的防病毒卡,汉卡什么的,其实利用的就是这个市场规律。

 

服务应用呢,就更好说了,由于主要程序逻辑都在服务器端,基于B/S的模型,客户端连个软件都没有,服务器的管理自然比卖出去的软件好管理,不容易盗版。因此,这类企业也活得长,比如各个网站,各种网游什么的。所以我一直觉得,以后云计算发展起来后,很多软件可能会把零售制改为租用制,比如photoshop,大家买套软件几千,但一般人就是处理一下自家照片,自然不划算,因此盗版很多,但以后假如软件公司把它做成服务器版,大家把照片上传,处理,最后再存回来,这个过程每次租金1毛钱,每个人都花得起的话,我看以后就没那么多盗版了。另外,服务器应用其实大多数也是数据库应用。

 

所以,我首先要说,不管你是不是换工作,以后你恐怕会一直遇到数据库类的应用,不管你喜欢不喜欢,但这是社会的现实,你必须承认。你说对吧?

 

在这个共识下,我们再来看,其实我们会发现,三大主流应用中,只有嵌入式不适合Java,其他的数据库和服务器应用,其实Java比C和C++方便得多,因此,我建议你就在Java这条路上走下去,不一定非要转C和C++。本来你的强项就是Java,而且这也是主流的可以卖钱的市场,为啥不坚持呢?

 

从另外一个角度说,我也认为你应该坚持,你毕竟毕业不到半年,对社会,对公司,对本职工作其实了解并不深入,你认为Java就那么几个设计模式,没有挑战性,这个我能理解,但是,我觉得你说的不全面。起码我做程序做了这么多年,到底有多少种设计模式,我也说不清楚,我相信很多人都说不清楚。需要具体应用具体分析。

 

我不是Java程序员,不过我觉得,如果要做一个合格的程序员,首先不应该是程序设计的大师,而应该是理解客户需求,并迅速拿出解决方案的专家,这个,不管用什么语言,不管在哪里工作,都是必须的,同时,这也需要很长时间的积累。

 

准确的讲,我认为,一个人不在一门语言,一种业务领域努力3年、5年乃至10年,是很难成为专家的。因此,我建议你完全没有必要这山望着那山高,轻易就决定跳槽,建议你就这个环境,先锻炼自己,我这里放句话,你可以试着验证一下,两三年以后,你再看Java语言和数据库开发,都还是会找到自己不会,值得学习和钻研的东西的。因为最起码,客户的需求是千变万化,永无止境的。

 

当然,话分两说,如果你真的喜欢C,很想做嵌入式应用,就是不想做Java,那也无可厚非,因为毕竟每个人都有选择的权利。

 

不过,我仍然不建议你辞职回家学习。我以前有句话,大学毕业,才是学习的开始,不过,这个大学毕业后的学习,和学校中的学习,有很大差别,突出的几点:没有老师,没有教材,都是自己主动学,针对自己的需求来学习,学技巧多,学原理少,并且一般都是干中学,而不是学完了再干,我总结就是“用以致学”,而不是“学以致用”,这是我总结的学习经验。

 

同时,毕业了,总不好意思再向家里面父母要钱,总得自己赚钱养活自己。你说是吧?你说辞职半年,专心学习,那你没有收入吃啥?还不是吃父母的?这样不是很好。

 

C语言没有那么神圣的,也没有太高的门槛的,不要想太复杂了。另外,指针,内存什么的,学习C语言确实能接触到,但是,我还是要说,C语言并不是因为有了指针和内存的直接访问,才牛叉,C语言是因为大量的程序员用它解决了很多具体应用,才牛叉的。请你注意不要学偏了,不要为学指针而学指针。指针就是指针,仅仅是个访问工具而已,不是用来显得很酷的,需要了才用它。

 

Java语言用个数组,其实也能模拟指针的大部分功能的。其实我作为C程序员,我们平时工作时对指针是很谨慎的,能不用都不用,尽量用引用来代替,为啥,因为危险,容易出错。

 

数据结构,计算机组成原理,算法语言,编译原理,嗯,还有个图论,这几门应该算最经典的计算机理论了,但是,也没那么神秘的,书店里面有,自己没事买几本回来看看就好了,生活是没有考试的,不需要你必须考够100分才能找到工作,了解,理解就好了,背书是背不出好程序员的。你说对吧?

 

其实这几门,不用C和C++语言,用Java语言一样可以学习的。嗯,编译原理可能够呛,需要理解一点C。

 

另外,我再给你透露一点点,其实真正实际应用中,我们对于上述基础知识用得很少,用得最多的,其实就是数据结构里面的队列了,其他,包括栈都很少用,C程序员也不是每天都从底层,从0做起的,还是有很多工具套用的。这和Java语言从框架开发是一个道理。

 

反而有一门课程建议你好好学,就是概率和统计学,这门知识是我现在应用最多的,很多时候,我们评估软件系统性能,瓶颈优化,都是在用这个学问。程序员做久了,可能大多数时候都是和这个在打交道,建议买本好好看。

 

总结一下吧,建议你目前暂时不要辞职,既然选择了Java和数据库应用开发,选择了B/S模型,你耐心做3年再看,也许3年后,你自己的想法就变了。

 

C可以学,你说的课程都可以学,不过,不要辞职专门学,先赚钱养活自己,再利用时间学习,你这么大的决心,每天晚上就不要看电视了,那你每天晚上,19:00~24:00,至少有5个小时来学习,利用好了,我敢说比你在大学里面效率高。

 

看书学习不是什么神秘,神圣的事情的,也不需要什么斋戒沐浴,念几天经才能学习,我觉得就和我们吃饭喝水一样,随时都可以学的,找几本书,就在床头放着,每天晚上看看,几个月也就看完了,又有多难嘛?

 

关键是,养成习惯。

 

       你说对不?呵呵,先说到这里,有问题再问哈。

 

最后补充一点,如果学习C,并且有一定基础的话,等我书出来看看吧,里面的跨平台开发工程库,可以帮助你迅速掌握嵌入式底层的一些技巧。不过,要有基础哈,一点不会C看不明白的。

 

(该位同学继续来信咨询并表示了决心,原信过长,这里不转贴了,请大家到原帖来看吧

 

我的回复:

 

这位同学你好,我昨天其实已经说明了我的一个观点,虽然我建议你继续努力学习Java,不过,每个人都有选择的自由,因此,如果你还是坚持要学习C的话,我也不反对。

 

你在两封信里面,都强调你原来是个差生,但最后半年知道发奋学习,最终过五关斩六将,成功拿到offer,超过了很多同学,也让老师的眼镜掉了一地,呵呵,我真心恭喜你,也很佩服你。

 

其实我以前有笔记说过,人要发奋,什么时候都不晚,苏东坡的爸爸是这样,小时候我们学的《周处除三害》也是将这个道理的。你能把计算机里面200G的游戏和电影删掉,换成学习资料,嗯,了不起,比我强。

 

不过,如果我们要讨论C的学习路径,恐怕要让你失望了。因为C和Java语言并不一样。并没有前人规划好的必然成功之路。

 

Java语言由于面向应用面相对狭窄,框架模板众多,最重要的,其主要工作方向比较确定,就是做基于网络的跨平台数据应用为主,因此,其发展方向很容易确定,学习路线也比较好规划。

 

但C显然不是这样,C应用面太广,可以说,汇编能做的事情,C就能做,甚至做得更好,也就是说,我们能想出来的计算机软件应用,其实都可以由C来实现,仅仅是成本高低而已。

 

而不同的应用,除了计算机软件编程知识之外,还需要很多应用相关的知识,这就造成了C程序员往往也需要成为自己应用方向上的半个专家,这就比较麻烦了,这么多的应用方向,写游戏的知识储备,和写驱动显然不一样,与写操作系统和编译器的方向又显然不一样,因此,很难说一个C程序员需要掌握哪些知识,才够用。

 

以我自己为例子,我做程序差不多快20年了,做C也超过15年,做过游戏,工业控制,电子教育,网络传输等各种软件,我总结自己的知识储备,也仅仅觉得自己在数据传输方面有一点心得,并且对于C和C++语言怎么实现0Bug程序设计,有点经验而已,真不敢说自己什么都会。

 

另外,C语言之所以难学,并不是说它自己多难,真正的问题在于,C语言偏底层,只要我们一做应用程序,或多或少都需要调用很多操作系统相关的api来完成工作,Windows下,如果我们不懂Win32API,则很难写出合用的代码,C语言玩得再熟都不行,Linux下对于各种系统和应用级api,也需要不断查询man,否则根本写不下去。所以,要想成为C程序员,至少要学习操作系统,通常,至少应该把Windows和Linux常见的api学一遍。MFC是Win32API的C++框架表示,最好也学一点。

 

其实这已经带出另外一个话题,现代开发,C和C++一般不分,C++到了函数内部,其实是C,而C呢,有很多特性写程序不够方便,也需要使用很多C++的特性,如默认参数,如引用等等。所以,学习C,最好和C++套着学,都看看。呵呵,这已经是两门语言了。

 

还有一个问题,不管是C还是C++,总是各个具体的操作系统上开发,Windows和Linux有差异性,很多库函数,常量定义都不一样,因此,C和C++一般说来,很难做到程序通用,需要使用大量的编译宏,这需要了解语言之外的东西,即编译器的很多特性,不过,很可惜,关于编译器特性,目前的资料很少,我很多都是摸索的。

 

另外,现代的操作系统,都是多任务操作系统,多任务开发是个难点,这个多任务计算其实就是并行计算了,必须对进程,子进程,线程有很清楚的认识,对于时间片有清醒的认识,对于锁的使用,锁的作用域,去锁优化要很熟悉。但是,也很可惜,目前市面上的书籍,讲语言的就讲语言,讲操作系统的就讲操作系统,对于这个多任务开发这块,同时需要结合语言和操作系统两方面知识的,几乎没有,需要自己摸索。其实我写《0 Bug ---- C/C++商用工程之道》,有很大一部分目的,就是希望填补这个空缺的。即从语言和操作系统中,抽象出来,站在更高的角度,从较为宏观的立场探讨并行计算程序的开发之道。所以我说如果你要学C,等我书出来最好看看。

 

嗯,还有一个很重要的问题,C语言的基本库相对薄弱,很多近年发展的高级语言,对于哈希,List,队列,栈,树等常见数据结构都提供标准库函数,或者库模块来支持,但C一般是没有的,偏偏实际应用开发还经常用到,得自己找开源,或者程序员自己写,这也会耽误程序员很大一部分精力。

 

这里就出现了C语言一个不好不坏的特性,或者说既好也坏,C语言没提供这些工具,程序员自己写,很麻烦,但是,由于是自己写的,自己掌握所有底层代码,因此,优化变得很容易,一个队列,我随手加个队尾指针做加速因子,可以规避大量的递归操作,效率提升百倍甚至千倍以上,这在C里面就是加几行代码而已,但是对于Java等语言,由于底层库是厂商提供,甚至根本就不是本语言开发的(很多高级语言底层库其实是C和C++写的),程序员一般没有修改能力,有时候,遇到性能瓶颈,大家就只有干看着,没有任何办法。因此,同样的应用,C语言可能一台服务器就够,但是Java语言呢,可能需要3~5台,就是因为这些语言做的太完善,而太完善的东西,一般不好做优化,性能就不及经过专项优化的C代码。

 

就是因为这个原因,在很多嵌入式等小终端场合,由于CPU计算能力有限,需要使用C来做优化,而不能使用Java等高级脚本语言,否则程序跑不过乌龟。

 

另外,现代的数据应用,出于优化起见,一般趋于功能细分的设计模型。比如一个数据库应用,存储模块专门负责高速出库和入库,中间甚至添加cache机制作专业的优化,而业务模块则强调设计一套嵌入式脚本语言做二次开发,保持最大的业务开发灵活性。其实Java,PHP,很多都是这种模型,MySQL底层模块实现高速存储,上层则使用apache和PHP、Java等语言,灵活二次开发具体应用。

 

但是,C由于一般都是编译执行,不是解释执行,一般很难做到这么大的灵活度,不能用户仅仅加个字段,就跑过去把整个服务器重新改写编译一遍,这样维护成本太高了。因此,C程序员的解决方案,一般是自己实现底层的高速数据应用,再自己写个脚本语言的解释器,提供给用户做二次开发。

 

你发现什么没有,其实C程序员如果做企业数据应用,一般需要具有编译原理的知识,我们一方面要实现用户的业务,还需要写一套Java这类脚本语言给用户做二次开发用,说白了,就是我们自己实现一套lamp体系,呵呵,这不是又费马达又费电嘛,因此,我前文说,做数据库应用,最好直接用Java,直接用C,成本太高,而且不容易满足用户需求。

 

说到这里,你又发现什么没有?C语言之所以难学,并不是C本身难学,而是如果要成为一个C程序员达到实用级的地步,需要掌握很多方面的知识,这些知识,书上可能有,也可能没有,没有的,就要靠钻研,靠实战,靠自己去想通,因此,很难通过K书成为C程序高手的。建议你学习时,关注C这个特点。

 

不过好在你强调做游戏和嵌入式两种,这两种呢,我可以根据经验讲一点:

 

如果从事游戏的话,很多时候是和图形打交道,目前的游戏,趋向是大型化的视频图形游戏(包括大型网络游戏、电视游戏机的游戏)和小型化的终端游戏(手机类、PDA游戏),这两种比较好卖,至于中型规模的PC游戏,由于盗版太严重,已经很少人做了。仅仅是一些游戏公司为了宣传自己,会出一些经典的大作。

 

嗯,硬件厂商为了宣传自己的新板卡,如新的图形显示卡,会拿出钱来,请游戏公司做一些针对该型板卡特定优化过的游戏,以刺激广大用户对硬件升级换代,这也是一条财路,很多游戏,在面市之前,就已经从硬件厂商获得了足够的利润,并不需要从零售市场获取利润。我们在电脑市场看到,几乎每出现一款游戏大作,就带来一次显卡,甚至PC机硬件的升级换代热潮,其实背后就是这个故事。

 

不过呢,游戏引擎我还是建议你最好不要去做,因为做这个成本太高了,很少有公司去做,而这些公司,一般都是欧美公司,对人员要求很高,轻易不会招收亚洲国家的程序员,因此,学这个好比屠龙之技,看起来是很酷,但是实际上工作机会很少,甚至不比中彩票来得高。

 

另外,做游戏引擎不好玩的,因为现在也都细分了,做引擎的公司一般自己不出游戏,最多出点Demo,他们就是提供高性能引擎,而不是好玩的游戏,而游戏公司,则是购买引擎,然后开发具体的游戏内容。比如Quake和虚幻的引擎,就很多家游戏公司买去做自己的游戏。其实很多游戏引擎,目前也提供脚本语言,即里面用C实现了另外一套语言。

 

游戏公司其实主要是美工建模,绘图,企划编故事情节,程序员反而很少,更多地是使用脚本语言,在引擎基础上做二次开发而已。因为游戏公司就是做好玩的游戏,至于具体用什么技术,其实他并不是很关心。说不定,如果你哪天进个游戏公司,会发现自己又见到Java语言这个熟人,呵呵,那个时侯会不会有欲哭无泪的感觉?

 

其实这也是社会分工的不同,好的引擎程序员,更多的是个数学家,强调逻辑思维,你让他去写个美少女梦工厂,如何抓住少女的心,还不如杀了他,呵呵。

 

而做嵌入式系统,其实也有诀窍。嵌入式系统,目前我们看到的手机应用仅仅是很小很小的一类,更多地,嵌入式系统是应用到工业控制领域,从大型机械设备的控制,飞机、汽车轮船的控制系统,甚至到十字路口一个红绿灯,里面都是嵌入式系统。

 

目前有个现象,嵌入式好赚钱,很多学软件的同学都想找嵌入式工作,但是,毕竟在这个领域里面,给手机做游戏的就那么几家公司,不可能吞下所有的人才,更多的是需要自动化控制人才,因此,这类软件转嵌入式的人,进去一般都有点缚手缚脚的感觉,总觉得知识上欠一点,又不好补。

 

其实,嵌入式应该是最简单的,比如说驱动,就很多硬件厂商要人,而驱动其实就是做一套打口读口的api,很简单,最多做的时候注意点,别用太复杂的算法,保证计算速度而已。

 

但是你注意到没有,嵌入式其实主要是和硬件打交道,硬件知识必不可少,至少,计算机组成原理,数字电路,模拟电路要很熟,最起码,你要知道开关量和模拟量,要知道集成电路的选通信号和真值表,对于地址表的编址要很敏感,对于常用的集成电路块的特性,比如8235等,要比较了解。否则,是写不好嵌入式程序的。

 

因此,我以前有笔记说,嵌入式开发,很多时候软硬件不分,我见过的很多嵌入式工程师,其实也能自己画一些简单的电路板,至少,他在设计时,知道哪些功能硬件来做更合适,而不是一味的走软件路子。

 

不过,嵌入式学习要钱,这是肯定的,最起码,你自己手边要有个基本的嵌入式平台,不过好在这个并不贵,一个arm9的开发板,目前也就500多元,淘宝上就有卖的,买块回来自己做练习,应该不难。

 

如果要我给你职业路线建议,我还真想建议你就走这条路子,原因很简单,工作好找,进去之后的门槛并不高。你花点时间,自己钻一下数字电路等前面说的几本书,对于底层的汇编看看,主要看看arm的和51系列的就好了,也不用看太精,嵌入式程序大段大段的都还是C,仅仅部分端口动作,为了协调时序,采用用到汇编,而且,用得最多的还是NOP指令,就是强制CPU延时,这个很容易的。

 

最关键的是,嵌入式设备在很多工业设备制造公司都有用到,他们也需要大量的人才,并且,我们都知道,公司里面,普遍学历最高,年龄最低,门槛也最高的就是IT软件企业,这些工矿制造企业反而门槛比较低,进去之后,老板也比较看重人才,因为制造业的产品一般立竿见影,开发一套设备半年就开卖,不像软件,一般要开发到3.0版才有市场,呵呵,老板看得到钱,自然也比较看重赚钱的人的。

 

虽然你是软件人员,上述硬件知识没有学过,不过就我学习的经验,其实反而门槛还低,甚至比学个Java的框架来得还容易,建议你可以考虑从这条路上走。

 

嗯,先说到这里吧。有问题继续探讨。

 

最后我还是要劝你一点,生活不是PK,生活也不是孤注一掷,没必要什么时候都把自己逼到绝境,想成功其实很容易,只要制定一个目标,一个计划,然后按部就班走就好了,不需要找锥子扎自己屁股的,那是自残,呵呵。

 

自然一点,看开一点,少给自己太大压力,看书累了,看看电视也没啥,出去走走也没啥,没事的时候,眼睛从计算机屏幕上转一下,看看身边有没有合适的女孩,谈谈朋友也不错,如果那个错过了,才是一辈子的遗憾。

 

成功的道路,应该是很快乐的,如果都是眼泪和汗水,即使做到百万富翁,又有什么意思?

 

你说呢?

 

学生评论:

 

成功学院Gwolf-Team sky_water(Net爱好者):

很喜欢这句话:

C不是因为直接操作内存才牛才,是因为他解决了好多问题才牛叉

我想任何语言都是

犹如在战场上能杀敌的兵才是好兵

 

广东工业大学 cch(Java学生) :

受教了,“关键是,养成习惯”,能举的我都举起来赞成

 

孙建(C/C++学生) :

肖老师出品,一定要看,自己在也C/C++语言中迷茫,基础已经看完,就是不知道后面怎么走,这下,又知道应该做什么了!了解WIN32API函数,呵呵,还有别的,

 

四川大学锦江学院 黄启银(Java学生) :

肖老师  我真的很感谢你 你让我明白了我以前不知道学模电 到底以后能干什么呢  现在我应该好好学习模电了哦

 

合肥师范学院 董海(C/C++学生) 2009-10-19 17:50

每个字的读 我对以后的方向一直很迷惑 看来我有方向了

 

湖南大学 冯本明(Java学生) 2009-10-23 21:56

旁边的师兄还在说他们去面试公司10家只有一家找java程序员,看了你的讲解后,我觉得还是要坚持自己的想法,无论什么行业,做精了,都是专家,牛人。

 

福建工程学院软件学院 四维(Java学生) 2009-11-05 11:02

一字一句的看完了,心情很不一样!

相比之下我是刚踏入大学一年的学生,路还很长,却没有动力和毅力!

谢谢你的分享

 

江西财经 彭文忠(C/C++学生) 2009-11-21 17:17

第一:真很佩服这个学生,他的经历让我知道要好好珍惜大学这剩下的三年啊

大一我也混了一年,还好觉悟的还早现在还有信心学好;

第二:肖老师的回复让我学到了很多东西啊,让我明白原来要学好C++就必须学

好那些我薄弱的课;同时也让我更加清楚了C/C++是一门怎样的语言,处于什么

地位;谢谢肖老师

 

 


程序员如何踏上社会

 

肖舸老师

 

这是发到邮箱里面的一封信件,个人觉得比较有代表性,特地在此公开作答。还是那句话,一家之言哈,欢迎拍砖!

 

原文:

 

老师好!我是河南较好的一个二本大学学生,信息与计算科学专业,开设的课程大多是数学和信号,计算机的只学了C和C++,以后还有操作系统、数据结构和数据库等课程,我们专业就业形势不好,我不准备考研,想毕业后从事计算机方面的工作,例如做软件编程,可是学校开的相关课程就我说的那几个,所以我只能平时自学。我发现编程是个大学科,光语言就十来种,我在学C++可是人家说学C++得三五年才能学成,我现在都快大三了,毕业时C++水平肯定很菜,今天又XX培训机构的老师聊天,他说现在企业用JAVA和.net的多,他们都不开设C/C++的课。我现在真的迷茫了,我是继续学C++还是改学其它的呢?我只想毕业时能找个工作,以后去深圳慢慢发展。我该怎么办?请老师指点一下啊,不盛感激!

 

我的回答:

 

这个问题相对比较复杂,也很宽泛,很难简单回答,我这里,也仅仅就个人的一点认识,谈谈看法。

 

目前在学生大本营里,我也观察到,很多二本,三本的同学,在心里上有种自卑感,总觉得考分低了,出来就低人一头。这点,我是万万不赞同的。很多时候,我对小弟讲,我相信你们的老师,师兄,师姐,前辈,都有讲过:“大学毕业,仅仅是开始,不是结束。”

 

中国的社会,越来越商业化,其实商业化有一个好处,就是这个社会给每个人的机会,总的来说还是越来越公平。这个问题分怎么看,名校毕业,高官子弟,亿万富豪的孩子,总会比我们站在更高的一个起跑线上,这是事实,但是,也仅仅是起跑线而已。在社会上,也有太多的故事,从一个穷家子弟,经过努力奋斗,最后成功的事实,因此,首先我觉得大家不必气馁,万事有拼才会赢,只要敢拼敢做,没什么大不了的。

 

肖老师自己的学历就不高的,经过这么多年奋斗,也取得了一点成绩,这里就不多说了,总之,请大家记住,这个世界,还是相对比较公平的,只要肯努力,就会有回报。反过来说,当我们认为社会不公的时候,不妨问问自己,自己尽到自己最大努力没有?

 

第二个问题,关于学校里面开设的课程,大家可能会觉得不够时髦,不够酷。净是一些计算机组成原理,数据结构等老掉牙的课程,远没有什么spring框架来得过瘾。呵呵,不过根据我的经验,工作几年以后,大家可能会觉得,最值钱的,恰恰是这些最土气的课程。用框架,永远不算本事,也没有什么核心竞争力的,哪天框架死了,你就死了。会做框架,才叫本事,才叫公司里面的骨干人才,才可能成为架构师。而另一方面,框架也是人做的,大家以为,做框架需要哪些知识?是不是上述old的知识?

 

因此,我的建议,大家好好学好自己的课程,在这几门课上,清华的老师,比起你们的老师,未必有优势,因为这些知识太经典了,也没有给老师什么推陈出新的发挥余地,学这几门课,大家和清华的学子,是站在同一个起跑线上的。

 

第三个问题,学习C和C++的问题,大家不用想,我的经验,别说这两门相对复杂点的语言,就算是Java,PHP等语言,没有指针的干扰,要想学精学透,没有3到5年、5到10年的刻苦,也是不行的,大学毕业就想做大师,不太可能的。因此,建议大家不必妄自菲薄,你做不到,别人也做不到,大家还是一个起跑线,关键看,以后工作中,能不能扎下来潜心研究,仔细揣摩,不断增长自己的经验值。

 

第四个问题,关于培训机构不培训C和C++的问题,我也很好奇,好像是有这么回事。我曾经研究了一下,认为原因是这样的:

 

培训机构也是商业公司,主要目的是赚钱。对他们来说,赚钱有两个重点,第一是短平快,要短期出成果,让学生和家长有看得见的进步,给客户以信心,好让客户买单。第二则是成本够低,在同样营业收入的情况下,培训时间越短,请的老师价格越低,老师的沟通成本越低,培训机构的利润越大,因为企业做生意,核心问题是利润,即他真正赚到手的那部分钱。

 

这就很好理解了,无论从哪个方面理解,C和C++都不是最佳的选择。大家可能没有讲课的经验,但是我本人有一点。我讲课时,发现最难和同学们沟通的细节就是指针,翻过来揉过去说,几个小时下来,就是有人搞不懂指针,至于指向指针的指针,就更晕了。更不要说C中的函数指针,C++中的对象指针,泛型设计等复杂概念,反之,Java,.net都有比较成熟的应用程序框架,同学们可以快速搭建一些立竿见影的应用,因此,从短平快角度,从利润最大化角度,C和C++都不是最好的教学语言。

 

如果我开培训公司,我的目的是赚钱的话,我也不会教C和C++,太费神了。当然,有人说你贵买贵卖吗,收费贵点,把成本补回来。那样也不太现实,因为,太贵的费用,就没有客户了,大家试想一下,如果开个培训C和C++的培训班,保证出来会写操作系统,收费20万,大家学不学?我估计就算这个课程值这个价,恐怕也卖不出去。

 

所以,这位同学说的培训机构的意见,我的建议是,听听就好了,不要太认真。

 

不过,这里肖老师提示大家一点。任何东东,价格和价值是不等的,价值取决与这个东东本身值多少钱,价格则更多地取决与市场需求。大家可以想象一下,目前100个培训班,90个都在教Java,这意味着什么?是不是以后Java程序员暴多。暴多的结果是什么?肯定是跌价啦,因此,我曾经推论,Java程序员以后的薪情堪忧。

 

反过来,C和C++,如果我们自己肯钻研,钻出成绩来,前景还是很可观的。我们要坚信,C和C++的市场需求还是有的,在游戏业,在通信业,在很多嵌入式场合,C和C++语言都有不可替代的作用,程序员少而市场大,大家知道意味着什么吗?薪水高是不?呵呵,这是肖老师自己YY,乱讲的,大家可以自己想。

 

反过来说,C和C++的培训班少,我们找不到,清华北大的同学出来,是不是也找不到?这是不是说,在C和C++这条路上,我们和他们又站在一个起跑线上了?呵呵,可能有人会说,那些名校毕业,不需要培训班,当然。但是,名校毕业,我想也不会成为大师,他们工作一开始,还是得老老实实地学,大家说是不?

 

最后一个问题,去深圳发展。我的建议是不要去了,深圳目前已经比较成熟了,相对来说,机会比起刚刚改革开放时,已经少多了,我们贸然过去,期待有个好的工作,这是不了解导致的幻想。深圳工资高,相对物价也高,大家找工作,不要单纯比较工资绝对值,好好比较一下两地的房价,会发现,深圳的工作,性价比不高的。

 

深圳还好点,北京上海,就更过分,房价高不说,把个户口看得跟什么似的,外地人过去,很难在当地买房,落户,扎下根来的,会有很多看不见的杠杠在阻碍你。我是这么看的,打工者和城市是互动的,诚然,打工者需要城市提供的环境赚钱,而城市也需要打工者增加税收和消费,进一步增加城市收入。一个城市把自己看的太高傲,不是好的合作伙伴,也不是适合长期呆的地方。我自己就是这么看的,从成都出来,没有选择那些一线城市,选择了西安,主要就是看城市的包容度,基本的物价指数。

 

嗯,还有个很具体的问题,就是找对象结婚。大家不要笑啊,人之常情,谁也不想一辈子当和尚。 据我所知,越是大城市,北京、上海,甚至成都、西安也有,很多女孩,很浮,看重表面的东东,看不起外地来打工的人。这也没办法,这个社会随着商品化思维的加深,每个人都有一种交易心态,女孩希望嫁好一点,无可厚非。但是,由于她们这个心态,一般都看重一个男人有什么,而不是很细心地观察这个男人的潜力如何,因此,大家就算专业技术再有优势,但只要手边没有现金,没有房子,车子这些硬件,恐怕过去找媳妇,也很困难。大家刚毕业可能感觉不明显,不过,我想过几年,大家就有感觉了。

 

当然,有人说,我大学里面有女朋友,或者说,我过去也找打工的。完全可以,不过,两个人都是打工的,处于一个陌生的环境,奋斗起来,可能会比较艰难一点。建议大家做好思想准备。

 

这个话可能某些同学不爱听,不过我放在这里,欢迎PK。

 

因此,我最后的建议:人一生是很复杂的,和邓大爷一样,三起三落不到头,现在我们看到的,不一定就是一生中最重要的。仔细去看一些最古老的道理,有时候反而更有用。

 

关键是,这辈子给自己一个目标,定一个计划,只要能坚持走,最后一般都能成功。这个计划,可能很小,比如我一定要成为C和C++的高手,也可能很大,我要成为某方面的专家,我要成为北京人,上海人,甚至我要出国等等,都可以。

 

关键是,你现在准备做什么?你能坚持多久?

 

学生评论:

 

徐浩然(C/C++老师) 2009-06-30 12:39

同意肖老师的说法。尤其是关于女生找男生的那一段。以及,很感谢肖老师关于深圳工作的那一段,十分感谢,如醍醐灌顶。

 

唐俊鑫(C/C++学生) 2009-06-30 14:38

非常感谢老师的回答,没想到老师会花时间讲这么多,真的很感动!也明白了一些,路很长,我会一步步地走下去.

 

王刚(数据库学生) 2009-06-30 22:25

肖老师就是我的精神鸦片,一抗不住了就上来打点,如果多打几针能象老罗那样坚持半年以上就好了,现在又拣起C语言大全(第四版)开始看了。

 

广东工业大学 曾章华(学生) 2009-07-01 01:35

这个计划,可能很小,比如我一定要成为C和c++的高手,也可能很大,我要成为某方面的专家,我要成为北京人,上海人,甚至我要出国等等,都可以。

 

关键是,你现在准备做什么?你能坚持多久

说的太好了

 

郑州轻工业学院 王绍峰(C/C++学生) 2009-07-01 14:05

谢谢老师!

肖老师在指导学生这方面的造诣比我们导员都厉害。我感觉现在还是打好基础,至于像架构之类的有精力的可以去搞。

 

云翔(C/C++爱好者) 2009-07-07 08:17

一直以来潜水,一直以来都在静静地向大家学习,今天又看到肖老师的经典之谈,不得不冒出个头来,这篇文章,从学习到规划、到个人发展、未来选择都做了非常现实的深刻的阐述,让人受益匪浅,对我这样毕业混了几年的人来说,很有感触,我想这篇文章对于刚踏出校门的人来说,应该是非常有帮助的,肖老师、真牛!!!


 

职业生涯第一步---选择你的城市

 

肖舸老师

 

这也是早就想探讨的一个话题了。目前,感觉很多同学,在双选会签约,工作地点的选择上,有一定的盲目性。很少有人能主动地去选择合适自己的城市,因此,这里提出一点讨论。一家之言哈,欢迎拍砖。

 

我本人其实就是盲目选择的代表,呵呵。

 

十几年前,我第一次从国营单位辞职出来,当时就没有什么主动选择的意识,直觉上,就跑到成都了,原因很简单,因为算家乡吧。在成都辛辛苦苦十几年,才发现选错了,成都虽然好,但是不适合我啊。呵呵,搞得三十几岁又跑出来重新选择,其中的故事很多,不提也罢。

 

在我第二次选择的时候,我想了很多,也很慎重,因为我发现,每一个城市都有它的文化,选择一个城市,就是选择一种生活方式,选择一种生活态度,往宽里说,甚至就是选择了一种人生。

 

为什么这么说呢?我觉得首先我们讲讲什么是文化。我以前做过一点企业管理,对于文化这个词学了一点点,我的理解,文化就是一群人在一起生活和做事,慢慢的,这群人总结出一些做人和做事的原则,即什么叫做好,什么叫做坏,怎么做才叫做正确。一个企业,一个部门,一个系,一个班级,都有其文化,一个城市,当然也有它自己的文化。

 

一个人,生活在一个城市中,或多或少,都会受到这个文化的影响,你每天上班下班,接触到的每一个人,你的老板,你的同事,你的朋友,你的夫人(或者老公),这些人构成了你的生活圈,你每天的言谈举止,其实都在和这些人互动,而这些人与你沟通过程中,体现出来的价值观,对人物、事物正确与否的判断标准,虽然没有明确的文字说明,但日久天长,慢慢地你能感觉到,并且受到影响,这就是文化的威力。

 

中国有句古话,叫做“入乡要随俗”,其实就是讲的这个道理,即一个人到了一个地方,要尊重当地的文化,不能拿着自己的原则去硬碰,否则一般都死得很难看。

 

因此,我想和大家说的第一个话题,选择你的城市,首先就是选择你以后生活的文化氛围,一个适于你生存的原则环境。

 

为什么要选择呢?原因很简单,不是每个人都能适应每个文化氛围。

 

我们每个人,在这个世界上成长了十几年,几十年,都有自己的经历和阅历,这点每个人都不同。在接触这些不同的人和事的过程中,我们会逐渐培养自己的判断力,这就是自己的生存原则。

 

原则是一个很厉害的东东,这是每个人判断事务的基本准则,因此,每个人都不太愿意轻易改变自己的原则。更何况,很多原则是自己经历过深痛教训才得来的,当然很固执。我们常说的“江山易改,本性难移”,其实就是这个道理。

 

因此,如果我们大学毕业,选择工作的时候,不加思考,贸然选择,则很可能选择到一个自己不喜欢的城市,一个和自己的原则很冲突的氛围,这给以后的人生道路造成很大的阻碍和痛苦,就不划算了。

 

这里我们还需要沟通一个细节,文化和原则,是无所谓对错的,我这里虽然说,一个人的原则和一个地区的文化,可能会相冲突,其实不是说哪个好,哪个坏,都对,都有道理,仅仅是双方不合拍而已。

 

比如我曾经仔细比较过西安和成都的文化,我发现一个很有意思的现象。西安街头的小吃,很多,很杂,什么地方的小吃都有,有些,我很喜欢吃,有些,我觉得很难吃,但是,这些小吃过的都很好。成都街头的小吃,也很多,很杂,但是,不管什么地方的小吃,我都喜欢吃,原因很简单,都很符合我四川人的口味。

 

我仔细想了一下,这大概就是文化的差异了。西安毕竟是六朝古都,从汉唐盛世以来,一直是经济文化中心,长期的多元文化的结合,使她有了无与伦比的包容性,在西安看来,一个人,只要能保持他的原汁原味,不必讨好所有人,西安就能包容他,给他一块生存空间。成都呢,也包容,只要这个人改的和四川人一样,成都就包容他。肯德基发辣椒包,就是在成都兴起的,不然成都人不吃啊,呵呵。

 

这是我个人的一点观察和理解,可能不一定准确,四川的父老乡亲,不要K我哈。不过,我本人确实就是因为这个原因,最终离开成都的。

 

因为我也有我的一些原则,不愿意妥协,比如说,我相信亲情,我相信这个世界上,将心换心是存在的,比如说,我相信这个世界上,只要一个人付出了努力,就一定有回报。再比如说,我相信这个世界上,好人会有好报。但既然成都无法包容,我就换个城市来发展。

 

因此,我给同学们的第一个建议,谨慎地选择适合你的城市文化,每个公司,都有其背后的城市文化,你的同事,都是在这个城市的文化熏陶下成长和生活,选择适合你的文化,比什么都重要。双选会上,不要急于签约,先回来上上网,看看书,找同学打听一下,查找一些你心中中意的公司,它所在的城市,文化背景如何。

 

还可以细心关注一下你的同学,一个大学,哪个地方的人都有,你问问自己,自己平时和哪个地方的同学处的来,这些都是重要信息。可以帮助你判断的。当然,如果实在不好判断,有个简单的办法,就选择你熟悉的城市,比如你的家乡,或者你大学所在的城市,或者你长期生活过的城市,等等。

 

说完了文化问题,我觉得还有必要讨论一下饮食问题。大家不要笑啊。民以食为天嘛。

 

很多人不是很看重这个,我原来也以为自己不看重,不过,这次出来,还是被上了一课。所谓天下厨房,味在四川,不管怎么说成都,都无可否认,成都的小吃,成都的风味,确实很好吃。以前有个说法,“川人不出川”,我估计,这个主要原因就是,到了其他地方吃不惯。

 

西安虽然很好,但是这个饮食我一直是没有抱太大期望值的,过来很长一段时间,我每天吃饭基本上和完成任务差不多,just so so。到现在,我每隔一段时间,都要去吃吃川菜,吃吃火锅什么的,不然嘴巴里面没有味道。

 

呵呵,我是如此,大家想必也是如此吧,大学生活的食堂,我想确实不会很好,不过,以后大家的生活道路还长着呢,如果贸然选择一个口味不符合自己的城市,也会很痛苦。怎么痛苦呢?每天只痛苦三次就够了。

 

想想看,一个喜欢吃面食的同学,跑到南方城市,天天对着白米饭,会昏过去的。我一个朋友跟我说,吃米饭,每天下午3点肯定饿,吃不饱。我呢,和他相反,中饭只要吃馒头,不管三个,四个,下午4点,肯定饿,真要昏死过去了。不过这还好,还有个家伙好死不死,从四川跑到上海,还娶了个崇明岛的姑娘,每天早上一大碗白米饭,直接拌糖吃,他说他想自杀。呵呵。不过这么多年,貌似他没有自杀,倒是他夫人,火气见长,估计是吃辣椒吃的。

 

因此,我第二个建议,当同学们决定去一个城市的某一家公司工作时,先看看自己吃得了不?如果吃上面出了问题,很多时候,呆不住的。

 

有人可能说,我自己做着吃,可以。不过,巧妇难为无米之炊,我到西安来,一直买不到泡菜盐,泡不出泡菜来。那天参加个什么展销会,一个四川企业过来卖泡菜。不许笑,我那个口水,哗哗滴。。。。

 

以前看过《读者》的一片文章,《胃知乡愁》,一个人,年轻时能吃苦,年纪大了,很多时候,你的胃会提醒你,常回家看看。。。

 

说完吃,我们再说说住。这可是热门话题。中国人赚了钱,买房子是一定的,所谓“安居才能乐业”。大家看见没,目前房地产市场不管是火热还是萧条,总之是新闻热点啦,近期世道不好,房产销售不景气,为了吸引眼球,连房子本身都开始做“俯卧撑”了。呵呵。

 

前面说了很多话,其实归根到底一句话,是“我选城市”,但是,大家别忘了,做生意嘛,是相互的,光我选不够,还得“城市选我”,你说是不?

 

城市怎么选我呢,很简单,就是物价指数,凭我的本事,能不能赚到在这个城市生活的基本生活费。而所有的物价指数中,我理解最重要的,就是房价。

 

我当初选择西安,就是这么计算的。我隐隐约约听到一个美国的算法,即一个家庭的收入,不吃不喝100个月的月收入,应该能买套房子,否则就是物价太贵。100个月差不多10年,这样的话,一般选择20年贷款,这个家庭月收入差不多一半来还贷,能勉强应付下来。

 

我是这么理解的,这主要参考一个城市的平均工资水平和房价。平均工资水平很好查,各地社保局都有数据公布,可能跟大家目前的月薪期待值差的有点远,但那毕竟是国家承认的基本工资水平,是平均值,还是有一定代表性的。比如成都和西安,公布的都是一千多。

 

我们这么计算,夫妻是两个人,这个平均工资应该Double,算2k多,再加上杂七杂八一些工资外收入,基本上算3~4k,应该问题不大,事实上,我听到的西安普通公务员的收入,差不多就是2k~2.5k一个月。这算是一个比较标准的数字。当然,还有大量的工人,收入不到这个数字。

 

ok,我们折中一下,按照一对夫妻月收入3k计算,那么,100个月的工资,30w,按照平均一个家庭购买80~100平米的房子,算90好了,我们计算一下理论上的房价,30w/90=3333元/平米。再加上国家的税收,大修基金,装修费用(低档装修吧),差不多折合下来,4000元/平米,这是入住价格。

 

这样,我计算出了一个城市,根据工资收入算出的理论合理房价,那这就好办了,把当地房价和理论房价比较一下,一下就能看出这个城市的物价指数怎么样。这个我就不细算了,因为各个城市不一样,大家可以自己算。这里提示一点,成都的房价,高层公寓,一般在8k左右,西安的一般在5k左右。

 

从另外一个方面,我发现,上述计算也能判断一个公司开出来的薪水是否合理。我们知道,上面是100个月,和90平米的关系,我们模糊一点,大概算都是100,那么,基本可以讨论,家庭的月收入,应该和当地的房价基本持平,即,一个家庭每个月的工资收入,应该能买1平米房子。

 

因此,比如当地房价是10k,这在北京上海等一线城市,貌似很常见哦。

 

那么,我们至少应该能每个月赚到5k,否则,根本活不下来,也别想买房子,娶媳妇生娃。这还是男女双方收入对等的情况,中国的现状,女方高薪的,毕竟少见,因此,男方一般应该负担至少三分之二的工资收入,因此,男方应该月收入在7k~7.5k左右,女方在2k~3k左右。

 

不过,别忘了,这是要拿回来的钱,我们的钱,很多时候,要扣税,扣社保等,要拿回10k的钱,税前收入至少应该是12k左右。男方8k,女方4k,这是基本参数。

 

ok,大家知道怎么计算生活成本了吧?

 

说完吃住,当然还要说行啦。

 

别激动,很多时候,上下班是个大问题,一个城市,扩大了,很多时候生活就慢慢变得不方便。像北京、上海,上下班花超过2小时是经常事,在没有可能买得起车子的情况下,公交上下班的困境,是很多年轻人的噩梦。这意味着,每天早上6:00就要起床,晚上20:00以后才能到家,一天有4小时在路上。

 

有几个解决方案:

 

1、买公司附近的房子,不过这一般不现实,我们IT业,一般都在高新区,房价都很贵,这多出来的成本,买辆车都够了,还有,我们的寿命一般都比公司长,换了公司,总不能换房子吧,投资回报率不高的,风险也很大,不是个好主意。

 

2、买车子,这确实能解决问题,不过,由此每个月多带出来1k左右的开销,上面计算的数字还记得不?12k月收入,需要涨到13.5k才够用,这还没有算买车的钱,仅仅是使用费用。

 

3、到公司附近租房子住,周末回家,这也很多,但这毕竟不是好的生活方式。

 

4、等所在城市地铁网建成,在很多一级城市,地铁不错,不过,也不一定顺路,还有很多二线城市,地铁在建,暂时还帮不上忙。

 

5、等公司的班车,这要大公司才行,不是每个公司都有条件的。

 

呵呵,想来想去,还真没什么好主意,只有走一步看一步啦。

 

呵呵,啰嗦了这么多,就是希望就我本人的经验,给大家一点参考,希望能帮大家开启一点思路,切实帮助大家解决一点以后的困难。

 

其实选城市,我个人的理解,也难也不难,如果都照上面说的,事事计算完,就很难。不过,也有很多简便的办法,先签一家,过去做几年,看看,合适就留下,不合适,再换,也是一种办法,毕竟,很多东东是感觉,用理性分析不清楚的。

 

关键是:你想过什么样的生活?

 

学生评论:

 

河南成功学院Gwolf团队 魏天阳(PHP学生) :

选择城市也就意味着选择近几年的生活方式,的确是一个重要的问题,谢谢肖老师。这也是一个很迷茫的事情呀!

 

西北大学 任艳(C/C++学生) :

肖老师的话我深有体会,我觉得吧,人选了个什么职业,也就决定了你选择了个什么生活方式,以前吧,我自己感触没这么深,现在读到研究生阶段了,再跟以前那些非计算机专业的人讨论问题,总是觉得思维方式格格不入,而且也有点志不同道不合的感觉,呵呵,看来以后选什么都是要慎重的,毕竟这将影响到你的生活质量。

 

回复 黄海峰(网络管理爱好者) :

环境太重要了。在广州读的书,回家乡中山这个小地方去打工,当初猜中山竞争不大,会舒服点,后来才慢慢发觉很不适应,我习惯了高速的节奏,中山却有点慵懒,给我很慢的感觉,我觉得在虚耗人生。说中山竞争不大,其实也假,这里招开发啊网络啊等工程人的职位比起广州深圳少非常多,有时候找到了一份工作就算你已经觉得不会太喜欢还是要撑着做,不然吃不了饭,然后工作过程中再时常关注招聘广告。另外高楼不多感觉不到城市气息,觉得自己很原始,我是很愿意跟着感觉走的人,譬如我以前在广州读书那会喜欢挤在地铁里想事情看世态人情,一个人流连在川流不息的热闹夜市,全世界都很忙,没人有时间发现我,我感觉自己走在明处却能藏着许多私事,感觉很自在。小城市慢,没什么可资娱乐的消遣,人也传统一点,并且目光也短浅一点,勾心斗角的事情会多些,大城市人人都忙,不太会计较小事情,要么干脆不理你,要么大吵一场,大家都忙,不会浪费时间经营关系制造事端玩城府。大家说大城市人情淡薄,但我也可说那才是君子之交。

 

回复 邱沧淮(C/C++学生) :

每一个城市都有它的文化,选择一个城市,就是选择一种生活方式,选择一种生活态度,往宽里说,甚至就是选择了一种人生。

 

听了肖老师的话更理性的看待了将来的去留,留住男人的胃就是留住男人的心,留在一座城市,吃也是重要,我南方沿海人,吃不惯辣椒馒头面食,离不开海鲜,呵呵;生活成本,房价胡乱长,什么时候是个头啊,入不敷出啊,有压力就有动力,这个压力,有点大。其实我们这里也挺好的,就是对TW问题城市一直没得发展,现在情况好了经济飞跃,年青人就是想到处闯闯...啰嗦半天了,还是学生,我的路还长,我还有努力的机会!

 


 

关于女生的程序员之路

 

肖舸老师

 

这是发到邮箱里面的一封信,感觉近期讨论女性程序员居多,有一定代表性,这里尝试作答。一家之言哈,欢迎拍砖。

 

原文如下:

 

肖老师:

      您好!

      我是在大本营上认识的您,首先感谢您在大本营中给予我的帮助和指导,我真的从中获得不少收获。

      说实话,我之所以加入大本营是因为在大学中课程学习的需要,但是随着学习的深入,我对编程产生了很浓厚的兴趣,但是关于女生从事程序员之类的工作,我有很多疑惑。

      首先程序员是份耗脑力和体力的工作,熬夜加班出差都是常事,不管有多大的兴趣,身为女性的体质能否胜任其中种种艰辛?

      其次,有多少公司愿意招收女程序员?性别歧视仍然存在是不可否认的事实,要获得肯定,女性势必要付出更多。更何况是刚毕业的女大学生?

      我很迷茫。是不是应该在编程这条路上继续走下去?关于大本营中的各个课堂,什么JAVA,PHP,NET,嵌入式,等等。我都没有接触过,我只是个编程初学者,只是学习了数据结构和C++,考试和实验成绩也不错,很多人说我有这方面的天赋。而且我自己也很有兴趣,希望能继续走下去。但是接下去该怎么走,完全没有头绪。

     其实现在所有烦恼都是来自于就业和未来的生活,我希望能从事我喜欢并且适合我们女孩子的工作。男孩子喜欢了就会不顾一切,但是女孩子难免有很多顾虑。希望老师能给我建议,或者能指点我方向。能让我从迷茫中走出来。。。。

    期盼您在百忙之中能给我回信,谢谢!

 

                                                                    您的学生

===========================

 

我的回答:

 

这位同学你好,呵呵,首先声明,肖老师是男生,从来没有站在女生的角度思考过问题,因此只能就自己的角度来探讨一下问题,说得不准,勿怪。

 

嗯,说个现象吧,我在成都呆了12年,确实没怎么看到女性程序员,有几个,生了娃以后,都回家带孩子去了,不过我到西安来以后,吓了一跳,程序员中男女比例接近1:1,呵呵,确实给我上了一课。

 

所以,就我的经验值,我发现你说的其实不准确,起码中国北方城市,女性就业率还是比较高的,至于是不是程序员职业,并不重要,也有很多女性做的,你大可不必担心这个问题。

 

当然,女性有女性的弱点,生理上的咱们就不说了,其实对于办公室工作来说呢,问题不大,关键是结婚生孩子,根据劳动法,女性一般是4~6个月的产假,这在很多小公司来说,一个人接近半年不上班,还拿薪水,确实有点难以接受,因此,在招聘时,不知不觉就对女性有点回避倾向,就造成了女性求职困难的现状。

 

但是呢,我觉得这是短期现象,为什么呢?一个公司,如果要做大做强,做正规,必须正视这些劳动法规定给员工的基本福利,如果老板刻意回避这些话题,应该说,这家公司也确实做不大。至少,我到现在没有看到哪家超过1000人的大中型企业,里面一个女人都没有的。你说是吧?

 

所以,这个问题,归根到底,我的理解,还是市场经济的初级阶段问题,即中国的企业刚刚出现,还在进步,目前实力还弱,无力承担太多的社会责任,无法承受女性结婚、生子的一系列额外成本增加,因此导致女性就业渠道偏弱。

 

就我的经验而言,目前国有大型企业、欧美外资企业,嗯,台资和港资等企业也是,对劳动法遵守比较好,反而是中国的民营企业,遵守得不好,让买个社保都磨磨唧唧的,更不要说女性的产假等问题了。因此,如果求职时主要针对上述企业来说,应该问题也不是很大。嗯,国内华为、中兴等大型企业,对女性歧视也很小,可以考虑。

 

但是,要注意,这里面也有个门槛问题,国有大型企业,其实福利是比较好的,但是,工资待遇偏低,尤其是进去主要靠关系,很少有凭借真本事能进去的,这个难度很大。其他三资企业,人家是典型的资本主义社会原则,看人部分男女,都是成本,每个人必须创造出效益来,因此,首先必须要真本事才进得去,其次,进去后,人家用人也比较狠,我们常说“女生当男生用,男生当畜生用”就是这个道理,如果进这类企业,要做好被扒层皮的思想准备。

 

第二个提法,我觉得目前女性就业困难,关键还在女性自己。

 

目前大学里面有句话:“干得好不如嫁得好!”,我想大家都听说过。其实是人就有惰性,也有一些劣根性,都想找一些活少拿钱多的工作,舒舒服服地赚钱,这种思想,其实不管男人女人都有。我自己也有,呵呵。

 

关键是,社会是公平的,一分贡献,一分收获,哪有那么多不劳而获的事情。但现在的女生,我觉得普遍有点问题,都想走捷径,都想一次革命成功,目前大学校园中,傍大款的不少,很多女生一门心思嫁个好老公,认为这辈子就有靠了,不需要奋斗了。

 

因此,在求职市场上,很多女生不是找不到工作,是根本没有一心一意地去找,因为对女生而言,通常都有第二选择,可以靠家里,靠男朋友,等等。这种求职态度上的不坚决,其实无形中,已经给自己关闭了很多企业的大门。有个现象,同等条件的两名女生都面试,一名犹犹豫豫的,一名态度极其坚决,一定要拿到这份工作,通常都是后者获胜,因为企业认为这个人既然这么需要这份工作,那不管能力怎么样,进来后起码会拼命做事。

 

那我们再来比较男生和女生,就可以看出显著差异了,其实男生有时候也想靠,但是没得靠啊,反而,还有个女生在靠自己,自己还要撑起一片家庭,那么,你说男生求职拼命不?

 

但我还是得说,前面女生的这种思维是严重错误的,夫妻也是经济共同体,双方需要共同完成家庭建设,这样的家庭才稳定。一个女性,如果觉得职场艰难,就打退堂鼓,那,不管是不是程序员,其实我觉得她什么职位都找不到的。

 

这样还有潜在的恶果,现在有很多闪婚族,出了校门就结婚,我认为和女性的这种依赖思想有一定关系,但这样的婚姻,是不是稳定呢?

 

其实我不讲,大家都应该清楚,女性凭借个人的外貌实现魅力,男人更多的是凭个人的内涵和事业的成就实现魅力,这就决定了,一个女人,魅力最大的时候,是18~28这个年龄段,而男人恰好相反,一个男人最有魅力的时候,是35~45岁这个年龄段。这中间有落差。

 

一个女性,如果坚持以漂亮为本钱,早早地就嫁人,在家里相夫教子,那么,在她30多岁,年华老去的时候,情况就比较危险了。首先,男方逐渐进入事业巅峰,很多更为年轻漂亮的女性,会青睐这种男人,男人面临的诱惑在加大,其次,这个家庭,十几年其实都是男方一点点赚出来的,女方是享受者,不是建设者,在这个家庭里面渐渐就没有发言权,经济基础决定上层建筑,不要说对方爱你就会一辈子听你话,很多事会变的。

 

如果此时女性再不注意,试图通过控制经济等手段压制男人不会变心,或者采用跟踪,哭闹等极端方法,往往适得其反,最终导致男人离他而去。一旦出现这个问题,女性的问题就比较危险了,十几年没有上过班,自己的专业能力,恐怕仅仅剩下一张文凭了,知识都还给老师了,那她在社会上可以说没有任何竞争力可言。那么,她以后靠什么生存?

 

所以我这里提醒一句,现代女性,最好有一份自己的事业,不要轻易依赖别人,记住,今天你有优势,别人会爱你,但是明天当你优势丧失,而男方优势突显的时候,很多时候,家庭并不是很稳固的。最好的方法,有份自己的工作,有份自己赚的薪水,可能不多,但是家庭建设有你一份,男方如果动不动就动歪心思,就是他无理取闹,打官司他都打不赢的。这也是保护自己必要的方法。

 

当然,也不要走另外一个极端,动不动就以女强人自居,你的事业是第一位的,男人天天在家里要给你扫地做饭端洗脚水,这也不好,中国社会,毕竟几千年,有个文化风俗在里面,女性再赚钱能力上,总的来说还是不如男方的,以后家里的顶梁柱还是男方,那么平时在家里,让着男方一点,家务活多做一点,让男方回到家,有个休息的感觉,能放松能感到温馨,这样的话,这个男人就是你的,打都打不走。呵呵。

 

总结一下,女性的工作问题其实比男性复杂,中国的男性,一般都是一门心思顾事业,把事业做到最好,而中国的女性,永远需要在事业和家庭之间求得平衡,既不能没有自己的事业,也不能放弃家庭,这很难的,不过,慢慢锻炼,总会找到办法。我的经验,能把握好这个平衡的女性,一般这辈子都比较幸福。

 

所以,针对你的问题,我觉得要辩证地看,既要看到,找份工作对你很重要,也要看到,作为以后家庭中,主要负责家庭事务的成员,你的工作不要一味追求高薪高职位,要寻求一个合适的职位,能满足长期工作不失业,但也不能太苦太累,搞得家庭无法维系。这才是比较周全的解决之道。

 

现在我们回过头来看看程序员,其实程序员这份工作,我觉得女性可以做的,程序员有很多加班的,但是这往往是工作刚开始,没有太多经验的情况,待工作一定年限,掌握了一定经验,加班会越来越少,其实大多数程序员工作岗位,是不出差的,基本上是朝九晚五制,做久了,收入也不低,可以满足一个女性对事业和家庭的平衡。因此,我建议你大大方方就做程序员,找不到,努力找咯。

 

嗯,再多说一点,就我个人的经验,程序员的加班,往往都是由于bug导致的,大多数时候,公司在安排项目开发时间时,时间还是给得比较够的,至少是评估过的,但是,往往是后期出现了很难跟踪,很难解决的bug,导致项目进度大大滞后,时间突然变得很紧,于是出现大量的加班,有经验的朋友可以想想,自己以前的加班是不是这样。

 

其实这个问题和男女无关,实实在在是每个程序员的问题,我本人以前也深受其害。后来我痛定思痛,准备彻底解决这个问题,于是我用了大约8年的时间,研究了一种方法,叫做《C/C++无错化程序设计方法》,出来后,我的bug果然少了很多,几乎达到0 bug的地步,自然而然,我加班也变得很少了。

 

这种方法我在我的新书《0 Bug ---- C/C++商用工程之道》里面,已经share出来,供大家参考,如果你以后希望过的轻松一点,能更好地在事业与家庭之间求得平衡,少加班,多陪家人的话,建议书出来你看看。呵呵,也算我做个小广告。这种方法虽然是C和C++的,但里面的原则都是跨平台跨语言的,因此,其他语言的朋友,建议也看一看。会有帮助的。

 

学生评论:

 

金涛(软件测试爱好者) :

不光是在谈学习了,更是在谈人生,和未来了。男同胞也受用了。

 

陕西理工学院 郝争涛(C/C++学生) :

肖老师说的挺现实的,技术高了,加班自然就少了,重要的是关键技术。

 

上海大学 吴昊飞(游戏开发学生) :

肖老师的这篇文章让我了解到程序员加班的真实情况了,以前曾经有个IBM的程序测试员来我们学校免费上了几堂程序测试的课程,他有说过一句话,大致意思是程序员很难不加班,后来我又在一家软件外包公司短期实习了一个多月,好像是项目快到交付日期了吧,反正那里研发部的程序员几乎天天加班,结果给我的印象就是:程序员=加班

而且自从那次我妈就觉得程序员这工作太累(那时候实习的地方离家比较远,路程有两个钟头,实习生不用加班,也要早上七点出门,晚上八点到家吃晚饭,然后洗洗直接睡觉了),现在大四开始找工作,我妈就一天到晚跟我说最好不要找程序员的工作,说得我都快有点动摇了……

应该把我妈拖过来让她看看这篇文


 

如何找需求练技术

 

肖舸老师

 

被很多同学问,怎么才能知道用人单位的需求。

 

这个给个建议哈:去CSDN或者其他什么网站的项目外包栏目看看,里面的需求,就是别人肯付钱的需求,自己试着实现一下,比较练技术。如果能卖出去,就表示技术练差不多了,可以凭这个项目经验找工作了。个人感觉,这个项目经验在找工作的时候,有时候比学历证书管用。

 

嗯,这里面有几点请注意:

 

1、不要做外挂!不要做木马!不要去破解!这短期内能帮你赚钱,但长期看,相当于自己封杀自己这辈子到达程序设计巅峰的机会。靠偷东西,是没有办法受人尊重的。就算以后赚很多钱,脑门上还是写了个“贼”字。

 

2、不要去评价对方要求合理不合理,他肯花钱,就是客户,客户永远是正确的。

 

3、不要去嫌钱少,你觉得你已经很努力了,用了很多技巧,用了很多技术,但是,你干的活,对客户产生的价值,就只有那么点。

 

4、有些太大的需求别怕,比如20000做个带VoIP的IM软件之类的,那明显不是给你的,是某些人,希望做套IM系统,但又舍不得花钱,希望用这点钱,诱惑某个正在做这个IM软件公司的员工,把公司的源代码偷出来卖给他的,这是一种诱惑,算是引人犯罪,别理他,堂堂正正地做人,比什么都强。

 

5、别怕别人的回复,很多人回复,说是什么什么的成熟团队,其实可能就做过一两个项目而已,你找几个朋友也可以,尝试给客户发发电子邮件,低调一点,慢慢谈,刚开始甚至免费做,就期待对方给你一个机会。只要做过,你已经赚到项目经验了,已经获得很多了。

 

6、不要想着一个人做事,有人看见一条自己合适做的,激动万分,生怕别人知道了,恨不得这条消息马上下线,免得有竞争对手,其实,有竞争才有进步,找几个同学,一起做,你会发现,你的同学比你聪明的。学着欣赏他们,以后你就是项目经理。

 

7、不要气馁,千辛万苦做出来,对方客户一句话,不要,很正常,市场竞争就是这样,千万别跳楼,自己再来就是了。大不了重新来过,怕个P啊!

 

8、用心做事,既然做了,目的就是卖钱,不是过家家,不是开玩笑,用尽全部心思,让客户买单,不管最后结果如何,只要你做了,就问心无愧,而且,你会发现这个过程给你带来的,比你卖的钱要多得多!

 

9、最后一条,如果你赚到钱了,有低年级的小弟,请教你如何赚钱,把我这篇文章推荐给他,这不是培养竞争对手,是把软件外包这块市场越做越大,钱是赚不完的。帮别人就是帮自己,以后你做项目经理,如果你手底下的技术骨干是你这么培养起来的,你说轻松不?

 

学生评论:

 

河南成功学院Gwolf团队 赵鹏(C/C++爱好者):

比我的驱动学习还是任务学习更加深刻,更加考虑周全。再提炼就可以把一种学习方法抽象成一种方法学了。呵呵~~期待您的下一篇……

在肖老师的指点下,这里我针对我们学生,提出几点小的建议:

1.找需求

不要找大的,就找小的,比如做一个程序自动开启器,一个课程表,一个游戏计时器,一个博客计数器都可以。

关键点在于:能够通过自己的眼睛来发现需求,然后抽象成一个软件或者一段程序

2.团队学习

团队学习不是你让别人来,别人就来了。一般也不是约来的,我更看中的是你也强了,然后带动一部分强了,那么团队就有了。一开始就想要个团队,我觉得是会失望的,因为很简单,人家为什么要和你一起呢?

关键点:尽力用实力营造羊群效应,被动地带动一部分来做,而不是主动!

3.钱的问题

一般情况下,学生的作品是不能产生商业价值的(仅仅是一般),所以,目光要远点。能卖钱的,一般就是网站之类的,管理系统什么的。这些东西可以在学习体验软件工程的时候来实践,但不是说别的项目就不能实践软件工程,只是如此实践,成本较低!大学时代,多去探求真理,知识根本原理。比如web开发的数据处理模型,数据库的基本模型等等,那么以后的价值增长是不可估量的

关键点:做事情要学会计算成本,尤其学习,因为时间成本是没办法回收的!大学时代不为钱,就为明天的增值,就为今天的成本而学习!

以上纯属个人意见,仅供参考!

 


 

修炼编程的内功

 

肖舸老师

 

这也是一直想写的一个话题。近期,在坛子里也回复了一些帖子,感觉同学们在这方面认识也有一些偏差。干脆就写一篇吧。这里是两篇同学们的帖子,大家可以参考一下。

 

老师,给有点迷茫的学生一些指导吧,谢谢谢谢谢……杰杰 2009-06-02 04:12 http://student.csdn.net/space.php?uid=46110&do=thread&id=1840

也来出道题郭晓 2009-06-03 23:26 http://student.csdn.net/space.php?uid=54179&do=thread&id=1921

(特别注明啊,在郭晓同学的题目中,肖老师被狠狠地鄙视了,呵呵。)

 

还是那句话,一家之言哈,欢迎拍砖。

 

很多年以前,我还是一个学建筑的学生,但是很喜欢学计算机。不过呢,由于专业限制,我没有计算机用的。学校只开了一个学期的Fortran语言,上机时间只有可怜的5节课,那会把我憋坏了,呵呵。

 

大家不要笑啊,90年那会,生活不富裕,PC机还是一个很贵的东东,一般家庭都还停留在18吋电视机的时代,大学生又是最穷的,物质条件更为匮乏,我当时有个小收录机,京华牌的,呵呵,在同学中已经很牛叉了。因此,像现在的同学们,一考上大学,MP3、MP4、笔记本电脑家里给配齐的,在当时是根本不可能想象的事情。我作为过来人,还是要说大家一句,大家真是生在好时代了,很幸福的。

 

不过呢,我很喜欢编程,就养成一个习惯,想象编程,找一个题目,自己在脑子里把程序构思出来,写在纸上,然后自己模拟电脑的run,把程序过一遍,看能不能执行正确。这个习惯现在都还有。呵呵,我老是劝大家写简单的程序,其实和这个习惯有很大关系,因为我比较笨,稍微复杂的程序,脑子就想不过来了,就晕了。

 

也正因为有了这个经历,我就开始思考一个问题,编程究竟是什么?呵呵,当时我在学校,也是小有名气,大家都知道有这么个程序疯子,没事喜欢发呆,喜欢想程序。在一次舞会上(别激动,我也是过来人,也会跳舞的,虽然很难看哈,呵呵),一个计算机专业的师姐就考我,问我编程是什么?

 

我当时想了一下,很郑重地回答她,我的理解,编程就是拆解任务,把一个任务,拆解成很细很细的步骤,一步步教计算机去做。计算机很笨的,举个例子,我们说早上起来去上课,是个人都知道做什么,但是它不知道,因此,我们要告诉它:

 

起床--穿衣--拿饭盒--去食堂--买早饭--吃饭--洗饭盒--回宿舍--放饭盒--拿书--出门--如果人都走完,要记得锁门--去教室--推门--找到自己的座位--走过去--坐下来--等待上课--上课。

 

说到这里,我突然自己有点明悟了,编程,就是把复杂的问题简单化,简化到每个动作都是1+1=2那么简单,然后计算机照做就好了。这就是我理解编程的真谛。我师姐听到了,也若有所悟,这个话题就没有再说了。

 

我们来分析一下计算机的特点,准确的讲,目前我们这个社会的计算技术,还很原始,说它是计算机,正确,它确实只能计算,说它是电脑,太抬举它了,它不可能有思考能力。

 

在冯诺依曼体系架构中,计算设备就是具有一定计算能力,有能力和外界做出IO互动,并且能高速重复动作的这么一种设备,这可能和大家在教科书里面学到的不太一样啊,不过,我是这么理解的。

 

因此,我从一开始,就没有把计算机作为一个伙伴,一个可以帮助我出主意,或者代替我思考的伙伴,仅仅是看做一种工具,这种工具有什么用呢?我认为它最重要的,有两个作用:

 

1、无限可重复性,一个动作序列,一旦编订程序,计算机就可以无数次重复这个序列,不会感到累。这特别适合于那些乏味的,不断重复的劳动,比如,我们一个学校每天要敲钟,打上课铃,如果让人来做,这个人会很乏味,做久了,就可能出错,但是让计算机来做,它可没有什么思想,不会觉得累,而且做的很好。计算机特别适合做重复性工作。

 

2、服务品质的稳定性。计算机适合做重复工作,还有个有点,就是每次执行结果都是一样的。这体现了工业化时代最重要的一个思想:量产思维,大家可以看到,现在的社会,不可重复的艺术固然很好,但公众需要的是量产的产品,因为质量稳定,产量稳定,能满足大众需求。劳斯莱斯虽然很美,但绝大多数人在开大众、丰田等低端车。就是这个道理。还是打铃那个例子,如果是人,可能会生病,可能会请假,或者干脆搞忘了,但计算机不会,只要有电在正确工作,打铃就不会出错。

 

这样,我就慢慢理解到了,计算机其实就是能以恒定品质不断重复输出服务的机器而已。

 

ok了,这我们是不是可以理解到,计算机编程,其实首先是人的工作,当我们遇到一个服务需求,我们人来做一次,嗯,获得一个比较满意的结果,然后我们觉得这个动作可以重复,下次遇到类似的问题,照做就好了。于是,我们就安排计算机来做这件事了。是不是这样?

 

这是不是说明,程序,其实是在讲一件事应该怎么做,这个做的过程,以及这个过程的含义,其实是人定义出来的,然后通过编程,教给计算机来做而已。

 

我以前经常有种感觉,计算机编程,是两层意思,一层,是程序本身的含义,就是怎么做事,另一层,是隐含在程序下面的逻辑含义,就是做事的意义,程序只是字面上的意思,而逻辑,是程序段落组合起来,共同表述的一层意思。现在想想,其实就是这个道理。

 

嗯,既然我们知道,编程,就是把做一件事情的步骤,分拆开来,教计算机去做,但,分拆到什么粒度呢?这个很重要。如果分拆的粒度太细,白白浪费程序员的时间和精力,这些都是成本。而分拆得太粗,计算机还是弄不明白,做事不对,就是bug了。

 

这说明,编程有个很重要的概念,就是粒度,也就是我们对问题描述的精细程度。

 

最开始的计算机是最笨的,学过计算机组成原理的同学大概知道,只要有个累加器,其实已经可以算一台计算机了,只会做加法计算。因为从数学上,我们可以知道,任何计算,最终都可以演化成加法计算,事实上,现在的CPU,在最底层核心的部分,也还是这个加法逻辑。

 

这样做当然没什么不好,不过,有个小小的问题,就是粒度太细了。如果每件事情,都要程序员去拆解成很细的加法计算,这个工作就几乎不是人干的事情了。难道就无解了吗?

 

呵呵,前面我们说过,计算机的特点是什么?无限重复,大家就发现,一个事情,比如7*24,这是乘法计算,但是,我们最终要拆解为加法计算去实现,但是,不是说我们每次都要这么拆解,乘法计算也是一个工作,有规律的,因此,当我们拆解一次之后,我们当然可以把这次拆解过程本身,编订为程序,下次遇到类似问题,让计算机把这个程序再跑一遍就ok了。呵呵,大家以为Intel的CPU里面的乘法计算指令是怎么实现的?大家又以为AMD的CPU内部的微代码体系是怎么实现的?

 

就是这么一个思维,解决了所有的问题,遇到需求,首先拆分,然后不断检索我们以前是不是以前拆分过了,遇到能套用的程序段落,就直接用,不用每次都拆分那么细,减少工作量,当然,遇到新问题,还是需要自己拆解的,不过,拆解后,最好把拆解本身,也写成程序,下次重用。

 

大家玩各种语言,一般都提供基本库,这个基本库,其实就是前人已经拆解过的结果,软件公司觉得有代表性,可以满足大多数应用场合,就编订到基本库里面,以后程序员直接用,不用自己重复了,大家说是不是这样?

 

现在,大家知道怎么看待C的stdio.h,stdlib.h这些基本库了吧?C++的iostream是什么含义,知道了不?MFC知道了不?Java的运行时库是什么意思,也知道了吧?

 

不过呢,这个世界的需求总是很多的,并且,计算机的能力也是不断在进步,以前不适合计算机做的事情,现在也慢慢变得适合了。因此,大家总能遇到一些新问题,需要自己重新拆解,基本库中没有提供,这就是程序员这个职业存在的真实含义。帮助用户不断拆解新需求,解决新问题。当然,库本身也在进步,不断把已经被证明拆解成功的问题,修补到库中,避免以后的程序员做重复工作。就这么简单。

 

呵呵,啰嗦了这么多,可能很多同学看的一头雾水,肖舸老师你到底想说啥?

 

我想说的,其实很简单,编程序,就是拆解问题,但讲究个拆解的技巧和方法,以前人做过的,别做,尽量用,没有的,做过一次,尽量保留下来,供下次使用,就这么简单。

 

那,这和本文的题目“修炼编程的内功”有啥关系呢?

 

当然有关系了,什么叫编程的内功?我的理解,就是对这个世界的抽象化理解能力以及描述能力。一个工作,能迅速从中提炼出下次可以重复的套路,并且能以一定的规则,就是计算机语言规范,描述出来,拥有这两个能力,就能保证遇到任何问题,都有办法写出程序来。

 

所以,大家学校中学了很多数学,语言,算法,数据结构,甚至编译原理,操作系统,其实这些统统是工具,不是写程序的目的。

 

写程序,就是遇到需求,能迅速抽象,理解其共性,并能以清晰的语言描述出来。上述学科,不是帮助提升你的抽象能力,就是帮助提升你的描述能力,大家看是不是这个道理?

 

所以,我在带徒弟的时候,有时候喜欢说一句话,其实作为程序员,学习一点语文有好处,因为最能培养描述能力的,其实还是语文。英语不算啊,英语虽然也是一门语言,但中国的教育,一般是能看懂,很少从一个英文文学家的角度培养学生用英文的描述能力。只有我们的语文课,这不但是教语言,而且通过无数次造句和作文,在教大家描述问题的组织能力,这个能力在写程序的时候,很有用。

 

这个时候,话题就出来了。中国的语文,先是甲骨文,然后古文,然后白话文,大家发现没有,总体是越来越简单,这是发展的趋势。为什么呢?因为大家觉得,语文就是让人懂的,太深奥的东东,不太适合普及,就没有生命力,反而越简单的东东,普及越快。

 

因此,请大家注意,写程序时拆解,是把问题简单化,不是说把一个问题描述得晦涩难懂,才叫本事。真正的程序高手,都是简化问题的大师。

 

当然,从这个话题,我们是不是可以得出一个结论,其实写程序的方法本身,编程的内功本身,其实是没有什么语言特性的,C、C++、Java、PHP、Python。。。是不是都用的同一种方法在做事情?

 

因此,我这里提出,修炼编程的内功,是学习抽象能力和描述能力,与语言无关,换而言之,从任何一门语言入门,都可以修炼到内功的极致,关键看你用不用心。

 

因此,学习期间,我的建议,不要好高骛远,不要去评价语言的好坏,平台的好坏,没有多大意义的,你并不能确定这辈子最终能在哪个平台下用哪种语言开发。捡着手边有的书,老师教的课程,埋进去学扎实,出来后,换语言比吃盘菜也难不倒哪去,呵呵。这算是正式回答杰杰同学的问题。

 

再说一下郭晓同学的问题。他列了一个很偏的题目,就是有两个变量a和b,不用if、?:、switch或其他判断语句,找出两个数中比较大的那个。

 

这个问题,我不认为是个好问题,因此提出异议。主要的原因就是基于上述的讨论,我认为评价一个程序员好坏的标准,应该是考察其简化描述问题的能力,而不是把问题复杂化的本事。

 

这在学院派里面很多,这里大家可不要生气啊,我知道大家现在基本上都是大学学计算机专业的,算是学院派,但肖老师我的实战出来的,看法很多都和大家不一样。

 

学校里面,老师的任务是把尽可能多的东东教给大家,因为他不知道以后你做什么工作,哪些知识没用,因此,学校老师会尽量培养大家描述复杂问题的能力,这就造成了,学校里面的考试,是尽量把问题复杂化,多考察大家几个项目。学校里面的风气,也认为能解决复杂问题算高手,甚至问题本身不复杂,大家把它造复杂,来考核自己的能力。

 

但实际工作中不是这样的,实际工作中,大家最看重的是能用最简单的办法解决问题的能力,因为这样成本最低,无形中,大家赚钱最多。所以,对问题的抽象拆解和清晰描述非常看重。

 

很多同学刚刚上班,会很不适应,其实就是这个思路的转换。学院里,以复杂为美,而商业公司中,以简单为美。这应该是一个很大的思想转变,甚至是世界观的改变,很难的。一般转的比较快的同学,在公司里面进步就比较快,但我也见过工作几十年了,还是没有转过来的程序员,一般在公司里面活的就比较累一点。

 

建议大家好好思考一下我今天的提法,看问题抓本质,只要能及时理解商业公司的开发思路,理解简单这个要素,我不敢说大家一定能找到工作,但只要找到了,在公司里面,基本都能快速融入公司。

 

呵呵,先说到这里,好累。大家有问题,欢迎探讨啊。

 

学生评论:

 

江西师大 朱斌(Java学生) :

很喜欢老师讲话风格!!!一口气读完了,一开始看这么长文章,是想复制下来以后看的……

 

讲的非常在理。。我也曾经试图将电脑想的非常简单。可实际写程序的时候就是没法将其看的简单。不知道问题在哪

 

郑州大学 胡章思(Net学生) :

读了你这篇文章我感触颇深,因为我一直以来也是这么认为的,我感觉编程就像造出来一台又一台可以听从你工作的机器,而这些机器连到一块运行就能产生你所需要的东西。

所以程序员最重要的是编程的思想,而不是什么语言,架构,那些东西用到的时候去学习一下就行了,但是如果没有编程的思想,所有的东西都是空谈。

其实对于企业的面试,我以为他们出这种题目本意就是刷人,找出思维比较灵活,反应比较快的人,这种人比较适合研究产品,而不一定适合开发产品。

个人的一点见解,呵呵!

 

北京建筑工程学院 陈丽君(C/C++学生) :

说的很有道理哦,很适用于实际工作中,给我们这些还在学校的学生一些启示!从您这篇文章中,提炼出以下五点,我认为概括得比较精辟的地方:

1、计算机其实就是能以恒定品质不断重复输出服务的机器而已;

2、编程的内功,就是对这个世界的抽象化理解能力以及描述能力;

3、编程序,就是拆解问题,但讲究个拆解的技巧和方法,以前人做过的,别做,尽量用,没有的,做过一次,尽量保留下来,供下次使用;

4、写程序,就是遇到需求,能迅速抽象,理解其共性,并能以清晰的语言描述出来;

5、写程序时拆解,是把问题简单化,不是说把一个问题描述得晦涩难懂。

感谢您分享您对编程的理解!

 

河南理工大学 韩记伟(C/C++学生) :

这几天,学习一直处于低谷状态,直到看到这篇文章,才茫然清醒了许多。也顿时找到了以前那种自信和兴趣。说的太贴近实际了。

编程是有它的趣味之所在的,到一定的时候,真的是会顺水顺舟,水到渠成。

一直一来寻找的编程之精髓:程序融于生活,编程提炼人生。

1:我们不要急躁,修炼内功。

2:编程趣味生活中无处不在,编程能带领我们触摸到社会的各个角落,跻身编程不枉人生

3:玩转编程后,让人生变的轻松愉快

 

 

 

 

 

 

 

 


7000块钱能买什么?----答一位同学的培训问题

 

肖舸老师

 

昨天接到一个同学的网上提问,由于这位同学没有实名,因此,这里没有办法确定哪位同学了。

 

他的问题很简单:

 

目前马上暑假了,他有两个机会学习深造:

 

1、某个很不错的培训班,7000块钱学半年,Java语言的入门和深入,每天晚上上课。

 

2、他老师安排他和研究生同学一起研究嵌入式课题。不要钱。

 

乍一看,这个问题好像问一个人吃红烧肉还是吃大便一样,不用想都能选,但是我在回答这个问题的时候,突然打了个突,发现很难回答。

 

第一个选择,培训班都是上手比较快,老师一般都是实战出来的,有自己的套路,按照套路来学习,一般说来都很快。另外,老师一般都已经把书读通了,很容易能帮助同学们快速建立统揽全局的概念,能跳出书本看知识,因此,获得的整体印象很好。只有一个问题,要花钱。

 

第二个选择,其实看似不收钱,但是就我的经验,发现这类跟着高手一起参与项目,学习效果一般都不好。这个我也有过经验。其实这和学习无关啦,主要是人的问题,高手毕竟不是老师,没有一定的教学大纲,往往是做到哪,用到哪,很少能系统的讲解知识,并且,这还和你本人是不是善于分析问题,提问能力高低有关,也和高手的脾气和态度有关。遇到脾气不好的,甚至你问了,都不一定回答你。大家可以想想,有没有小弟弟,小妹妹,问你一个初一的数学题,当时你是否很耐心,很仔细地给他讲解透彻了?

 

这个不是说高手不是人,大家都是年轻人,一个年轻人,学会东东很容易,但是,能耐心地把东东讲出来,不容易,同时,对对方提出的弱智问题,不发火,不急躁,任何时候,都有耐心回答,确实太难了。想想看,如果半夜两点一个菜鸟给大家打电话,问一个奇弱智无比的问题,比如为什么从Windows界面删除一个快捷方式,软件还在?大家会不会发火?

 

因此,我的第一个建议,任何工作,要有一个职业化的态度,找专业的人士帮助,学习也一样,不能流于形式,要学习,就要在师生双方建立某种契约关系,以一定的职业要求,来约束双方,一个认真教,一个认真学,自然能在短期内取得效果。

 

上述第二种方式,不是不可以,如果你能和这批高手一起呆10年,其实还是能学不少东西的。肖老师以前就有一个高手,带了我差不多10年,那个人软硬件都很牛,我学的是他的软件部分,呵呵,硬件没钱买,就没学。效果很好,不过呢,10年哦,如果当时等着吃饭,我早就饿死了。

 

因此,短平快的学习,最好找学习班,前提是学习班口碑很好,真的能学到东西。

 

我给那位同学出了个主意,就是那个培训班有没有试听课程,如果有,去听听,做好笔记,and把笔记发点到CSDN学生大本营来,请这边的Java高手老师点评一下,看水平如何,再决定是否买单,大家觉得这样好不好?

 

不过,转念一想,我又有点不想让他学了,原因很简单,钱钱太多啦!7k哦。。。

 

我不知道这位同学家境如何,大学生,总不太可能自己赚钱,因此都是花家里面父母的钱。大家可能感觉不深,不过呢,这里说说肖老师自己的故事。

 

我在2000年的时候,参加培训班学习MCSE,那可是花的自己的血汗钱,也是7k多,真的很肉疼。记得我把所有的培训费用交完,手边只有1800多块钱,然后那个死没良心的老师,居然跟我说,考试费250一门,一共6门。

 

当我用颤抖的手,再数出去1500元大钞,大家体会到什么感觉没?我这个月的生活费,只剩下300啦。当时我就跟自己说,我绝对不能补考,因为我已经没有钱补考了,必须6门一次过。

 

and开始疯狂K书,课堂上,基本上都是我问,老师回答,我一般都要求老师围着我转,不管了,我花了那么多钱,不学就亏了。6周时间,全部K完,一次过,当时感觉人都疯了,每天脑子里都是题。当然,MCSE这会不值钱了,不过,那会,还是觉得自己学到真东西了,我现在做服务器集群,很多理念都是学习微软的Domain概念。

 

ok了,说到这里,我的意思很简单,如果大家能像这样有割肉的感觉去学习,把自己往死里逼,这7k就花的值得,该学,如果没有这个劲头,学了和没学一码事,建议还是省省吧,替你爸爸妈妈省点钱。

 

不过很遗憾,当时我看到我那个培训班,很多川大的学生,他们没有通过考试,像有个小女生,人很新潮,玩的手机也很高档,不过呢,做实验我看她一直抄着手,让她男朋友做,她看,要知道,这类培训项目,试验是重要的一环,这么看能学到什么,最后当然挂掉啦。我当初光是Windows NT 4.0 Server,都装了7xx遍。

 

大家不妨扪心自问一下,学培训班,是为了找工作,还是为了跟风,还是为了学到真本事?自己有没有决心,让这7k物有所值?

 

我这里给大家算个帐啊:

 

一对小城市的中年夫妻,一般说来,只要不是贪官或者暴发户,基本上靠工资吃饭呢,平均月薪大约4k~5k左右。两人带个娃,一般要花掉2.5k左右。剩下的1.5k能存下来。

 

如果这个娃在上大学,则很可能超支,大家目前自己每个月每年花多少钱,有算过没有?我见过很多中年夫妻,在娃上大学期间,基本上每个月都持平,甚至要透支,都需要动用老本。

 

就算按照正常年份,这对中年夫妻,每个月存1.5k,基本上要5个月才能存够7k,嗯,不止,你们上培训班,有没有交通费?有没有夜宵费?和同学要不要聚聚?这也是消费,7k的培训班,半年,上下来,花的钱差不多10k了。

 

也就是说,这对中年夫妻,要存差不多7个月的钱,才够你上次培训班的。这中间他们不能生病,不能买衣服,不能出去旅游,不能吃什么好吃的,只能按照平时的水平小心翼翼地生活。and,这7k到了我们手里,再转交到培训班手中,1秒钟都不要。平时大家happy,应该也不会考虑到后面的父母在怎么生活。

 

我不是说,培训班不可以上,但是,考虑到7k这个费用,我觉得有点过了。

 

按照这位同学的描述,这个班半年时间,每天3小时左右,收费7k,我算了一下,平均每小时收费38.9元。按照工资折算,每月22天,每天8小时,这个班在一个学生身上收取的月薪是6844。这工资不低了,很多一对一的家教,收不了这么高。

 

不过大家别忘了,培训班不是一个学生的,我们简单按照这个班收了20个学生来计算,则这个培训班每个月收取的薪水是136888.9元。

 

接近14万一个月,怎么都算是暴利了。当然,培训班的老师可以振振有词地说,知识是无价的。但这个培训班教授的是Java,我学C和C++的,不好评价Java的知识是不是值这么多钱,不过,我觉得,如果自己有恒心和毅力,自己买点书来K,未必需要花这么大的代价吧?

 

我给那位同学打个比方,你自己卖点Java的书籍,自己这个暑假不回家,跑学校图书馆K书,两个月,如果有人给你7k,你干不干?相当于别人花钱请你读书,看两个月书,赚7k。

 

ok啦,节约的成本都是利润,你自己K俩月书,不教这7k,是不是就赚到了?就算Java很难学,我不信K俩月书,啥都学不会。我学C语言嘛,当初也只用了十天而已嘛。

 

因此,我最后给这位同学的建议是这样的:

 

1、想学习,选准自己的方向,比如Java。

 

2、买点入门的书,查字典也需要,不要多了,1~2本就够

 

3、网上有很多解密的教程,不管是PPT、PDF还是录像,下一个,下的时候,先不忙去挑选哪个好,随便一个,只要别人做出来,就有真东西,大家别不信,很多人,挑课程能挑一个月。

 

4、捏着鼻子把这些东东一股脑看完,我的习惯是边看边写笔记,眼过千遍,不如手过一遍。看书也喜欢抄书,一般一本书抄一遍,怎么都会了。

 

5、每章的习题都做,就是给自己下任务,一定做完,做不完不睡觉。

 

6、这么坚持两个月,我不太相信效果不如培训班,最惨了,这不还有学生大本营嘛,有问题你问嘛。

 

大家觉得我这个建议如何?

 

学生评论:

 

朱志(Java学生):

英雄所见略同啊

赔本的买卖咱不干

干了一个买卖就得想法回本儿AND赚回来

我学四年就得花8万、、也就买个本科证,想想就心疼,所以得使劲儿学

 

重庆邮电大学 单文彬(嵌入式学生) :

说得很对,有时我也是这样想的,不过很少有那个毅力,平时要上课,还得要准备考试,用在这上面的精力也少了,有时我真怀疑中国的大学教育真的存在问题。老是在注重基础,可是去找工作,人家看的却是你有多少实际经验。想去学一些实用点的技术,又怕挂科,到头来学位证都得成问题。到头来是想学的没学好,不想学的也没学好。

 

合肥工业大学 张慧君(C/C++学生) :

现在学校教的东西都只是个基础,一些项目中遇到很多问题,都是要自学的!赞肖老师的狠劲儿!现在我看到我暑假要做什么了~多谢老师教导!


 

构建自己的不可替代性

 

肖舸老师

 

这是最近的一些思考,由感而发,希望能给大家一点参考。

 

一家之言哈,欢迎拍砖!

 

我问过很多年轻的朋友,他们在找工作的时候,最看重什么?

 

答案很多啦,公司要够大,薪水要够高,要有足够的挑战性,要有成就感。。。等等,当然,也有一脸茫然的,那是还没有想好的。

 

其实后来我考虑了一下,这个话题可以换个方式问,就是大家为什么需要找工作?

 

这个答案就少一些了,赚钱吃饭,养家糊口,为了实现人生价值,等等。

 

那如果我们再换个方式问呢?

 

你觉得在一个员工公司里面工作,最重要的是什么?

 

这个答案更少,升职、加薪。当然,偶尔有个别希望成为老板女婿的不算啊,呵呵。

 

不过,这些是不是最重要的呢?

 

我们换个思路,逆向思维一下,通常,一个人最看重的,不是自己能得到什么,而是自己最怕什么。大家想想是不是这样?

 

从原始社会,甚至再往前,当我们祖先还是猿人的时候,最敏感的是对危险的感应。这个习惯到现在,经过了这么多代,都还有,不信,在你床头挂上一幅画,上面什么都不画,就画一对大眼睛看着你,看你还能睡着觉不?在很多人的场合,只要有人在凝视你,再多的人,再乱的场合,你都能察觉到,是不是这样?

 

别说眼睛了,现代人虽然早已脱离原始社会,对于横向并排在一起的两个圈,都很敏感,觉得不舒服,因为这让人联想到眼睛。为什么这个让人敏感,不舒服呢?因为在原始社会,如果有一双眼睛盯着你,通常就意味着你被某个猛兽盯上了,随之意味着可能会死,这种眼睛带来危险,进一步带来死亡的感觉,一直传到我们现在。

 

上述分析麻烦大家别拍啊,我也是看一些心理学书学到的,呵呵。这里借用一下,想给大家说明一个话题,其实人生活在社会上,公司里,最关注的,还是安全感。

 

很难想象,一个人在公司里面,随时会被炒掉,或者公司随时可能分分钟关门,这个人还能静下心来做事。

 

于是大家就开始研究,如何让我们职业人士,能感到安全一些。

 

如果学过一点经营管理,都能理解一个概念,就是“核心竞争力”,一个产品,一个公司,一个人,能存活在这个世界上,其实都有他的“核心竞争力”。不过,这个“核心竞争力”究竟是什么呢?根据我的经验,一般说来,这个“核心竞争力”还有个名字,叫做“不可替代性”。

 

目前房价很高,但是大家可以看到开发商还是有恃无恐,随时准备涨价,大家说了,如果太高,大多数人买不起,那房子卖给谁,开发商哪敢这么狂?价格太高,也没什么炒作空间,那些想买房子升值的炒房客,也不会买,为啥房子还不降价呢?

 

就我的分析,房价之所以这么坚挺不降,或者说,房屋这个市场之所以还存在,就是因为购买者中有一部分是“刚性需求”,就是一些人,确实没有房子住,要结婚,要生娃,要有个家,没有办法,哪怕房价太贵,那怕再不合适,哪怕当房奴,也一定要买。就是因为有这些“刚性需求”存在,所以房价即使会跌,也不回跌得太离谱。

 

大家注意到没有,其实这个所谓的“刚性需求”,就是房屋这个产品本身的核心竞争力,不可替代性,至少在我们的社会,没有产品可以替代房子对一个家庭的支撑作用,所以它永远有市场。

 

这就可以给大家讲清楚了,所谓的不可替代性,就是消费者,顾客,除了找你买,找不到别的替代品,或者替代品无法满足消费者所有的需求,无法完全替代,比如美国有人住在房车里面,不买房子,但毕竟是少数,大多数人还是觉得住在房子里面舒服。

 

这个“不可替代性”是个很厉害的东东,顾客就算再不满,也得认账,跑一圈,也得回来买单。

 

OK啦,这里我们可以说出一个人在公司里面,如何解决最重要的安全感问题,其实就是构建自己的“不可替代性”,或者说“核心竞争力”。当我们在公司业务的某个方面,具有绝对的话语权,占据重要地位,比如,某个核心产品,是你挑大梁完成的,并一直坚持维护的,这就是一种“不可替代性”,公司不是找不到高手来替换你,而是任何替换你的举动,都会导致更大的成本开支,那么,你就是安全的。

 

当然,做到这一步,也就不仅仅是安全了,升职加薪也不远了。

 

因此,我们今天第一个话题,就是建议大家到了公司里面,先勤奋一点,踏踏实实做几个产品,做几个项目,做出自己的成绩,让自己在老板心目中,成为不可替代的人,那大家以后就会轻松多了。

 

这个过程其实不会很长啦,多则5年,少则3年,只要大家珍惜时间不荒废,努力度过这段职场入门期,一般都能在后期取得不错的成绩。

 

 

 

不过,说完这点,还没有完,因为还有个不好的消息告诉大家。

 

我学过一点管理,在企业管理中,有个很重要的原则,就是绝对不允许任何人,任何事,具有“不可替代性”。因为这对公司太危险了。

 

试想,一个几百人的公司,拳头产品可能就那么几个,其核心技术也就可能掌握在那几个、十几个人手中,如果这批人跑到竞争对手那边,公司马上就可能倒闭,甚至就是简单离职,干别的去,公司都需要付出高昂的成本来弥补这个漏洞。

 

因此,我们要知道,老板其实是一种非常矛盾的动物,他一方面希望大家努力做出贡献,最好一个人把所有的事情做完,成本低啊,但另一方面,他又随时防着大家,怕大家掌握的公司的核心机密,跑了,他就死了。

 

这就造成了一种很奇怪的博弈现象,员工不努力,分分钟被杀掉,员工太努力,老板也提防着他,结果,员工感到这一点,一种不受信任的感觉油然而生,最终员工反而更容易离职。

 

很多基层岗位,直接面对的是部门主管,还不是老板,但这种情况也有,部门主管也防着员工啊,万一哪个家伙太厉害,把自己顶了咋办?但手下都是一群P都打不出来的绵羊,他也不行,他这个部门别想出成绩,年终各个部门评比,他也悬。

 

大家看到这里,可能就更加混乱了,肖老师你想说啥?这么乱?

 

呵呵,我想和大家说,这些,都是正常现象,大家要正确对待。上面说的老板、主管、员工,谁都没有错,而上述的矛盾本身,也都没有错。都是合理的存在。

 

那我们怎么办呢?我这里给大家几点建议:

 

1、任何时候,努力学习和做事,都是对的,大家到了公司,先努力做事,争取早日成为技术骨干,拥有自己的核心竞争力。这是保证自己安全的关键,也是以后升职加薪的关键。

 

2、上述问题,在我们还没有取得任何成绩的时候,其实是没有意义的,大家无需理会,先做出成绩来。要让老板提防你,首先你也得有让他提防的东西啊,你说是不?

 

3、做出事情来,可能会升职加薪,可能也不会,不排除受到打压的可能性,建议大家遇到了,平常心对待,先看看呆的下去不?呆不下去,换个公司也无所谓,这时候,你前期的努力就体现出来了,一个做过事的人,和一个没有做事的人,面试时5分钟就能看出差距,面试官都是人精,你放心,你的水平他看得到的。

 

4、如果事情不好也不坏,老板既没有炒我,也不给我升职加薪,那就继续,也许我们的努力还不够,还不足以让老板重视,加油。当然,还有个重要的问题,你对这家公司需要的技术,业务是不是已经学完了?没有就坚持做事,学习,什么都学会,什么都能做,老板还看不到,叫做他瞎了眼,那个时侯再闪人,效果会更好。

 

5、当然,自古知兵非好战,我们也不是为了跳槽而跳槽,在公司一天,就认真做事,平时的态度也要端正一点,多说点公司的好话,觉得不对的地方,私下,记住是私下,给老板发封电子邮件,语气平和点,站在公司的立场上,帮老板改善公司的状况,老板会感激你的,这一来让老板认识到你的重要性,二来给老板吃颗定心丸,表示你还是支持公司的,老板会报答你,用升职加薪来报答你的。

 

6、不管公司同不同意,努力构建自己的不可替代性还是没错的,毕竟我们的寿命比很多公司都长,公司和老板不可能养我们一辈子,有了本事,到哪都能吃饭。因此,先做好自己。

 

7、当然,既有了不可替代性,又不让老板担心的员工,同时还不断帮老板提升工作的人,就要换个名字了,这种人一般叫做公司的“核心骨干”,或者干脆叫老板的“心腹”,如果你是老板,你会怎么对待这种员工?

 

其实,上面说了这么多,归根到底还是一句话,做好自己,做好每件事,我们在公司里面,不管是开发程序的研发人员,还是门厅的小MM,都是在做同一个东西,叫做“做事”。如果一个公司里面,每个人都能做好自己的事,同时帮助别人做好他们的事,这个公司又怎么会垮?老板又怎么会提防员工?

 

在公司里面希望有个好的发展,不让老板提放你,最简单的办法,就是做好自己事情,认同公司的企业文化,没有对公司的敌视心理,能自我调节各种工作压力。

 

呵呵,以上是个人的一点经验之谈,大家参考一下。

 

学生评论:

 

洛阳理工学院 王富涛(C/C++学生) :

我拍。。我拍。。。拍桌子。。讲的太好啦。。呵呵。感觉老师您太可爱了。。

 

湖南文理学院 张清山(Net学生) :

感觉有面向对象的影子,既要“封装”好自己,又要给别人提供很好了解自己的“接口”。当别的事物对自己产生了依赖,也就体现了自己的价值!肖老师,理解的对不?

 

文达信息技术职业学院 贺强志(Java学生) :

每个人都有阶段性目标(当然也各所不同啦),就像老师说的那样——要多思考。富有激情的做每件事,别让自己觉得很轻松。目标完成一个,在挑战下一个。你能说自己没有或一直没有核心竞争力嘛!~

 

期待(C/C++学生) 2009-08-04 23:44

受教育了!

肖老师研究方向果然广泛:技术、管理、心理学、房地产。。。,仅单就这片文章,更可窥见在文学上的造诣!

HOHO,佩服!


 

简述C和C++的学习历程

 

肖舸老师

 

总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。

 

一家之言,欢迎拍砖哈。

 

1、可以考虑先学习C。

 

大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。

 

C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。

 

毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。

 

因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。

 

2、学习C的过程中,一定要理解结构化编程思维。

 

为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。

 

这是现代工程化开发的核心和灵魂。

 

因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。

 

3、开始学习C++

 

C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。

 

不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。

 

现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗?

 

4、学习C++的深入技巧

 

C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是?

 

既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。

 

ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理?

 

学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。

 

5、学习应用开发

 

前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。

 

什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。

 

OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。

 

当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。

 

ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。

 

假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的?

 

6、学习MFC

 

学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。

 

呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。

 

其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧?

 

7、Win32API

 

其实Win32APi不难学的,因为虽然它很大,有很多接口,但不是必须的,我们真正做个简单的Windows应用,其实用不到这么多的。做个简单的Dialog,然后实现个功能,你遇到的接口函数,其实绝大多数,就是以后常用的了。把常用的记熟练,就ok了。

 

关键是,这个时候要通过WinMain方式,去理解Windows的事件机制,这是核心,其实说起来简单得要死。就是以前你的程序,由于没有系统支撑,很多事必须自己做,比如检查鼠标和键盘输入,你需要写个死循环,自己不断去看,而Windows说,这些事你不要做了,我来做比你好。你没事就玩去吧,我把和你相关的消息放到一个队列里,就是你的事件队列,你自己没事去找找看,有没有新消息来,有就做事,没事就玩好了。很简单是不?

 

      当然,Windows是多任务操作系统,有时候,我们的逻辑需要并发一些功能,比如说,我在等鼠标键盘消息的时候,需要再看看打印机准备好了没有,这里就需要理解并行计算了,这和语言无关,和操作系统无关,这是另外一个话题,这里不多说了,你可以自己找找线程开发的相关资料看。

 

看见没,为了学习好Windows编程,其实我们不仅仅需要学习语言,还要学习操作系统,并行计算原理,内存原理,可能有时候还需要学习网络通信,等很多知识,所以说,单凭学习语言,是成不了商用程序员的,一个合格的程序员,需要理解的东西,太多了,要广为学习。

 

当我们把Win32API,以及基本的窗口化程序设计理解了,就可以回到MFC继续学习了。是不是有点递归返回的意思?呵呵。

 

8、回到MFC

 

原来学MFC很难的,因为其封装了太多细节,很难理解透彻。不过还好,我们有侯老师的深入浅出MFC,去找本来看看,如何从Win32API的纯C编程,改变为MFC的C++方式,看这个最快,基本上前6章看完,已经会了,这里我就不多说了。

 

9、COM

 

COM、COM、COM,我最头疼的COM,呵呵。

 

COM就是一种远程过程调用,即你请求的代码是在另外一个进程中运行的,通过某种通信协议来回传递参数和结果。仅此而已。DCOM进了一步,服务者可以在另外一台计算机上。在公司开发中,大家可能各做一块,如果要合作,Windows下建议多使用COM。(我个人喜欢socket通信哈)

 

简单说,COM提供了一种机制,可以跨进程通信,甚至跨机器通信。不过,为了传递各种类型的参数,COM可谓是无所不用其极,它发明了智能指针,可以指向任何类型的数据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起作用了,还用到了ATL。

 

学习COM,要注意一个接口的概念。由于开发者是不同的人,调用程序和服务程序,可能不是同一种语言,OK,不能简单提供一个C或C++的.h文件来解答接口,因此,COM提供了标准接口,使用者在程序内部,以查询方式获得可用接口,进而以接口ID调用。很累人的。

 

学会了COM,就可以多理解一点ActiveX了,那么再学习一点dll(动态链接库)的知识,我们就已经可以写OCX控件了。一般说来,OCX控件是个很好的设计,哪都能用,一个软件的模块,最理想是开发成这个样子,比exe灵活。

 

10、没了。

 

按少林派说法,学了上述这些,其实已经算打过18铜人阵了,已经可以下山助明主,扫奸佞,扭转乾坤,解万民于倒悬了。

 

不过,关键是你通过上面的过程,是不是已经学会了学习的方法,再遇到新的东东,是不是已经不难学了?这大概就是武学中的悟性了,有了这个根基,以后只要慢慢修炼,估计20年后,可与天下英雄一较短长了。

 

呵呵,你说是不是?

 

呼呼,好累。

 

学生评论:

 

董志勇(Net老师) :

总结很好,现在太多学校、同学以上来就搞面向对象,Windows节目开发。或者JAVA里面就搞JSP。往往除了问题的时候都不知道怎么解决,往往要花很多时间来补最基础的东西。

面向过程都不懂,搞什么面向对象呢!

 

武汉交通职业学院 胡军(C/C++学生) :

谢谢老师,受益了!哈哈,我是学VC的,去年暑假开始学的,然后自己在寝室折腾了一个月。因为当时听说有VC,也有VC++,我想,学VC的话,那就不用学C++了吧?(我太懒,就想学个C),结果头弄晕了,又跑去蹲图书馆,总算把C++学的差不多了(像老师您说的一样,学了C,C++确实很好学)。现在在做MFC,也有模有样的。哈哈。

 

迷茫(C/C++学生) :

谢谢肖老师 这段时间一直在考虑怎么学C 要学到什么程度 很多人说C是做底层开发的建议深学软件开发还是重点学C++ 看来C还是不能囫囵吞枣的学 再次感谢

 

海南大学 张继兴(C/C++学生):

看了不少文章,我想这篇文章应该是很适合我了.

学了c,c++,又了解一点mfc.不知道下一步怎么走.

肖老师的这篇文章正好给了我方向

谢谢~~~

 

湖北大学 马刚(C/C++学生) :

今年刚毕业,在做C方面的开发,记得开始学习C的时候觉得C只能做些简单的工作,不知道在哪儿听说的用C语言开发的程序超过5W行就会出现很多问题,后来学了C++,java觉得类的作用很强大,呵呵,今天看了肖老师的文章收获挺大,其实很多东西不用类照样可以做好,只是自己要做的工作就多了。


 

IT业的职业细分

 

肖舸老师

 

在大本营看到很多同学讨论以后的出路,感觉到大家对IT业职业的细分还不是很了解,这里就我的经验,给大家一点参考,希望能帮到大家。

 

一家之言哈,欢迎拍砖和补充。

 

我在IT业很多年,也仔细分析过IT业的职业构成,就我的了解,其实IT业也在细分,大致分为如下几种:

 

1、研发,包括软件研发和硬件研发,就好比我们这个论坛大多数朋友,在一个公司里面完成项目开发,或者定制产品,一般说来,软件研发基本上就算产品的设计者和制造者,硬件研发,只能算设计者。因为后面还有生产环节。

 

通常研发岗位,包括RD,QA,以及配置管理员,架构师,小组长,项目经理,研发助理等,就是研究部分所有的职位。部门经理一般我没有计算在内,感觉部门经理管人,应该算管理岗位。不过有些小公司,部门经理和项目经理,甚至架构师,都不分,因此需要具体情况具体分析。

 

其中RD,就是我们说得最多的设计人员了,这个大本营的同学,以后估计大多数都从这里起步,当然,做QA测试的也不少。

 

RD这个词有讲究,就是设计和实施,是两个意思,设计,是决定一个东西怎么做,实施是把它做出来,我们刚开始,可能都是先做实施,慢慢走到设计,模块设计,系统设计等等,如果做得好,以后慢慢专门做设计,就是架构师了。

 

软件人员一般RD不分,设计者通常就是实施者,因为基本上程序敲完,产品也就出来了。硬件人员则不同,一般就是设计者,以及第一轮白盒测试的QA,自己测,当产品测试稳定,定型,就可以交给中试部进行产品测试,最终上线贴片生产。

 

QA这里面一般细分为软件测试和产品中试,像华为、迈普这类大中型企业,以生产硬件产品为主的公司,都有自己的中试部,中试部简单说,就是专门测试硬件的,比如各种静电测试,温度测试,跌落、震动测试等,为产品最终上线做准备。我想,大多数同学可能对软件测试熟悉,对产品中试可能不太熟悉,不过差不多就这么多东西。

 

软件研发通常还有个角色很重要,就是配置管理员,一般小公司没有这个角色,由负责的测试人员兼任,大公司会专门设置这个角色,并且这个角色还有商业秘密保全的功能。

 

我们软件人员开发的产品,在自己的机器上,一般叫测试版,只有提交到CVS或SVN等版本管理系统,才叫产品,测试部不是从我们手里拿软件去测,而是由配置管理员在中心服务器上,将软件产品从源代码编译成可执行文件,生成安装程序包,然后发给测试部,测试部测试完毕,返回测试报告,公司领导签字后,以后软件产品的发货,就是配置管理员负责发货。

 

大家明白了吧,这里面很严格的,在大公司,软件一旦投测,如果RD发现有个小bug,小公司可能打个招呼就改了,项目控制流程上看不出来,但在大公司,必须发文,说明上一版本作废,然后重新发测试申请,重新提交代码走流程,项目流程上就记录,废版一次,以后就是扣工资的依据。因此,大公司的程序员一般比较严谨,发版测试很谨慎,就是怕出现这类bug,这样的缺点是对市场的反应不够灵敏,可能客户提交一个bug,RD改只要几分钟,但是流程要走一两天,但是好处是产品质量有保证,每个人的工作结果都记录在案。便于管理。且程序外泄几乎不可能。

 

我以前有篇文章说,国外很多程序员,可能在一个公司工作一辈子,都没有见过自己服务的计算机,就是这样的,RD都在终端工作,自己本地测试好了,提交到中心服务器,由配置管理员负责最后的编译和提交。

 

2、市场,这大约是最多的,往低里说,电脑城的谈单员,就是市场,往高里说,华为、Cisco的地区总裁,其实也是市场角色。市场根据个人经验,又分为Sales和Marketing,前者是简单的客户成交服务者,即客户准备购买,完成买卖手续,协助送货什么的,Dell那边的电话销售小姐,大约就是这个角色,由于Dell是定制,因此她们还需要下订单。后者就是属于较高层级的销售人员了,可以引导市场,引导客户,促成交易。

 

一般说来,市场其实也是个技术活,很少有朋友是天才,上来就可以做到Marketing的,都是从Sales先入手,慢慢练,这个过程,可能比一个程序员走到架构师还难,很多销售人员,做一辈子,都做不到Marketing的,不信,去商场看看售货员,公交车的售票员,都是Sales。

 

这里说说广告,广告我的理解,就是Marketing的一个分支,吸引眼球,吸引客户,促成交易。

 

我们经常说,每个行业都有英雄,其实市场中,Marketing就是英雄,一般说来,走到这一步,就可以站在这个行业的巅峰,出去讲课,拿最高的佣金,享受猎头挖角的快感等等。不过,很难的,有句话请大家注意,“这个世界上,99%的销售人员,都不知道自己在干什么,说的就是这个问题”,那1%才是Marketing。

 

通常情况下,开发人员瞧不起市场人员,总觉得对方是耍嘴皮子的,但市场人员同样也瞧不起开发人员,总觉得这帮书呆子不创造价值。呵呵,大家别生气,大多数公司,把研发单位,看做最大的成本单位,只花钱,不创造价值的,虽然我们设计了产品,但公司的财务上,这部分是没有价值的,产品价值是在销售出去以后才体现出来,因此,财务上看,研发部门总是赤字一片。

 

其实,真正厉害的市场人员,我们研发人员还是要尊重的,要知道,一个研发人员要成名成家,其实很容易,随便什么东西,攻克一个难点,出几篇论文,出一个产品,这个研发人员就可以在公司里面牛起来了,一个研究院,至少20%~30%都是这种牛人。但是,市场要能做到Marketing,前面说过,1%,可能都不到,你说这帮人算不算精英?

 

3、技术,终于说到技术了,这是最奇怪的一个职业,本来没它的,但就是出现了这个职业。其实技术在国外,应该叫做Service,即技术支持。

 

技术,往低里说,电脑城的拼机器的,也是技术人员,通常由谈单员兼任,谈单员通常由大学生勤工俭学兼任,呵呵,一起练了。再往上,客户那边送货,把包装拆开,技术,联网,技术,调试网络,技术,再大了,这里说句话,希望大家不要见怪,网络管理员,其实也是技术。

 

以前有段时间,MCSE很流行,我也去考了一个的,但是,后来发现,研发单位招人,根本不看这个,因为这个学习的是如何操作机器,而研发是设计机器以及操作模式,让别人操作。CCIE也是啊,因此,当时很多说法其实是有点误导,说学了这些证书可以不上大学,成都还出现过一个娃娃,高三毕业考过了MCSE,就不上大学了的事情,现在不这么说了,因为毕竟上大学才是王道。光靠这个证书,是吃不了一辈子饭的。

 

在华为,迈普,技术是一个专门的职业,负责给客户送货,因为他们出路由器,安装配置有一大堆事情,电信局又是大牛,人家才不会去管这个事呢,厂家来人解决。顺便说一句,电信局守机房的,也是技术。

 

原来没这个职业,就要研发人员兼任,因为这毕竟是个技术活,不过,久了研发人员不干了,天天出差,还做什么研发,老板也不干了,因为研发人员工资高,在大家看来,连连线,配置几个IP地址,这不复杂,如果用研发人员干,成本太高了。

 

喏,就这样,一个独有的职业,技术,在IT企业被定义出来,这部分主要找一些较为低端的人才,二本啦,三本啦,自考啦,总之,我看见很多年轻的朋友,希望进入IT业,没有本钱,不会做老板,也进不去一些大型公司的门,一般选择,就是在电脑城做技术起步。

 

现在很多系统集成公司,他们定义的项目经理,和研发单位的项目经理不太一样,其实也是技术,这类公司一般都是经销商,不是制造商,自己没有产品,靠代理别人的产品再销售来获取利润,一般说来,渠道这个词,就是指这类公司。这些公司的技术人员,主要工作就是看,我代理了哪些产品,哪些产品利润高,我怎么给客户报方案,把利润高的产品设计进去,等等。

 

这里面其实也有设计工作,但是,显而易见,这部分设计工作和前面的研发架构师的设计,是两个层面。

 

当然,这里有两个特例,一个是目前很多中小型,做网络应用的架构师,他们也有这个设计部分,这些企业一般都是项目制,没有自己的产品,每一单都要定制开发,这类和前面的系统集成设计有一定类似,因为很多项目包括了设备采购什么的。

 

另外一个特例就是系统集成设计,通常就是Marketing的活,因为自从IBM提出卖服务的概念以后,给客户交钥匙工程成为主流,大家都说自己是解决方案提供商,因此,Marketing通常就是采集需求,利用本公司产品或者代理的产品,组成解决方案,一体化提供给客户。

 

因此,从职业发展途径,技术一般说来,也可以走到Marketing。通常Marketing有两个产生渠道,Servicer技术,或Sales销售。

 

当然,这里也看出技术这个职业的短板,因为Marketing毕竟是销售为主,因此,销售能力占主导,技术人员由于长期和机器打交道,因此,恐怕也是机器脸居多,卖东西能力很差,因此,技术能转成Marketing的,更少。

 

当然,也有技术人员转回来做研发的,不过,也很少,起码我没有看到什么成功的案例。

 

4、管理,这里就简单说啦,一般说来,管理本身是抽象的,并不是IT业的管理,一定只能从IT业产生,或者一定只能管IT业,IBM的总裁郭士纳,就不是IT业出生,管理的英雄们,例子就太多了,他们有个统一的称呼,职业经理人。

 

前面说的几种,总的来说,都可以最终成长为管理,不过,管理也是最难的,一来人是最复杂的,不像机器那么好打交道,二来,管理要看运气,单纯说水平不行,得老板看得上才行,你说是吧?

 

因此,研发,销售,技术,要想成为管理,这个成功率,一般不高于1%的,不信,数数你们公司管理人员和普通员工的比例,或者,学校里面老师和学生的比例,虽然这不准,但基本能说明一点问题。

 

由于我们这个大本营不是管理论坛,管理就不多说了。

 

5、生产,这个岗位其实各公司都有,不过大多数老板不承认,员工也不愿意承认,呵呵。

 

大型公司,如华为、迈普,Intel等,以生产硬件产品为主的,基本上都有生产部,记住啊,这个生产部很重要,生产,仓储,物流,基本都在这一块。

 

千万别小看生产,目前生产线上的工人,由于要开贴片机什么的,基本上都要大专学历,还要培训的,我不想明确建议,不过,有些目前找工作特别困难的同学,不妨考虑一下这类大型企业的生产岗位。

 

大型制造业,如美的,海尔等,他们很多管理层都是生产线上下来的,生产线上也不都是工人岗位,很多生产工艺师,工装设计师什么的,都需要设计这门工作,如果一个学历较高的人进入这个部门,只要自己肯努力,其实也很容易出头,毕竟周围的竞争对手太低了,呵呵,比起研究院来说,要容易得多。

 

6、其他,这就太多了,老板就属于其他了,呵呵,创业也属于其他,由于这部分不带普遍性,就不多说了。各级行政人员,如财务,秘书,都算其他吧。

 

 

 

上面是我的一点总结,大家可以参考一下,到招聘会时,也可以按照这个分类问问面试官,你们这个职务,是研发职务还是生产职务,呵呵,可能某些小公司的面试官会被你问住。

 

学生评论:

 

杭州电子科技大学 邓晓华(C/C++学生):

哇,这是我想看到的,老师辛苦了!

对天IT职业的分类,听老师这么一说,有了一个初步的了解了。但是我现在还有个问题得麻烦老师:对于经常谈的计算机专业学生的发展方向,我一直不是很清楚,比如大家说网络方向,还有什么往底层发展,做嵌入式开发等等。对于这些我一直很糊涂,所以想请问老师:计算机专业学生的发展方向一般分几类?又该如何选择发展方向?

说来惭愧,这些问题,原本应该是我通过网络查询等方式就可以解决,可是我尝试过,发现现在依然糊涂。也许和我换学校有些关系,我是07年上大学,前两年是在一个学校读计算机科学与技术专业。今年通过考试,考上一个稍好点的学校,不过现在专业换成软件工程,我对校方的培养计划也不是很清楚。

虽然惭愧,可是依然希望老师能于百忙之中抽出一点点时间,能够说一些相关的,相信这些对其他同学也很有用,学生在此先谢谢拉!

 

邱沧淮(C/C++学生):

谢谢,解惑了~1本以下的当自强!我连3本也算不上,不过我不灰心,努力提高自己,有一天我也会向他们看齐的。收藏了!

 

上海外国语大学 张吉(PHP学生) :

感觉自己不适合研发,本想离开自己喜欢的IT业,但看了楼主的文章,发现出路还是很多的,比如技术和销售~

 


 

选择技术还是选择销售?

 

肖舸老师

 

这是一位同学给我的留言,咨询方向选择的问题,最近被同学们问这类问题很多,感觉有些代表性,因此这里统一作答。

一家之言哈,欢迎拍砖。

 

原文在这里

========================================

肖舸老师你好:

       看了您对那么多人的评论之后,觉的您的建议很中肯,所以想向您请教。

 

       我去年大学毕业(专业是通信工程), 觉得自己虚度了光阴,而且自己性格有点内向,觉得该从事技术,所以我毅然放弃了应届毕业生的优势,找了家培训机构去学习java和.net开发。经过一年的学习,发现自己对技术不是特别感兴趣,没有专研精神,觉得自己应该很难在技术上达到一个很高的高度。因此,我想从事与业务相关的工作,但是又觉得自己学了那么久技术,放弃又太可惜了。而且,我还不知道自己在销售这方面能不能做好。这让自己更加迷茫了!我该如何在两者中取得一个平衡,又该怎样选择工作?我已输在了起点,不想在终点时还是落后别人一大截。未来我想好好规划,好好度过,不管是为了自己,为了父母,还是社会。我可以忍受平穷,但是不能容忍自己平庸。

 

       前方的路到底该怎么走?自己花费了那么多时间与金钱是否值得?未来自己能否达到自己想象的高度?我完全迷失了。在有几个月我就要培训完了,将要再次找工作,再次面临抉择。所以我恳切的想知道老师的建议,非常感谢。

 

                                      向所有CSDN老师致敬

我的回答

 

========================================

 

这位同学你好:

 

从来信中,感觉问题比较多,我试着讲一点,你尽量参考吧。

 

我先讲个故事吧,是古代的一个墓志铭:

 

吾表兄。

年四十余,始从文。

三年不中。

遂习武。

校场发一矢,中鼓吏。

逐之出。

改学医。

自撰一良方,服之,卒。

 

好笑不?这个人可以说是一类人的代表,就是做事情缺乏恒心和毅力,我们说做事情靠天分,但是,我个人的理解,恒心和毅力也是必要的,我还记得小时候学习的一篇课文,讲一个小猫去钓鱼,结果它一会儿捉蜻蜓,一会儿捉蝴蝶,总是钓不到鱼。不知道你看过这篇课文没有?

 

我看了你的信,你说大学没有学习好,虚度了光阴,现在培训班,觉得自己缺乏钻研(注意,不是专研)精神,不想做技术了,想做业务,我根据你的文字,理解这个业务就是销售工作。但是又觉得自己这么多年在技术上投入过多,舍不得。

 

这里我说几点:

 

1、不管选择技术和销售,其实都是可以的,这个世界有很多行业,每个行业都有自己的英雄人物,你选择任何一行都有道理,我支持你选择的态度。

 

2、不管是技术还是销售,其实都需要钻研精神的,技术上,可能针对一个问题,钻半天,销售上,针对一个客户,也需要不断钻研,去仔细研究客户这个人,他喜欢什么,不喜欢什么,然后投其所好,但是,提醒你,销售上,不会针对每个客户都有一本教科书,因此,钻研起来更加看天分,很多时候,你怎么了解一个客户的喜好,都是一个大难题。

 

3、感觉你想转行的目的不明确,有畏难情绪,好像主要是因为技术太难,就不想学,想转行,我认为这不好。任何一个行业都有风光的一面,也有艰辛的一面,你因为害怕技术艰辛,就跑去转行,那你想想,哪天感到销售艰辛,又转行,是不是就变成上面的“我表兄”了?那一辈子是不是就事事无成?你想过这种生活吗?

 

4、但另外一方面,你觉得自己技术投入很多,选择的时候舍不得,我也不赞同,男人大丈夫,死就死了,怕个P啊,选择讲究的是决断,一旦选定,“虽千万人吾往矣”,做事情不要瞻前顾后,患得患失。

 

5、永远不要因为怕什么而改变自己的生活,你选择职业,就是选择一种生活方式,但是,如果你是因为“怕”技术上很苦,那么,很不幸,我得告诉你,你到销售上会更“苦”。销售是一门很辛苦的行业,我做过一点点,这么说吧,以常规的学生思维,恐怕很难坚持下来。

 

曾经有个小姑娘,问我怎么才能找到工作,我想了一下,说你把门关上,她就关了,然后我给她一面镜子,让她对着镜子把一段话念7遍:“我就是一个要饭的,我今天必须把饭要到,不然我明天就会饿死!”,她当时脸涨得通红,不过还是坚持念下来了,一周后,她找到了工作。这个故事你能体会到什么吗?找工作就是销售,销售的是自己,你可以先试试,如果你找工作很容易,证明你有销售天赋,可以考虑从事销售行业。

 

6、任何一个行业,都需要恒心和毅力,技术如此,销售尤其如此。日本有个销售大师,叫原一平,是推销保险的,他跟踪一个客户,跟踪了十五年,你猜怎么着?那个客户死了。

 

如果你是他,会不会就此放弃?客户都死了,十五年心血白花了,是不是很伤心?

 

他不是,他还是坚持去,然后那个死者的儿子说,你不用说了,我跟你买,然后跟他签了一份巨额的保单,他赚了很多钱。

 

这个时候你看见这个人,会不会觉得他很成功?但是,你看见了他十五年的艰辛吗?

 

好,现在问题出来了,如果你转行销售,你可不可以跟踪一个客户达到十五年?

 

7、任何一个行业都有其风光的一面,也有其悲哀的一面,技术,就要忍受无穷无尽的寂寞,别人玩的时候,你不能玩,别人happy的时候,你得去看书,这是职业特点,IT业更新换代太快,不努力学习,很快就被淘汰。

 

我三十岁过生日的时候,和朋友喝酒,别人问我有何感想?我想了一下,说了一句很狂的话:“二十岁到三十岁这十年,勤奋这两个字,我背得起!”,大家都不说话。因为后面有句话我虽然没说出来,他们都知道,我十年没有看过电视。因此,如果你能坚持十年不看电视,每天晚上看书的话,我想,你的技术一定会很厉害的。

 

做销售呢,也差不多,天天晚上陪客户,看似很风光,但是,你要注意,这是陪别人,不是你的生活。

 

我也见过另外一个销售高手,有天晚上饭馆出来,跑到我那里哭,(先说明,那会他年收入十几万),可他说这真他娘不是人过的日子,然后就吐,吐到最后,吐出血来了,我也吓到了,打120把他送到医院,一检查,胰腺炎,再晚送过去半小时,人就没了,这是医生告诉我的。

 

这就是销售,不是说销售一定是喝酒吃饭,但是,中国的市场,是关系营销,必要的勾兑,是少不了的。

 

上面两种生活,你愿意选择哪种?

 

       其实仔细想想,你会发现,人生无坦途,很多东东,不是想象中那么美好,但是,也不一定,只要你找准一条路,坚持做下去,做到这个行业最好,你看到的,就全部是这个行业最光辉的一面。

 

但在这之前,你必须先忍耐,积累。根据大多数人的感觉,除了投胎投准一点,其他时候,人生一般没有捷径。

 

你说呢?

 

学生评论:

 

ZheJiangUniversity 晓磊(Java爱好者) :

我觉得肖老师的话很中肯,都是肺腑之言,,用心良苦,说实话现在哪个行业想混好都难,我们往往只看到少数人成功的一面,却没看见他们背后的付出,也没看见更多的失败者,我们需要的是一种专注的精神,平和的心态,不要浮燥的心。

 

昆明理工大学 李俊(C/C++学生) :

被肖老师的那句“二十岁到三十岁这十年,勤奋这两个字,我背得起!”感动了,的确很多时候是我们自己的毅力不够,坚持一个自己的方向就好!大家都加油!

 

河南成功学院Gwolf团队 赵鹏(C/C++爱好者) :

“选你所爱,爱你所选!”

我们大学创办人题词,我铭记于心……

今日,又在肖前辈这里遇到相同话题。是呀,人的选择有很多,也因为选择太多,才更容易放弃。我也好几年没看过电视了,好几年没有玩网游了。一个帐号玩了两年还没过25级……

路漫漫,其修远矣……

 

每隔几日,便来读读前辈文章。字里行间就两字:朴实!

相比之下,晚生深感惭愧……

 

年轻人容易浮躁,但年轻不能成为浮躁的理由。

 

tongshou(C/C++爱好者) :

"...我十年没有看过电视.."

肖老师,您真是个超人!这都能做到,还有什么做不到的!

您的这篇文章写得很棒,相信会让不少人、尤其年轻人从中受益!

 

山东科技大学 李宗鹏(Net学生) :

感觉老师这句话太精辟了:人生无坦途,很多东东,不是想象中那么美好,但是,也不一定,只要你找准一条路,坚持做下去,做到这个行业最好,你看到的,就全部是这个行业最光辉的一面。


 

这么多技术我该怎么学

 

杨中科老师

 

一、这多东西啥时候能学完?

 

现在IT新技术日新月异。就常用编程语言而言,有c/c++、汇编、java,c#、Python等;操作系统平台有unix/linux,windows系列;开发工具有VC、VisualStudio2008、Eclipse、NetBeans等;每个大平台下,还有很多的的方向:如网络、数据库、脚本、HTML、动态网站、游戏开发等;有人还在学Dreamweaver做网页、Flash做动画、Photoshop做美工、3DMax做三维动画…………是的,我们什么都想学。恨不得把所有的知识统统都塞到肚子里去。看到什么,想学什么!

 

今天看这VC的书,明天又看Java,后天又看C#,东搞西搞!看到别人做网页。自己兴趣了来了。好,学html语言,我也做网页,听说做网页要会“网页三剑客”,所以又想学Dreamweaver、Flash。后来开始知道有JSP、PHP、ASP.NET做动态网站这玩意儿。也想去学,学学学……

 

这是几乎所有在校大学生的通病。但是,这不是坏事,甚至可以说是好事。说明了你“求知欲”高!总比那些,生活没有激情,整天知道泡妞、上网、打游戏、混日子的强。

 

但是如果你今天想学这个,明天又想学那个。这样你就能永远徘徊在技术的门外。很多人都有过或者正在经历这样的苦闷日子:总觉得有“太多东西”要学了,然而人的精力是有限的,总有永远学不完的感觉,所以心理特别急,整天惶惶不可终日,不知道先要学哪个,一会儿拿起这本书,一会拿起那本书,折腾了几个月,突然发现自己什么都没有学到……

 

每一个大方向如果没有上几年的学习,很难能学习出什么来。但程序设计的最根本的东西是相同的。所以我们学习要抓根本。俗话说:通一理,融百里。

 

学程序设计就像习武一样,如果内功学的好,其他功夫就很容易上手。君不见《倚天屠龙记》中的张无忌练了“九阳神功”8年,练“乾坤大挪移”只需12个时辰吗?

 

习武之人,谁不想在“江湖”上扬名立万,谁不想成为万人敬仰的大侠?大侠之所以能成为“大侠”,当然有他们的看家本领。狄云的“神照神功”,金世遗的正邪融合的“乔北冥内功心法”,张无忌的“九阳神功”,段誉的“六脉神剑”,令狐冲的“独孤九剑”,哇,太多了...

古人历经千辛万苦才能找到这些“武功秘籍”。我们现在这些后辈,比起古人来说:简直太幸运了。去书店,各种各样的心功心法,剑法,拳法,应有尽有,看得你眼花缭乱...

       你选什么呢?今天练“六脉神剑”几式,明天去学“降龙十八掌”几招,后天又去练“发暗器”,这样何时才有个尽头呢?你说,你什么武功都会,但是“形似而神不似”,不得要领,不够火候。一上擂台,就被别人一掌打趴了。试问哪个软件公司敢要一个号称任何编程语言都会,而是每种语言只能写出个“hello world!”的程序员,你不被人家扫地出门才怪。

 

二、学**还是学**更有前途?

 

看了上面的话,有的同学已经开始烦了,“知道了知道了,不止一个像你这样的所谓的‘老前辈’跟我说过‘学什么都一样,思想才是最重要’的大道理,可是你们站着说话不嫌腰疼呀,现实是有很多技术需要学,比如做Web开发就有JSP、PHP、ASP.NET等好多方向,我总得选一个吧!到底学哪个有前途呢?我必须要选择一个有前途的,选错了就麻烦了。”

 

其实像“学**还是学**更有前途”的话没意义,因为“选择JSP还是选择PHP”的前途的差别不像“选择英语还是选择日语”的前途差别那样大,不存在“选错方向”的问题,因为都是相通的,你也不能保证你毕业以后搞的就是你学的那个方向,更不能保证你靠你学的这点东西就能吃一辈子。比如我上大学的时候一直在钻研是Delphi语言,可是毕业校园招聘的时候我照样在Java职位的考试取得了第一名,而且工作以后经过简单的学习就掌握了Java语言,并且后来还写了三本关于Java语言的书;再如我毕业后两年多的时间一直在用Java开发,后来公司要做一套基于.NET的产品,我只用了一个礼拜熟悉了.NET体系以及C#的语法,然后就开始进行开发。

 

不过就像上边说的“做Web开发就有JSP、PHP、ASP.NET等好多方向,我总得选一个吧!”这个问题是非常实际的,因为只有先学一个才能深入这个方向,把这个方向学通了才能想以后“一通百通”。因此我的建议就是学校教过什么语言,你就继续深入学习这么语言,而不要去问“这么语言有没有前途”这样的傻问题。尽量不要去学一门所谓“有前途”的新语言,因为你去学一门新语言就要把很多精力耗费在语言、语法本身,而耽误了编程的实战,而以一个已经学过的语言来学习的话,起码语法本身不用再去学、开发工具本身不用再去熟悉,只要研究怎么使用这门语言开发有用的程序就ok了。比如大部分同学都学过C语言(有的学校直接开了C++的课,但是C++的面向过程编程部分还是C语言),所以咱们就开了《C语言也能干大事》的课程,让同学们把精力放到学以致用上,而不是学“有前途”的新语言上,这也是这个思想的一个体现。

 

举几个例子。咱们如鹏网的《计算机专业职业发展测评系统》是我用PHP开发的,但是在这之前我从来没写过PHP程序,但是我以前写过JSP、ASP的程序,因为写网站程序的原理都是相通的,只是语法不同而已,因此我只用了几个小时的时间熟悉了开发PHP用的工具并且快速浏览了一下PHP的语法,然后用半天时间就开发出了这个测评系统。想像一下一个整天在今天学JSP,明天学ASP,后天学PHP,大后天仰天长叹“到底学哪个有前途”的人能用半天时间学会一门新语言吗?

 

我大学时有一个同学,他看我当时Delphi学的比较好,写了很多程序,他就说他也想学软件开发,让我教他Delphi,可是我们专业前一个学期已经开了PowerBuilder的课,因此当时我就建议他还是继续深入学习PowerBuilder,用PowerBuilder写又实用价值的东西,而不是像上课那样写HelloWorld的程序。当时Delphi还是如日中天的流行的编程语言,而PowerBuilder则市场占有率比较小,他就说不想继续学PowerBuilder,因为PowerBuilder没前途,我就给他讲了“一通百通,从自己最熟悉的入手”这个道理,然后他就踏实的深入研究PowerBuilder起来,到了毕业的时候他已经能用PowerBuilder写非常复杂的程序而且还学习了用PowerBuilder写Web程序。毕业后没多久就应公司的要求用Delphi写程序,他只用了不到一周的时间学习了Delphi,然后就写出了一个符合公司要求的系统,当时他就给我打电话向我报喜。前一阵子我听说他已经开始指导一些新员工用Java开发一个中型规模的企业级系统了。可以说他的成功就得益于“一通百通,从自己最熟悉的入手”这个原则。

总结一下,不要管“哪门语言好就业、有前途”,因为那些“好就业、有前途”都是纸老虎。尽量不要学新语言,从自己最熟悉的语言入手,深入研究,出山后你就是被用人单位争抢的红人。

 

三、企业里都需要什么方面的才能?

 

这个要视用人单位的要求而定了。你现在还没有毕业,也不知道未来要面对什么样的岗位。因此建议大家在上学期间不要偏科,所以的课程都要好好学,学好专业课,培养自己的“内功心法”,然后进入一个大公司,那么大公司自然会为你安排一个人才培养计划,在工作的环境中学习就更有目的性。

 

山西大学 张瑞(C/C++学生) :

真心的感谢这里的每一位老师,在这里可以学到贴近职场和应用的许多知识,这些都是在象牙塔里学不到的。不过我们也应该珍惜在校园的这些自由的日子,可以有充裕的时间学习基础理论知识,没有那么大的经济和心理压力。

认真的做好自己每个阶段该做的事情,戒骄戒躁,踏踏实实的一步一步往前走。我觉得这就是很多过来人都在告诉我们的道理。

 

四川大学 李川(Net学生) :

...狂顶。。。

老师说得太好了。。。

我身边就有不少像老师说的那样的同学。弄得我也心里有点小慌。还好我定力好。坚持C#不动摇。现在更是坚定了我学习C#的决心。

一定要推荐同学们都看看这个文章。

太谢谢老师了。

HOHO~~~

 

吉首大学 邓嘉(C/C++学生) :

谢谢了,这个问题在我心中好久了。

我本来的想法是:先花一些时间,了解几门语言,然后在其中找到自己打算深入的一门。再一门通,百门通。

现在看来,还是老老实实地看我地C吧~~~~!

 

大连海事大学 文星(Java学生) :

说出了大学生的通病,我大四了深有体会,希望看到这篇文章的同学们,能专一了哈哈

 

北京理工大学 苏建学(Java学生) :

很有感触,因为我自己就是那种什么都想学,但是什么都深入不了的那种人。我曾经看过C++、Java、C#的书,里面的基本语法感觉只要半天就能熟悉了,但是要想深入学习感觉就找不到方向了。所以到现在为止也没能学好任何一门语言,看来我真的该静下心来好好研究一门语言了!


 

金融危机下的职业思考----答一位同学的问题

 

肖舸老师

 

进入大本营以来,发现部分同学的思路有些片面,思考问题有些绝对化,带有一些普遍性。这里借着一位同学的提问,谈一点我的看法,希望能帮助大家理清思路,看清未来。

 

还是那句话哈,一家之言,欢迎拍砖。

 

这位同学的问题如下:

 

肖老师,您好!很敬佩您懂得这么多的知识,掌握这么多的技术。我是一个即将上大二的网络工程的男生,现在有一个和我的努力方向有管的问题,使我感到迷茫:我是努力考研还是按自己的想法来做?具体的如下:由于金融危机,大学毕业生就业不景气(我上的是个独立学院),所以我父亲让我考研以便将来可以有一份稳定的工作(我父亲就职于联通公司),当然我也乐意在考研上下一番功夫,但是分歧在于我还想在大学期间多学些东西,比如:CCNA,建站技术,Linux网络。但我父亲反对,说是我应该专心考研,其他的都可以不要。可是,得尊重客观事实啊,努力了,不一定100%就能上研啊!学点东西不至于没考上,反而落得一场空。当然,父亲也是为我好。您认为我的计划合适吗?或者说我的职业规划对吗?补充一下,我对计算机室很有兴趣的!从98年就开始接触了,这个专业也是我自己选的。希望得到您的帮助!

 

我的回答如下:

 

首先,感谢这位同学的表扬,说实话愧不敢当,我并不是你想象中那么博学,仅仅是日常工作和生活中,多看一点书,多想一点问题,能对某些问题提出一点自己的看法而已,你要愿意,也能做到的。这不算什么。

 

在你的问题中,你有一个大前提,就是金融危机,导致就业机会偏少,我个人认为,其实没有必要这么悲观的。你的问题让我想起了十年前,98年到2000年的经历,估计你那时候还没有考虑到就业问题,不过当时我可是身历其中,现在想想,其实当时有很多想法也不是很正确。

 

当时,情况应该比现在还难过,98年开始的金融大风暴,把整个东南亚的经济打得一塌糊涂,泰国、新加坡等几个国家都差点破产。工商业更是一片哀鸿遍野。当时IT业还勉强可以,因为新兴的网络科技,从Yahoo开始带动的网络公司热潮,毕竟还算一片利好的消息,但随之而来的2000年,网络泡沫破灭,IT业也受到了沉重的打击。

 

当时记得上网,天天看的都是网络公司被收购,倒闭的新闻,最后都习惯了。你可以想象,我作为一个IT业的软件工程师,心情可想而知,当时我也有点迷失自我,跳了几家工作,都感觉不尽人意。人有时候都有点栖栖遑遑了。

 

不过,过了十年,现在回顾过去,其实也就那么回事,经济好,生活会好点,但也没有好到随心挥霍的地步,经济差,不管怎么说,人吃饭还是吃得起的,可能顿顿下馆子不够了,不过在家做做吃,也不会饿死,仅此而已。

 

经过这一轮阵仗,我感觉我们这一批程序员心理素质都还可以了,其实金融危机也没有那么可怕,还有,其实不止我们,大家当时都不喜欢金融危机,因此,你看看各国政府都在想办法救市,这个不用你我这些老百姓操心,其实国家和富人们更怕金融危机,他们损失更大,因此,不会没人管的。

 

从你的信息,你现在才大二,到大四毕业,还有两年,我想,这一轮金融危机,两年后,怎么都该有个结果了,不会一直持续下去,因此,你以金融危机作为以后找工作困难的理由,我其实是不同意的。

 

人的一生是很长的,你以后至少还有接近40年的职业生涯,这次金融危机,可能仅仅是你这一生遇到的第一次而已,以后还多,不能因为可能发生金融危机,就悲观,就说人生没有希望,我觉得,只要自己本事在身,金融危机下,还是有老板会需要人才的,找工作,不会很难,甚至,真正有本事的人,由于大量的公司,都生意不好,养不起闲人,会强制进行优胜劣汰,无形中,可能工作机会更多也是有可能的。

 

事实上,我从去年到今年观察了一下,我们国内除了专门做外销的一些制造业,航运业,在金融危机中受到很大冲击外,其实中国国内本身,并没有受到多大损害,反而国家还拿出4万亿拉动内需,开始家电下乡补贴工程,其实要是明眼人,都能看出目前国内的经济态势,其实比国外好。

 

还有一个,这和中国人习惯有关,美国人,很多欧洲的人,他们的习惯和我们不一样,他们主要是借贷消费,其实这次金融危机就是他们贷转贷造成的次贷危机,由于大多数美国人没有很高的储蓄,反而分期付款欠下很多债务,一旦有金融危机,他们收入一旦断绝,会立即破产,被银行强行收回大多数分期付款购买的财产,如房子,车子等,对他们个人经济造成了巨大的损害。

 

而中国人,至少我们上一辈人,大多有储蓄的优良传统,家家户户其实都有储蓄,换而言之,中国家庭的享受程度可能不如美国家庭,但是中国家庭的经济健康程度远高于美国家庭,目前中国家庭最大的负债问题,可能就是房贷了,除此之外,一般的家庭没什么负债的,因此,很难像美国人那样家庭破产,最多过点苦日子而已。

 

我说这么多,就是想告诉你,金融危机没有你想象那么可怕的,生活品质可能有下滑,但是,不会饿死的。过几年,经济好点了,再享受就是了。

 

那么,我们回过头来看看你的问题,其实你的问题和金融危机没有多大关系,是一个简单的职业道路选择的问题,考研还是毕业就做工作。

 

这个我的理解,见仁见智,都可以,考研,前期投入大点,后期回报高点,但时间长,毕业找工作,前期投入少,后期呢,本科毕竟没有研究生发展潜力大,不过,可以快速挣钱。

 

而且这两个不矛盾,考了研,毕业也得找工作,研究生找工作比本科生有优势,但也不是绝对的,研究生不好好学,找不到工作的也有,收入不如本科生的也很多。

 

本科生呢,不好好学,也找不到工作,好好学的,找起来也不是那么困难,毕竟,这个社会提供给本科生的工作机会,从数量上说,远远超过研究生,而且,工作几年,还可以考研进修,也不是不可以,我很多朋友都是工作2~3年以后上的研究生,这些人,普遍学习的效果好于大学直接上研,因为他们有一定工作经验,有了一定的思考了。

 

我觉得,你家里要是经济还可以,不急着要你出来赚钱养家,你可以考虑先读研,如果经济不太好,就直接找工作算了,先养活自己吧。

 

另外,什么事情都别绝对,准备考研了,但遇到好的工作机会,也要把握,一个本科生进到华为或者IBM、微软等大公司,可能收入比其他公司的研究生还高,不准备考研呢,实在找不到工作,回来考研,作为第二选择也不坏。别太执着了,随时注意调整自己的思路更重要。

 

不过你的话题有个东东我不太同意,你的话:“但是分歧在于我还想在大学期间多学些东西,比如:CCNA,建站技术,Linux网络。但我父亲反对,说是我应该专心考研,其他的都可以不要。”我觉得这是你们父子俩没有沟通好,其实这些技术的学习与考研不矛盾,甚至像Linux网络,本身就可以作为研究生的研究方向,还是那句话,做事不要绝对化,万事都是相通的,你完全可以在准备考研的时候,学习这些技术,也许,这些技术的熟练还成为导师选择你的一个亮点呢。

 

但关键是,不管是考研,还是找工作,你现在要把学习弄好,不管学什么,钻研一点,学出本事来,本事不够,找工作找不到,考研也成问题,如果考上研究生,不好好学,出来也可能找不到工作。

 

所以,今天我回你这篇帖子,想和你说,你的问题,金融危机,考研,找工作,学习方向,其实都不重要,最重要的是,不要把这些作为自己躲避学习的借口,专心好好学习,做学生,就做一个专业的学生,本职工作做好,那样,你可能两年后,选择权会大得多,而不是像今天在这里患得患失。

 

你说呢?

 

学生评论:

 

重庆邮电大学移通学院 小溧(网络管理学生) 

谢谢肖老师的指点,我知道了眼前的才是最重要的,考研和学习技术,嗯,或者可以用邓小平的话来讲叫做:两手都要抓,两手都要硬。

 

黄海峰(网络管理爱好者) :

非常有道理。。。当初没有大学老师教我这些处世道理,所以都是自己胡乱摸索,但这也是一种人生磨练。。。我想那位同学只是比较紧张自己的前途而已,像我一样做一天和尚撞一天钟的人上学时就没有如此压力,找不到工作时我也是努力自学偶尔看电影调剂,找到工作了就从工作中学习做人做事。我总是想,我一直有努力学习,如果始终找不到工作,饿死也不会只我一个,在关于就业问题的方面我很乐天,但是讲到感情问题就惨情了,内向型it人对自己相貌事业皆无甚自信,不敢主动结交漂亮女生,害怕被耻笑,不愿结交恐龙型的,害怕消化不来,没有刚刚好的,因为it人环境严重局限,可供选择的女孩极其稀罕,人的健康是多方面的,情感方面一直很缺失,身边常常光顾按摩院的同事大有人在,这样的生活貌似也很不健康,肖老师能否在这方面点拨一下像我一样很困惑的it人?谢谢。

 


 

简述如何书写工程化的简单代码

 

肖舸老师

 

在坛子里混了这么久,看了很多同学的代码,感觉到大家的代码,学校里面的书生气有点重,对于细节考虑不够,有时候,感觉和吃了颗苍蝇一样,确实很不舒服。

 

这里根据我个人的经验,给大家简述一下,工程化代码,以及简单代码,不容易出错的代码的一些基本写法。

 

      1、工程化代码,首先考虑是团伙作案,独行大盗的时代已经过去了,呵呵,因此,特别强调“人”能看懂,很多教科书上给出的示例,一切以计算机能正确run为准则,写出的代码只有计算机能看,作者本人再看都要想半天,这不是好代码。

 

工程项目团队,很多时候都是大家合作开发,你的代码,可能使用者不是你,下一个维护者也不一定是你,与人方便,与己方便,当有一天你对着一堆看不懂代码大骂的时候,想想,从我做起,给别人点方便。

 

2、简简单单写程序,不是说惜墨如金,多敲一个字符都嫌累。

 

在Unix时代,没有显示器,都是电传打字机,编辑器也是行编辑器,因此,每多敲一行字,都是钱,再加上那会内存小,编译器能用的空间有限,因此,Unix的老程序员,对于变量名,函数名,标签,珍惜得很,很少用2字符以上的,这是历史因素,人家穷,小家子气。

 

不过,现在大家用的都是以G为单位的内存,液晶显示器,IDE又那么强悍,拜托,起名字给长点,有点表意性好不好,别一段程序写下来,满篇都是“你猜”两个字,看程序的人要疯。

 

3、注释,很多教科书,一说编程规范性,就是注释,好像这是程序易读的唯一方法,大学里面的老师,没见识过大型工程开发,没一次干过几十万,上百万行代码,这么说也是可以理解的。

 

不过,工程程序员,项目压力一般都很重,在开发时,所有的注意力都在如何实现需求上,很少有人能有闲心,有耐心,精雕细琢自己的代码,甚至,很多代码,都是交工前最后一刻写出来的,因此,要求详细注释,在工程开发中,实际上没有可操作性。

 

起码我自己都做不到,这就是为什么我特别强调命名表意,程序写短点。即使程序员没有注释,看字面意思,也能大致理解。这么说吧,看别人的工程代码,没有注释,是正常,有注释,是福气。

 

嗯,有时候是霉气,很多程序员,开发时写注释,后期出现bug,开始疯狂Debug的时候,那会哪有时间改注释哦,能把程序改对,都是烧高香了,最后,很可能注释和代码是反的,顺着注释看,顺理成章就掉坑里去了。

 

还是那句话,别期待注释,别全信注释,注意自己的程序,自身的表意性,至于你自己写不写注释,如果在我的团队里面,.h文件里面的公有函数和方法,一定写全,每个入口参数的含义,返回码的含义,越多越好,别人正确调用你的程序,bug就不会找你麻烦,这是为了你自己。至于其他方面,爱写不写,我不管。

 

4、再说简单,简简单单写程序,可不是说你惜墨如金,是说让读的人,感到简单,脑子里不转弯。这很好理解,我们做出一个产品,好不好,用户说了算,你的软件产品可能有特定的用户,但你的代码本身,也是产品,你的团队伙伴就是你的用户,大家可能听说过换位思考,我们写程序的时候,除了想象客户会不会骂娘,还有没有想想,以后读我们代码的人会不会骂娘?

 

团队中有规范,按照规范来,不要讨论合理不合理,先照做,大家养成阅读习惯,看代码就不难。

 

写代码,不要耍酷,年轻人,或多或少都有点爱表现自己的欲望,人之常情,可以理解,不过要控制。哪些为了一个算法的优化,绞尽脑汁,最后把三个变量节约成一个变量,把四重循环节约成一重,看似水平高了,可是,算法复杂度高了,看的人就晕了。

 

不想挨骂的话,老老实实的写吧。函数内部的变量,只要不是动态申请的,一般都建立在浮动栈上,随着函数的退出,就会自动拆除回收,给下一个函数使用。对象内部也差不多。所以,不妨多用几个变量,老老实实地写,不玩什么花样,看得人看得轻松,其实自己脑子也清晰,不容易出错。

 

武侠小说中,说越是大宗师,越不喜欢用奇门兵器,一路简简单单的太祖长拳,破尽少林寺七十二绝艺,这说明什么?把事情弄复杂,弄玄妙,不算本事的,能用最简单的招式,化解最复杂的问题,内力够了,自然可以。修炼内功,就是减少对招式的依赖,简单,直接,直奔要害。以最小的成本,获得最大的收益,大家说,是不是?

 

5、规矩,很多人,一说工程化开发,就认为编程规范很重要。于是开始找大公司的开发规范,于是,网上的华为软件开发规范,传来传去,大家奉为圣旨。谁要敢说半个不字,管杀不管埋。

 

规矩是人定的,每个人群,每个开发团队,都有自己的开发方向,常用工具,所以,编程规范其实是很小范围的东东,都是针对目前项目最有效的,很难想象,一个做.net的开发团队,拿着华为用gcc做VxWorks工程的编程规范,能做好事情。

 

什么规矩是最好的?我的理解,最合用的就是最好的。系统设计完成,开发之前,项目团队在一起开个短会,讨论一下规范,把大的几条定出来,之后就随着项目的进行,不断补充罢了。很多时候,项目经理也要尊重程序员的习惯,一个程序员用VC的IDE习惯,总不能为了写gcc,强迫大家都用vi吧。这里面有个个性化的规矩问题。

 

大家别不习惯,出去之后,走上社会,大家会发现,很多东东都是灵活的,不是一成不变的,很多人就在哭,这个世界太黑暗了。其实是自己不能灵活变通。项目组,有牛人,大家一般会跟着牛人走,他的恶习都可以变成团队规矩,这也合理,没有牛人,大家一盘散沙,就在接口处统一,里面程序乱点没啥,也可以,方法太多了,只要能出活,出来的代码,大家基本能看懂,其实就ok了。

 

像那种,还没做事,先说一大堆规矩,程序员学习规矩和习惯养成都要半天,这些,最后都是项目成本。江山易改,本性难移,做项目管理,何苦来和每个人作对,尊重一下大家的习惯,直接把习惯做成规矩,不是更好?

 

6、轮子,笔者生活中,遇到很多了,坛子里面喜欢拍砖的人,也不少,开口就说,这个世界需要依赖工具,自己造轮子的人是笨蛋。

 

这个话确实见仁见智。很难说对不对,不过,笔者建议,初学者还是少用别人的轮子。

 

大家毕业,走上工作岗位,还有几十年呢。谁都不知道这辈子是不是一定在某个平台,或者某种语言,某种框架下写代码。

 

一旦年轻时,习惯了享受某种框架的便利性,就很难深入思考了。那随着年纪增大,走向架构师岗位的时候,由于很多底层的特性思考不够,会后继乏力。我们说,出来混,总是要还的,现在享受了,但是,这辈子的债,总得换,到三四十岁再来重新学习研究,会很难的。

 

很多人大言不惭,一说就是框架,以框架搭建工程固然很快,但是,想想看,做框架的人,和用框架的人,哪个水平高?哪个收入高?其实很多时候,企业的架构师,就是针对项目或产品,为项目团队制定本企业合用的框架的。

 

学着自己写队列,学着自己写堆栈,再代入到实际工程中测试,做一些量身定做的优化,你的水平会迅速提升的。

 

学生评论:

 

西安工程大学 袁小龙(数据库学生) :

老师的话总是能给人启迪。我就向往着teamwork的生活,希望老师还能继续发帖,让我们这些学生提前感受,学习到社会的知识~~谢啦!

 

河南成功学院Gwolf团队 赵鹏(C/C++爱好者) :

呵呵,喜欢读,因为简单,明了。不为别的,喜欢这种风格。

内容来自真实的一线,说服力强!

 

黄海峰(网络管理爱好者) :

我才毕业没多久,发觉很是理想主义,很想当“独行大盗”的心态,有时甚至感觉单位的前辈写代码过于迂腐,但是遇到问题找他们时,他们又总是能很快把我指通,我晕。经验呀。


 

作者简介

 

(按姓名拼音字母排序)

 

肖舸,CSDN学生大本营名师。MCSE,商用程序员,现任普罗通信(西安)有限公司研发主任。拥有多年的软件研发和研发管理经验。精通C/C++,TCP/IP,擅长分布式数据库、服务器集群以及并行计算领域的研发。曾担任西南交大客座讲师,讲授《C/C++语言无错化程序设计》课程。曾在多家企业担任项目经理,负责过的项目有《http tunnel防火墙隧道穿越系统》、《freepp V1.5 服务器集群》、《电子白板子系统》、《水泥生产窑红外线监控系统》、游戏《隋唐演义》、《营区网络化视频监控》、《局域网IM即文档共享平台》、《核爆测试频谱分析系统》、《多媒体网络教室》等。

肖舸老师主页:http://student.csdn.net/?39028

肖舸老师读者讨论组:http://student.csdn.net/space.php?do=room&ac=detail&roomid=27

“我心目中的商用化开发和工程化开发”征文大赛:http://student.csdn.net/space.php?do=event&id=10

 

杨中科,CSDN学生大本营名师。毕业于山东大学物流工程专业,如鹏网(www.rupeng.com)创始人,CowNew开源团队发起人,专注于企业级系统开发、编译技术以及IDE开发,撰写了《J2EE开发全程实录》、《自己动手写开发工具》、《程序员的SQL金典》等技术图书,已录制IT视频课程《C语言也能干大事》等。曾任职于金蝶软件,目前任职于北京赞同科技发展有限公司,从事银行基础技术平台的开发。

杨中科老师主页:http://student.csdn.net/?52781

 

左飞,CSDN学生大本营名师。移动通信工程师、技术作家,现就职于中国移动通信集团。对于面向对象技术和程序设计有深入的理解,尤其在C/C++编程方面拥有丰富的开发经验,研究计算机数据结构和算法问题是他的兴趣。此外,他的研究兴趣还包括图像处理和图像加密等。已正式出版的代表作包括《Visual C++ 数字图像处理开发入门与编程实践》、《C++ 数据结构原理与经典问题求解》、《把脉VC++》、《代码揭秘——从C/C++的角度探秘计算机系统》等。其文风严谨认真,但力求通俗简洁,他坚信“每多一条公式或者专业术语就会把一个读者挡在门外”,因此作品多具有图文并茂、实例丰富的特点。

左飞老师主页:http://student.csdn.net/?113322

 

编者后记:

 

我们精挑细选了老师的经典回答,相信已经回答了你心中的很多问题。

 

当然,可能你还有很多具体的问题没有得到解答。这也没有关系,因为只要你立刻加入CSDN学生大本营(http://student.csdn.net),你随时可以向这些老师拜师,这些老师也随时等候你的问题,分享自己的经验。而且,每天都有老师继续解答更多同学的疑惑,带领大家学习IT知识。

 

而且,更为重要的是,还有十几万名和你一样的学习计算机,爱好编程的学生,大家可以一起交流、讨论、成长。只要你愿意,它都将成为你自己的一个学习成长社区。

 

如果你认为这本书很好的解答了你的疑问,我们唯一希望的就是你能够把它发送给QQ、MSN、人人网上的同学,或者通过U盘拷贝给你的同学,让每一个学习IT,有志于IT领域发展的学生都能从中得到启迪。


网友评论

登录后评论
0/500
评论
聚优云惠
+ 关注