合格程序员范文

2022-05-19

第一篇:合格程序员范文

怎样做一名合格的程序员

作者: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,领导一个优秀的软件开发团队,

才有机会实现这个终极职业目标,对不对?

好吧,不管你现在的感受如何,我都谢谢你能读到这里!我不习惯假歉虚,就不

说什么作者水平有限,本文抛砖引玉,欢迎大家批评斧正之类的客套话了,虽然

作者水平确实有限。所以我认为你尽管有权砸砖,但实在没必要搞回帖、或回骂

、或顶之类的玩意儿,我只是尽兴写一点多年从事软件开发工作的体验,因此接

下来我就高挂免战牌,不回复任何回帖了。再次谢谢你能有耐心读到这里!希望

本文对你有所裨益,祝你成功!再见!

第二篇:做一个真正合格的程序员

作为一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。

1:团队精神和协作能力

把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。一旦进入系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人是不合格的。

2:文档习惯

说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。

3:规范化,标准化的代码编写习惯

代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己?根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。没有规范化和标准化的代码习惯,研发之间的协作是绝对不可想的。

4:需求理解能力

程序员需要理解一个模块的需求,很多程序员写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。 5:复用性,模块化思维能力

经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在很多软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力,这是我们应当刻意克服的弊病。

6:测试习惯

作为一些正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯

一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。

7:学习和总结的能力

程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。

具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。

高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了应该具备上述全部素质之外,需具备以下素质:

第一,需求分析能力

对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失去这些准则。程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安装使用的简捷性。 第二,项目设计方法和流程处理能力

程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立数据词典;他需要加工逻辑流图以形成整体的系统处理流程。一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把握。

第三,复用设计和模块化分解能力

这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多

可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的一个佐证。将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。

第四,整体项目评估能力

作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置

是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那么活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累那种产品化研发的经验,这也是没有办法的事情。

第五,团队组织管理能力

完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因为这

里面设计了一些技术性的指标和因素。首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥组队的效率。一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容易被忽视的。

综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习惯,不改变这些,我们的合格的项目设计者还是非常欠缺。

第三篇:如何成为一个合格的Java程序员

如何成为一个合格的Java程序员? 合格的Java程序员就是要技术精湛,懂得沟通,然后就是要不断学习学习。如何成为一个合格的java程序员,想要成为一名合格的java程序员需要掌握哪些?下面,让多迪技术总监为你一一介绍。

1、技术能力这是非常重要的事,过硬的技术能让你得到面试机会,并在工作中游刃有余。当公司招聘一个Java开发人员时,是会优先考虑能力因素的。在实际的项目开发中,一个程序员的技术能力等于其解决问题的能力。

2、专业基础是一个程序员的知识积累很大程度上决定了其解决问题的能力。知道如何编写代码是基本的技能,但是知道Java编程语言的原理,知道代码背后的算法将使你从人群中脱颖而出。

3、主流编程工具有构建工具:Maven或Gradle。SCM:Git(不是GitHub。大不相同)。构建自动化:Jenkins。IDE:Netbeans或Eclipse——不仅用于编写代码,而且还从IDE中重构和调试代码。Bug跟踪:Bugzilla或Jira。

4、JSF的知识是应用程序服务器,所有Java开发人员应该知道如何在Apache Tomcat中部署。当Glassfish开发停止时,下一个最好的事情是J Boss Wild Fly。

5、沟通的能力是我们做好一切事情的关键。我们必须与我们周围的环境保持互动,无论是在我们的私人还是职业生活中。一个良好的程序员知道如何在各种团体面表达自己。也许对你来说显而易见的东西在他人的角度来看并非如此。从大的尺度来看,一个程序员知识积累的多少只决定于其自学能力和他对编程本身的兴趣。

6、自学能力是一个非常重要的技能,在你自己的空闲时间学习新的技能。不要等待公司为你提供培训。你需要自己去学习新技术,提升自己在相关领域的水平。从WEB前端开发到架构模式,总是有一些新事物值得学习。经常阅读博客和论坛,尝试加入本地聚会小组。你学到的东西可以帮助你的事业。知识刷新频率极快让人无法追赶的这个时代,难免会有超出自己知识范围的时候,此时你的自学能力决定了你能多快的完成任务。

7、良好的团队合作精神是所有开发人员都是作为团队的一部分在协同工作。你需要致力于团队的目的,或帮助新的团队成员克服障碍。不要存在这种“我只要做好我的本职工作,下班就直接回家”的态度。成为团队的一部分,帮助周围的同事,对自己的能力也是不小的提升。

第四篇:合格程序员每天每周每月每年应该做的事

合格程序员每天每周每月每年应该做的事.txt你无法改变别人,但你可以改变自己;你无法改变天气,但你可以改变心情;你无法改变生命长度,但你可以拓展它的宽度。合格程序员每天每周每月每年应该做的事

文章分类:综合技术 程序员每天该做的事

1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多

2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作

3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢

4、考虑自己一天工作完成的质量和效率能否还能提高 一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍

5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态 闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示

6、记住一位同事的名字及其特点 你认识公司的所有同事吗?你了解他们吗?

7、清理自己的代码 今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?

8、清理自己的桌面 当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净 程序员每周该做的事

1、向你的老板汇报一次工作 让你的老板知道你在做什么,这很重要。可以口头、书面、邮件,看你老板的工作方式而定

2、进行一次自我总结(非正式) 这周之内自己表现得怎么样?该加分还是扣分?

3、制定下周计划 把下周要做的事情列出来,一样要分清楚优先级

4、整理自己的文件夹、书柜和电脑文件 把桌面以外的地方也要清理干净,电脑的文件夹,收到的邮件,把过时的垃圾全部清理掉

5、与一个非公司的朋友沟通 它山之石,可以攻玉

6、看一本杂志 找一本适合自己的专业杂志

7、纠正自己或同事一个细节上的不正确做法 《细节决定成败》看过了吗?没看过强烈建议先看看

程序员每月该做的事

1、至少和一个同事一起吃饭或喝茶 不光了解自己工作伙伴的工作,还要了解他们的生活

2、自我考核一次 相对正式地考核自己一下,你对得起这个月的工资吗?

3、对你的同事考核一次 你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?

3、制定下月的计划,确定下月的工作重点

4、总结自己工作质量改进状况 自己的质量提高了多少?

5、有针对性地对一项工作指标做深入地分析并得出改进的方案 可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。

6、与老板沟通一次 最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点 程序员每年该做的事

1、年终总结 每个公司都会做的事情,但你真正认真地总结过自己吗?

2、兑现给自己、给家人的承诺 给老婆、儿子的新年礼物买了没有?给自己的呢?

3、下工作规划 好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?

4、掌握一项新技术 至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。 掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog

5、推出一种新产品 可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的

6、与父母团聚一次 常回家看看,常回家看看

第五篇:不合格项控制程序

1.控制目的

a)确保不合格项得到标识和控制,以防非预期的使用和交付; b)为纠正和预防措施的制订提供信息 2.职责

2.1工程科是施工不合格项控制的归口管理部门; 2.2物资部负责不合格原材料的控制; 2.3工程科负责工程交付后不合格的控制。 3.控制活动的内容

包括不合格品(项)的判定、标识、记录、评审和处置。 4.控制的程序

4.1不合格原材料的控制

a)原材料无论是在检验过程或是施工使用中发现不合格,均应由发现人做好记录并通知供应科做好标识,防止误用;

b)不合格的原材料由材料及理化责任工程师填写不合格项处置记录,由物资部负责做好标识和退货。 4.2施工过程不合格项的控制

a)工程科施工过程自检或专检或其他部门发现的不合格项,由检出人填写《不合格处置记录》并做好标识,报项目经理进行评审和制定整改措施,并协调处置直至合格。

b)技术监督部门或用户、专业监理提出的不合格,项目经理根据不合格通知书(或其他形式的通知事实),填写《质量分析记录》并协调整改处置,直至经提出部门认可合格。

c)工程竣工交付使用后的不合格,根据用户的各种形式的反馈信息,由工程科填写《质量分析记录》,并协调整改处置,直至用户认 1 可合格。 5.记录

上一篇:花名歌教案范文下一篇:海港城攻略范文