怎样作一个好的程序员: 首先就是你的目标就不明确,你先要肯定本身打算向哪方面发展
当好一名合格的程序员不只要有扎实的基础知识,还要多思考,多实践,勤看书,更要有团队合做精神,平时多和别人交流,俗话说:“三人行必有我师”,多上网看看一些资料,看看别人对同一问题的看发会有很大的启发,要知道不是你一我的在写程序而是和你们一块儿写程序,注重团队的力量!编程是一种艺术,要好好的发挥团队的力量把它作的漂亮,完美。
勤奋联系,多写一些程序,而后在根据程序代码多想一想用多种方法去测试运行它`实习基地给咱们提供了实际作一些项目的机会`我会借这个机会多学习`多思考,多实践。多看一些相关的书,不断提升本身。
我以为作一名程序员是很难的,特别是作一名合格的程序员就更要严格要求本身,增长团队合做能力,不断提升自身水平。
1.1 程序≠软件
如今不少人觉得程序就是软件,软件就是程序。事实上,软件和程序在20世纪80年代时,还能够说是等同的,或者说,在非pc领域里它们可能还会是等同的,好比说某个嵌入式软件领域,软件和程序多是等同的。可是,在pc这个领域内,如今的程序已不等于软件了。这是什么意思呢?
1. 软件发展简述
在20世纪80年代的时候,pc刚诞生,这时国内尚未几我的会写程序。那么,若是你写个程序,别人就能够拿来用。这时候的程序就能产生价值,这个程序就直接等同于软件。
但软件行业发展到如今,这里以中国的状况为例(美国在20世纪80年代,程序已经不等同于软件了),程序也不等同于软件了。由于如今会写程序很容易,可是你的这个程序很难产生什么样的商业意义,也不能产生什么价值,这就很难直接变成软件。要使一个程序直接变成软件,中间就面临着很高的门槛问题。这个门槛问题来自于整个行业的造成。
如今,你写了一个程序之后,要面临商业化的过程。你要宣传,你要让用户知道,你要创建经销渠道,可能你还要花不少的时间去说服别人用你的东西。这是程序到软件的一个过程。这门槛已比较高了。
咱们在和国内的大经销商的销售渠道的人聊天时,他们的老板说,这几年作软件的门槛挺高的,若是你没有5、六百万作软件,那是“玩”不起来的。我说:“大家就使门槛很高了。”他说:“那确定是的。若是你写个“烂”程序,明天你倒闭了,你的东西还占了个人库房,我还不知道找谁退去呢。个人库房是要钱的呀!如今的软件又是那么多!”
因此,若是你没有必定的资产的话,经销商都不理你。实际状况也是这样的,若是你的公司比较小,且没什么名气,你的产品放到经销商库房,那么他最多给你暂收,产品销不动的话,通常两周绝对会退货。由于如今经销商可选择的余地已不少了,所谓的软件也已经不少了。而程序则更多,程序都想变成软件,谁都说本身的是“金子”。但只有经受住用户的检验,才能成为真正的“金子”。
这就是美国为何在20世纪90年代几乎没有什么新的软件公司产生的缘由。只是原来80年代的大的软件公司互相兼并,我吞你,你吃我。可是,写程序的人不少,美国的程序变软件的门槛可能比咱们还高,因此不少人写了程序就丢在网上,就造成了共享软件。
2. 共享软件
共享软件是避开商业渠道的一种方法。它避开了商业的门槛,由于这个行业的门槛发展很高之后就轻易进不去了。我写个程序丢在网上,你下载就能够用,这时候程序又等于软件。共享软件是这样产生的,是由于没有办法中的办法。若是说程序直接等于软件的话,谁也不会轻易把程序丢到网上去。
开始作共享软件的人并不认为作它能赚钱,只是后来用的人多了,有人付钱给他了。共享软件使得程序和软件的距离缩短了,可是它与商业软件的距离会进一步拉大。商业软件的功能和所要达到的目标就不是一我的能“玩”得起来的了。这时的软件也已不是几我的、一个小组就能作出来的了。这就是在美国新的软件公司无法产生的缘由。好比netscape网景是在1995~1996年产生的新软件公司,可是,两三年后它就不见了。
1.1.1 商业软件门槛的造成
1. 商业软件门槛的造成
商业软件门槛的造成是整个行业发展的必然结果。任何一个行业初始阶段时的门槛都很是低,可是,只要发展到必定的阶段后,它的门槛就必然抬高。好比,如今国内生产小汽车很困难,但在20世纪50年代~60年代的时候,你装4个轮子,再加上柴油机等就造成汽车。那时的莱特兄弟装个螺旋桨,加两个机翼,就能作飞机。整个行业尚未造成的时候,绝对能够这样作,可是,到整个行业造成时,你就作不了了。全部的行业都是这样的。
为何网站一出来时那么多人去挤着作?这也是由于一开始的时候,看起来门槛很是低,人人均可以作。只要有一个服务器,架根网线,就能作网站。这个行业处于初始阶段时,状况就是这样的。但这个行业造成后,你就轻易地“玩”不了了。
国内的软件发展也是如此。国内的软件自从软件经销商造成之后,这个行业才真正地造成。有没有一个渠道是判断一个行业是否造成的很重要的环节。任何一个行业都会有一个经销渠道,若是渠道造成了,那么这个行业也就造成了。第一名的经销商是1994年~1995年成立的,也就是说,中国软件行业大概也就是在1995年造成的,至今才经历8年时间的发展。
有一种浮躁的思想认为,中国软件产业应该很快就能遇上美国。美国软件行业是上世纪80年代造成的,到如今已经发展了20多年了。中国软件行业才8年,8年才是一个懵懂的小孩,20多岁是一个强壮的青年,那么他们的力量是不对等的。但也要看到,当8岁变成15岁的时候,它真正的能量才会反映出来。
2. 软件门槛对程序员的影响
如今中国软件行业正在造成。因此,如今作一个程序员必定要有耐心,由于如今已经不等于之前了。你必定要把全部的问题搞清楚,而后再去作程序。
对于程序员来讲,最好的工做环境是在现有的或者初始要成立的公司里面,这是最容易成功的。我的单枪匹马闯天下已经很困难了。即便如今偶尔作两个共享软件放在网上能成名,可是也已经比较困难了。由于如今作软件的人已经不少了。这也说明软件已经不等于程序了,程序也不等于软件。
程序要变成软件,这中间是一个商业化的过程。没有门槛之前,它没有这个商业过程,如今有这个行业了,它中间就有商业化的过程。这个商业的过程就不是一我的能“玩”的。
若是你开始作某一类软件的时候,别人已经作成了,这时你再决定花力气去作,那么你就要花双倍的力气去遇上别人。
如今的商业软件每每是由不少模块组成的,模块是整个系统的一部分。我的要完整地写一个商业系统几乎是不可能的。软件进入windows平台后,它已经很复杂了,不像在dos的时候,你写两行程序就能卖,作个zip也能卖。事实上,美国的商业编译器也不是一我的能“玩”的。如今你可能以为它是很简单的,甚至linux还带了一个gcc,且源程序还在。你能够把它改一改,作个vc试一试,看它会有人用吗?它能变成软件吗?即便你再作个界面,它也仍是一个gcc,绝对不会成为visual c++那样能商业化的软件。
可见,国外软件行业的门槛要比中国的高不少了。我以为咱们中国即便再去作这样的东西,也没有多大的意义了。这个门槛你是追不过来的。不只要花双倍的力气,并且在这么短的时间内,你还要完成别人已经完成过的工做,包括别人所作的测试工做。只有这样,才能作到你的软件与别人有竞争力,能与它作比较。
1.1.2 认清本身的发展
若是连以上认识都不清楚,极可能就觉得去书店买一本mfc高手速成之类的书,编两个程序就能成为软件高手。就好像这些书是“黄金”,我学两下,学会了vc、mfc,就能作一个软件拿出去卖了。这种想法也不是不行,最后必定能行,但要有耐心,还要有机遇。机遇是从耐心中产生的,越有耐心,就越有机遇。你得很是努力,要花不少的精力,可能还要走不少的弯路。
若是你是从mfc入手的,或是从vb入手的,则如要作出一个真正的能应用我的领域的通用软件,就会走很是多的弯路。直接的捷径绝对不是走这两条路。这两条路看起来很快,并且在不少公司里面确实须要这样的东西,好比说我这家公司就是为另外一个家公司作系统集成的,那我就须要这样的东西,我无论你具体怎么实现,我只须要达到这个目标就好了。
任何软件的实现都会有n种方法,即便你是用最差的那种方法实现的,也没有问题,最后它仍是能运行。即便有问题,再改一改就是。可是,作通用软件就不行了,通用是一对多,你作出来的软件之后要面向全国,若是未来自由贸易通到香港也好,通到国外也好,整个产品能销到全世界的话,这时候,通用软件全部作的工做就不是这么简单了。因此说,正确的入门方法就很关键。
若是你仅仅只是想混口饭吃,找个工做,可能教你成为mfc的高手之类的书对你就足够了。可是,若是你想作一个很好的软件,不只能知足你谋一碗饭吃,还能使你扬名,最后你的软件还能成为不少人用,甚至你还想把它做为一个事业去经营,那么这第一步就很是关键。这时就绝对不能找一本mfc或找一本vb的书学两下就行,而是要从最底层开始作起,从最基本作起。
1.2 高手是怎样练成的
1.2.1 高手成长的六个阶段
程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工做,这都不是真正的高手境界。即便是这样的高手,那也都是无知者的自封。
我认为,一个程序员的成长可分为以下六个阶段。
第一阶段
此阶段主要是能熟练地使用某种语言。这就至关于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如咱们如今经常使用的win 32的api函数)以及所对应语言的自身的库函数。到达这个阶段后,也就至关于能够进行真实散打对练了,能够真正地在实践中作些应用。
第三阶段
此阶段能深刻地了解某个平台系统的底层,已经具备了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就能够说是进入了高层次。这时进入了高级内功的修炼。好比能进行vxd或操做系统的内核的修改。
这时已经再也不有语言的束缚,语言只是一种工具,即便要用本身不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,彻底不像是第一阶段的时候学习语言的那种状况。通常来讲,从第三阶段过渡到第四阶段是比较困难的。为何会难呢?这就是由于不少人的思想变不过来。
第五阶级
此阶段就已经再也不局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。能够说是“手中无剑,心中有剑”。到了这个阶段之后,能对市面上的任何软件进行剖析,并能按本身的要求进行设计,就算是ms word这样的大型软件,只要有充足的时间,也必定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来讲,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,win 32或linux在你眼里是没有什么差异的。
每个阶段再向上发展时都要按必定的方法。第1、第二个阶段经过自学就能够完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例若有一个高手带领或公司里有一个好的练手环境。通过2、三年的积累就能达到第三个阶段。可是,有些人到达第三个阶段后,经常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为本身已无所不能。其实,这时若是遇到大的或难些的软件,他们每每仍是无从下手。
如今咱们国家大部分程序员都是在第2、三级之间。他们大多都是经过自学成才的,不过这样的程序员通常在软件公司也能独当一面,完成一些软件的模块。
可是,也还有一大堆处在第一阶段的程序员,他们通常就能玩玩vb,作程序时,去找一堆控件集成一个软件。
如今一种流行的说法是,中国软件人才如今是一个橄榄型的人才结构,有大量的中等水平的程序员,而初级和高级程序员比较少。而我认为,如今中国绝大多数都是初级的程序员,中级程序员不多,高级的就更少了。因此,如今的人才结构是“方塔”形,这是一种断层的不良结构。而真正成熟的软件人才结构应该是平滑的三角形结构。这样,初级、中级、高级程序员才能充分地各施所长。三种人才结构对好比图1.1所示。
图1.1 三种人才结构对比
1.2.2 初级程序员和高级程序员的区别
通常对于一个问题,初级程序员和高级程序员考虑这个问题的方法绝对是不一样的。好比,在初级程序员阶段时,他会以为vb也能作出应用来,且看起来也不错。
但到了中级程序员时,他可能就不会选择vb了,可能会用mfc,这时,也能作出效果不错的程序。
到高级程序员时,他绝对不是首先选择以上工具,vb也好,vc也好,这些都不是他考虑的问题。这时考虑的绝对是什么才是具备最快效率、最稳定性能的解决问题的方法。
软件和别的产品不一样。好比,在软件中要达到某个目标,有n种方法,可是在n种方法中,只有一种方法或两种方法是最好的,其余的都很次。因此,要作一个好的系统,是很须要耐心的。若是没有耐心,就不会有细活,有细活的东西才是好东西。我以为作软件是这样,作任何事情也是这样的,必定要投入。
程序员到达最高境界的时候,想的就是“我就是程序,程序就是我”。这时候我要作一个软件,不会有本身主观的思路,而是以机器的思路来考虑问题,也就是说,就是以程序的思考方式来思考程序,而不是以我去设计程序的方式去思考程序。这一点若是不到比较高的层次是不能明白的。
你设计程序不就是你思考问题,而后按本身的思路去作程序吗?
其实不是的。在我设计这个程序的时候,至关于我“钻”入这个程序里面去了。这时候没有我本身的任何思惟,个人全部思惟都是这个程序,它这步该怎么走,下步该怎么走,它可能会出现什么状况。我动这个部分的时候,别的部分是否要干扰,也许会动一发而牵全身,它们之间是怎么相互影响的?
也只有到达这个境界,你的程序才能真正地写好,绝对不是作个什么可视化。可视化自己就是“我去设计这个程序”,而真正的程序高手是“我就是程序”,这两种方法绝对是不一样的。好比,我要用vb去设计一个程序,和我自己就是一个程序的思惟方式,是不同的。别人也许以为操做系统很深奥,很复杂,其实,若是你到达高手状态,你就是操做系统,你就能作任何程序。
对待软件要有一个全面的分析方法,光说理论是没有用的。若是你没有通过第1、第2、第3、第四这四个阶段,则永远到达不了高境界。由于空中楼阁的理论没有用,而这些必须是一步一步地去作出来。
一个高级程序员应该具有开放性思惟,从里到外的全部的知识都能了解。而后,看到世界最新技术就能立刻掌握,立刻了解。实际上,技术到达最高的境界后,是没有分别的。任何东西都是相通的,只要你到达这个境界之后,什么问题一看就能明白,一看就能抓住最核心的问题,最根本的根本,而不会被其余的枝叶或表象所迷惑,作到这一步后才算比较成功。
从程序员自己来讲,若是它到达这一步之后,他就已经造成了开阔的思惟。他有这种开放性思惟的话,他就能作战略决策,这对他未来作任何事情都有好处。事实上,会作程序后,就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能垂手可得地解决。实际上,对开发计算机软件来讲,没有什么作不了的软件,全部的软件都能作,只是看你有没有时间,有没有耐心,有没有资金作支撑。
这几年,尤为是这两三年,估计到2005年前,中国软件这个行业里面大的软件公司就能造成。如今就已经在造成,例如用友,它上市后,地位就更加稳固了。其余大的软件企业会在这几年内迅速长大。这时候,包括流通渠道、经销商的渠道也会迅速长大。也就是说,到2005年之后,中国软件这个行业的门槛比如今还要高不少,与美国不会有太大的差异。此时,中国软件才真正体现出它的威力来。若是你是这些威力中的一员,就已经很厉害了。
别人可能知道比尔•盖茨是个谈判的高手,是卖东西的高手,其实,比尔•盖茨从根本上来讲是个程序高手,这是他根本中的根本。他对全部的技术都很是敏感,一眼就看到本质,并且他自己也能作程序,时常在看程序。如今他不作董事长,而作首席设计师,这时他就更加接近程序的本质。由于他自己就有很开阔的思惟,又深刻到技术的自己,因此他就知道技术的方向。这对于一个公司,对他这样的人来讲,是很是重要的。
若是他判断错误一步,那公司之后再回头就很难了。计算机的竞争是很是激烈的,不能走错半步。不少公司之前看上去很火,后来就
销声匿迹了,就是由于它走错一步,而后就不行了。为何它会走错?由于他不了解技术的本质在哪里,技术的发展方向在哪里。
比尔•盖茨由于父母是学法律的,因此他自己就很能“侃”,颇有说服力,而他又是作技术的,就很是清楚技术的方向在哪里,因此他才能把方向把握得很准确,公司愈来愈大。而别的公司只火一阵子,他却火了还会再火。就算微软再庞大,你若是不把握好软件技术的最前沿,同样也会玩完。就像intel时刻把握着cpu的最新技术,才能保证本身是行业老大。技术决定它的未来。
因此,程序员要能达到这样的目标,就要有很是强的耐心和很是好的机遇才有可能。事实上,如今的机会挺好的,2005年之前机会都很是大,之后机会会比较小。可是,若是有耐心的话,你仍是会有机会的,机会都是出在耐内心。我记得有句话说“雄心的一半是耐心”,我认为雄心的三分之二都是耐心。若是你越有野心,你就越要有耐心,你的野心才有可能实现。若是你有野心而没有耐心,那都是胡思乱想,别人一眼就能看穿。最后在竞争中,对手一眼就看到你的意图,那你还有什么可竞争的?
1.2.3 程序员是吃青春饭的吗
不少人都认为程序员是三十岁之前的职业,到了三十岁之后,就不该再作程序员了。如今的不少程序员也有这种想法,我以为这种想法很不对。
在20世纪80年代末到90年代初,那时软件尚未造成行业,程序员不能以此做为谋生的手段时,你必须转行,由于你年轻的时候不用考虑吃饭的问题,每天“玩”均可以,可是之后就不可能了。
据我了解,微软里面的那些高手,几乎都是四五十岁的,并且都是作底层的。他们是上世纪70年代就开始“玩”程序的,因此对于整个计算机,他们是太清楚了。如今有些人主观臆断地但愿微软次日倒闭就行了,但那可能性过小了。由于那些程序员是从cpu是4004的时候开始,玩到如今奔腾iv,没有哪一代东西他们没有经历过。
你知道他们如今正在玩什么吗?如今正在玩64位的cpu。你说你普通的程序员,有这个耐心吗?没有这个耐心,你绝对作不了,你也绝对作不了高手。他为何能作?由于他不只是玩过来的,并且他还很是有耐心,每一步技术他都跟得上,因此对他来讲,没有任何的难度和压力。
由于计算机技术没有任什么时候候是突变的。它的今年和去年相差不会很大,可是回过头来看三年之前的状况,和如今的距离就很大。因此说,若是你每一年都跟着技术进步的话,你的压力就很小,由于你时刻都能掌握最新的技术。可是,若是你落下来,别说十年,就是三年,你就赶不上了。
若是你一旦赶不上,就会以为很是吃力;若是你赶不上,你就会迷失方向;若是你迷失了方向,你就以为计算机没有味道,越作越没劲。当你还只是有个思路的时候,别人的产品都作出来了,由于你的水平跟别人相差太远,人家早就想到的问题,你如今才开始认识。水平越高,他就看得越远,那么他的思惟就越开阔;水平越低,想的问题就越窄。
64位cpu是这个十年和下个十年最重要的技术之一,谁抓住这个机会,谁就能抓住将来赚钱的商机。cpu是英特尔设计的,对这一点他确定清楚。举例来讲,若是从64位的角度来看如今的32位,就像从如今的角度去看dos。你说dos很复杂吗?当你在dos年代的时候,你会以为dos很复杂。你说如今的windows不够复杂吗?windows太复杂了,可是你到了64位的时候再去看windows,就如同如今看dos同样。
整个64位系统的平台和思惟方式、思路都比如今更开阔,打个比方说,如今的windows里面能开n个dos窗口,每一个dos窗都能运行一个程序。到达64位的时候,操做系统事实上能作到开n个x86,开n个windows 98,而后再开n个windows 95都没有问题,系统能作到这一步,甚至你的系统内开n个windows nt都没有关系。这就是64位和32位的差异。因此,微软的那些“老头”,4、五十岁的那几个作核心的人,如今正在玩这些东西。你说微软的技术它能不先进吗?是linux那几个玩家能搞定的吗?
微软的技术很是雄厚,世界计算机的最新技术绝对集中在这几我的手里。并且这几我的的思惟模式很是开阔,谁都没有意识到的东西他早就开始作了。如今64位的cpu都出来一二年了,你说有什么人去作这些应用吗?没有,有的就是那几个unix厂商作好后给本身用的。
因此,追求技术的最高境界的时候,其实是没有年龄限制的。对我来讲,如今都三十三了,我历来没有想过退出这行,我以为我就能玩下去,一直玩到退休都没有问题。我要时刻保持技术的最前端,这样的话对我来讲是不困难的,没有任何累的感受。
不少人说作程序不是人干的事情,是非人的待遇。这样,他们一旦成立一个公司,作出一点成绩,在辉煌的时候立刻就考虑退出。由于他们太苦了,天天晚上熬夜,天天晚上烧了两包烟还不够,屋子里面简直就缺氧了,好像尚未解决问题。
白天睡觉,晚上干活,那固然累死了,这是本身折腾本身。因此,作程序员必定要有一种正常的心态,就是说,你作程序的时候,不要把本身的生活搞得颠三倒四的。若是非得搞得晚上烧好多烟才行,这样你确定折腾不到三十岁,三十岁之后身体就差了。
事实上,我基本上就没有由于作程序而熬夜的。我只经历过三次熬夜,一次是在学校的时候,1986年刚接触计算机时,一天晚上跟一个同桌在计算机室内玩游戏,研究了半天,搞着搞着就到了天亮,这是第一次。而后在毕业以前,在286上作一个程序。还有一次就是超级解霸上市前,那时公司已吹得很大了,那天晚上无法睡觉。
通常来讲,我也是十二点钟睡觉,次日七点就起了。因此说,只有具备正常的生活、正常的节奏,才有正常的心态来作程序员,这样,你的思路才是正常的,只有正常的东西才能长久。搞疲劳战或者是黑白颠倒,时间长久后就玩不转了,玩着玩着就不想玩了。 前端