程序员(英文
Programmer)是从事程序开发、程序维护的基层工作人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚。随着互联网的不断普及,网络上把男程序员称作“程序猿”。或将男女程序员统称为“工程师(攻城狮)”。
岗位职责
1、对项目经理负责,负责软件项目的详细设计、编码和
内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和
技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的
客户关系。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和
维护过程中重大技术问题的解决,参与软件首次
安装调试、数据割接、用户培训和
项目推广。
行业现状
由
CSDN、《程序员》主办的2007年开发者大调查2007年底已收到15000多份
有效问卷,已经是中国
调查样本最多的开发者调查。在这次调查中,详细的分析了样本空间的分布状况,发现在庞大数目的有效问卷的参与者中有70%也就是接近一万一千名的参与调查者是IT的全职人员,14%的参与者是有过开发工作经验的学生,从这样的分布就可以看出来IT从业人员对专业知识的需求是巨大而迫切的,
CSDN作为专业的软件开发技术门户网站,已经是大家获取这些技术的主要手段。
一、选择
数据库技术和
互联网技术的人数总和占到了总人数的一半
2007年火热的SOA和
动态语言各占13%和12%。其实这几大块技术分布他们之间都是有一定的联系的,互联网的发展近两年呈爆炸式的增长态势,中国的网民总数已经超过了1.4亿这样一个巨大的数字。
企业中业务的复杂程度越来越高,
商业竞争不断增加企业的IT系统,使企业的
商业数据呈几何
数量级不断增长,在后台数据
中数据的管理由之前的单一型数据变成了多纬度的复杂数据,所以可以同时管理
关系型数据库和XML数据的混合型数据库已经成为主流。
面对企业不断增加新的IT信息系统,整合已经迫在眉睫,SOA成为必然的趋势,企业对人才的需求从单一型
技术人才、业务人才跳跃到了
业务技术的
复合型人才,这次的开发人员大调查令《程序员》杂志的调查者看到了这些技术焦点背后千丝万缕的关联。
二、几乎一半的
.NET用户不参与
开源项目RedHat+
Ubuntu占有率超过70%
应用到.NET平台上的开源项目,“大量使用”的比例数仅为8.68%,尚不足一成;“少量应用”的开发者人数比例为42.78%。“基本不用”的比例高达48.54%,与前二者之和几乎不相上下。
虽然开源的出现和发展,让软件没有垄断的未来日渐明朗;虽然
开源运动经过多年的高速发展,现已聚集了相当的力量,开源的自由和给予理念逐渐深入到了企业的技术核心层面。但
微软以
商业软件为生,毕竟在微软技术领域中,开源项目通常都被看作是二等公民。很多开源项目对.NET社区产生了巨大的推动作用,微软公司很难提供任何实质性质的支持。
当前安装有
Linux操作系统,数据中RedHatFedora占据
绝对优势——Linux使用者使用该版本占总数的49.49%。
Fedora是RedHat推出的重要的一款
Linux版本,在每个
fedora版本中都是集成最新的Linux软件,特别是
服务端软件。
使用“RedHatFedora”关键词在百度网页中搜索得到7,090,000条结果,RedHatFedora在调查中占据Linux版本的半壁江山符合整个
Linux版本的分布情况。
排在第二位的是
Ubuntu,受支持数占到总数的23.92%;第三位的是SuSE占9.09%,接下来是
Debian,
使用率为5.92%。在这里面令人期待的
中国本土Linux的让人大失所望。使用率仅占5.16%,几乎只有RedHatFedora的十分之一。
三、
Java开发框架:6%的JSF欲撼动21%的Struts
JSF现在比较有优势的是对Ajax的集成,这一点走在了其他框架的前面。未来两年,JSF与Struts将展开JavaWeb框架的最终战争。 经过数年的“框架大战”,Java界的各种框架找到了自己应有的位置。Spring+Hibernate+Struts已成为Java开发的主流体系。在这个体系中,Spring+Hibernate的地位应该说短期内是难以撼动了。除了新兴的JbossSeam作为挑战者之外,几乎难有劲敌。
JavaB/S编程中历来战火最激烈的其实还在Web层,框架的数量最多,争议最大。一切由Struts而起,而Struts最终也坐稳了第一个时代的王座。在技术层面,Struts1.x已经被无数人抱怨过、批评过,但终于还是稳坐王位,这充分说明了习惯的力量。“
稳定压倒一切”,这句话在IT技术领域仍旧适用。
详细的分析了Java开发框架的使用状况,发现主要使用的开发框架JSP占26%,Struts占21%,
Hibernate占17%,SpringMVC占11%,
EJB占7%,JSF占6%,SpringWebFlow和
POJO各占4%,其它占4%。就这一调查数据,不难看出,Spring+Hibernate+Struts的优势地位还是相当的明显。
Struts和Hibernate几乎已经成了
JavaEE应用的常规配置,21%的开发者用到Struts,用到Hibernate的开发者也有17%;在一个成熟的技术平台上,各个项目的
技术方案会在很大程度上趋同——因为所有未知领域都已经被探明,各种问题都有对应的
最佳实践,架构师们可以参考的成功案例越来越多。就拿JavaEE来说,架构师们需要考虑的问题比之三年前已经简单多了,这就是成熟的价值。
有专家评论:“其实IT
应用技术,什么新鲜
玩意并不难学,难的是标准化和规范化。每个程序员都有自己的思路和习惯,写出来的代码自然是五花八门。Java何以成为编程界的占重要地位,很重要的一点在于Java的规范化。这种规范化很高的语言适用于多人合作的
大型项目,便于沟通和理解,也就便于集成和维护。 Java世界为什么会框架横飞,说到底还是规范化的需要。纯JSP和Struts写Web谁快,摆明了是JSP。那为什么用Struts?原因在于100个人写出来的JSP,有100种写法;而100个人写出来的Struts,基本相似。Struts之成功,正缘于其在JavaWeb层的规范化方面所做出的贡献。
然而长江后浪推前浪,Struts1.x的技术缺陷毕竟是隐患。Sun力推JSF,打算一雪Web层框架缺失之耻。未来两年,JSF与Struts将展开JavaWeb框架的最终战争。
JSP经过几年风雨洗礼依然把持
头把交椅,看来所有的框架
表示层都离不开JSP而存在,而作为JSP的手足兄弟JSF也是仅次Spring之后又一个后起之秀。
如今JbossSeam在2009年之后就退出了历史舞台,JSF在国内使用者也寥寥无几了,而大红大紫的SSH框架也被Spring+SpringMVC+Mybaties主流所代替了。
职业要求
一般的程序员都有在专业领域的学习,还有很小一部分程序员是自学的,尽管一些专业性的学校或者
综合大学可以提供,但是也需要一些别的途径来提供相关的人才。尽管学历是比较重要的,但是公司经常把重点放在应聘者的工作经验上,很多刚从大学毕业的大学生虽然有引人注目的学位证书,但是他们找不到工作是因为他们缺乏经验。一个程序员虽然没有正规的学历,但是如果一个人拥有程序设计的深厚知识背景或者丰富的工作经验的话,那么他的机会要比有学历的
应届毕业生大得多。所以要尽量抓住有用的工作和实习机会,这样的话在毕业后你就会发现,多实习让你有更多的经验,在找工作的时候就有更多的机会。
对于职业程序员,另外一个重要的方面就是,程序员需要不断提升自己的业务技术,他的技术必须一直保持在一个较高的水平,并且要不断发展,程序员也要寻找贸易的机会,要参加研讨会,在周刊上发表文章和接受
职业教育,这些使程序员在自己的领域中分级或者不断并排前进。
必备技能
做为一名程序员至少熟练掌握两到三种
开发工具的使用,这是程序员的
立身之本,其中
C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多
系统级的软件还是用C/C++编写。而JAVA的
跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如
VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员
对象模型的概念。另外,需要掌握基本的
脚本语言,如shell,
perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多
应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中
关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握
SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业
数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
了解操作系统
当前主流的操作系统是Windows,Linux/
Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的
编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/
线程调度、信号、
内核对象、
系统调用、
协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。
在互联网如此普及的现代,如果您还没有对互联网的支撑协议
TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,
网络技术已改变了软件运行的模式,从最早的
客户/服务器结构,到当代的WEBServices,再到未来的
网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。至少,需要了解ISO七层协议模型,IP/
UDP/TCP/HTTP等常用协议的原理和
三次握手机制。
明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,
软件系统的位置无关性是未来计算模式的重要特征之一,
DCOM/CORBA是当前两大主流的
分布计算的中间平台,DCOM是
微软COM(
组件对象模型)的扩展,而
CORBA是OMG支持的规范。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的
表达能力被喻为互联网上的“
世界语”,是
分布式计算的基石之一。
大型软件系统的开发中,工程化的开发控制取代
个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的
软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握
软件开发各个阶段的
基本技能,如市场分析,
可行性分析,
需求分析,
结构设计,
详细设计,
软件测试等。
需求理解能力
程序员要能正确理解
任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的
性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
作为一个优秀的程序员,他的思想不能局限在当前的
工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能使
系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
职业困境
老虎、Bill、自己,中国程序员的困境也来自三个方面
困境之一:老虎的威胁。程序员要面对的饿老虎实在不少,比如说老板,好像就是程序员的天敌,什么“不懂技术却指手画脚”、什么“得到与付出不相当”似乎是程序员最常见的牢骚,这个问题不可能得到真正的解决。
困境之二:Bill的竞争。一般说来中国的程序员大都是吃“
青春饭”的,大部分程序员的黄金时代是20~35岁。到了35岁左右,一批又一批年轻程序员会给你带来巨大的竞争压力。首先由于软件行业的飞速发展,很多自己以前学的东西逐渐升级换代,而许多程序员由于长期于工作,学习新知识的效率必然下降。其次自己干了几年,薪水要求自然就高了,而年轻程序员工资又低、干活又快,当然会成为老板的首选;第三,35岁基本都已经成家了,要支撑家庭的生活负担,几乎连从头再来的勇气都不会有了。中国的老话说“长江后浪推前浪,前浪死在沙滩上”,这个历史的规律在
软件开发行业体现的尤其明显和残酷,很多程序员必然要面对的结果就是降薪乃至失业。
困境之三:自我的实力。都知道人最难战胜的是自己,所以自我也就是程序员需要超越的最大障碍。大多程序员都把
系统分析员和项目经理作为自己的
职业目标,但这些目标的达成,需要个人素质、市场机遇等多个方面的条件,太多的程序员就是在高不成、低不就的状态中蹉跎了岁月。对于系统分析员,特别需要以下几方面的素质:
客户需求分析能力、系统架构与
设计能力、模块分解设计能力、项目流程控制能力、
项目风险评估能力等,而对于项目经理则更注重
项目管理方面的能力如团队
组织能力、沟通
协调能力、分析
问题解决问题的能力以及良好的
职业道德等,而这些素质和能力往往只能依靠程序员个人的学习和努力。看到越来越多的程序员开始学习项目管理的课程,真的有点为他们担心,因为现在的项目管理培训只能停留在理论和考证的程度,既没有素质方面的训练,又缺少实际
软件开发项目的案例,学习的结果远远不能达到预期的效果。
薪资待遇
从
经济学的层面上来看,软件人才也是
劳动力商品中的一种,是由
价值规律决定的,有需求才会有市场,才会有人愿意为他们支付工资。当前,包括中国在内,全球都在争夺IT人才,当IT人才的
社会总需求大于
总供给时,不可避免就会出现人才升值的现象。
日常工作
确认通过审查方案的目标,
输入数据,
分析师,监事,和客户的输出要求的项目要求。
安排项目要求在编程序列分析要求;准备
工作流程图和使用
计算机知识的能力,题材,
编程语言和
逻辑图。
维护客户的信息和保护保密的业务。
技能/资格:一般的编程技巧,分析信息,解决问题,
软件算法设计,软件
性能优化,注重细节,软件设计,软件调试,软件开发基础,
软件文档,软件测试。程序员其实分为很多种,大家开发的语言可能不尽相同,但是都是有他们的共同点。