1. 程序员是做什么的
简单来看,程序员的工作就是使用编程语言,根据需求写出一个程序。
目前主流编程语言包括,Java、JavaScript、Python、C、C#、C++、php、Objective-C等,每种编程语言适合开发的程序有所不同。
程序员要需要能看懂需求文档,并且能准确的使用编程语言,根据需求中的要求来编写成程序。程序员编程时,一般不会直接给一篇需求文档,然后就要求编写出程序。
程序员写程序的一般过程包括,编码(就是写程序)->单体测试->集成测试->用户测试->系统上线->系统运维。
2. 程序员工作要做什么
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。
作一个真正合格的程序员,应该具有的素质。
1:团队精神和协作能力
团队精神和协作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
2:文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。
3:规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。 一些所谓的高手甚至叫嚣高手写的代码一般人看不懂,我只能说他不是一名合格的程序员。
4:需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
5:模块化思维能力
作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
6:测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
7:学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,我们只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。
作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:
1、 需求分析能力
2、 整体框架能力
3、 流程处理能力
4、 模块分解能力
5、 整体项目评估能力
6、 团队组织管理能力
一般招工时需要提供基础程序员证书,要参加考试的:
[编辑本段]考试说明
1、 考试要求:
(1) 熟练掌握基本算法和数据结构,用C语言编制程序;
(2) 掌握数据结构、程序变速器和操作系统的基础知识;
(3) 了解软件工程、数据库、多媒体和网络的基础知识;
(4) 掌握数制、机内代码及其算术运算和逻辑运算的基础知识;
(5) 了解计算机的体系结构和主要部件的基础知识。
2、 通过本级水平考试的合格人员能按照软件设计说明书编制程序,具有相当于助理工程师
的实际工作能力和业务水平。
3、 本级水平考试范围包括两个模块:模块1——程序编制能力(考试时间为150分钟);模
块2——基础知识(程序员级)考试时间为120分钟)。题型为:单项选择题十多项选择题。
3. 程序员如何提升自己横向能力
最近在和团队内几个小伙伴进行聊天时发现,当问到自己总结一下最近一年或者半年的成长这个话题时,大家给出的答案都是,我又学习了什么样的技术,对某个开发技术又精进了等此类的回答。当我们聊到横向能力的有哪些变化时,大家给出的答案和理解都有所不同。
聊天的过程中有一个小伙伴向我咨询是该先针对某项技术进行深入研究,还是该综合横向能力去发展?此时就聊到对横向能力理解,小伙伴理解的横向能力是指学习市面主流的框架,中间件,新的语言等。这与我理解的横向能力却有很大的差异,下面谈谈我对从事软件开发小伙伴应该具有横向能力的理解。每个人的认知和观点都不同,此处不讨论对与错,只简单说说我的看法。
毕业以后我从学校回到合肥,加入了一家初创公司,算是进入了软件开发这个行业。说一下这个初创公司,全职员工4人,兼职员工3人,公司的创始人都是技术出生,所以整个公司的技术氛围比较浓厚,我在这个公司工作了三年半。现在看来,在这个公司的三年多经验,仍在我现在工作中发挥重要的作用。初创公司的好处就是任何岗位都是处于人力缺失状态,可以让你有很多的机会承担不同岗位的工作,给你带来工作挑战和压力的同时,也会让你快速的成长。我从一个实习生加入公司,角色也由初级开发,中级开发,高级开发,项目主管,客户现场负责人,到产品业务线负责人,工作内容也由单纯的技术开发,到技术管理,项目管理,客户需求管理,以及到全面业务线管理,涉及了从项目启动,实施,维护等全流程经验。
后来我加入了现在的公司,最初应聘的岗位是软件开发工程师,入职后被调整到一个大数据组,做内部创新项目孵化,当时的情况是我一个人需要承担从开发到上线的相关的事宜,庆幸的是之前的工作经历让我熟悉整个项目研发周期内的流程工作,经过紧张的几个月时间,带着两名实习生顺利推出孵化项目。接着所在团队调整为公司前瞻方向的团队,业务发展需要,我开始组建开发团队。随着业务的发展,我的工作内容由之前的研发慢慢转变为关注技术管理,工作集中在产品研发流程改进,质量改进,IPD体系落地建设,团队组织建设,人才培养等,与我最初的工作经历又完全不同。
在我看来,我的本职工作是一名Java开发工程师,我把我在本职工作方面的能力成长都归为专业能力,剩余的我归为综合能力也就是我所理解的横向能力。例如开发技能的掌握的成熟度,开发技能的拓展,架构能力的提升等等我统一归为我的专业能力提升,而随着团队的需要额外掌握的项目管理,需求管理,研发技术管理或者产品设计,客户沟通等等我统一归为横向能力的提升。
随着工作的年限增长,所遇到工作的内容和工作当中的人和事都会影响着自身制定的一些计划,在不同的阶段,都会有不同的想法。可能在刚开始自己还给自己制定了一个好的规划,例如工作三年,工作五年我要达到什么目标,技术达成什么要的水平,收入达到什么样的水平等等。
我们在制定要目标后,要告诉自己你在向目标努力的时候,需要扩展自己的哪些横向能力。例如从初级程序员到高级程序员,你需要补充沟通能力,技术管理,需求管理等;当你需要着手独立管理项目时,你需要补充招投标商务能力,财务能力,项目管理,客户管理等;当你转变为业务线负责人时,可能你需要关注人员沟通,组织协调,应急处理等。所以当你有了明确的目标以后,你需要知道自己欠缺的哪些,然后去提升。
如果制定好的规划不去想通过哪些途径完成,就会变成的空想,时间长了以后,就会变得过一天是一天,不在去主动的寻找机会,主动的提升自己动力也慢慢消失。所以在给自己做计划时,需要明白自己想要什么?最简单的一个原则,你在离你下一个目标时,找出你觉得你欠缺的能力去补充。有时候我们需要刻意的去学习一些知识,通过看书,看帖,网上的大牛文章,请教同事和领导,都会让你有很多的收获。另外在定计划时候,建议不要定太长的计划,一般我会定一个月、两个月,最多不要超过半年,自己找出最想做的3-5件事就可以了。
有人会有这样的疑问或者说是困惑,在团队中可能短时间无法确定自己的下一个目标,这种情况下,我的建议是给自己假设一个情景,例如现在有一个新的业务线需要组建新的团队,自己能否去新的团队承担比现在更多的职责,我现在是一个中级开发,我能否过去承担一个小团队的负责人;我是一个高级开发我想尝试下项目经理,是否能够独立带领项目团队。当我们经常给自己假设目标时,每隔一段时间,你就会有新的挑战,自然而然的就去学习不同的知识。通过自己给自己设定一些具体的假设目标,这样会使得自己的规划在具体实现时有具体的抓手,而不至于无从下手。
当明确好我们自己的下一阶段的能力提升目标,也进行了相关能力的理论知识学习,如何去实践,把理论真正的变成自己的经验。我自己的理解是:慢慢去实践,不用着急。不要想着一次性就能把事情做好,一口吃个胖子。当你在跨专业做一些事情的时候,往往也是打破自己传统认知,有时候也会有自我否定的过程。当你在实践的过程中,不断的尝试,不断的出错,不断的进行复盘,你才有可能把这些理论知识,变成自己的横向能力。
在整个我们的角色转变的过程中,会出错,会让你紧张,压力大,产生焦虑,甚至于觉得自己没有能力做好,想要放弃。给我印象很深刻是事情是在我工作的第二年被公司派往客户现场进行驻点项目实施,这次的转变是我从来没有过的,在客户的现场不仅需要完成本职的开发任务,更多的是客户交流,如何做好客户管理,怎么样处理应急问题。在开始的被客户怀疑能力,应急响应能力差,甚至于被投诉,到最后客户主动的表示好感,最终通过客户的推荐,后续又接到了很多的合同。
这些只有自己去做,去经历过,你才能知道如何使客户怎么样才能慢慢对你从怀疑到肯定,也会大大提高如何服务好客户方面的能力。今天回过头去看,每转换一个角色,你的抗压能力就会有大幅度增长,会让你的自我调节能力也得到很大的提升。有些能力的提升必须要经过一定的时间,必须要经历过一点的坎坷和困难,所以需要对自己有信心,相信自己。
在职业发展的过程中,不是所有人都能得到很合适的机会,去做一些与当前工作角色内容的不同的事情或者说能有机会去尝试一些新的岗位和工作。或者是有了机会去到新的岗位工作,但是却不是自己计划目标内的理想岗位。有时是事情的发展促使你做了岗位转变,例如人力缺失,团队人员离职,需要你去补位做相关的工作;有时是领导需要你做出转变来应对团队发展的需要。
我曾经经历过的岗位转变或多或少都存在以上的因素,但是给我带来了很多不同角色的应对事情以及处理问题的能力。所以当你觉得现在的工作内容可能不是你理想内容,千万不要有抵触或者消极的心态,更应该提高自己的眼界和格局,去突破自己的舒适圈。千万不能被自己所谓的规划和固执的思想所困住。
珍惜每一个阶段,做好该做的事情,你的能力自然而然的就会多面开花。
在我看来所有的能力提升,都需要自己主动愿意承担更多的角色,你才有机会去锻炼自己的能力,才有机会去挑战下一个目标。大家通常说机会是给有准备的人的,在我看来不仅仅是这样,机会更多的是给愿意主动出击的人。往往有时候机会不是别人给你的,而是自己主动争取的甚至有时候需要自己主动的去创造,只有你愿意走出第一步让别人发现你的能力,你才能体现出来你的能力。
所以想要能力有快速的提升,先改变自己,从团队中站出来,主动出击吧。
4. 程序员,在开发的过程中应该注意哪些安全方面的问题
可忽视的误区 企业的软件开发能力取决于该企业的软件过程能力。如果一个企业软件过程能力越成熟,那么该企业的软件开发能力就越有保证。大量的实践经验表明,在体现企业软件开发能力的因素中,技术或工具并不是第一位的。其实,许多问题不是出在不懂怎么做,而是没有安排做,做的次序不对,或不知道怎样做得更好。 目前,比照软件过程管理模型(如图一),中国的软件企业中还存在各种影响过程改进的因素和误区,主要表现在个体和组织两个方面。 在组织方面,首先,中国软件企业实施CMM往往缺乏高级管理者的支持。其次,没有足够的SEPG资源。从很多情况考虑,SEPG成员要比其他CMM相关组综合素质高一个层次,CMM相关组的管理素质需要比技术类组高一个层次,才能顺利开展工作。第三,没有合适的先行者或者没有适当全局观的项目经理配合。被组织选为先行者的人员经常说自己没有时间,由于这些人都是从各个项目中抽出来的,一般人很难有足够的权力让他们为配合CMM做工作。最后,软件组织缺乏足够详细的项目计划和监督调整机制。 在个体方面,首先,手工作坊式的个人英雄主义情结成为实施CMM的制约。其次,某些软件开发人员错误地认为过程管理会影响或压抑专业人员的创造性,其实这是不清楚过程的定义造成的。第三,由于软件项目的成功更多地依赖于少数人员的杰出技术能力和项目管理能力,成功项目的经验不能得到最大限度的继承,软件生产的可重复性相对比较差。最后,软件企业人员变更相对频繁也增加了实施CMM的难度。 “三七”法则 在过程改进总体建议方面,应该从三个方面做准备,分七步走。 首先,在组织方面的准备上,除了要求高层经理出资支持CMM改善软件过程,委托具有管理职责的人员负责CMM实施之外,须成立软件工程过程组(SEPG),研究CMM、编写/修改必要的文档并推广文档;成立软件质量保证组(SQAG),研究软件质量保证技术及过程,编写/修改必要的SQA文档并推广已编写的文档,测量和分析项目进展情况,反馈项目过程状态,准备和评审过程、计划和标准,审计指定的软件工作产品以检验其遵从性,审计软件工作过程的符合性;成立软件配置管理组(SCMG),研究软件配置管理技术及过程,编写/修改必要的SCM文档并推广已编写的文档,建立必要的工具支持。 在知识准备方面,要加强培训工作,建立内部过程评估队伍和庞大的过程改善队伍。对各角色人员进行专项培训,普遍开展软件工程基础及CMM的培训,使每个岗位的人员都具备过程改进的意识,并掌握所必需的过程改进知识和技能。此外,要重视对软件工程的研究,包括方法、工具和过程,加速培养过程改进的骨干队伍。 在能力准备方面,建立有效的软件项目管理,文档化且遵循软件项目管理过程,在建立管理过程中,使用组织的方针来指导项目,建立基本软件工作产品完成准则和检查单,并迅速实施,然后根据反馈意见及时修改。坚持适当的监控机制,例如对项目进度进行跟踪而建立的例会制度,制度化的日报和周报活动。做好实际数据收集、测量与分析工作等。重复成功的以前项目的开发经验。 改进过程总体可以分为以下七个步骤。 确定目标:确定在一段时间内达到的改进等级。 状态诊断:把过程改进要达到的状态与目前的状态作比较,找出存在的差距。 制定计划:“凡事有计划,按计划办”不仅是CMM强调的,也是软件开发过程中应该注意的。 规程制定:过程改进的一个重要的地方就是“事事有规程,时时有记录”,这样,即使关键人走了,原来的事也能继续而不致产生过多的停顿。 过程试点:制定了规程后,要对行动计划按执行过程的情况进行适当调整。其中,尤其要注重评审和验证,实现定期监控,注意采集度量数据。 反馈修正:总结过程试点的经验,修订规程。 过程推广:扩大应用范围。 软件过程改进实施步骤 公司的过程改进活动也是一个项目,并且是很大的项目,涉及的人员、技术和资源都很多,还要平衡现有产品或项目的进度等。同时,它也是一个不断往复,螺旋上升的一个过程。 第一个步骤为高级经理下定决心,提供足够的资源来主持并完成前期的准备工作,这个阶段核心是评价SEPG组长的资格和资质,还包括评估培训、购买工具的预算及相应资金能否及时到位。 无论是软件商业化的过程或CMM实施的过程之中,建立规范化的易于操作的软件开发行为规范都是首先要做的工作。但是,切记,编制规范的时间一定不能长,以10到12个工作日为宜,文档不宜过多,以5~6个规程为好(对应5个或6个关键过程域),这是第二个关键阶段。评价标准可以是SEPG组长能够顺利、流畅地讲解其制定的规程。在规程编制阶段必须有老板或常务副总直接领导CMM工作。但是一定要记住,制定的过程要遵从“从实践中来,到实践中去”,同项目经理、有经验的开发人员研究、讨论,从而使SEPG组长能够及时反映工作中的问题,并且问题能够得到及时解决。 第三个步骤是制定并发布公司的评估方针和方案,包括开发体系重组过程中的激励措施,中层在此阶段必须介入,这关系着过程改进的结果。SEPG和CMM实施的周例会,必须有高级经理参加,要有记录或录音作为证据,是考核的一个指标。 除此之外,对于还没有进行基于CMM改进的企业,还要重视设计复查、代码复查以及测试工作 。很多程序员习惯于“只做不想”这样一种工作方式,他们更关心每天可以写多少行代码,完成几个模块,在这种态度下,他们都很不愿意复查自己的工作,而习惯于在软件测试阶段把隐藏的错误改正过来。CMM实施过程,就是要通过各种复查,沟通信息,及早发现并更改问题。 在实施了初始的过程或技术部署后,培训成了主要问题。但人员变动时,附加培训的必要可能没被认识到,管理技能的培训尤为重要。而对于那些由于过硬的技术而被提升到管理职位的人员,需要接受一整套新技能的培训,包括人际关系技能。 项目经理在整个过程改进中(尤其是CMM二级)的工作量大约要占到整个总量的一半到四分之三,在评估访谈时也占有了举足轻重的地位。有些项目经理认为自己心里有一套计划,只要按计划进行就可以按时保质完成项目,但事实并非如此,在项目组之间的协调问题上,高层经理的作用是非常明显的。 试点或模拟项目可以很小,哪怕只有两个人,或者联合SEPG进行指导全部公司的模拟项目,这是缩短试验的最好途径。先组织配置管理活动的培训或学习,配置管理活动和质量保证活动在此期间可以得到很好的练习。 CMM为软件企业的过程能力提供了一个阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取了以往软件工程的经验教训,提供了一个基于过程改进的框架; 它指明了一个软件组织在软件开发方面需要管理哪些主要工作、这些工作之间的关系、以及以怎样的先后次序,一步一步地做好这些工作而使软件组织走向成熟。 但是由于CMM中不研究所有软件过程和质量改进问题,也未提供有关实现子过程域所需要的具体知识和技能,因此要进行个体软件过程PSP的实践活动,以填补这一空白,并优化过程改进途径。
5. 请问驻点银行的开发工作靠谱吗
应该说还是靠谱的。一般银行都会请软件公司帮助自己做软件开发或是运维。但是出于银行的特殊性一般都会要求软件公司驻场开发。驻场开发分为两类,一种是项目型的软件公司作为项目开发完成交付银行使用,另一种是外包类型的,软件公司提供合格的程序员供银行安排,系统开发,进度控制由银行负责,公司仅仅提供合适的人,银行按人月结算。
6. 哪些公司有软件人员驻点开发服务的
软件人员驻点开发就是软件外包公司派出软件技术人员到企业驻场开发,在深圳是有很多的靠谱的软件功能的,你可以去找找,可以从下面几个方面来判断是否靠谱。
1. 软件人才资源的丰富度。
2. 能不能提供你所在城市的人才外包。
3. 交付流程是否完善。
7. 让外包公司的软件人员驻场开发好不好,优势有哪些
软件人员驻场开发的好处为:
1、即时性
驻场开发的一大好处就是随时监督进程,及时发现问题,即时解决问题。
2、便于沟通,用工灵活
如果觉得之前的方案里有一些小的问题,或者某些地方不够考虑的不够周到,可以当面沟通,随时开会讨论,解决问题。
3、用工开支相对低
驻厂人员在现场除了完成本身职能内的事以外,还可以协助完成甲方指定的其它工作。
8. 程序员是做什么的什么是程序
程序员:
程序员是从事程序开发、程序维护的专业人员。程序员一般需要会做:确认通过审查方案的目标,输入数据,分析师,监事,和客户的输出要求的项目要求。
通常情况下将程序员分为程序设计人员和程序编码人员,软件从业人员分为初级程序员、中级程序员、高级程序员(现为软件设计师)、系统分析员,系统架构师,测试工程师六大类。
程序:
程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。以某些程序设计语言编写,运行于某种目标结构体系上。
程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。
(8)程序员驻点开发方案扩展阅读:
程序员的日常工作:
1、确认通过审查方案的目标,输入数据,分析师,监事,和客户的输出要求的项目要求。
2、安排项目要求在编程序列分析要求;准备工作流程图和使用计算机知识的能力,题材,编程语言和逻辑图。
3、编码工作流程的信息转换成计算机语言的项目要求。
4、通过输入编码信息的计算机程序。
5、确认程序操作进行测试,修改程序序列和/或代码。
6、准备写操作指令供用户参考。
7、保持历史记录,通过记录方案的制定和修订。
参考链接:网络-程序员
网络-程序
9. 软件公司开发项目是怎么搭架项目框架的(是一个人搭建还是每个人都建),程序员是怎么用搭架框架分工开发的
软件公司开发项目框架一般是由架构师或者技术经理搭建的,有基础的web开发技术框架,源代码控制框架和管理框架,现在一个web开发技术框架包含前端、后端和数据库三个大的方向,各个方向的技术框架都不一样。现在主流的技术框架包含.NET、SqlServer、Bootstrap等,各个方向都有专业的程序员进行开发。
软件开发框架详细介绍
软件前端开发技术包括三个要素:HTML、CSS和JavaScript,当然还有很多高级的前端框架,比如bootstrap、Jquery等,前端开发也是比较的复杂,如果找到规律,开发起来也比较的快。
软件开发后端技术也有很多,比如.Net、JAVA、PHP等,各大语言都有其开发架构,像.NET的MVC架构,一般web后端技术的知识面是很广的,设计模式、需求分析、性能优化等都要懂。
软件开发数据库现在有三种主流的数据库:MysqlSQLserverOracle,还有Nosql数据库:Redis、Mogodb等。
人员分工一般是按照上述三个大方向来分配任务的。
10. 驻点开发是什么
开发员在需求方指定的工作地方开发程序。