一、程序员高薪的秘诀
 
无非一个: 机遇+经验+灵感。
程序员的薪资与所用语言关系不大,并且高薪的程序员的学历也参差不齐,而从业的时间和业绩更大程度上影响了程序员所能得到的待遇,如下表所示
  
年限
月薪
0
800-3000
2
3000-6000
3
5000-15000
4 年以上
6000-40000
一个合格的程序员应当具有敬业、灵活、创新、博学等全面优秀的素质。很多程序员抱怨自己待遇不公,但往往忽略了自身的因素,首先程序员在要求月薪之前,就应当首先考虑自己在所在的企业的位置,自己的能力专长是否正是该企业所需要的,能给企业带来多少产出。当然,初入行业时,也许会因为管理的因素造成不公的待遇,但是当逐渐融入工作之后,对企业以及环境有了一定的了解,就可以根据自己的实际情况理直气壮地提出要求。同时,由于软件行业的变动很大,程序员跳槽或“下课”是常有是事,有时候一些工作岗位也不能只注重它的薪酬多少,关键是看自己能够得到多大的提高与发展,某些时候,低薪但富有挑战力的工作也不失为开拓自己以后道路的跳板。
一个小网络公司的招聘广告:
招聘程序员,要求熟练掌握 VC、 VB、JAVA脚本、 SQLServer、 Access、 月薪800-1500、 ×××。
 
二、程序员的报酬有几种方式:

1、传统的月薪或年薪+奖金
追求稳定的程序员可以选择基础好的企业以薪金谋生,并求稳步发展。
2、期权方式
有创业精神的则可以选择有发展前景的企业或团队,获得效益分享,期权曾经造就了不少程序员暴富的神话,但其风险也比较大。
3、临时工
只做一两个项目,做完走人,按项目获取相应酬劳。
 
三、软件公司对软件开发人员的资源分配
1、传统意义的软件公司——大公司
       一般有明确的分工,各个流程或模块由不同的程序员完成。也许你是相当优秀并且知识是相当全面的,但是实际上的工作当中并不需要你做超出范围的事情,工作一般比较单一,同时也能得到稳定的收入。
2、作坊式的软件公司——小公司
       一个技术人员通常要完成更多方面的工作,诸如需求分析、系统设计、详细设计、编写代码、软件测试、撰写文档、安装调试、系统维护等,这些工作通常会混在一起,而不是按照什么软件工程的顺序来完成。

注: 在从创业的趣味性来说,有的程序员会更加喜欢后者,但是这同时也要考虑到薪酬的分配是否合理,自己所付出的劳动是否得到了应有的回报。

四、将自己改造成为一个复合型人才

具备多种能力和素质,并能够将多种能力进行综合运用
1、软件开发的技能水平
(1)、对使用的开发工具要了解透彻;
(2)、对使用的开发语言要熟练和精通。
2、应用行业的了解程度
(1)、对应用行业方面的知识要了解;
(2)、对应用行业的运作模式要了解。
3、软件开发技术知识与行业知识的结合
(1)、将行业中的管理流程进行转化,用计算机代替手工;
(2)、在转化过程中不断提高程序开发的水平。
注:仅仅只会计算机的程序员是不可能适合这些专业性极强的行业的,对特殊行业本身有深刻了解的程序员到这些部门肯定会大受欢迎
五、软件企业要求基础软件工程师具备六大基本素质
1、良好的编码能力
软件人员的一个重要职责是把用户的需求功能用某种计算机语言予以实现。编码能力直接决定了项目开发的效率。
2、自觉的规范意识和团队精神
程序员分为两种,一种是程序“游击队员”,他们可能对编程工具很熟,能力很强,把编码编得很简洁高效,但却缺乏规范和合作的观念;另一种程序员编程不一定很快,但是很规范,个人能力不一定很强,但合作意识很好。
3、认识和运用数据库的能力
信息是以数据为中心的,因此与数据库的交互在所有软件中都是必不可少的,了解数据库操作和编程是软件工程师需要具备的基本素质之一。
4、较强的英语阅读和写作能力
编写程序开发文档和开发工具帮助文件离不开英文,了解业界的最新动向、阅读技术文章离不开英文,与世界各地编程高手交流、发布帮助请求同样离不开英文。
5、具有软件工程的概念
从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些过程,并能胜任各种环节的具体工作
6、求知欲和进取心
软件工程师应具有较强的学习总结能力、需求理解能力和对IT新技术比较敏感,同时,掌握最新的IT实用技术。
六、必须掌握的开发方法
采用瀑布型和快速原型法结合的开发方法,
 即:系统需求分析->开发方案设计->子系统实现->系统集成与确认下,
图为开发模型示意图
 
七、独立设计开发软件必须经过的九个过程
 
1、需求分析
从用户的业务中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出我们的软件产品。
A、 提取出核心、主要、急迫的业务,明晰业务流程
(1)针对客户对软件项目或产品的最初提出的需求目标和范围,为用户解决什么样的问题,从众多的业务中提取出用户核心的、主要的、急需的业务。
(2)从用户繁杂的业务中进行业务、业务流程的提取,把那些分布在各个部门的同一种业务提取出来。分析用户的这个业务流程中哪些是系统能帮助管理的,哪些是要在系统外处理的,充分分析用户现有的业务和业务流程。
B、 运用管理思想,优化业务流程
(1)采用网络计算机这些新的技术手段代替原先手工、电话等方式在信息的传递、信息的共享、数据的处理等方面将会带来新的方式,必将改变原有的业务流程。
(2)根据对用户业务的理解,考虑是否可以运用先进的管理思想,比如MRPII、ERP、JIT等等管理模型,进行现有业务流程的重组或优化。
制造资源计划管理系统(MRPⅡ)、企业资源计划管理系统(ERP)。
C、要求最终用户参与到项目的整个开发过程
   一个软件项目在需求分析阶段时的信息收集非常重要,但由于每个企业的管理模式不同,企业内部各部门所需要的软件功能也不同,在收集信息时,公司高层提供的信息量为实现软件项目80%的内容,部门主管根据公司高层提出的要求进行理解能提供本部门80%的内容,具体岗位的工作人员根据主管提出的要求进行理解能够提供本岗位80%的内容,根据三方面收集到的信息能够在软件项目完成后实现预定目标的
100*0.8*0.8*0.8=51.2%,剩下的48.8%要经过很长时间,开发者与企业各部门之间进行协商,再原来80%的基础上提取出15%的信息100*0.95*0.95*0.95=94.12%,最后剩下的5.88%只能做为软件项目完工投入使用后的维护升级中进行解决
 
2、系统设计
A、 根据需求分析绘制出系统框架图和系统流程图
(1)、 系统框架图要体现出软件的整体架构;
(2)、 采用松散组合式设计,使各功能模块间即相互独立又可相互配合;
(3)、 系统流程图要体现出客户的业务流程;
(4)、系统框架就象人的骨架、系统流程就象人的神精、血液偱环系统和肌肉
(5)、系统框架、流程的设计直接影响到软件的开发周期和最终产品的质量。
B、 制定项目实施计划
(1)、 项目总体需要多少时间、多少人、多少设备、多少钱;
(2)、 每个功能模块需要多少时间、多少人、多少钱;
(3)、 对每个功能模块的测试需要多少时间多少人、多少钱;
(4)、 培训需要多少时间、多少人、多少钱;
(5)、 软件过行后期维护需要多少人、多少钱;
3、详细设计
A、 根据系统框架图对每个功能模块进行分解设计;
B、 根据系统框架图绘制各功能模块的子框架图;
C、 根据系统流程图绘制各功能模块的子流程图;
D、 各子功能模块之间要做好数据接口;
E、 根据子框架和子流程设计数据字典;
F、 数据字典要结构设计合理,不合理的设计将给软件造成巨大的隐患;
Verify(用户信息及密码验证表)序号 主键 字段名 中文对照 数据类型 长度 小数 默认值 允许空1 ID 用户ID varchar 10     Not Null2   password 密码 varchar 72     Not Null3   level 等级 varchar 10     Not Null4   name 姓名 varchar 10     Not Null5   station 岗位 varchar 30     Not Null6   dept 部门 varchar 10     Not NullSystem_Function(系统功能表)序号 主键 字段名 中文对照 数据类型 长度 小数 默认值 允许空1   akey 主功能键 varchar 10     Not Null2   bkey 次功能键 varchar 10     Not Null3 mkmc 模块名称 varchar 20     Not Null4   id 用户ID varchar 10     Null5   enabled 功能使用标记 bit     0 Null6   p_w_picpathurl 功能图标名 varchar 30     Not Null7   navigateurl 功能文件名 varchar 30     NullUser_Purview(用户权限表)序号 主键 字段名 中文对照 数据类型 长度 小数 默认值 允许空1   akey 主功能键 varchar 10     Not Null2   bkey 次功能键 varchar 10     Not Null3 mkmc 模块名称 varchar 20     Not Null4   id 用户ID varchar 10     Null5   enabled 功能使用标记 bit     0 Null6   p_w_picpathurl 功能图标名 varchar 30     Not Null7   navigateurl 功能文件名 varchar 30     NullDept(部门表)序号 主键 字段名 中文对照 数据类型 长度 小数 默认值 允许空1 id 部门ID varchar 10     Not Null2   dept 部门名称 varchar 10     Not Null
 
4、编写代码
A、 编写代码时要标准化、规范化;
B、 每行或每段代码要做出中文或英文注释;
C、 一个功能可实现的代码不要分解到两个功能模块中;
D、 前台定义数据名称要尽可能与后台数据库定义一致;
E、 重复使用的代码段要做到一个类中,以提高开发效率和软件运行效率;
F、程序界面各控件的布局摆放要符合人机工程,充分考虑到用户的需求,方便用户操作;
G、做好代码的防错和容错,在出现意外情况时要给出错误提示,以便用户找出解决问题的方法。
5、软件测试
A、 单个功能模块的独立测试,可以与编码同时进行;
B、 各个功能模块的整体配合测试,找出各模块接口出现的问题,并尽快加以解决。
C、 在软件测试中灵活运用逆向思维,找出软件中的错误,尽可能将可预知的错误在软件投入使用前解决掉;
D、负责测试的人员不能和代码编写人员是同一个人;
E、对测试的过程和结果要作好记录,以便以后出现问题时可以尽快找出解决的方法;

6、撰写文档
A、 对软件进行整体综合的描述;
B、 对软件各功能模块作出详细的使用说明;
C、 作好帮助索引,以方便用户可以尽快的找到答案;
D、 软件各功能模块要与帮助文档动态联接;
E、 帮助文档要尽可能的作到图文并茂,充分体现出软件
      的功能和流程。
F、 帮助文档要尽可能的将程序运行过程中出现的错误作
      出说明,并明确出解决问题的方法和手段。
 
7、安装调试
A、 软件开发完毕后要进行产品打包发布;
B、 要给软件安装运行作出详细的操作说明;
C、 做好软件与操作系统之间的配合;
8、人员培训
A、 软件在开发完毕后需要对最终用户进行操作培训;
B、 除了培训软件的基本操作外,还要指导用户在软件出
      错时如何找到解决的方法;
C、最终用户的文化水平和业务水平各有不同,要根据用
      户的接受理解能力来制定培训计划;
D、切记用户永远是对的,如果用户出现错误,那是培训不到位造成的,对用户提出的每一个问题要耐心的解答。
E、做好培训记录,以便在以后出现问题时明确责任。
9、系统维护
A、软件运行后会出现各种问题,这些问题在软件开发过程中是不可预知的;
B、对出现的问题要尽快加以解决,以满足客户的需求;
C、软件所以要设计成松散组合架构,给软件后期维护和升级提供了有利条件;
D、系统应具备动态数据备份与恢复功能,使用户可以随时对系统进行备份,在数据出现问题时可以将数据恢复到操作前的状态。
 八、设计一套通用系统架构
1、程序加载;
2、程序登录验证;
3、用户密码更改;
4、主程序,包括系统菜单、工具栏、状态栏等;
5、系统用户管理;
6、系统用户使用权限分配;
7、系统功能管理;
8、系统备份与恢复;
9、重新登录和退出系统;
九、设计软件架构所需要运用的知识点

1、数据库操作:
      包括数据库连接、对数据的增删改、存储过程的应用;
2、基本界面元素的使用:
      包括标签、文本框、下拉列表框、进度条、工具栏、菜单、
              状态栏、按钮、选项组、树控件、计时器、图象控件、
              视图控件、页框、数据表格等
3、基本编程语言的使用:
      包括变量、数组、判断语句、偱环语句、 API函数、
               错误提示语句、错误异常处理语句等
4、函数和类的设计
5、与办公软件集成应用:
      包括对EXCL表格、WORD文档、文本文件的处理等