程序员岗前培训手册
北京应用技术大学
目录(CONTENTS)
前言
面试是双向选择
软件公司研发技术岗位扫描与岗位职责
如何快速融入技术团队(程序员入岗的注意事项)
优秀程序员应具有的品质与习惯
谈谈学习方法
外包软件、商品软件、项目软件简介
前言
同学们经过在北京应用技术大学两年的学习,都满怀憧憬地向
往程序人生的开始,也对即将走上的工作岗位和环境充满了期待,
期待通过程序来证明自我的价值。程序员,相信在很多同学眼中是
一个有趣、特别、高薪、充满艰辛而又非常神秘的职业,因为手下
那一行行跳动的代码不仅实现了生动的功能,同时也表达着程序员
对人生的理解和追求。当程序员实现了一个独到的创意之后准备熄
灯休息时,天已蒙蒙亮…..当程序员看着用户熟练地操作自己的软件
解决一个个复杂事件时,脸上那写满成就的微笑…..的确在这个行业
里出现了太多的英雄人物和企业,而每一个英雄的事迹和成就都足
以让我们热血沸腾、摩拳擦掌……
在同学们即将步入程序员岗位之前,需要对软件研发相关职位的
职责范围与工作特点有所了解,掌握一些入职的基本技巧和注意事
项,检查自己的技能与行为习惯,有的放矢,提高面试和就业的成
功率。入职后能尽快地融入到技术团队,近而快速成长,成为团队
技术骨干和最优秀的职员。在工作中养成积极而良好的行为习惯和
职业素养,为自己的职业发展创造一个良好的开端。
本手册从面试、技术岗位职责、如何快速融入技术团队、优秀
程序员的品质与习惯、学习方法、外包软件/商业软件/项目软件简介
等几个方面阐述了同学们在踏入工作岗位之前应该了解的知识和注
意事项。
面试是双向选择
一般同学都会误认为面试时应聘者处于弱势,要接受招聘者的挑
选,从而从心理上承受很大的压力,而影响自己正常的发挥和才能展
示。其实大可不必,因为面试是双向的,选人和择业是平等的。况且
现在市面上的用人单位或招聘岗位也是良莠不齐,甚至还有一些骗子
公司,这就要求同学们在应聘时擦亮眼睛,注意分辨。当然大多数公
司都是良性的,他们要么是已具规模,各部门及岗位功能分工很明确,
他们会根据业务的发展或作为人才储备而有针对性的招聘相关技术人
员,而有的公司可能是刚刚成立,业务与核心技术还未形成,他们需
要招聘到能为他们提供解决方案或创意的技术人员,所以对于这些类
型的公司,他们对人才的渴求也都不亚于同学们对工作岗位的渴求,
若是聘到一个优秀的技术人员对业务或项目的推进将会使公司获得更
大的利益,或者使公司的发展少走弯路甚至能改变一个公司的命运。
相反,如果招不到合适的人才或者使用一个较差的技术人才,不但不
能推进项目的进展,还要花费几个月的培养时间和费用,甚至阻碍业
务开拓甚至项目搁浅。所以当同学们想得到一个工作岗位的同时,也
要看到企业更需要一个优秀的员工,二者是平等的。在面试时,同学
们在一种非常平和的心态下,充分发挥,尽可能地展示自己已经掌握
的技能,展示学习能力和发展潜能;另一方面也要尽可能地提前了解
公司的背景和业务以及应聘岗位的职能,从而加以辨别和选择。一旦
本次面试不能成功,表明要么岗位不适合你,要么你不适合岗位,或
者因为你本次的表现不佳,这都是很正常的,一定不要有挫败感,要
及时总结面试时的表现方式以及沟通技巧,若感觉自己的确能够胜任
该岗位,只是因为自己的临场发挥不佳而没有展示出自己的实际水平,
也可及时和招聘公司联系,经询问确认对方没有找到合适人选的情况
下,表明诚意,请求复试机会。总之,若本次失败,一定不要影响下
一次的面试,要积极总结,为一下次面试作准备。
正常运营的公司因业务的不断发展,人才需要不断的更新、补充
和储备,所以他们一直都需要人才,况且公司每次组织招聘都会花费
一大笔费用,也希望能够找到合适的人才,所以公司面试时一般不会
出太吊钻的问题来为难你,同学们也不要过分担心。
另一方面,同学们在坚信“天生我才必有用”的同时,也要正确看
待现在的就业形势,对第一份工作也不要过于理想化,要摆正心态,
坚持从基层做起,先就业再择业,职场上“骑驴找马”也未必不是一种
现实的理性选择。
总之,面试是双向性的,是招聘单位与同学们相互展示、相互认
识、互相挑选的一次沟通过程。同学们 在求职的过程中,要正确看待
面试,放下思想包袱,充分重视,充分准备,从容应对。
软件公司研发技术岗位扫描与岗位职责
一般中小型软件公司设置的技术岗位有:研发总监、项目经理、
需求分析人员、系统架构与分析人员、数据库设计人员、程序员、项
目助理与文档专员、测试人员、技术支持(售前/售后)、美工或网站前
台人员等,这些职位的工作联系非常密切,根据公司规模的大小,以
上职位可由一人或多人兼任,比如一个小型的软件公司可能只有一个
人完成软件的总体设计、架构、编码、测试、文档等工作。这些岗位
的职责范围大致是:
研发总监:全面负责研发及技术部门的整体工作。
项目经理:在整个项目开发过程中组织项目所需的各项资源,对
项目的范围、项目的质量、项目时间以及项目成本进行管理与控制。
根据项目范围、质量、时间与成本的综合因素的考虑,进行项目的总
体规划与阶段计划,保证项目组目标明确且理解一致;在项目生命周
期的各个阶段,跟踪、检查项目组成员的工作质量;保证项目在预算
成本范围内按规定的质量和进度达到项目目标。
需求分析人员:项目前期与客户方打交道最多的人,对于客户来说,
他可以代表整个项目组,对于项目组成员来说他的意见可以代表客户
方的意见,项目组内所有与客户需求相关的事情必需得到他的认可。
他的工作主要是:
1、 在项目前期根据《需求调研计划》对客户进行需求调研。
2、 收集整理客户需求,负责编写《用户需求说明书》。
3、 代表项目组与用户沟通与项目需求有关的所有事项。
4、 代表客户与项目组成员沟通项目需求有关的所有事项。
5、 负责《用户需求说明书》得到用户的认可与签字。
6、 负责将完成的项目模块给客户做演示,并收集对完成模块的意见。
7、 完成《需求变更说明书》,并得到用户的认可与签字。
8、 协助项目组有关人员对需求进行理解。
系统架构与分析人员:是项目的总体设计师,组织构建新产品的开发
与集成、新技术体系等,也可以理解为技术总监。是在技术上对所有重要
事情做出决定的人。系统架构在整个软件开发过程中都起着非常重要的作
用,并随着开发进程的推进而其职责或关注点不断地变化。
1、在需求阶段,负责理解和管理非功能性系统需求,比如软件的可维
护性、性能、复用性、可靠性、有效性和可测试性等。审查客户和市场人
员所提出的需求,确认开发团队所提出的设计;组织开发团队成员和开发
过程的定义;协助需求分析师完成《用户需求说明书》、《需求变更说明书》
等。
2、在设计阶段,负责对整个软件架构、关键模块、接口的设计。对系统
进行分析与建模,完成《系统架构说明书》、《系统概要设计说明书》、《系
统详细设计说明书》。
3、编码阶段,成为程序员的顾问,负责重点代码检查,并且经常性地要
举行一些技术研讨会、技术培训班等;
4、测试及实施阶段,随着软件开始测试、集成和交付,集成和测试支持
将成为工作重点;
数据库设计人员:根据《系统架构说明书》负责进行数据库选型与建模。
由于数据库是整个系统运行的核心,数据库设计的好差直接影响着整个系统
的开发效率和系统运行的优劣。他是项目组中唯一能对数据库进行直接操作
的人,对数据库结构的每一次改动都要得到他的认可。主要职责:
1、 根据数据库建模结果,绘制数据库关系图。进行数据库建库以及数据库
进行初始化操作。
2、对数据库进行维护、备份、恢复、同步。
3、负责客户数据的导入导出。
4、 根据《系统详细设计说明书》编写对应的视图、存储过程、函数、触发
器等。
5、对项目组其它成员进行 SQL 方面的指导。
6、为测试建立相关测试数据。
程序员:负责系统的最终代码实现。主要职责:
1、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
2、协助完成《系统详细设计说明书》,并根据《系统详细设计说明书》进行
编码实现;
3、对自己代码进行复查,并进行简单的测试。
4、撰写相关技术实现或功能描述文档。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进
建议。
6、参与软件开发和维护过程中重大技术问题的解决。
项目助理或文档专员:协助项目经理在项目日常管理和数据分析方面的工
作,进行与项目有关的协调工作,编写项目进度报表,参与组织项目协调会,
组织项目非技术文档的编写、传递与归档,以及与市场人员或其他部门的日
常沟通,协助项目资源协调工作。跟踪项目进展。项目或软件包的打包、发
布以及授权锁的制作等工作。
测试员:负责实施软件测试。测试是整个项目系统中非常重要的一个环节,
项目质量的保证,他的主要工作就是找到项目中存在的不合理、不合格的
部份,并要求项目其它成员按其给定的项目质量完成项目。保证了系统功
能实现是否与功能设计和需求定义一致。主要职责:
1、根据软件项目规范编写测试计划,设计测试数据和测试用例。
2、采用合适的测试方法实施软件测试,形成各阶段的测试报告,并对软件
问题进行跟踪分析和反馈,推动测试中发现问题及时合理地解决。
3、完成对产品的集成测试与系统测试,对产品的功能、性能及其他方面的
测试负责。
4、协助程序员进行软件代码检查,提出对软件的进一步改进的要求。
技术支持人员:主要负责软件产品或项目在技术层面上与客户的交流,根据
工作重点分为售前支持和售后支持。
售前支持:是销售人员和开发人员的桥梁,协调销售人员、用户、开发
人员的关系,制作产品功能演示 PPT 文档或多媒体资料,将公司的技术
实力向用户展示,技术标书的撰写,定期采集、分析和整理用户的需求,
配合销售制订产品销售策略,从技术上支持市场销售业务等。
售后支持:负责编写《用户手册》、《操作手册》,制作系统操作视频教程
等多媒体培训教材;负责系统实施(包括系统安装、用户培训、系统试
运行等), 协助用户进行“用户确认测试”和编写《确认测试报告》;通过
电话、网络、及时通讯等多种渠道解答用户在使用中的问题,提供售后
服务。收集、整理用户的建议等。
美工或网站前台人员:负责完成软件设计师安排的功能界面设计和简单网站
的设计。
1、负责对项目整体色彩的调配。
2、向系统分析师提出项目美化的建议。
3、为 BS 项目提供一套或几套 CSS 样式表及 HTML 结构表
4、为 CS 项目提供符合项目内容的静态、动态图片。
5、并为程序员提供界面指导。
如何快速融入技术团队
——程序员入岗的注意事项
同学们刚刚结束学校的集体生活,面对新的工作环境、新领导、新同事、
新任务、新的制度、新的生活节奏,很多的变化需要你尽快适应,很多的事
情需要你独挡一面,而又有许多事情需要你与同事通力协作来完成……
以下是新程序员入职后尽快融入技术团队应注意的事项:
1、 认真学习公司的发展背景与历程、主营业务以及规章制度。
进入公司前可能对公司已经有了一些了解,入职后,相关人力资源管理
部门会组织培训,解读公司文化,介绍公司发展背景、主要职能部门以及主
要业务特点,学习公司考勤、人事、办公等管理规定和规章制度。有些新入
职的程序员或技术人员,认为这些不含技术成分没有必要花精力去学习,其
实这种认识是错误的,公司文化及各种制度是整个公司的灵魂,是公司正常
经营活动保障和员工行为的一种约定,新职员只有对公司的发展背景和经营
状态有充分的了解,接受公司文化,高度认同公司的核心价值观,严格遵守
各种规章制度,才能自觉地规范自己的行为习惯,在工作学习中才有主动性,
遇到工作压力时也能坦然地接受,不会有抵触心理,从而能更快地推动自己
的工作。
2、 积极学习业务知识、类库及现有程序资源,把握学习的技术方向。
程序员入职后,若有一个成熟的开发团队,一般都会有一个老职员
来带领学习,这一阶段主要有三个方面的学习任务,第一是公司业务知
识,因为程序员只有对业务知识熟悉了,才能更好的理解和把握功能需
求,比如做通信方面的软件,你要学习一些通信行业知识;若做财务软
件,你要了解一些财务知识。第二,现有的类库是公司开发部门积累的
程序资源,学习和使用它可以规范统一程序的风格,提高开发的速度,
掌握并能使用这些资源,可使你尽快与老职员有程序上的共同语言。第
三,学习并加强在此领域的编程技能,因为在学校学习的是通用的知识,
掌握的是一种知识导入与学习的方法,那么在公司应用方面也许要求你
某一个方面很精通,比如网站的前台、数据库、图形处理、多媒体、网
络编程等某些方面的技能需要强化。
案例:
小张(男)和小胡(女)是同一个大学毕业的应届生,在 2005 年 4
月份同时进入公司做技术支持,当时两人的工资都是每月 1500 元,而两
年后的今天小胡已是研发部的一个程序员,工资是每月 4300 元,而且是
公司重点培养的对象之一。小张现在还是在做技术支持,工资是每月 2600
元,他们两人可以说是起点相同,但两年的发展却让他们有了明显的差
距,小胡比较爱学习,工作非常踏实,对业务知识也掌握得非常精通,
而且在做技术支持工作的时候,业余时间学习编程,由于做技术支持与
程序员交流比较多,小胡抓住了这个学习编程的机会,但她从不在公司
上班时间学习程序,在做技术支持工作时,她上班时间钻研业务知识、
软件需求、学习程序实现的思想,业余时间练习代码。在做技术支持一
年后,她通过了研发部的考核,进入研发部开始做编程。而小张与她对
比就不同了,他只是做好本质工作,没有潜心学习,对业务知识、软件
知识只是一般了解,工作上很业绩平平,总体上不出色也没出大的差错。
工资涨得当然也慢,小张和小胡的起点相同,但小胡比较主动学习,很
明显他们两个在职场上的差距就拉开了。
3、 展示进步,创新思考,体现价值。
入职之初,通过积极的学习与适应,应该说进步是非常快的,要及时
的总结,并把工作学习的总结和进步程度及时向主管汇报(口头、邮件、
书面),阶段工作总结应包括以下几点:已经完成的工作、技术上的进步、
业务上的进步、从学生到职员心态上的转变、八小时之外的学习状态等。
这样一方面可以疏理一下知识结构,把握自己的学习阶段,一方面让主
管根据你的知识结构和技能状态有针对性地给你分配合适的任务。
另外在工作当中也要注重思考,对工作进行适当的改进,并提出改
进意见,这样能更快是体现出你的进步和工作价值。
4、 积极参加团队活动,适应团队文化,创造与团队成员友好而积极的协
作氛围。
能尽快适应团队文化,与同事友好沟通是任何岗位都需要的职业素质,
只是在研发团队里要显得尤为重要,由于研发工作的重要与特殊性,若
在软件商品化和产品化的开发阶段,不良的沟通协作可能导致项目的流
产。另外,部分程序员写程序久了都会很注重与机器或代码交流,有的
不容易与新职员交流,有的他们因有大量的工作任务而顾不上,有的是
因为他们有太多的思想与创意,和一个新来的职员没有共同语言,有的
是人为设置“技术壁垒”(因担心新职员威胁到自己的岗位,而不愿传授
一些知识)。那么新职员一定不要因为他们没有主动与你交流而放弃交流,
或者认为自己被冷落而与逐渐远离团队,而是要在适当的时间与他们主
动交流,主动向他们请教,积极参加团队的集体活动,创造与同事交流
合作的良好氛围。要尽可能地为团队多做贡献,不要因为多干一些工作
或多加一点班,就有不良的情绪,从而影响正常的沟通与交流。另外,
在研发团队里的沟通与协作,还体现在代码上,自己设计的功能模块是
否能为别人提供良好的说明和程序接口。总之,与同事友好愉快的协作,
尽快融入研发团队,是新入职的程序员技术快速进步和稳定职位的重要
因素。
5、 正确面对工作压力,学会释放“厌职”情绪。
许多同学进入一个新的工作环境,面对的是很多新事物,感觉工作节
奏太快,工作压力太大。其实新职员有工作压力也是正常的,从职业生涯发
展的角度来看,这种工作压力是非常必要的。同学们在进入公司后,要勇于
接受工作压力,把这种压力作为进入初职锻炼的良好机会,树立良好的心态,
不要逃避,更不要产生“厌职”情绪,公司还正在培养你,你却选择退缩而自
炒“鱿鱼”。工作中要学会积极与同学沟通,注意工作方法,释放和减轻压力。
其实我发现一些新职员说工作压力大,做事不顺心,仔细分析之后可以发现
他们感觉的工作压力大与“不合群”有很大的关系。有些同学到公司后,一坐
下就是八小时,语言和行为与同事格格不入导致他不敢言语不敢行动,下班
时间到了,其实他不是工作学习本身的累,他们感到更累的是“心”。这些新
职员在工作中总是希望别人主动接近自己,自己却不会主动与人交流,时间
长了,同事觉得他“不爱说话”,也就逐渐放弃了与他的交往,这时他又会感
到被排挤,感到孤独,心理压力就会增大。另外技术上单打独斗,不能利用
别人的资源,因此完成相同的工作,付出的努力和压力就要比其他同事大得
多。所以新职员在入职之初,一定要正确看待工作上正常的工作压力,学会
与团队成员友好相处,创造一种“如鱼得水”的工作氛围,那么真正技术上的
压力都不会成为问题的。
如果公司还没有成熟的开发团队,需要你一个人承担开发项目,着
手组建开发团队,那么就要求你充分一切时间,利用网络资源,有技术
难点及时到网络上寻求帮助,同时与相关部门人员密切合作,保持动态
及时的沟通,及时报告工作进度,争取尽快拟出解决方案或产品。
优秀程序员应具有的品质与习惯
善于理解与把握需求
程序员的劳动成果就是满足需求的程序,那么在动手写代码之前,
只有完整地理解一个模块的需求才能做出好的程序,优秀的程序员在
分析需求的基础上,应该能抓住问题的关键技术,从而能够建立合适
的数据模型,尽量在代码中少走“弯路”。
善于学习与总结
当然善于学习,是对任何行业任何职业的最根本的要求,对于程序员,
这种要求就更加高了。其实研发部门招聘程序员,其实并不一定注重你现
在能做什么,而更注重的是你的学习能力、你的编程潜力,因为程序员是
很容易被淘汰,很容易落伍的职业,一种技术可能仅仅在三两年内具有领
先性,若你不能跟进新的技术,不学习新的技能,那么不断出现的新技术
会使你显得非常笨拙。善于总结,也是学习能力的一种体现,每次完成一
个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用
户反馈,随时总结,找到自己的不足,这样逐步提高,才能成长起来。
规范化的编码习惯
养成良好的编码习惯,比如:变量命名清晰,语句嵌套明确,函数具
有独立功能,适当注释等等,因为这些不但有助于代码的移植和纠错,也有
助于不同人员之间的协作。
良好的文档习惯
良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%
的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这
个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查
错,升级以及模块的复用时就都会遇到极大的麻烦。
代码复用性,模块化思维能力
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的
时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块
是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系
统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个
软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程
序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到
创新的代码工作中去。
团队精神与沟通协作能力
这是程序员应该具备的最基本的,也是最重要的安身立命之本。软件或
项目的各模块功能需求的理解准确,一个功能实现的修定,是否会影响其他
模块等,没有充分及时的协作对一个项目来说几乎是不可想象的。我做了几
年开发,感觉沟通真的太重要了,其实软件研发过程中最重要的不是技术问
题,而是管理中的沟通问题,比如初级程序员或许是碍于面子或其他原因,
不懂的问题也不想问,总是把问题掖着藏着,而高级程序员又不理解初级程
序员的开发任务总是完不成,其实可能是高级程序员不了解初级程序员的真
正困难,或者没有把要实现的逻辑和思路讲解清楚。合作起来总会有一些不
透彻,要么一个问题讨论多次依然是问题没有结果,要么是有些问题根本不
反映,大家都掖着藏着,报喜不报忧,待到问题暴露已无法挽回,严重的阻
碍了项目的进度。所以我最好的建议就是,高级程序员应该把问题讲到明白
为止, 初级程序员应该把问题问到明白为止,并且不仅仅是口头上讲明白、
听明白,还一定要形成文字,现在网络非常方便,公司都会有企业邮箱,把
问题的讨论过程通过 mail 的形式记录保存,明确确认,这样障碍才能去除,
项目才能得以顺利进展。
案例 1:
陈某是北京某重点大学自动化专业的毕业生,编程基础知识非常扎实,
在学校学习期间也有许多代码积累,从技术上说应该是很有潜力的,但他性
格有点孤僻,不太容易与同事沟通,当时录用他时公司是看在他的编程基础
很好,以为在研发部大家多带动他,应该会好些的。进公司有两个多月了,
一次在做某油田项目中负责其中一个小模块的开发,在开发过程中我经常询
问他有没什么问题,他每次都有些含糊地说没有。可当项目交付的时候,发
现他做的某一功能与当初功能定义不符,客户就抓住这一点说与合同中需求
描述不符,由此延期支付 28 万的余款,使该项目后期维护起来非常被动。
而导致这一结果就是陈某在做程序时有问题自己绕过去了,没有及时与项目
组成员交流,而独自采用了他熟悉的一种解决办法。项目汇报会刚结束,人
事部门就通知陈某交接工作,到财务结算工资…..
文摘:下面这故事《请按一下九层》我一直和我的同事们分享。是《读
者》中的一篇文章:
这是全市最忙的一部电梯,上下班高峰时期,和公共汽车差不多,人挨
着人。上电梯前和公司的人力资源总监相遇,说笑间,电梯来了,我们随人
群一拥而进。每个人转转身子,做一小小的调整,找到了一种相对融洽的关
系。这时,一只胳膊从人逢中穿过来,出现在我的鼻子前头。我扭头望去,
一个小伙子隔着好几个人,伸手企图按电钮。他够得很辛苦,好几个人刚刚
站踏实的身子不得不前挺后撅,发生了一阵小小的骚动。
那个人力资源总监问道:“你要去哪一层?”“九层。”有人抬起一个手指头
立刻帮他按好了。没有谢谢。
下午在楼道里又碰到那个人力资源总监。“还记得早上电梯里那个要去九
层的小伙子吗?”她问我。
“记得呀,是来应聘的吧?”九层,人力资源部所在地。
“没错,挺好的小伙子,可我没要他。”“为什么?”
“缺少合作精神。”她露出一副专业 HR 的神情,“开口请求正当的帮助对
他来说是件很困难的事情,得到帮助也不懂得感激。这种人很难让别人与他
合作。”
我点头称是。
如果那个小伙子坦然而自信地说一句“请按一下九层”,结果会怎样呢?
大家不但不会反感他的打扰,而且帮助他的人还会心生助人的快乐,最后他
也能得到想要的工作。
这个故事表明,良好沟通不仅仅体现在礼貌地说声“请”、“谢谢”,而是一
个职员能够创造愉快、高效、和谐工作氛围的素质和习惯。
时刻修定自己的认识和行为与公司的核心价值观(短期目标、长期目
标)保持一致
公司或研发团队在什么时段做什么样的项目,或者根据项目进度的计划,
在什么时间做什么功能模块,作为程序员要高度地与这些目标保持一致,不
要在关键时刻“掉链子”,这是最重要的。
案例:
小张是公司里的转正不久的程序员,很聪明,对新技术接受很快,
缺点就是非常的贪玩,对项目组的事缺乏主动性和责任心,平时的工作中主
管已经提醒过他多次要注意工作的责任心,但他都不太放在心上,对事依然
是敷衍。一次在做上海铁通的项目中,小张负责项目中的一个模块,当软件
架构出来以后,需要出差上海为客户现场演示和进一步确认需求,由于合同
还没有正式签下来,所以此行的技术交流对公司能不能签下这个项目至关重
要,公司派由我和小张在内的项目组 4 人出差上海,临行前我们多次开会研
究方案,确保拿下这个项目,下午到了上海之后约好第二天上午与客户见面,
正当大家为第二天的交流捏一把汗,积极准备的时候,小张却说是第一次到
上海,要求先去外滩看夜景,在得到项目组的否定之后,小张竟一个人偷偷
到外滩看夜景至到深夜才回到宾馆。第二天的技术交流会上,小张负责的模
块问题最多,虽然最后整个项目的交流还算成功,公司总算签下了这个项目,
但小张也被辞退了。原因很简单,小张一直没有把公司的事放在心上,项目
组出差第一目标是与客户交流好,拿下项目,而小张出差上海的第一目标是
看一下外滩。所以象小张这样的技术上不管有多么出色,但总在公司的关键
时刻“掉链子”,被公司辞退也是早晚的事。就在写此案例的前几天,在地铁
上我偶遇小张,谈话中得知他被辞退后半年内又经历了一家公司。而此刻他
又在匆匆地找工作。
谈谈学习方法
说起学习的方法,其实每个人都有自己的学习方法,也许这种方法对
我来说有用,但不见得就对所有的人有用。所以,不要盲目的跟着别人的
学习方法学习,要思考属于自己的学习方法。但以下几个原则是要遵守的:
坚持学习。首先要有毅力,对编程的狂热也可以在一定程度上起到帮助。
学习编程应该说要经历好奇——困难——容易——郁闷——成就感——
困惑——轻松的几个阶段的循回,不管哪个阶段都需要天天学习,坚持每
天都要进步,不能半途而废,培养一种坚持克服困难的毅力。
案例:
记得开发团队里有一个基础不是太好的程序员,刚入职两个多月,表现
一般,有一天早上他眉飞色舞地在讲述昨天电视中的一个情节,我听到后就
说了一句:“你还好意思说你看电视?”。他立刻明白了,就没说什么。从此
他的进步是可以说是突飞猛进的,代码的质量和工作效率明显上了一个台阶,
对项目的推动也是有目共睹的。几个月后的一次公司庆典上,他被评为“进
步最快员工奖”,奖金 3000 元。奖后在他给我的 Mail 中发现了这句话:“你
说我看电视的那句话改变了我的学习状态….我现在是马桶上、公交车上都在
看书或笔记。”
坚持实践。当你学到了一种新的技术或知识时,多实践是巩固学习的
一种最好最有效的方法。这个实践不是照著书上的例子做一遍,而是
根据自己的能力,给自己出题,然后去完成它。只有这样,你才能发
现自己的不足,同时又增加了编程经验。要成为合格的程序员,光会
写代码是远远不够的,更重要的是在实践中思考创新。实践的多少决
定着“高手”和一般程序员界线,高手们并不是天才,他们是在无数个
日日夜夜中磨炼出来的。成功能给我们带来无比的喜悦,但实践的过
程却是无比的枯燥乏味。
掌握编程思想。学一门语言,不能仅仅是语言,还要注重语言背后的
思想方法,获得提出问题,分析问题,解决问题的能力,不是为编程
而学习,因为编程语言和我们日常所说的语言一样,日常所说的语言
是一种思想的表达,而编程语言是一种功能的实现。要学习它是如何
来解决某一问题的,为什么要这样去做,他总是要符合客观事实的,
存在某种逻辑,数据的组织,信息的传递,然后看该怎么样用编程语
言来表达自己的想法。
多问、多总结、多记笔记。“三人行必有我师”,也许在一次和别人不经
意的谈话中,就可以迸出灵感的火花。著名的交换苹果理论说的是:
“你有一个苹果,我有一个苹果,当我们互相交换苹果后,我们仍然互
得一个苹果;你有一个想法,我有一个想法,当我们互相交换想法,
我们则互得两个想法”。遇到问题,上网查看一些技术论坛,看看别人
对同一问题的看法,会给你很大的启发。在这个网络时代,资料到处
都有,无论什么先进的技术,你可以问身边的高手,问网上的同仁,
只要查到资料,快的学上几天慢的一两个月也能学会,学会后总结出
技术要点记下来,可写在本子上也可写在 Blog 上,编程技能的提高靠
的是代码的积累,把所有自己的代码保存起来,并附有适当的笔记,
这样,到用到时才能信手拈来,才能获得踏踏实实的进步。所以现在
已没有写不出的程序了,写不出不是因为不够聪明,而是因为你没有
耐心和找 BUG 的细心。
不钻“牛角尖”,只抓主要问题,一些不影响工作的难点只要会用就行,
这也体现了 OOP 的思想,你只要知道一个技术能完成什么功能就可以,
至于它是如何实现的可暂时放一放,有时回过头来再看就不是什么难
点了。当你遇到技术障碍的时候,不妨暂时远离电脑,看看窗外的风
景,听听轻音乐,和朋友聊聊天。当重新开始工作的时候,我会发现
那些难题现在竟然可以迎刃而解。
外包软件、商品软件、项目软件的操作模式简介
软件外包
就是一些发达国家的软件公司将他们的一些非核心的软件项目通过外
包的形式交给人力资源成本相对较低的国家的公司开发,以达到降低软件开
发成本的目的。因为软件开发的成本中 70%是人力资源成本,所以,降低人
力资源成本将有效地降低软件开发的成本。软件外包已经成为发达国家的软
件公司降低成本的一种重要的手段。软件外包的大幅度增长为人力资源成本
相对较低的印度和中国带来了新的发展机会。企业与企业之间的外包就是:
企业(A)为了专注核心竞争力业务和降低软件项目成本,将软件项目中的
全部或部分工作发包给提供企业(B)完成;
商业软件
商业软件(又叫“商品软件”)就是由商业公司在调研大多数行业用户的
需求上开发的软件,该软件基本上能满足这些用户的需求,而且它的功能不
会因个别或少数用户的要求而改动。随着互联网的兴起和软件授权销售方式
的普及,商品软件的销售可软件公司直销、代理销售、专业下载网站销售等
多种渠道,软件授权许可的销售模式往往是根据使用商品软件的用户数和安
装该软件的计算机数来收取许可费用。
项目软件
就是软件公司专门为某个客户开发的软件系统,该系统由委托开发的客
户配合调研需求,“量体裁衣”,在关键阶段双方可派技术人员互相“渗透”,密
切合作,共同完成系统的开发和实施以及运行。项目软件与外包软件的操作
模式有相同性也有不同性。
产品经理与项目经理
简单地说,产品经理是做正确的事,其所领导的产品是否符合市场的需
求,是否能给公司带来利润的。而项目经理是把事情做正确,把事情作得完
美,在时间,成本和资源约束的条件下完成目标。
项目经理要对某个产品进行开发的管理,负责开发的进度,开发过程中
的协调等有关开发方面的问题,他最大的目标是时间第一、立项目标达成第
一。并不会很尊重产品本身的市场需求以及业务逻辑的问题。
而产品经理是横向管理的,也就是说他将负责某个产品或者某个产品线
从商业计划\市场竞争\开发需求\推广方案\渠道策略等各个方面。产品经理一
个产品线从头到尾的重要参与人。