第一篇:做程序员的劣势
第一,严重青春饭
看看华为淘汰34以上员工就知道了。
第二,社交圈很难往上走 所有人都追着医生交朋友,手握现金的百姓会追着金融人交朋友,你就是做个婚庆,装修,修车,警察,哪怕开个小饭馆都会有人托你办事。CS除了修电脑别的技能对行外人几乎没有用。码农想积累人脉几乎没戏。
第三,连续不离散的无意义学习从入行到今天,我已经学习过不下8门语言,三四种数据库,读过无数库的源码。而且我这些积累绝对可以通过任何对口公司面试。但是,这种积累随着技术更新换代,完全没有意义。我这十来年来的技术经验积累的努力放在任何一个其他行业都够成为技术专家了,但是CS因为技术更新毫无意义。
第四,上升通道受限于运气
如果你做建筑工程,那你从万达跳槽到华远,你的经验直接可以应用,但是计算机不行,你在微软用微软的底层库,即使你能默写C#底层全部实现,你到intel,龟壳字,18摸一样是一个小白,我前同事从诺基亚过来,做塞班的专家,过来诺西一样是开发,我还得教他风河的API,另一个前同事都已经快从组长升经理了,跳去intel一样底层开发小兵。甚至诺西内部的数通架构师因为部门缩减去fdd做测试。可以说CS绝大多数人没机会做一个项目从码农一直做到总监。一个码农能否晋升靠的主要是运气。
第五,上升通道受限于不具备的能力
码农最不具备的能力就是PPT吹牛逼拍马屁搞关系。我敢肯定所有大公司都如此,小公司不甚了解。不过创业公司是赌博,不好乱讲。大公司能升上去的都是会玩人际的人。我在过的几家大公司总监,研发总监,不是PM就是测试出身,或者职业经理人。研发第一远离业务,第二缺乏人际公关能力,绝大多数做到基层经理就止步了。经理上不去,码农也就上不去。只能走架构师和技术专家路线。但是参见上一条,一个公司的架构师和技术专家到另一家公司几乎和小白无异。第六,工作时间过度占据生活时间
我从业十来年几乎日日10小时++。失去的时间是你一生中最宝贵的财富,其他人可以用这个时间做很多事情,家庭,三产,人脉积累,运动健身,旅游娱乐。而码农不行。
第七,智力付出和收入严重不成正比 行外人一定会反驳,可惜事实的确如此。一个动态规划可以拯救企业管理中一跳产品线为企业节约巨大成本或创造巨大收益。但是放在计算机行业,不过是节省一台虚机的一部分运算量,节省成本至多不到万元。解一个中高度复杂bug中的弯弯绕绕所花费的智力成本放在扔个一个行业都足够一个月的业绩,但是计算机行业却不过是一两天的绩效考核。
第八,可替代性强
这点关联前述一三四。首先,码农工作的本质更多的是学习一门语言,然后应用这门语言对公司一个具体业务实现科学家的想法。计算机行业科学研究好玩,数学好玩,算法好玩。但是多数人是码农而非科学家,数学家,算法研究员。码农就是实现业务代码。这就导致了工作极容易上手进而可替代性高。即使是高级语言中最繁琐的C++从0到能略有瑕疵的完成基本工作一年学习足以。更何况python, JS, java, php这些极易上手的语言现在已经能完成很多,绝大多数工作了。剩下的就是熟悉业务。而熟悉业务对于十年工作经验和一年工作经验者时间差值最多不超过半年。这就导致了可替代性随着年龄增长并无法出现线性提高。可以说计算机行业可替代性与年龄经验是对数曲线。而多数行业也是线性甚至有些行业是指数。
这些现象都是事实,但是并不构成不做程序员的理由
一 金字塔结构
无论如何提倡平等、自由。社会一定是一个金字塔结构,古今如此、中外如此,行业如此。金融行业的钱多吧,2016平准薪酬达到30W,但如果你是银行的小柜员,你拿得到30W?金融是一个顶部高度聚集的行业,大佬拿大头,柜员嘛,呵呵。
任何行业,顶部肯定是1/10的人,做金融也好、警察也好、医生也罢。你做警察,你能说你35岁能干到总监?剩下9/10必定是小兵、被统治者、码农。二 万精油
计算机实际上是一个万精油行业,什么行业都能干,金融需要、电商需要、房地产也需要。
但业务才是公司核心:房地产考虑如何卖房、教育考虑如何招生、电商考虑如何成交… 程序员?保证系统好用、稳定就好,万一你受不了996辞职,拉一个人年轻精壮的人来照样干。
因此,单单代码好并无卵用,你人际关系不好,活一般,NB不会吹,PPT不会做,那你价值何在?你能默写C#底层库的全部代码,动态规划信手拈来,精通8门语言,4个数据库,然而公司并不需要,又有何用?
JD上经常看到的“我们是一个技术驱动型公司…”千万别信:国人懂技术驱动?有技术驱动?外卖火就全做外卖、单车火就全做单车,屁股决定脑袋,流氓引导无良中产。骗骗码农而已,别当真。
三 关键靠人品
技能撑死只占成功因素的30%。Facebook的代码也就是培训班水平,微软第一版操作系统直接是向别人买的,就连Google也是后来招人重新写。
但扎克伯格身为犹太人的文化传承、从10岁开始做项目带来的素养、哈佛大学的优质人才带来的产品战略,这才是关键。技术从来不是主导,你的眼界、思考、产品能力、发现机会的能力,才是决定你能否发展的主要因素。
你的行业怎么样?细分领域如何?公司前景如何?你是什么位置?比如你做互联网职业教育,你知道教育市场如何细分么?你知道公司所处的赛道么?你知道国外公司的几种玩法么?你知道几种教学法?你又知道几种学习模式? 万物本是一体,编程区区小技,何足为道。
第二篇:如何给程序员做绩效考核
如何给程序员做绩效考核
绩效考核的五种死因
程序员作为企业开发力量的最核心资产,无疑得到公司从上至下的一致关注。开发是个智力密集型产业,程序开发的特点是,付出相同时间的情况下,两个开发者之间的产能会相差十几甚至几十倍。软件开发人员向来以‚不容易考核、工作不容易被量化‛而著称。本期,我们重点分析程序员考核的‚死因‛及对策。
典型的程序员考核的产生
分析考核死因之前,我们先看下它是如何出生的。某天,公司老板突然想到一件事——我不懂研发,而研发对我公司这么重要,怎么办?念一及此,老板不禁有些紧张,马上叫来HR开会,安排本月人力资源部分的工作重点,那就是‚研发人员考核‛,务必贯彻到位、立即执行。深谙老板意图的HR,回到工位后立刻上网买书,从如何考核、KPI实务到平稳计分卡策略一应俱全,书到手之后连夜‚抄书‛赶制考核体系,整理出‚研发人员考核方法‛。第二天,HR把此考核方法交给研发总监并告知‚老板要考核你们,这是考核办法。具体指标和KPI请部门自己制定,本周末之前报给人力资源部。我们会汇报给总裁‛。研发总监拿着连夜撰写制度的人都没明白的‚办法‛找到项目经理:‚老板要考核我们,这是考核办法。你们团队成员的具体指标和KPI你自己定,明天下班之前汇总给我。‛项目经理找到了程序员:‚老板要考核你,这是考核办法。你自己的指标和KPI你自己定,今天中午之前给我。‛程序员迷惑地问:‚目标不是公司制定的吗?‛
很多考核就这么荒唐的开始了……
很快考核变成了每月项目经理给组里的程序员打分。
于是,老板很满意:‚我终于可以放松了,以后我们靠考核制度管理研发人员。我们从此摆脱了‘人治’时代!‛
HR也很满意:‚我不用明白研发是什么,更不必了解程序。我只要他们知道,我可以扣他们的钱就行了,还是用他们自己制定的指标!‛
其他人都不太满意……
不久之后,公司就会发生程序员离职率升高的现象。被考核者,诸如:程序员、项目经理、研发总监都走光之后,考核就这么死了!
接下来,谈谈程序员考核的五种死因及对策。
死因一:考核只以事件为核心
公司没有利润就不能生存,研发项目的进度很多时候决定着公司的利润。所以很多考核是把项目无限拆分到程序员层面,这样的考核只以事件为中心,关注事件是否做成,而不关注人和人的发展。只以事为中心的考核把程序员当成了生产线上的机器,有投入(高工资)就要有产出(高质量的代码),程序员被当成了标准件,即没必要有太多成长(因为做的都是相对重复的工作),也不能时常发生故障(经常加班也不能请假)。
有些程序员自号‚IT民工‛与这种考核体系的存在有很大关系。
这种考核体系可以维持短期内的高效率,长期执行会导致整个系统的崩溃。很多公司人员不断更替,根本无稳定可言,一部分原因是执行了或者实质上执行了只以事件为核心的考核。
专家支招:
张大志:承认程序员也是人,尊重人的个性是考核的基础。注重培训,在项目压力大时侧重结果,在有 Buffer的情况下关注程序员技能的提高和个人的发展是解决此类似问题的核心方法。在项目周期的不同阶段对考核方法进行调整的复合式考核方式,更能让企业向目标前进,也能保持程序员的热情。
胡争辉:换个角度从结果考虑,举一个最常见的例子,四个人合作种树,A挖坑,B种树,C填土,D浇水。如果考核只以事件为核心的话,那么当B没有种树时,C依旧填土,D依旧浇水。从考核来说A、C、D三个人都得了满分,就算B得了0分,平均分也该有 75%,超过60%及格线了,但是种树这个任务却没有完成。所以对于只以事件为核心的考核来说,不仅让程序员感觉不到团队的存在,而且程序员也不会为团队考虑。在这种情况下,考核就要调整为既包含个人要完成的事件,也要体现个人对团队全局的理解。
死因二:考核标准的一相情愿
第二个导致考核死亡的原因是:相关方法的制定、标准的出台都只以公司角度为惟一视角,一切服从项目需要、服从公司需要,绝少考核其它因素。所有考核指标都由公司来定,不让程序员参与意见。我就见过这样的开发计划:项目组成员工作12小时两班倒,7×24小时、持续长达3个月、没有Buffer。按这样的项目计划考核,除了能直接导致人员流失之外,没有其它功用。
很多程序员是在被扣工资之后才被相关人员告知自己的考核指标,之前根本没有人通知。考核时闭门造车的情况并不少见。
专家支招:
张大志:加强沟通,让程序员在考核开始之前了解自己的指标,是惟一克服此种死法的工具。公司怕与程序员就考核指标进行后,指标有贯彻不下去的风险。但考核失败的代价要远远大于对考核指标进行合理修改的代价。程序员如果离职,那很多事情都要重新来过。
胡争辉:在制订考核指标时,要始终贯穿考核的杠杆作用,也就是通过给员工制订影响切身利益的考核指标,让员工重视这些考核点,进而推动项目的完成,保障公司的利益。既然考核起到用小利益推动大利益这样一个杠杆作用,那么就不仅要让员工理解考核的指标,更要让员工在开始工作之前就要对能不能完成考核指标给出反馈。
死因三:考核制度的不合理性
很多考核刻板而没有弹性,让人感觉只是为了扣工资而制定的。常能考到程序员通宵加班,第二天凌晨离开公司回家睡觉,中午到公司继续工作。发工资的时候发现,扣了半天的钱,因为有半天不在公司。程序员会想:‚那我通宵也没给加班费啊!太不公平了!‛
考核制度没有弹性只能伤害程序员的积极性。
专家支招:
张大志:如同公司市场政策僵化会导致公司的失败,考核制度的僵化会导致制度本身的名存实亡。永远记住我们考核的是人而非机会,保持适当的弹性。
胡争辉:考核制度不仅有引导员工完成公司既定目标的职能,而且还有体现企业文化的职能,在企业文化中对一件事情只有一种观念,而不会有互相冲突的两种观念。例如,提倡加班的公司就不会提倡按时上下班,反之亦然。但是企业文化中也不会在提倡一个观念的同时,明确的反对另一个观念。比如说公司提倡按时上下班的时候,不会明确反对加班。所以考核制度难免和企业文化有冲突,这种情况在公司的HR新上任的时候尤为突出,因此HR在上任伊始,不仅要学习企业文化中提倡的观念,也要理解企业文化没有明确反对的那些观念,进而通过考核制度体现出来,让考核制度成为落实企业文化的有力工具。
死因四:考核制度的虚无性
国人常讲‚王子犯法与庶民同罪‛,但程序员考核面前的大多数情况下却很难做到人人平等。评分者看好的,往往考核松些;无门无派的考核相对客观,与评分者关系紧张的一般都是最低分。意思很明,就是为了挤兑你走呢。考核于是成了政治斗争的工具,成了打压异己的手段。
专家支招:
张大志:有效设立方监督机制、360度考评、轮换考评者是解决以上问题,避免考核成为斗争工具的方法。也许有人的地方就有斗争,但是程序员考核仍然应以客观、公正为标准。
胡争辉:为了避免考核的主观和随意,应当建立自评分与考评分相结合的制度,不仅要由考评者打分,也要由被考核的员工自己打分,对于这两个打分有显著差异的时候建立复审制度,由更高级的管理人员对考评结果组织仲裁,仲裁小组应当包括高级管理人员、HR以及在考核周期内与被考核的员工有工作关联的其他员工组成,通过这样的流程不仅可以避免考核的主观和随意,还可以借此改进考核制度。
死因五:考核中HR常胜不败
考核要有监督机制,但并不需要一个婆婆式的人物在背后指手划脚。很多程序员考核中HR都充当着这类不光彩的角色。不了解研发的HR制定出来的考核制度,可行性必然不高。与此同时,一旦有程序员因为不满考核而离职,HR会马上抛出自己的理论:‚此程序员不适合我们的企业文化,他还不擅长沟通。‛即使走的是项目骨干,HR还是拿出这套说词,很让人汗颜。
一个非理性的群体里很难容下理性的程序员,离开可能是最好的方法。
专家支招:
张大志:开放的心态是做好HR的前提,考核的时候人力资源部的同事不应该把自己当神,这里不需要神,而应该把自己的角色定位于用心理解程序员的朋友。
胡争辉:作为一个完善的考核制度而言,不仅应当由HR部门组织对员工的考核,也应当有对HR部门的‚考核制度‛。这种考核应当以员工满意度为指标。比如说一项考核指标遭遇大部分员工表示不满的时候,就需要对此进行调整。不合理的考核如果长期得不到改善,会有越来越多的员工抱着‚法不责众‛的心理对待这项考核,长期以往,还会影响到考核制度的严肃性。
第三篇:做程序员有前途
做程序员有前途
来源: 孙允的日志
做程序员有前途
(一)你适合当程序员吗,你知道编程序是怎么回事吗?
1、程序员意味着要编程序。(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)
2、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。(说坦白点就是,在你没有找到乐趣以前,它很枯燥)
3、你有对新技术追求的热情吗?你有刨根问底的探索精神吗?(热情绝对是最重要的!你仔细思考一下自己的性格适合当程序员吗?)
4、当程序员决不是什么好差事,时刻需要学习,需要思考。(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序员的未来很迷茫。(但我认为关键看你自己!我希望你是一个有追求的人,不仅仅是混碗饭吃。因为真正的乐趣在于创造;如果你能改变软件业的历史,那?*怯⑿郏徊幌氤晌狟ill Gates,不想成为Dennis Ritchie和BjarneStroustrup,我会说你没有追求。有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:一个程序员对自己的蠢春苊悦#谑侨ノ噬系邸? “万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的” 于是他去问Lippman。Lippman说“程序员的未来就是驾驭程序员” 这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的” 于是他去问Gates。Gates说“程序员的未来就是榨取程序员” 这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的” 于是他去问侯捷。侯捷说“程序员的未来就是诱惑程序员” 这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝摇摇头“唉,我的孩子,你还是别当程序员了”)
6、当程序员还是很有乐趣的。(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗?)
7、当程序员不易也不难。(世间事有难易乎?为之…;不为…。你有决心和信心吗?)
8、你真的要当程序员?是你自己的想法?
9、你舍得花钱买书吗?(读好书绝对是学习编程的最佳捷径。你一定会说,现在电脑书籍真T.M.D贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。)
10、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。
11、编程序就是编写程序。
12、你想好了吗?(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。)
(二)一个程序员应该具备的基础知识和概念
1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要!)
2、机器语言和微指令集的概念。
3、程序的概念。
4、汇编语言是低级语言但不是机器语言。
5、高级语言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语)
6、编译程序和解释程序的概念和其原理。(编译器是高手和专家编写的)
7、HTML、XML等是标识性语言。
8、Prolog是人工智能语言。
9、操作系统OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)
10、Windows编程说白了就是Windows API的调用。(中国的程序员很多只是会编windows程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是编程的工具和环境,不是编程语言。
12、面向结构的设计概念。
13、面向对象的概念。(好好理解,兄弟,这个东西还是很重要的)
14、软件工程的概念和原理。(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)
15、数据库的概念。(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解网络概念。
17、了解多媒体概念。
18、熟悉和掌握数据结构和基本算法。
19、是不是要求太高了,别着急慢慢来,进步在不知不觉之中。(一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。要有信心和耐心。沉不住气怎么能成大事?!)
(三)教材推荐 ――-推荐的教材主要还是针对概念来的,最好选用名校的教学用书。
1、《计算机组成原理》(熟悉)
2、《数据结构》(掌握)
3、《操作系统》(了解->熟悉)
4、《The C language》(掌握)
5、《编译原理》(了解原理)
6、《汇编语言》(了解)
7、《计算机网络》(了解)
8、《软件工程》(了解)
9、《关系数据库》(熟悉)
10、《The C++Languege》(掌握)
11、《面向对象设计》(掌握;结合C++学习)
(四)一些经验和体会
1、真正的程序员用C++;(一位专家说的)
2、动手去编程序;
3、动脑去思考;
4、要有良好的编程风格;
5、读书,读好书,尽量读原版书!(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书)
6、有自己的学习计划;
7、总结自己的经验教训;(准备一个笔记本,记录错误和心得)
8、不要怕学新东西;
9、要有软件工程的思想;
10、善于发现问题,然后去寻找答案;
11、向高手请教;(要虚心直到你成为高手)
12、和同行交流;(不善于交流肯定不行)
13、懂得软件的实质,不要被千变万化的表象所迷惑;
14、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但光会这些库,我觉得还远远不够)
15、学习wiodows编程主要是学习windows OS和win32 API;
16、有空了解一下嵌入式开发;
17、有空了解一下PDA软件开发;
18、了解一下.NET框架和C#语言,也许它是你新的衣食父母;
19、要有耐心,不要作浮躁的人;
20、对程序加注释,并保留你的老程序;
21、学到的东西越多,了解的越多,你就越接近专家;
22、有空去逛逛CSDN,那里有你很多知己;
23、要有信心成为一个优秀的程序;
(五)一些好书的推荐
1、《The C Programming language》(Keinighan& Dennis Ritchie 1988)
2、《The C++ Programming Languague》(BjarneStroustrup 1997)
3、《Inside The C++ Object Model》(lippman)
4、《Effective C++》
5、《More Effective C++》(lippman)
6、《Exceptional c++》
7、《C++面向对象高效编程》
8、《设计模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推荐)
11、《The Art of Computer Programming 》
12、《Programming Windows》(Charles Petzold)
13、《VC++5.0技术内幕》
14、《MFC 深入浅出》
15、《软件需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序员参考手册》
19、《用TCP/IP进行网际互连》
20、《COM 本质论》
(六)学习计划----------这只是我的计划
1、《计算机组成原理》
2、《操作系统》
3、《数据结构》
4、《汇编语言》
5、《 C 》
6、《 C++ 》
7、《VC 技术内幕》
8、《Programming Windows》
9、《深入浅出MFC》
10、《Advanced Windows》
11、《Inside The C++ Object Model》
12、《Thinking in C++》
13、《Effective C++》
14、数据库
15、网络
16、嵌入式OS和编程
17、硬件单片机
18、.NET和C#
19、软件工程 20、UNIX和Linux
?2010 Baidu
第四篇:程序员必做的50题
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天? 【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。【程序6】
题目:用*号输出字母C的图案。【程序7】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。【程序8】
题目:输出9*9口诀。【程序9】
题目:要求输出国际象棋棋盘。【程序10】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【程序11】
题目:判断101-200之间有多少个素数,并输出所有素数。【程序12】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。【程序13】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,6 0分以下的用C表示。【程序14】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。【程序15】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。【程序16】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。【程序17】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。【程序18】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 【程序19】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。【程序20】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。【程序21】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。【程序22】
题目:求1+2!+3!+...+20!的和 【程序23】
题目:利用递归方法求5!。【程序24】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。【程序25】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 【程序26】
题目:给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。【程序27】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。【程序28】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。【程序29】
题目:对10个数进行排序 【程序30】
题目:求一个3*3矩阵对角线元素之和 【程序31】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。【程序32】
题目:将一个数组逆序输出。【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)【程序34】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。【程序35】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 【程序36】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。【程序37】
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。【程序38】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n 【程序39】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 【程序40】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。【程序41】
题目:八进制转换为十进制 【程序42】
题目:求0—7所能组成的奇数个数。【程序43】
题目:一个偶数总能表示为两个素数之和。【程序44】
题目:判断一个素数能被几个9整除 【程序45】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
第五篇:怎样做一名合格的程序员
作者:xx,1990年毕业于xx工学院计算机软件专业,后又于xx年毕业在xx大学完成软件工程专业硕士的学习,现供职于CNpC旗下的一个行业软件研发中心,因为在网上看了许多有经验的各路软件开发人员写的好帖,一时手痒兴起,也凑一篇壮壮声势。sO100
假设你是一名软件专业毕业的本科学子,如何在工作中~成为一名有较高职业水准的程序员呢,本文试图总结作者从事15年软件开发工作的感想,希望对有志成为职业程序员的人有所帮助,并借此机会感谢原xx工学院计算机系的和智玲老师和张怀宁老师,特别感谢我的硕士导师,xx大学计算机系的博导郑国梁教授。
注:本帖言辞尖刻,乃作者脾气秉性使然,如果你看着有气,就请多多见谅,放下别看了。
程序就是一系列按步骤进行的操作序列,它有好多种级别,比如最低级的微程序、次低级的汇编程序、高级的各种编程语言程序、最高级的脚本语言程序,也许我列的不对,但没关系,我要说的是不管是那个级别的程序,其本质都是操作的逻辑序列。大多数系统和应用程序都是建立在高级编程语言上的,比如C、C++、C
#、FORTRAN、BISIC、JAVA等等,就让我们只关注这一级的编程能力吧。因此如果一个程序员的逻辑能力不高,他永远都不能成为一名具有合格职业水准的程序员,我们在下面的讨论有关编程能力的方方面面,最终都是为了最大程度地提高和实现一名程序员的逻辑能力。
一、掌握基础知识:十六年寒窗的持续积累
从7岁读小学起,经过16年的学习,你从软件专业本科毕业后,必须完成以下几门专业课程的学习:计算机组成、操作系统原理、汇编语言、数据结构、编译原理、数据库原理、软件工程、结构性设计语言(pASCAL、)、面向对象设计语言(C++、C#)、计算机网络等,你最好还懂一些算法分析、分布式系统、计算机图形学、形式逻辑、人工智能原理、软件设计模式、软件构架/框架等研究生的课程,16年来,你积累的除了知识,更重要的是形成最适合自己的学习方法和工作方法。这些是你具备程序员职业水准的基础能力,不要受什么计算机软件怪杰之类传奇的影响,那不过是小概率事件,而且这些怪杰们就算没有读过软件本科和研究生,也往往自学了大多数专业课程,很可能比在校学习的学生对这些课程的精髓部分理解的更好,还有他们的工作方法和思维方式是特别而高效的,但普遍性差,可以借鉴,不宜模仿。好,所以现在你只需要问问自己,那些课程和知识都学会并掌握了吗?如果是,那就准备好进行实践了。
二、在实践中提高:成为一名高水平的Coder好了,你毕业了,在校功课都不错,也找了一个专业对口的工作,你想大展鸿图了,可是别急,你的翅膀还不够硬,不信我们说来看看。通常,你在工作中都会用到某一种单位/公司固定的操作系统和编程语言开发环境,比如Windows、UNIX、LINUX等操作系统,又比如用VC、VB、pB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等编程语言和开发环境,我们在后面把它们合称为开发环境。就在校学习的有关开发环境的知识而言,大概你距工作需要的差距是不小的,当某个操作系统和编程语言环境成为你的饭碗时,就不应也不能用通过课程/认证考试之类的眼光和要求来评价你的能力,即使你能考100分。
你需要深入地学习该操作系统和编程语言环境的各类开发手册的所有内容,你会说大多数你都用不上,其实你既对又不对,对的是单从使用的角度而言,你确实用不上开发手册的大多数内容,比如庞大的VC开发类库和复杂的开发环境,你在实际工作中能用到的不到总数的1/10或1/5,不对的地方在于,你用到的部分不是孤立存在的,它们是整个体系中的一部分,只有对整个体系有了一个较完整的了解,才能得心应手、随心所欲地用好你用到的部分,你才算初步具备在这种开发环境下进行Coding的职业水准(还远不够程序员的职业水准呢),而这只是刚开始。如何才能真正掌握一种开发环境的全面的知识呢,最原始的办法就是读开发指南/教程、参考手册,一般来讲,学习开发指南/教程时,你如果是一个认真的人,都会完成5/10~7/10左右内容的学习和练习,如果你想成为职业选手,就应该完成9/10以上内容的学习和练习。参考手册不同,大多数所谓的“程序员”们只是用到了才翻翻,这差的太远了,你应该象读开发指南/教程一样,每个环节都要读,比如VC,参考手册中的每个类,类的每个函数,都要读上几遍,它们往往是一小伙一小伙地纠缠在一起使用的,开始时读得你毫无头绪、心烦意乱,不要紧,还有一手呢,如果你开发环境安装的全面,它们往往都有开发商做的demo例子可看,你就进入另一个境界了,开始时你关注demo中的具体技术,后来你发现这些demo的程序写的都还算不错,结构简单但合理,如果你真的用心,就一定能发现一些个别的demo是极品,它所展现的程序逻辑结构是你设计不出来的,你现在有点更关心它的程序设计构架,甚于对你原始目的(某种相关的技术/技巧)的关注,这时的你,开始了从一名Coder向一名programmer的转变,你会忍不住要看看开发商提供的源程序,比如.h和.cpp,通常你会找到include路径下所有的.h程序,你才知道,哇!好多好多东东在参考手册中都没提到,你要学的太多了,没时间顾及其它的业余爱好了,现在知道为什么程序员是年轻人的职业了吧,你要有足够多的时间才行,即使你的智商有160。如果你走到这一步,在你工作的团队中,已经是经常有人向你请教技术问题,经常有人请求你帮忙debug,你已是公认的“高手”了,别得意,因为你仍然是个Coder,为什么这么说呢,你想想,你已深入了解了这个开发环境中的各种技能,知道一名Coder如何用好这些东西,可是你能设计的出提供给Coder们用的东西吗?唔……,你想了想,可能还不太行。对了,就是这样,你还是一名小我境界的程序员呢,本质是个Coder,当然已是一名高水平的Coder了,然而你需要进一步登堂入室才能成为一名真正的程序员。
让我们继续吧,通常你
点也许有点困难,但这种事干的多了,你就会越干越快,越来越
得心应手,你的逻辑能力飞速提升,你能看得上的逻辑结构优秀的程序开始不多
了,下一步就是练习。从工作中开始吧,如果你有空闲,你需要做至少两类练习,一类是算法练习,所有的经典算法都是经典的逻辑,题目有的是,像个好学生
一样吧,每年的国内国际编程竞赛都有逻辑要求非常高的题,你可以只选一两道
难题来做做。当你可以把复杂的单递归程序(只有A调A)变成非递归程序时,已经
不错了,如果你能看得懂双递归程序(A调A、A调B、B调A、B调B都有),我为你鼓
掌!你不必往下看了,我有点不好意思啦――班门弄斧,你快滚蛋吧!另一类是
把以前和当前你工作中你不满意的程序推倒重新设计一遍,这非常重要,省时省
力,因为你熟悉需求,技术上也没问题,目的就是改进程序的逻辑结构,很划算
哦,唯一要克服的就是:你对推翻以前工作中那点小小成就的心理障碍,如果你
真想优秀,说句粗话:这点心理障碍算个屁,一遍遍反复地推倒已有的成果只能
使自己快速进步,放手干吧,没什么好可惜的,马恩早就在《共.产.党宣言》里
说过了:在这个过程中,你失去的只有锁链(禁锢你思想的锁链)。
让我们来总结一下,经过自我否定后,再生的你尽管对过去的“业绩”还有一些
眷恋,但已是一个初步具备职业水准的程序员了,掌握了相应的技术和技巧,具
备了较高的抽象逻辑思维能力,最主要的特征是:能自觉地自我否定,不断地追
求更高水平的逻辑能力。
在这个过程中,如果你能注意以下一些小的方面,你前进的步伐也许会快一些。
l从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一
点,至少有两个好处,第一个好处是避免一大堆低水平重复出现的编译错误。一
名优秀的Coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该
控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要
追求一次编译通过,而一名职业水准的程序员,应该进一步做到即使用purify这
类的工具来检查源码,也不会存在严重的内存泄露。第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几
个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦!
l避免思维陷阱,只要你是人就一定有自己的思维惯性,这一定又会表
现在你的程序逻辑中,有时你就是从这个惯性中跳不出来(谁都有这个时候),但
要心里有数才行,所以你需要帮助,如果你有几个水平相若或更高的职业伙伴,太好了,当遇到花30分钟还打不下的bug时,就别浪费时间了,找他们吧,最要紧的是能思路清晰明确地表述你的问题,通常你自己在这个过程中或者伙伴中就有
人把问题解决了,又快又好。另外,有几个可以良性竞争的职业伙伴是人生的一
件幸事,1+1>2,大家各有所长,你最好做到及时公开你的成果,技不压身嘛,IT
发展的这么快,你再优秀,那点东东也没有什么值得隐藏的,所以你可以技术或
水平不够高,但千万不可以让真正具有职业水准的选手鄙视你的职业品质和行为。
l有自己debug的特点,下面的说法作者不敢太肯定,只是经验之谈。即
使在VC这种高度完善的开放环境下,你仍然应该要求自己仅凭打印语句就能debug
。这也有两点好处,第一个好处是,遇到bug你会认真想问题所在,而不是用
debug工具一步步简单地追踪卡在哪儿了,你定位bug范围的方式是从大到孝从
粗到精,这是一种自顶向下的思维方式,而用工具追踪,容易形成自底向上的思
维方式,这不算好,你应该先看到森林,再看到树木。我反复提及:程序就是逻
辑过程,大多数程序从main函数开始,是由数据结构和功能子程序组成的一个树
形结构的逻辑过程(要认清即使是面向对象的程序语言也是一样的),它的执行过
程是深度优先的,但你定位bug应该是广度优先的,好好想想这一点,嗯?第二个
好处是强迫你思考并记住而不是用工具看到调用过程,你大脑的抽象逻辑思维能
力和胳膊上肌肉的力量一样,都是练出来的,如果你的bug是程序结构上的逻辑错
误引起的,这一点就非常重要了,顺便说一句,最难打的bug就是程序逻辑结构错
误导致的bug。你要是真正明明白白地认识到这儿了,那我就没什么东西可以告诉
你了。总之
p;,Linux操作系统的一些源码不错,是开放的,你可以合法地搞到,其它的不要说
是我建议你侵犯知识版权啊!
四、天生神力:成为系统分析员
本来就论述如何成为一名职业程序员而言,本文已基本完成任务了,但《菜根谭
》有言:竭世机枢,似一滴投于巨壑,穷诸玄辩,若一毫置于太虚。既已乘兴到
此,何妨多置一毫于太虚呢,作者不才,干脆尽兴写算了。
你要是运气好,直接进入了一个严格规范生产的软件企业就业,刚开始就应该是
按别人做好的软件设计来实现编程,你可以有机会直接学习软件设计,当你积累的足够多了,能够对其中的一些设计提出好的改进建议,而且干得又快又好,就
会渐渐地展露头角,我相信你终有一天成为一名软件设计人员(注意,不是软件产
品设计人员),步入系统分析员的行列,但这还需其它的一些条件和自我~。如
果你在一个不规范的软件企业工作,那也不错,你很可能直接就有机会进行软件
设计,然后开发、测试,甚至还不得不自己定义需求,把软件开发过程的各个环
节走一个遍,当然这样对你的要求更高,而且你也不容易得到及时有益的指点,在正态分布的情况下,你应该是成长的很慢。但不管就业的单位如何,如果你决
心要成为顶尖软件职业选手,通常什么客观困难都阻挡不了你,然而你个人的因
素可能会阻止你的前进。下面提出的观点纯属一己之见,伤人自尊之处作者在此
提前道歉,并建议你除非对本文有强烈的兴趣,否则就请直接看第五节或放下别
看了。丑话已说在前头了,在各种软件开发组织的发展过程中的事实也证明,只
有少数程序员能成为系统分析员,我想这一点不是我杜撰的吧,因此你要是在看
接下来的部分时感到气愤难当,那也实在没着,纯属活该,因为作者只是在说明
自己的观点而已,你最多可以呲之以鼻,表示一下你的轻蔑好了,但没有任何理
由可以骂人!
作者自己没有到微软面试过,但身处软件行业,关于微软的许多东东当然还是有
耳闻的,据说微软招聘一名程序员要过五个已经成为微软程序员的面试关,而且
是一票否决制,又据说大多数面试题并非编程,而是一些有关逻辑和智力的题,作者私下也做过许多流传的微软面试题,并对此做法深以为然。程序的本质就是
逻辑,所以几十年前就有人提出编程是一门艺术,而艺术是要靠天份的,这一点
少有人反对。一个人的逻辑能力可以不断提高,但其能到达的终极逻辑能力的层
次必定为其天生智力所限制,这一点就让人不易接受了。好笑啊!人们可以公开
承认自己没有某种或全部的艺术天份,但要说自己逻辑天份不够,换句话说承认
自己笨、IQ不够高,往往是要怒发冲冠的,其实这又有什么区别呢?话都说到这
儿了,再次建议你如果不够自信,就跳过这一节吧,直接看第五节,好吗?
好了,把话题说回来,你已经成为一门合格的职业程序员了,如果要想成为从事
软件系统设计的职业系统分析员,第一件事就是悄悄找一个标准智商测试的网站
或其它渠道,严格认真的测一测自己的智商,如果IQ低于130(正常智商是110),就请别费劲了,打消掉成为系统分析员的念头吧!好!好!先请你冷静一下,好
好想想,其实微软面试时就是在测你的智商和逻辑数学素质呢,这就是本节的标
题为“天生神力”的原因,因为设计就是从无到有地进行创造,无论是软件还是
其它行业都一样,可以有借鉴的,没有现成的,设计就是创造!如果你IQ在130以
上,又决心要当一名职业软件系统分析员,其实你不过是要准备好吃更大的苦而
已,有什么好虚荣的呢?
~还是从基本功开始的,过程和成为一名职业程序员差不多。必须使用设计工
具这一点是不用多说的。在工作中,你基本上遇到的是两类方式的设计,一个是
结构化设计,另一个是面向对象设计,就个人经验而言,面向对象的设计更好。
如果你工作中不得不采用结构化的设计,你必须熟练地掌握数据流图和控制流图的分析和设计,一般来讲,如果你把一个软件中用到的数据模型设计好了,针对
功能化的流程,不难设计出数据流图,但下一步设计控制流图才是挑战,如果你
按照需求走不通设计好的控制流图,那么你或别人在按照这个设计编程实现时,必定也走不通,没有奇迹会发生,还是在设计阶段严格要求吧,又有一点需要牢
记:返工是最慢的。当你在进行控制流图的设计时,也不要妄想得到需求人员提
供给你明确的指点,通常他们要是能够把需求的功能和操作次序写完整的话,你
应该就感恩戴德了,从需求中整理出功能、操作的拓扑次序和条件是你作为系统
分析员的职责
。看看,要是没有一点图论的基础和拓扑学的入门知识,你是当不
好一个职业系统分析员的,即使你天赋不错,必要的数学和逻辑素质仍然不可或
缺。也不用气馁,永远没有最好的设计,只有更好的设计,反复地进行设计迭代,勇于推翻旧的设计,你将快速进步。如果你在工作中是采用面向对象进行设计的,那就更有利了,有关面向对象设计的书太多了,不用作者在此多费口舌,建
议精读一本经典的书,比如北大邵维忠等编译的《面向对象的分析》,有些方法
和技巧可能过时,但其逻辑的基本原理是非常正确的,其本质是,你在逻辑上是
如何认识这个世界的,你就是如何设计软件体系结构的,然后读读其它书,触类
旁通,自己创造机会多实践,成功自然会到来的,总之,不管是结构化设计还是
面向对象设计,评价一下自己的软件系统设计方案吧,有好多指标呢,比如是否
均匀和平衡?局部独立性强不强?有没有歧异的结构?有没有层次太多或太少?
有没有某个层次太大、太广?是不是逻辑结构先复杂了再化简的?还是只会设计
简单的,复杂不起来(这一点是笨哦,如果出现多次,请你不要意气用事,转行吧)?最重要的一点,是否容易理解、实现和改进?你自己会得出评价的。如果有机
会看到别人的设计,一定不要错过学习的机会,自己推导一遍,认真比较比较,获益会较多。
走到这一步,你就应该关注设计模式了,首先还是学习,这方面的好书有的是,但一般在工作中用到的设计模式较为单一,应该多尝试一下其它的设计模式。其
次必须要明白设计模式不是设计思路,也不能代替设计思路,比方你要从A到B修
一条路,设计模式只是让你选择,是修水泥的还是柏油的?是高架路还是普通的,但线路必须你自己定,而线路就是设计思路,模式对思路是有影响,但不能代
替,所以如果你的智商高达250,我相信你直接用汇编语言也能写出面向对象的程
序来。第三在此有一个陷阱,很多系统分析员生搬硬套设计模式,全然不懂如何
融会贯通,在你的一项具体工作中,往往是以一种设计模式为主,其它模式为辅的,思维不拘泥于形式才是关键,而且也为你到达更高的软件设计的境界做好准
备。
唉!都不知该怎么向下写好了,因为已达到作者水平的极限了,我胡乱说一点,你凑合看吧。软件设计最终的层次是:以无法为有法、以无限为有限,这句话是
李小龙说的,不是我说的。再拾人牙慧一把,类比一个故事吧,金大侠在《倚天
屠龙记》里讲到张无忌初学太极,学会的标志是把刚学的招数全忘了,记住的是
太极的道理和精神,和李小龙有些相似喔,软件设计也一样,忘记所有的设计模
式,随心所欲进行设计才是至高境界,所以你能到达多高的软件设计的境界最终
将取决于你的哲学素质,这一点实在是不好写啊,你自己领悟吧!作者只有祝福
了!
五、职业人的终极目标:全面~,成为Leader
这一节更不好写,涉及到太多其它非技术方面的因素,特别是个人人生观和世界
观的~,如果本帖的点击率超过作者私下期望的一个数值,那我就争取尽力厚
着脸皮再补上吧。我只说一句,虽然大家都知道软件开发是一个团队性的工作,但追求参与一个大型软件系统的成功开发,是一名软件人员的本能,就像拿破仑
说的不想当元帅的士兵不是好士兵,所以不追求实现大系统的软件人员,也不是
一个好的职业软件人员,但你只有成为Leader,领导一个优秀的软件开发团队,才有机会实现这个终极职业目标,对不对?
好吧,不管你现在的感受如何,我都谢谢你能读到这里!我不习惯假歉虚,就不
说什么作者水平有限,本文抛砖引玉,欢迎大家批评斧正之类的客套话了,虽然
作者水平确实有限。所以我认为你尽管有权砸砖,但实在没必要搞回帖、或回骂、或顶之类的玩意儿,我只是尽兴写一点多年从事软件开发工作的体验,因此接
下来我就高挂免战牌,不回复任何回帖了。再次谢谢你能有耐心读到这里!希望
本文对你有所裨益,祝你成功!再见!