中国有句古话——隔行如隔山。中国又有句古话——女要嫁对郎,男要选对行。自古以来选对行业对一个男人是很重要的,而且选哪一行也要相当慎重,如果选错,再改恐怕就没那么容易了。 其实,现实中干哪一行并没有实质的区别,都是用自己的劳动来实现自己的价值。我所理解的选对行,应该是说,根据一个人的兴趣爱好,性格特点,能力特长,天资天赋等,来确定一个人到底干什么合适。比如有些人从小就有音乐细胞,有些人天生就有一副好嗓子,那他可以做一名歌唱家;有些人有极强的交际能力,灵活应变能力很强,那他适合做一名外交家。所谓三百六十行,行行出状元。我们只要把自己的事情做到极致,成为状元级别的人物,不管是干什么,都会得到相应的回报的,都会有成就感的。
喜欢代码,喜欢写程序,许多人正出于此,想从别的行业转到程序开发这行,不是为了工资多高,只想在这个领域里能有所作为。当然也有许多是盲目跟风,跟IT业兴起之风,认为做程序员工资高,干这个肯定比其他的收入多。真正做了程序员的人,真正了解程序员这一行业的人,才明白程序员工作的意义,才知道什么是程序员的前途, 怎样的程序员才有前途。
大部分人接触最简单的程序都是在大学时候。那时候一个简单输出“hello world”的程序,都让我们感到惊奇,初次探询程序的奥秘,发现它很神秘,可以做出很有意思的东西。想想那么多游戏都是程序员写的,想想那么多软件都是出字程序员之手,就会从心里深发羡慕与敬仰之情。
可是写程序不是说学一两门课就能做到的,涉及的相关学科有很多,从硬件到软件,从计算机组成到操作系统,还有算法、数据结构等等,这几门课可谓都是硬骨头,在学校里,没有多少人能把这些骨头完全消化的。随着神秘感的减退,大家的疑问也越来越重了,程序员到底是做什么的,就是写代码的吗?而程序又有这么多种类,我是该学C呢,还是C++呢,还有JAVA,DOTNET等等,而且程序设计还分了那么多方向,有应用软件的,有系统软件的,有企业信息管理系统,有数据库方面的,还有嵌入式驱动方面的等等,没有一个人能同时学这么多,而哪个方向才有前途呢?是做一个技术牛人,还是走管理路线?疑问太多了,方向迷失了。IT行业纷繁复杂,这大概就是多元化的结果吧。只是这样的情况,把初学者们都搞得蒙头转向了。大家关注的是学什么语言,市场需要搞C++的,就学C++;市场需要搞JAVA的,就又去学JAVA;过几天出个WEB2.0,学吧;再过几天来个C#.NET。其实这也不能怪谁,有一颗上进的心没什么不好,市场变化太快,总要跟上步伐。只是有些人看到许多东西,便难以静下心来,总觉着自己的东西不是最好的,这叫“这山看着那山高”,结果最后什么都只明白一点,什么都不精。
做程序员这行要入行不容易,只做一些简单的项目,整理几段代码,不叫入行。什么叫入行,不好定义,要看干什么了,总之,至少要一到两年经验,还要不段学习,才能说达到了基本水平,具备了基本素质。程序员基本完全属于脑力活,整天坐在电脑前敲代码,如果没有一定的耐心,可能坐都坐不下来。所以如果性格比较好动的,可能就不适合干这行吧。 由于程序员需要的准备知识很多,比如硬件软件基础知识,这些学科晦涩难懂,初学起来很不容易,一门C语言看起来简单,数组、指针、字符串、函数调用、参数传值、内存分配等等,要把这些实实在在弄清楚,不是书本能教得了的。算法就更需要有一定悟性了,把一些简单的排序算法背下来,那也没什么实际用处,算法终归是一种思想,是程序的思路,要如何实现一个功能,要用尽量简洁的方法来处理,排序已经是最基础的了,不少人觉得排序都比较难懂。
写了几年程序,转到其他行业去的程序员比比皆是。一方面,可能由于身体原因。程序员的工作是辛苦的,这是众所周知的,每天坐在电脑前敲键盘,一天到晚,还要经常加班,身体差的干几年就吃不消了。另一方面,这一行技术发展快,每天都有新名词新术语出现,许多人的技术到了瓶颈处了,想再提高一个层次不是那么容易的事,而后来者咄咄逼人,他们年轻,接受新事物较快,所以一些老程序员不得不重新选择别的出路。当然转行不等于失败,许多程序员转行后依然取得事业上的成功,有做培训师的,有做咨询顾问的,有进驻企业管理层的,有合伙自己创业的,自己当老板,接一些小项目,顾点小程序员来为自己干活。当然,他们有一个共同的特点,就是他们对自己的领域相当熟悉,对一些专业技术也是炉火纯青。如果一个程序员到了三十五岁,还不能成为他那个方向的专家,那么他的处境就比较危险了。
网路上有不少帖子,许多作者写下关于自身的成长经历,希望对后人有启发和借鉴作用。可是人们往往只看到他们辉煌的一面,比如月薪从几百到几万之类,而忽略了他们付出的艰辛。天下没有免费的午餐,我认为成功的之所以能够成功,总有他必然的道理。当今世界对于80%以上的群体是很公平的。
一个程序员绝不是整天重复着复制粘贴这类事情,真正程序员对程序有自己理解和感悟,能用代码来展现自己的思想。开源多了,许多算法代码都是现成的,而且也写得相当完美,所以复制现成代码成了许多程序员的主要工作。去复制别人的算法,虽然说也可以编出很好的软件,而且某种程度上说,这样的效率还满高,可以很快完成项目。但是如果总是依赖别人的算法,那就缺乏创新,从某种意义上说,相当于建筑的堆砌工人。你的代码都是别人设计好的,你只负责堆砌而已。这就是为什么别人总可以发明出什么语言,他们发明出来了,我们总要跟着求着来学的原因。
中国的软件行业还在发展,相比之下,中国的软件行业还比较落后,需要大量高级人才来共同发展这个行业。我看到过一个中国软件人才结构分析图,我觉得很有道理。不是所谓的橄榄型,也不是金字塔型,而是一个严重的断梯型。高级程序分析设计人员极少,中间层也不多,而百分之八十都是初级的代码蓝领。也就是说,中国缺的是高级的软件人才,而不是初级程序员。希望有些经验的程序员能够认清目标,提高自己的技术水平,为国家的软件事业做出贡献,也希望打算做程序员的人员,对程序员行业有所了解,选择好自己的事业,不再迷茫。