① 你见过的程序员都写过哪些逆天的程序呢
成都程序员培训:怎么样才能成为真正的程序员?
程序员这行当,不贫不富,靠技术吃饭,一直还算个体面职业。进了程序员这行的兄弟们,即便日后飞黄腾达了,谈起早年的编程生涯,都还是自豪的。
不过呢,程序员这个职业,有个挺悲哀的地方,那就是无效工作的占比极高。
直接点说,程序员辛辛苦苦敲的代码,大部分都是没用的,都是要扔掉的。
这个特点非常鲜明,和别的职业差距相当大。
和农民比,农民种的作物,几乎很少浪费。有的年景里,白菜丰收价格太低,但也能喂猪吧?即便只能烂在地里,那也能肥田呢,不算完全浪费。和建筑工人比,那建筑工人砌砖盖房都是要用上几十年的。虽然也有烂尾楼,但占比非常低吧?盖了一半的楼,因为质量不行拆了重新打地基的,也很少见吧?即便有新盖好的房子,被强拆了,但那也是少数。
哦,有一种职业,无效工作比例高,那就是军人。军人天天苦练,要打千万发子弹,但大部分军人终其一生,都不曾将子弹射进过人体。但是呢,从另一个角度看,军人的有效工作还得把震慑算进去,扛着枪效果就很好了。这样说来,军人的无效工作比例那就真不算低。
可程序员就不一样了。
随便在上地西二旗拦住一个尘满面、鬓已霜的男子,问他这十年或者二十年所写的代码,有百分之多少,还在运行中?他细想之下,怕是要泪千行的。
要是有程序员反驳说,不对啊,我多年来写的代码几乎都跑起来了,都用起来了啊。那他肯定是做企业应用项目的,而不是做产品的。企业应用项目么,怎么着胡乱对付也能用个几年。做产品的,不扔个几版,能出精品么?
程序员的宿命啊,就是被扔,这代码啊,是写了扔,扔了写。而且,程序员的代码扔了就彻底扔了,一点用处都没有。衣服扔了还可以捐给灾区,废代码是不能捐给灾区的,更不能喂猪,烂在硬盘里也不能肥硬盘。彻彻底底的无用废物。
程序员应该说:我们是程序员,注定代码是要被扔掉的。这句话听起来,却是别有一番凄凉滋味啊。不要拿Ken,Linus之类的大牛来说事,他们是“创造者”,“创造者”不是职业,也不能用百分比来衡量有效工作。扔就扔吧,好在,程序员们都是有佛性的,懂得色即是空空即是色,一切皆是虚幻,本来都是虚拟数码,扔吧。再说,扔的多,开发工作机会就更多。老板们其实也并不心疼,虽然扔的都是他们的钱。
有位老板,打过一个比方:这个代码呢,和精子也差不多,写代码就跟啪啪啪一样,你不能指望次次都孕育成果。过程重要,要学会享受过程。
这位老板就喜欢扔代码。
开发到了一半,需求有问题,扔;开发完了上线,架构不对顶不住压力,扔;上线了找用户,没有用户愿意用,扔;上线有用户用了半年,界面过时不好看,扔;不喜欢某个程序员,把这厮写的都给我扔了,扔了;不过,有意思的是,这个老板最成功的产品,乃是10年前开发出来的,技术早就老的要掉牙,却一直舍不得扔。
做过程序员,写过代码的老板,更喜欢扔代码,团队里浪费也更多。这些有技术情结的老板,喜欢追求完美,都有强迫症,还热衷维持庞大的程序员队伍。浪费是浪费,但过瘾啊。
而营销出身的老板,就没那么浪漫,多流于市侩,总要问:能改改凑活上线用么?
若是问程序员喜欢那种风格的老板?程序员当然有自己的偏好和选择了,就是给钱多的那个。
有些行业追求作品的流芳千古,比如绘画写作这类艺术行当。但有趣的是,其行业中的顶尖人物,却容易逆反。例如,作家卡夫卡死前烧掉自己的小说,画家高更死前烧掉自己的画作,没人能看懂自己,自己死了更没法去解释奥义。唉,才高寂寞啊,烧掉干净。
程序员不会。程序员首先就不会流芳千古,更不用死前烧掉自己的硬盘。程序员的代码,在离死前很久,就都已经扔掉了,彻底扔干净了。
万一在临死时分,竟然还有自己写的代码在世界上运行,程序员就会很恐慌:我操,我死了,代码谁来维护啊?
所以,代码还是早早扔掉为好。
② 程序员到了30岁,怎样提高自己的不可替代性
其实,做一辈子程序员并没有什么问题,重要的是,你必须成为一个不可替代的程序员,也就是说,你要成为技术大拿,能够解决普通程序员所不能解决的问题。技术大拿有两个版本:是程序员加强版。程序员加强版的你仍然是一个程序员,但你是一个很牛的程序员,凭借多年的积累,你在知识广度和深度方面均已不是等闲之辈。是程序员升级版。程序员升级版的你虽然内在仍然是一个程序员,但你的职位已经升级了,你成为了系统分析师或系统架构师。这是非常自然和现实的选择。
1、行业专家也是一个公司不可缺少的角色,他们对公司的行业知识、业务流程和细节了如指掌。行业专家一般并不是从外部招聘的一个只懂业务、不懂技术的超人,而往 往是从程序员经过多年的摸爬滚打成长起来的。
2、向管理方向发展的第一步,一般是被任命为项目经理。在大部分IT公司里,一个优秀的项目经理,不仅需要高智商,还需要高情商。可以不夸张的说,如果你能胜任项目管理,你就可以胜任战术层的所有管理岗位,甚至你有家庭生活质量,也会提高到新层次。
有几个方向可以选择:
(1)成为技术大拿
其实,做一辈子程序员并没有什么问题,重要的是,你必须成为一个不可替代的程序员,也就是说,你要成为技术大拿,能够解决普通程序员所不能解决的问题。技术大拿有两个版本:
一 是程序员加强版。你仍然是一个程序员,但你是一个很牛的程序员,凭借多年的积累,你在知识广度和深度方面均已不是等闲之辈。从汇编到java,你样样精 通。你在意数据结构和算法,对系统的优化有独到见解,对设计模式如数家珍,你还有完备的工具箱和自己的专用类库。其实,加强版程序员有非常独特的价值,可 惜的是,在现实中却很少见,因为对任何一个公司而言,人才总是很稀缺的。老板的眼睛是雪亮的,他怎么会对你这种技术大牛视而不见呢,在你还没有成为真正的 大拿之前,早已经被任命为系统架构师、项目经理或者更高的职位了。因此,你想守住自己的一亩三分地,悠闲的做自己的大拿,往往是不可能的。
二 是程序员升级版。虽然你的内在仍然是一个程序员,但你的职位已经升级了,你成为了系统分析师或系统架构师。这是非常自然和现实的选择。程序员与系统分析师 或架构师之间并有鸿沟,只需一步而已,你就可以从崎岖山路驶向宽阔的大马路。但这一步却并不容易,需要几年时间不断思考、学习、实践,才能化蛹成蝶。
(2)成为行业专家
行业专家也是一个公司不可缺少的角色,他们对公司的行业知识、业务流程和细节了如指掌。行业专家一般并不是从外部招聘的一个只懂业务、不懂技术的超人,而往 往是从程序员经过多年的摸爬滚打成长起来的。作为从程序员成长起来的行业专家,你往往还肩负系统分析师之职。在公司里,对业务有一般了解的人很多, 但专 家级别的往往很少,为了后30年的职业生涯,你必须成为专家。
(3)朝管理方向发展
向管理方向发展的第一步,一般是被任命为项目经理。在大部分IT公司里, 项目经理是最小的管理岗位了,可能你不会觉得有太多惊喜,工资也没有大的提升,但这个转变,可以说会成为你一生中最重要的转变之一。
不要小看了项目经理。有人说,项目经理是一个古老的职业。也人有人说,21世纪是项目管理的世纪。事实上,从人类有组织以来,就一直有项目管理,以前的项目 经理可能是部落首领,一次集体打猎、一次攻城拔寨,都可以视为一个项目。项目管理的知识可以应用到我们生活的方方面面,大至登月计划的实施,小至家庭聚会 的组织,都离不开项目管理。
一个优秀的项目经理,不仅需要高智商,还需要高情商。可以不夸张的说,如果你能胜任项目管理,你就可以胜任战术层的所有管理岗位,甚至你有家庭生活质量,也会提高到新层次。
③ 程序员如何提升自己的核心竞争力
首先需要在一个技术领域深耕,只有一个领域的知识真正吃透,才能有效地共享到别的领域,构成知识领域的森林,相近领域逐步横向拓展
④ 出色的程序员是怎么炼成的
做程序员是一个很艰苦的事情,在最初的时候,你要花大量的时间和精力去学习,完成从入门到熟练的过度,即时你熟练了,也不一定就是一个优秀的程序员,还要下面的条件。
正则表达式:
正则表达式对于程序员,就是一把绝甜绝美的的长生剑。正则表达式是强大、便捷、高效的文本处理工具。正则表达式本身,加上如同一门袖珍编程语言的通用模式表示法,赋予使用者描述和分析文本的能力。正如此,正则表达式的运用,不仅能使他人快速读懂代码,也是让程序更为简单的快速途径。
编程语言:
编程语言代表了开发人员对计算机本身的理解与对软件开发工作的执着。同时,建立在编程语言之上的基础也标志着程序员的职业化道路发展到了一个新的阶段。
调试能力:
任何一位成功者都经历过艰苦的磨练。对于程序员来讲,不断的学习软件调试,灵活运用软件调试技术,是最终成为优秀编程人员的根本途径。正所谓“软件有大美,调试见真功!”
SQL数据库:
SQL是一种简单但表达能力丰富的访问接口,因此被应用到RDBMS成为大部分信息系统的标准数据存储介质。所以对程序员而言,不仅要有良好的调试能力,更要深刻理解SQL数据库。
算法与数据结构:
要成为编程高手,必然要有必胜的信心,信心的来源是建立在扎实的基本功之上的。而程序员的基本功,无疑就是对“算法与数据结构”的理解。对算法与数据结构的理解有助于程序员了解语言背后的具体细节,同时,数据结构的定义很大程度上决定了程序的可维护性和可扩展性。
开发环境:
开发环境对于程序员的作用是不言而喻的。作为朝夕相处的环境,如何选择适合自己的IDE就显得尤为重要。
编程思想:
编程思想也往往被程序员所忽视,忽略了编程思想这种最有效、最直接、最可靠的武器。编程思想是程序员对软件开发的理解,对需求问题的分析,对程序开发的总体规划。
⑤ 顶级的程序员是怎么样的
顶尖程序员常说:“这个我以前写过一个模块,我找找,很快。“简直是没有对比就没有伤害!
有人认为,普通程序员用复杂的代码解决简单的问题;而高级程序员能把复杂的问题简单化并用简洁的代码去实现。在w3cschool看来,顶尖程序员和普通程序员至少在以下6个方面大有区别。
1、文档能力
“文档是第一生产力”,这一点在程序员的世界是毫无异议的。看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他们tutorial,他们的getstarted,他们的reference文档写的多么的易懂。
如果要获得更高的报酬,文档是绝对关键的因素。有文档就有沟通,就有交易。搞技术的容易忽视文档的力量,也因为写文档十分困难,更多程序员选择舒适区,习惯写下代码,但正因为如此,妨碍了不少程序员的进阶。
2、解决BUG的效率差别
普通程序员可以利用搜索引擎(网络)寻找答案,经常性找不到好的解决办法,然后更换技术方案!顶级程序员也利用搜索引擎(Google)寻找答案,一般bug都顺利解决(其实跟前期框架选择等关系非常大)。
3、表达能力
表达能力决定了你所做的技术的影响范围,决定了你的影响力,决定你的威信,决定了你的报酬。普通程序员和顶尖程序员的表达能力差别非常大,这主要还是取决于他们格局的不同。良好的沟通能力让你理解产品经理的设计思路,让你更好的展现自己的特长。
对于累积人脉,当你的阅历越来越丰富,人脉对你的帮助也越来越明显。
4、优雅和美观的抽象能力
普通程序员和顶尖程序员之间的区别在于优雅和美观的抽象能力。好的系统通常是要做到两个方面才合格,其一是好用,其二是好看。但是令人遗憾的是,普通程序员仅仅从实现的角度进行堆砌。顶尖程序员往往能够更进一步,经常会去思考用户在操作这个功能的时候,到底还会做什么事情。
所以,顶尖程序员和普通程序员区别就是是否拥有用户意识,是否敢于直面用户。好用,好看一直是软件能够被普遍采用的前提,因此,我们有必要学会抽象优雅。
5、面对如何开源社区态度
普通程序员几乎没有在开源社区混,这也导致经常对新技术发展关注度低。而顶尖程序员则是拥抱开源社区。
6、面对功能点
普通程序员:立马开始构思自己如何实现脑海里出来一个方案。
顶尖程序员:发现功能点很普通github上面早已经有非常多的解决方案,着手根据业务选择一个最适合最优的方案
⑥ 程序员用CPU烤肉,你还见过程序员的哪些神奇操作
之前,我看到有一个程序员因为加班太累,买无人机遛狗,特别有趣,还有程序员买房会先做一个爬虫工具,把所有房产信息分别抓取过来,放到一张表格里,通过各种数字模型分析买房,所以,程序员很辛苦,但她们的神奇操作也很多。
⑦ 作为一个程序员,如何提升自己的逼格
装逼这个词只是对码农说的,真正大师级的程序员是自带装逼属性的,还是属于public的。所以,对于一些初级程序员要怎么装逼呢?
系统配置。不要用windons系统,要用linux,而且还是命令行的,然后带个机诫键盘,找个咖啡店,先泡一杯咖啡,在“哒哒哒”的敲击一系列命令,屏幕上最后有黑客帝国的字母雨的效果,别人一看,那肯定以为你是个一个程序高手。
⑧ 程序员如何转型产品经理需要哪些逆天“装备”
需要注意以下几点:
1.关于契机
其实我觉得这不是契机的问题,是基因的问题,一个真正适合做程序员的人是不会考虑转型的,在职业发展上,程序员比产品经理的路线更清晰,投入与产出比更稳定,而产品经理,说实话,是个很看脸的职业,这个职业的路线有很大的不确定性,为什么我会转型,因为我本就不适合做程序员,我无法满足于翻来覆去就是Copy&Paste的工作,对于技术也没有狂热的追求,当然,我十分讨厌加班,确切的说是无休止,非计划性,带有潜规则性质的加班。
你或许会问,既然不适合,你为什么要选择程序员这个职业呢?说实话,在没做之前,我真的不知道我不适合。
回到正题,我是在一个什么情况下转型的产品经理呢,颇有些黄袍加身的感觉。人是有惯性的,放弃既有的优势,去投入一个看似美好,却很可能是刀山火海的职业,是一次危险的赌博。
没有亲身体验产品经理,只能说是这山望着那山高而已,所以始终带着不确定性,而当时公司规模急剧扩大,中层管理青黄不接,没有产品经理的情况下,BOSS考虑到空降人员可能水土不服的问题,希望从内部发展可靠的同志,于是对我进行了先进性教育,我思前想后,就是那句“我发现你对产品很有感觉”,让我抱着士为知己者死的念头,决绝的点了点头。
2.关于准备
说实话,没有准备,也没办法准备,因为你面临的是一个完全未知的岗位。就想你看别人玩游戏,和自己亲自玩游戏,是完全不同的感觉。别人无比娴熟的操作和风骚的走位使你拍案叫绝,但是你真正自己去玩的时候才发现,APM不够啊,意识跟不上。
怎么准备,看攻略,好吧,那些写攻略的人往往讨论的是在一个对方站桩的情况下,你怎么来干死它,却没讨论,如果对方后退了一下,或者忽然又一个敌人出现了,你该怎么面对。在实际的工作中,你面临的是各种意想不到,千奇百怪的局面,想通过攻略来解决是完全不现实的。
3.关于有用
我觉得最有用的东西就是换位思考,以前做程序员的时候,我只需要考虑我怎么来实现,我的时间够不够,项目什么时候上线,有了任何问题,我可以等待,我可以扯皮,我也可以作壁上观。但是作为一个产品的负责人(视公司岗位职责的不同,或许有很大出路),我就像一个管家婆一样,必须时刻注意到哪里可能出现炸弹,每天更多的时间不是在执行,而是在观察,思考,应变中度过。
我不再拥有一个可供我自由分配的八个小时,我的上一秒可能在思考问题,下一秒就会有人过来找我,碎片时间变的很多,就连上厕所,都会有电话进来,你随时保持着战斗状态,不能有一丝一毫的松懈。
这个时候再去看程序员这个岗位,你发现,原来是这个样子的,但因为我也混过,我自然知道程序员的心态,这是我的最大优势,我能够和程序员很好的沟通,并能理解他们在别的策划转为产品经理的童鞋那里难以理解的问题,所以我这边的研发进度往往保障的很好。
我发现所有的事情都不是像我想象的那么简单,方案的问题,计划制定的问题,人员本身的问题,处处都会产生蝴蝶效应,我总是在不安中小心翼翼的防微杜渐或亡羊补牢。
但我发现,即便我付出了再多的努力,项目还是会因为各种原因走向失败,这个时候检讨是没有意义的,天时地利人和,缺一不可,为什么我说产品经理这个职业看脸,是因为这个职业看起来能决定任何东西,又发现自己决定不了最关键的问题,所谓尽人事,听天命,以前总被我嗤之以鼻,我发现,有些时候,我真的很有共鸣。(作者:Robert Struggle)
⑨ 如何做一名优秀的程序员
首先就是你的目标就不明确,你先要确定自己打算向哪方面发展
当好一名合格的程序员不仅要有扎实的基础知识,还要多思考,多实践,勤看书,更要有团队合作精神,平时多和别人交流,俗话说:“三人行必有我师”,多上网看看一些资料,看看别人对同一问题的看发会有很大的启发,要知道不是你一个人在写程序而是和大家一起写程序,注重团队的力量!编程是一种艺术,要好好的发挥团队的力量把它做的漂亮,完美。
勤奋联系,多写一些程序,然后在根据程序代码多想想用多种方法去测试运行它`实习基地给我们提供了实际做一些项目的机会`我会借这个机会多学习`多思考,多实践。多看一些相关的书,不断提高自己。
我觉得做一名程序员是很难的,特别是做一名合格的程序员就更要严格要求自己,增加团队合作能力,不断提高自身水平。
1.1 程序≠软件
现在很多人以为程序就是软件,软件就是程序。事实上,软件和程序在20世纪80年代时,还可以说是等同的,或者说,在非pc领域里它们可能还会是等同的,比如说某个嵌入式软件领域,软件和程序可能是等同的。但是,在pc这个领域内,现在的程序已不等于软件了。这是什么意思呢?
1. 软件发展简述
在20世纪80年代的时候,pc刚诞生,这时国内还没有几个人会写程序。那么,如果你写个程序,别人就可以拿来用。这时候的程序就能产生价值,这个程序就直接等同于软件。
但软件行业发展到现在,这里以中国的情况为例(美国在20世纪80年代,程序已经不等同于软件了),程序也不等同于软件了。因为现在会写程序很容易,但是你的这个程序很难产生什么样的商业意义,也不能产生什么价值,这就很难直接变成软件。要使一个程序直接变成软件,中间就面临着很高的门槛问题。这个门槛问题来自于整个行业的形成。
现在,你写了一个程序以后,要面临商业化的过程。你要宣传,你要让用户知道,你要建立经销渠道,可能你还要花很多的时间去说服别人用你的东西。这是程序到软件的一个过程。这门槛已比较高了。
我们在和国内的大经销商的销售渠道的人聊天时,他们的老板说,这几年做软件的门槛挺高的,如果你没有五、六百万做软件,那是“玩”不起来的。我说:“你们就使门槛很高了。”他说:“那肯定是的。如果你写个“烂”程序,明天你倒闭了,你的东西还占了我的库房,我还不知道找谁退去呢。我的库房是要钱的呀!现在的软件又是那么多!”
所以,如果你没有一定的资产的话,经销商都不理你。实际情况也是这样的,如果你的公司比较小,且没什么名气,你的产品放到经销商库房,那么他最多给你暂收,产品销不动的话,一般两周绝对会退货。因为现在经销商可选择的余地已很多了,所谓的软件也已经很多了。而程序则更多,程序都想变成软件,谁都说自己的是“金子”。但只有经受住用户的检验,才能成为真正的“金子”。
这就是美国为什么在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在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩vb,做程序时,去找一堆控件集成一个软件。
现在一种流行的说法是,中国软件人才现在是一个橄榄型的人才结构,有大量的中等水平的程序员,而初级和高级程序员比较少。而我认为,现在中国绝大多数都是初级的程序员,中级程序员很少,高级的就更少了。所以,现在的人才结构是“方塔”形,这是一种断层的不良结构。而真正成熟的软件人才结构应该是平滑的三角形结构。这样,初级、中级、高级程序员才能充分地各施所长。三种人才结构对比如图1.1所示。
图1.1 三种人才结构对比
1.2.2 初级程序员和高级程序员的区别
一般对于一个问题,初级程序员和高级程序员考虑这个问题的方法绝对是不同的。比如,在初级程序员阶段时,他会觉得vb也能做出应用来,且看起来也不错。
但到了中级程序员时,他可能就不会选择vb了,可能会用mfc,这时,也能做出效果不错的程序。
到高级程序员时,他绝对不是首先选择以上工具,vb也好,vc也好,这些都不是他考虑的问题。这时考虑的绝对是什么才是具有最快效率、最稳定性能的解决问题的方法。
软件和别的产品不同。比如,在软件中要达到某个目标,有n种方法,但是在n种方法中,只有一种方法或两种方法是最好的,其他的都很次。所以,要做一个好的系统,是很需要耐心的。如果没有耐心,就不会有细活,有细活的东西才是好东西。我觉得做软件是这样,做任何事情也是这样的,一定要投入。
程序员到达最高境界的时候,想的就是“我就是程序,程序就是我”。这时候我要做一个软件,不会有自己主观的思路,而是以机器的思路来考虑问题,也就是说,就是以程序的思考方式来思考程序,而不是以我去设计程序的方式去思考程序。这一点如果不到比较高的层次是不能明白的。
你设计程序不就是你思考问题,然后按自己的思路去做程序吗?
其实不是的。在我设计这个程序的时候,相当于我“钻”入这个程序里面去了。这时候没有我自己的任何思维,我的所有思维都是这个程序,它这步该怎么走,下步该怎么走,它可能会出现什么情况。我动这个部分的时候,别的部分是否要干扰,也许会动一发而牵全身,它们之间是怎么相互影响的?
也只有到达这个境界,你的程序才能真正地写好,绝对不是做个什么可视化。可视化本身就是“我去设计这个程序”,而真正的程序高手是“我就是程序”,这两种方法绝对是不同的。比如,我要用vb去设计一个程序,和我本身就是一个程序的思维方式,是不一样的。别人也许觉得操作系统很深奥,很复杂,其实,如果你到达高手状态,你就是操作系统,你就能做任何程序。
对待软件要有一个全面的分析方法,光说理论是没有用的。如果你没有经过第一、第二、第三、第四这四个阶段,则永远到达不了高境界。因为空中楼阁的理论没有用,而这些必须是一步一步地去做出来。
一个高级程序员应该具备开放性思维,从里到外的所有的知识都能了解。然后,看到世界最新技术就能马上掌握,马上了解。实际上,技术到达最高的境界后,是没有分别的。任何东西都是相通的,只要你到达这个境界以后,什么问题一看就能明白,一看就能抓住最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。
从程序员本身来说,如果它到达这一步以后,他就已经形成了开阔的思维。他有这种开放性思维的话,他就能做战略决策,这对他将来做任何事情都有好处。事实上,会做程序后,就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能轻而易举地解决。实际上,对开发计算机软件来说,没有什么做不了的软件,所有的软件都能做,只是看你有没有时间,有没有耐心,有没有资金做支撑。
这几年,尤其是这两三年,估计到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位的差别。所以,微软的那些“老头”,四、五十岁的那几个做核心的人,现在正在玩这些东西。你说微软的技术它能不先进吗?是linux那几个玩家能搞定的吗?
微软的技术非常雄厚,世界计算机的最新技术绝对集中在这几个人手里。而且这几个人的思维模式非常开阔,谁都没有意识到的东西他早就开始做了。现在64位的cpu都出来一二年了,你说有什么人去做这些应用吗?没有,有的就是那几个unix厂商做好后给自己用的。
所以,追求技术的最高境界的时候,实际上是没有年龄限制的。对我来说,现在都三十三了,我从来没有想过退出这行,我觉得我就能玩下去,一直玩到退休都没有问题。我要时刻保持技术的最前端,这样的话对我来说是不困难的,没有任何累的感觉。
很多人说做程序不是人干的事情,是非人的待遇。这样,他们一旦成立一个公司,做出一点成绩,在辉煌的时候马上就考虑退出。因为他们太苦了,每天晚上熬夜,每天晚上烧了两包烟还不够,屋子里面简直就缺氧了,好像还没有解决问题。
白天睡觉,晚上干活,那当然累死了,这是自己折腾自己。所以,做程序员一定要有一种正常的心态,就是说,你做程序的时候,不要把自己的生活搞得颠三倒四的。如果非得搞得晚上烧好多烟才行,这样你肯定折腾不到三十岁,三十岁以后身体就差了。
事实上,我基本上就没有因为做程序而熬夜的。我只经历过三次熬夜,一次是在学校的时候,1986年刚接触计算机时,一天晚上跟一个同桌在计算机室内玩游戏,研究了半天,搞着搞着就到了天亮,这是第一次。然后在毕业之前,在286上做一个程序。还有一次就是超级解霸上市前,那时公司已吹得很大了,那天晚上没法睡觉。
一般来说,我也是十二点钟睡觉,第二天七点就起了。所以说,只有具有正常的生活、正常的节奏,才有正常的心态来做程序员,这样,你的思路才是正常的,只有正常的东西才能长久。搞疲劳战或者是黑白颠倒,时间长久后就玩不转了,玩着玩着就不想玩了。
⑩ 现实中程序员是怎样飞快敲代码的
敲代码很快有几个条件
1.对项目代码和结构非常熟悉,知道整个数据流的在代码中的流动过程和变化过程。知道当前新增的代码在整个项目处于哪个位置,对于数据会有产生什么新的变化。这些要心理有数。也就是从架构层面去思考代码的编写。
2.对于需求理解的很透。这样业务逻辑转成代码逻辑就不会有任何不清楚的地方。
3.已经解决了技术难点,也就是说前期测试性代码已经写过了弄清楚了,避免了突然出现的技术性难点
4.新增的代码和新增的数据结构已经仔细思考过了,并设计好。也清楚引入这些新的代码和数据结构对现有代码的整体影响
5.异常点的位置的处理方案已经安排好了。写代码一部分是正常业务流程,算法过程,但是另外一大块就是处理各种异常。当异常出现之后,是代码重试,报错后忽略,还是报错之后停止代码,还是报错后清理代码并重新恢复上一个状态,等等。这些都是要心理有数。
6.对于如何新增源代码文件,命名函数,命名文件名,命名类名,命名变量名有一整套方案。有时候想个函数名或者变量名都要卡好几分钟,就不算飞快了。别笑,想个变量名,网络十来分钟的时候多了去了。
7.外部环境已经准备好了。IDE稳定,数据库结构稳定,数据稳定,网络稳定,访问网页顺畅,准备好免打扰的牌子。准备好刷卡提需求的二维码,准备好板砖和大刀,预防产品经理提需求和改需求。