首先说明一下,我美工、网页和编程三者兼顾的,这是我一直的目标。编程经验3年Delphi编程,从事证券行情软件开发。离开公司后自学,把网页设计提高了两个层次。最近几个月,我重新转到编程上去了,因为感觉现在最要提高的还是编程。对于这个标题,我觉的还是能说点意见,毕竟两方面我都投入过不少时间。

首先说美工,美工设计是需要感性思维的,许多人过分夸大天赋的作用,除了你想成为天才,天赋也许是个因素。我最近的感悟是,你想提高层次,必须提高你的基础,好好下苦功把你的基础打的扎扎实实。我为了提供网页设计能力,特地去补了色彩构成、平面构成,版面构成,看了一些设计方面的理论知识,又去找了一些国外优秀的网页设计研究,去研究深层的东西,为什么这样做,如果那样做会怎么样,这个手法的好处是什么,这个效果的意义是什么。经过这样几个来回,自己做几个设计,水平一下子就能提高上去。这样入门是慢,因为要打基础,但是打的好,提高的速度是很快的。一些投机取巧者,看网页设计好象门槛很低,争先恐后爬进来,东抄西挪,看到别人图片好看就直接往自己的设计上贴,没有打基础就象无头苍蝇一样到处乱撞,撞到哪个想法算哪个想法。如果你这样做设计,做个几年还只是量变没有质变,如果你是这种状态,可以反省自己了,再不反省过几年你就准备失业吧!一但养成这种坏习惯,就是一种惯性的力量,想刹都刹不住。到时候等你意识到你基础不行了,想再去回炉你还有优势吗?可塑性强比你更有年龄优势的一代就把你踢进历史垃圾箱!

再来谈谈程序员的问题。自己有过三年程序员经历,离开公司的时候,几乎被编程折磨的困惑了,困惑自己是否适合当个程序员。当时总经理还挽留我,说我做的软件不错,你行的!那时候我有自知之明,知道我编程方面肯定出了问题,而且我也知道基础方面有问题,但具体不清楚是什么问题。所以我后来花了一年去学网页设计,实在想静静心考虑一下抉择了。

就个人来讲编程比网页设计难的多,这里的人提到的程序员大多指的是Web程序员,而且还是跟页面关系比较密切的程序员。我现在就在用asp写后台,跟我用delphi写的程序来比简单多了。尤其现在网上流传着大量的asp,php,jsp源代码,种类繁多,现在很多网站都是应用类似的东西,很多程序员就是参照拷贝,有什么难度可言。这种程序员是程序员中薪水最低的一种(看各种招聘单位的需求)。

这里有人说美工比程序员难,薪水反而少,那你改行去做做程序员吧!去好好体会什么叫程序员!前面有人说网页设计要和客户谈,要不断修改,呵呵,难道软件程序员不需要?难道不和客户沟通就能闷着头写代码了。这样写出来的功能会符合客户的需求?网页设计修改一般都在前期固定了,而软件需求在软件生存期内是不断变化的,客户的需求是说来就来的,程序员和客户交流特别重要,重要的项目是需要客户代表和项目组在一起的。不然开发出来的功能不符合就完蛋了。页面修改再烦也就一个页面,如果你做设计的时候多用层的话修改也不是特别的麻烦。你去修改软件试试,一个几万行的代码,你要保证改的地方不影响到其他地方,每改一次,你都要测试一次,况且测试也是很难保证不添加新的bug。另外,程序源代码不是很直观的,改的越多,代码就越糟糕,尤其团队里面几个程序员配合的话,问题会更严重。程序越大修改越麻烦,问题越多,代码越改越味道不好。如果没有好的团队好的管理,项目很可能到后期就崩溃,或者弄出一个“问题软件”,使的维护工作难以进行,代价高昂。当客户向你咆哮着你的程序出现莫名其秒的错误时,你就哭去吧!你就去源代码里去找那个出问题的bug吧!当你迷失在几万行源代码里不知所措的时候,你的技术经理告诉你,这个问题必须在规定时间内解决,不然就扣奖金的时候,你会有什么样的感想?当你经过熬夜不断调试那该死的程序,找出那个该死的问题,然后你匆忙的修改了程序弥补这个问题,经过简单测试连忙在“最后期限”前交付出去,但没过半天,客户就象你的总经理投诉,因为程序又出现了新的问题,然后你就等着挨批斗吧!市场部怨你惹恼了客户,维护部怨你给他们添加了不必要的工作量,开发部怨你给部门丢脸。你种滋味你们美工人员尝过吗?当前面的开发人员辞职了,这个问题软件由你继续负责的时候,你又何感想?当有新的任务下来,软件必须在规定时间内升级开发完毕,时间紧迫,必须连续加班的时候,你又会有什么感想呢?当你以为能喘口气的时候,质量管理部门下通知,所有的软件必须有开发文档。当你拿到一大堆开发文档的时候,你几乎欲哭无泪,写这些文档的工作量比你写程序还要大(软件需求设计,概要设计,详细设计,数据库设计,测试计划,用户手册,维护手册等等)。这些比代码还枯燥的文档你写着写着就呕吐了!更呕吐的是,你以后每改一下程序,都要保持文档的同步更新。

软件开发是复杂的,不然就没有软件工程一说了,更关键的是,软件开发没有“银弹”,就算最发达的美国还在不但研究这方面的课题,有着各种流派。而我们国内,还在讨论着用什么语言好,怎样学的快,这样能立即当个程序员赚钱,浮躁的一塌糊涂。

最近看了一些软件开发方面的书,才知道自己当初的问题是什么,为什么会这么累,现在我又对编程重燃激情了,因为我知道以前错在哪里?现在要在哪些方面努力。现在我就说说当一个好的程序员要学的东西或注意的东西,更让一些人明白什么才是好的程序员:
1.现在程序员最大的问题:“用面向对象的语言干着面象过程的编程!”
2.没有真正了解面向对象的精髓和原则!导致程序对象不对象,过程不过程!
3.语言基础方面没打好,概念不清楚,尤其还没搞清楚怎么回事情就直接用高级IDE搞开发了,入门好象是很快,好象也能写程序了,呵呵,过几年你在感觉感觉你的水平!
4.只写给机器看的代码,其他程序员是看不懂的,具体表现是,变量用a, b, c, d,函数名称用一些只有他自己知道是什么字母组合,一个函数大的几百行,什么东西都往里装。没有注释,逻辑混乱。
5.只顾写代码,怎么方便这么写,根本不懂设计(不是只有美工才有设计),更不要说“设计模式”了。
6.因为没有深刻理解面象对象,也不知道什么叫设计模式,所以写出来的代码就是一堆垃圾混合物,要修改动不了,一个地方改,其他地方都要改。程序没有灵活性,难以扩展,难以满足客户不断的新需求。
7.程序代码从来不去“重构”,导致代码味道越来越差,结果代码腐烂,一个难修改、难扩充、难看懂的臃肿腐烂的程序就诞生了。结果所有的人就围绕这个怪胎治疗吧!大量人力物力时间去填这个无底洞。推翻重来?历史还是重演,新的程序慢慢又开始腐烂了!
8.没有测试的概念,以为程序写完了运行一下看有没有问题就OK了。编写程序前先写测试程序,测试驱动开发。测试驱动的好处就是可以时刻保持程序进行重构,改良程序的结构。
9.编写文档,文档方面的观点比较多,一致的观点是,必要有用的文档是必须的。质量控制体系文档方面要求非常多,看具体公司要求。我比较同意的一个观点是:源代码就是设计,源代码就是最好的文档!所以写出别的程序员能看懂的代码才是优秀的程序员。

先写这些,至于软件项目的管理更是一门学问,国内好的项目经理其实比好的程序员更少。

最后我认为做一个好的程序员需要努力的地方:
1在学校里好好学基础,什么离散数学,数据结构,数据库设计,编译原理,计算机系统等等,这些看起来好象没什么大用,但这些知识会潜移默化的发挥着威力。
2掌握一门面向对象的语言,深入了解什么叫面向对象,把这门语言的基础给打扎实了。如果学的是java,推荐《java编程思想》,中文版现在是第二版,英文第三版也出来了!
3安心编程长点经验,然后去看看UML(主要有许多书用到这个UML,交流的时候还是比较有用的),然后去看看《设计模式》这本经典的“圣经”。
4《敏捷软件开发》这本书我很欣赏,一本得奖的书,里面也对设计模式进行了讲解,很不错,看了才知道什么叫软件开发,再回头看你写的代码,保证你会说,你以前只不过在无意识的制造垃圾。
5《重构》这本书也不错,看了可以让你学会整理代码,保持代码的好味道。
6项目类的书籍,比如经典的《人月神话》《人件》《最后期限》等等。

上面有些书需要基础,没达到一定层次没吃过一定的苦头恐怕体会不会很深,有些书过一段时间看一遍会有新的体会。对于那些以为当个程序员很简单的人,尤其对那些抱着一个月学一门语言,一个月用IDE进行开发的人,我想说欢迎进入软件开发的地狱大门。

至于美工和程序员之争没意思,两个思考方式不同的工种。不论学什么,要想要高薪水,你就要有高层次,高层次靠什么?靠底下的基础支撑,你底下的知识面越广,越扎实,你就能领悟的更多,如果哪天你发现你进步很慢时,那瓶颈就在你基础上。