第一篇:技术总监谈好的程序员如何写代码
技术总监谈好的程序员如何写代码
2010-01-04 16:55 |
2846次阅读 | 来源:风轻扬官方博客 【已有17条评论】发表评论
感谢carlkxiafhwfhw的提供 | 收藏这篇新闻
要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码。
即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码,整洁而规范,视觉上自然有一种美感。空白错落有致,注释恰到好处,命名和排版遵守统一的规范。差的程序员写的代码则经常出现过长的函数,前后不一致的命名方式和排版,过深的嵌套结构,非常复杂的表达式,随处可见的数字等毛病。
再去粗粗阅读,对好的程序员还是差的程序员就会更有把握。好的程序员写的代码,有一种精心雕琢而成的一致性。好的程序员一致会遵守统一的命名方式,如camelCase,而差的程序员的变量命名时不时的就会偏离统一规范。好的程序员的代码中拼写错误几乎不可见,而差的程序员的拼写错误要多得多。好的程序员对于同一类动作,不会忽而用这个动词,忽而又用那个同义词,如add/insert混用。好的程序员采用一致的简写规则,差的程序员则时而不简写,时而简写。好的程序员会很注意名称中形容词与名词谁在前谁在后,而差的程序员没有规则,时而在前时而在后。好的程序员很少会写出大段大段的重复代码,差的程序员却经常搞不定重复代码,他们难以将重复的代码抽取出一个统一的概念进行重用。好的程序员对于对外的API会注重注释与代码的一致性,差的程序员经常注释中的参数名称与函数定义都不一致。好的程序员很少会留下被注释掉的或用#if 0括起的垃圾代码,他们意志坚决,代码有用就要,没用就不要,差的程序员则不一样,他们经常不确信一段代码是否真的需要,他们缺乏保持代码整洁的习惯,因此他们让垃圾代码留着。
如上,即便你不懂他所用的语言,不却关心程序的逻辑,对好的程序员还是差的程序员就能做到八九不离十的判断。程序的好坏几乎总是取决于它们是否漂亮,不漂亮而好的程序,除了C++ STL源码,我再也没见过(如果你稍仔细看,STL的源码虽然不够漂亮,但仍然满足这里提出的一致性原则)。而又好又漂亮的代码则随处可见,如Linux Kernel,InnoDB,JDK,JUnit等等。
如果再仔细阅读,就能更准确。好的程序员写的代码,好似浑然天成,简单而直白。函数通常较短小,函数的名称准确的反映函数要完成的工作。逻辑简单而自然,让你读的时候由衷的发出啊,就应该是这样的感叹,而差的程序员的代码经常让你发出怎么是这样?这是再干什么呀?的疑问。好的程序员会在紧要关头加以画龙点睛般的注释,差的程序员要么没注释,要么注释只是代码的重复,纯粹是废话,更差的是注释是错的,是误导。
好的程序员未必是语言律师,即那种非常清楚的了解语言的各个细节,在编程时到处使用的家伙。好的程序员也不常炫技,在代码中精心构造一些独具匠心的片断,他们偶而会,但大多数时候总是用直白的语言来表述。
从代码也可以看出一个程序员的团队协作精神。注意团队合作的程序员,会严格按照团队规范写代码,而风格与团队规范不一致的程序员则很可能欠缺团队精神。注意团队合作的程序员会注意给模块的对外接口加以重要的说明,如前置条件、后置条件、参数能否是NULL等等,不注意团队合作的程序员懒于处理这些细节。
好的程序员与差的程序员的生产力差别巨大,项目的周期越长,项目越复杂,项目对质量的要求越高,好的程序员的价值就越大。好的程序员与差的程序员,管理成本也差别巨大,好的程序员只需要与他共同确定设计,代码可以不看,差的程序员的代码经常需要经过多次review,且仍有可能达不到理想的质量。
要成为好的程序员,首先要树立要成为好的程序员的志向,再勤加练习,天长日久,就会越来越好,这些人不怕老。没有志向永远成不了好的程序员,这些人若不在老去之前成为经理就会变成废人。
通过两个小时的笔试和半个小时的面试对于判断程序员来说是不够的。通过笔试与面试,你可以判断一个程序员是否具备算法与数据结构等基础知识,可以判断他对编程语言的特性是否掌握,可以判断他对技术是否关注,然而要知道他能否真的能很好的完成工作,不写代码是不够的。
那些显得对技术充满热情的,未必是好的程序员。这些人可能非常乐意从事有新意的工作,但后续的编码、测试、调试、文案工作则可能让他们感到厌烦。他们可能会提出好的创意,但却经常不能够有始有终的将其完成。公司不需要多少这样的人。
因此招聘的方式需要改善。招聘是最重要的,因为进来后就难以出去,即便是试用。转正条件白纸黑字写的很清楚,只要合格就可以转正,要达到合格并不是很困难。今年部门里进了很多新人,并不是人人都很优秀,但确实也都合格,自然也应该转正。
改善招聘的方法,就是让他写程序,可以出两道题,一道让他写程序,一道让他重构一个已有的较长的程序,一天之内完成。假使可以考他半个月,那么重构是不太需要的,但一天的时间太短,通过重构可以考察阅读并理解代码,并通过重构化腐朽为神奇的能力。那些不愿意写别人的代码,不愿意接受别人的代码,经常要重来一遍的人是不理想的。今年有两个人采用了类似的方法。有一位简历很优秀的人,做了两道编程题被拒了,有一位简历及面试一般的人,通过编程测试,录用了。我感觉比单纯的笔试与面试要准确。
第二篇:技术总监
技术总监岗位职责
技术总监”职务描述:
职务名称:技术总监(Chief Technology Officer,CTO)
直接上级: 总经理
直接下级:技术部经理、质量管理部经理
本职工作:负责公司产品开发及质量管理工作
工作责任:
一、业务职责
1、制订并组织实施技术系统工作目标和工作计划。
2、组织制订并实施技术系统规章制度和实施细则。
3组织技术、产品开发与创新。
4、公司标准化、计量管理工作。
5、定期进行技术分析和质量分析工作,制定预防和纠正措施。
6、重要技术设备等的申购。
7、技术系统文件等资料的整理保管及公司档案管理工作。
8、公司保密工作
二、管理职责
1、组织建设
(1)、参与讨论公司部门级以下组织结构;
(2)、确定下级部门的组织结构;
(3)、当发现下级部门的岗位设置或岗位分工不合理时,要及时指出问题,作出调整,并通知人力资源部。
2、招聘及任免
A、用人需求
(1)、提出直接下级岗位的用人需求,并编写该岗位的岗位职责和任职资格,提交给总经理确认;
(2)、确认直接下级提交的用人需求(含岗位职责和任职资格),并提交总经理确认。
B、面试
(1)、与人事部协调沟通所需要岗位人员;
(2)、组织参与面试的人员,进行直接下级岗位的初试;
(3)、安排直接下级岗位由总经理复试,做最后确定。
C、不合格员工处理
(1)、提出对不合格直接下级的处理建议,提交总经理确认;
(2)、确认直接下级提出的对不合格员工的处理建议,提交给人力资源部。
3、培训
(1)、提出对直接下级的培训计划,提交总经理确认;
(2)、确认直接下级提出的培训计划,提交人力资源部。
4、绩效考评
(1)、提出直接下级的绩效考评原则,提交总经理确认;
(2)、根据总经理确认的绩效考评原则,与人力资源部经理商讨并确定绩效考评方法;
(3)、对直接下级进行考评,并进行考评沟通。将考评结果提交人力资源部。
5、工作沟通
(1)、汇总工作报告,并与总经理进行信息沟通,同时将这些信息传递到直接下级;
(2)、负责将公司的政策、原则、策略等信息,快速、清晰、准确地传达给直接下级;
(3)、确定书面的交互式的工作通报制度,与直接下属进行沟通。
6、激励
(1)、提议下级部门和直接下级的激励原则,提交总经理确认;
(2)、根据总经理确认的激励原则,与人力资源部经理商讨并确定激励方法。
7、经费审核与控制
(1)、依据财务制度审批下级部门的各项花费,并确认支出的合理性;
(2)、监督并控制下级部门的费用支出,并向总经理进行费用月报。
8、工作报告
(1)定期将自己的各项工作及下级部门工作以书面的形式向总经理报告。
9、表现领导能力
(1)、指导、鼓励、鞭策下级,使下级能努力工作;
(2)、有办法提升下级的工作效果和工作效率;
(3)、能为下级描绘公司的战略意图和远大前景。
技术部的每个部门都与公司的某一主要业务相配套。我们配合这些业务,为各部门不同的业务需要提供技术解决方案。
第三篇:技术总监
岗位描述
技术总监
岗位名称:
技术总监
直接上级:
总经理
直接下级:
技术部经理、质量管理部经理、标准化计量管理室主管、档案室主管 本职工作:
领导公司技术开发、技术管理、质量管理、档案管理、保密工作。直接责任:
(1)制订公司技术开发、技术改造计划,经批准后组织实施。
(2)协助总经理建立公司质量体系并组织实施。
(3)主持重大新产品、新技术、新工艺方案的可行性论证,参与新设备方案的可行性论证。
(4)审批新产品、新技术、新工艺方案。
(5)审批各项技术、质量标准、工艺文件等技术文件。
(6)负责公司重大技术开发和改造课题的攻关、应用。
(7)领导公司进行公司标准的建立、健全,经批准后组织实施。
(8)组织公司较大产品质量问题及不合格品的审理。
(9)代表公司对外进行技术谈判和技术交流。
(10)领导公司档案管理工作和保密工作,在保证核心技术秘密的安全方面向董
事会负责。
(11)参预制订公司总预算、季度预算调整。
(12)制定技术系统、季度工作目标和工作计划,经批准后组织实施。
(13)主持制订、修订技术系统主管的工作程序和规章制度,经批准后施行。
(14)制订技术系统培训计划并协助培训部实施。
(15)监督检查、处理反馈技术系统主管的工作程序、规章制度的执行情况。
(16)按工作程序做好与相关系统和部门的横向联系,并及时对系统间争议提出
界定要求。
(17)及时、准确传达上级指示。
(18)定期主持技术系统例会;召集公司技术、质量方面工作会议;参加总经理
办公例会以及其它重要会议。
(19)审批直接下级上报的预算、工作计划、培训计划等文件。
(20)指导、监督、检查所属下级的各项工作,掌握工作情况和相关数据。
(21)及时向董事长或董事会代表(按程序)、总经理汇报本系统的真实情况和有关
数据。
(22)定期向总经理述职。
(23)在必要的情况下向所属下级授权。
(24)制定直接下级的岗位描述,定期听取述职并对其工作做出评定。
(25)及时对下级工作中的争议做出裁决。
(26)按程序受理直接下级上报的合理化建议。
(27)培养和发现人才,根据工作需要按照程序申请招聘、调配直接下级,负责
直接下级岗位人员任用的提名,隔级下级岗位人员的任命。
(28)填写直接下级的过失单和奖励单,根据权限按照程序处理。
(29)在权限范围内审批直接下级上报的过失单和奖励单。
(30)指定专人负责技术系统文件等资料的保管和定期归档工作。
(31)根据工作需要进行总体指挥、现场指挥。
(32)关心所属下级的思想、工作、生活。
(33)代表公司与政府对口部门和有关社会团体、机构联络。
领导责任:
(1)对优化产品结构和产品及时更新换代负责。
(2)对新产品满足市场需求的程度负责。
(3)对产品质量和质量水平的提高负责。
(4)对新技术、新工艺的技术性能和安全性负责。
(5)对技术系统工作目标和工作计划的完成负责。
(6)对所属下级的纪律行为、工作秩序、整体精神面貌负责。
(7)对技术系统预算开支的合理支配负责。
(8)对技术系统工作程序的正确执行负责。
(9)对技术系统负责监督检查的规章制度的施行情况负责。
(10)对技术系统管辖的设备设施的完好性负责。
(11)对公司秘密的安全负责。
(12)对技术系统给公司造成的影响负责。
主要权力:
(1)向总经理的报告权。
(2)对公司各种技术、工艺、质量标准有批准权。
(3)对公司各项技术问题和技术争议有决策权。
(4)有关键工艺设备、检验及试验仪器、计量器具的选型权。
(5)对核心技术秘密安全的维护权。
(6)有对技术系统所属员工和各项业务工作的管理权。
(7)有对直接下级岗位调配的建议权和任用的提名权。
(8)对隔级下级有人事任命权。
(9)对所属下级的工作有监督、检查权。
(10)对所属下级的工作争议有裁决权。
(11)对直接下级有奖惩建议权。
(12)对直接下级的管理水平、业务水平和业绩有考核权。
(13)在权限范围内对隔级下级有奖惩的批准权。
(14)对限额资金有使用的批准权。
(15)有代表公司与政府对口部门和有关社会团体、机构联络的权力。管辖范围:
(1)技术系统所属员工。
(2)技术系统所属办公场所及卫生责任区。
(3)技术系统办公用具、设备设施。
第四篇:技术总监
HR工具箱-职位模版
技术总监
本范例仅供参考,请酌情修改后再使用
岗位职责
1、负责指导制定、审核公司技术管理制度和技术规程标准;
2、负责公司新技术引进和产品开发工作的计划、实施,确保技术的超前性、竞争性;
3、负责组织编制公司技术开发计划和公司技术发展长远规划;
4、负责指导、处理、协调和解决公司项目中出现的技术问题,保证项目的正常进行,确保公司项目计划按时完成;
5、负责组织技术成果及技术经济效益的专业评价工作;
6、负责对技术方案的评审工作。
任职资格
1、正规院校本科以上,计算机、信息工程、通信及相关专业;
2、从事IT行业工作8年,具备通信行业工作背景;相关技术管理岗位5年以上经验;有海外工作经验者优先;尤其是移动通信行业工作经验,具有移动数据业务运营经验者最佳;
3、熟悉无线增值领域,掌握增值业务的相关技术和业务发展动态,对产品的市场有敏锐的洞察力,并具较强的创新能力和开发能力;
4、了解多种大型网络架构平台,掌握数据、语音及视频等方面的技术知识,并能够把握相关技术的发展动向;
5、具有小型机、各种档次服务器、存储、交换、路由等设备的调试经验,熟知各种软件;有数据分析及挖掘工具(如SAS)等产品经验;
6、具有较强的学习能力,积极上进,有较强的工作责任心和事业心;
7、具有开拓创新精神和品格。
第五篇:从程序员到技术总监,分享10年开发经验
在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有10年的时间了,在这里在下想凭借自己的亲身经历,与大家一起探讨一下。
明确入行的目的
很多人干IT这一行都冲着“收入高”这一点的,因为只要学会一点HTML, DIV+CSS,要做一个页面开发人员并不是一件难事,而且做一个页面开发人员更容易找到工作,收入比普通的工作还要高一些,所以成为了很多高校毕业生的选择。如果您只是抱着这样一个心态来入行的话,那阁下可真的要小心了。因为干IT这一行竞争本来就比较激烈,特别是页面设计这方面,能够开发的人很多,所以为了节省成本,大部分公司都会在需要的时候才招聘这类人员;在没有订单的时候,一些小公司还可能找各类的借口或者以降薪的手段去开除这类员工。而在招聘信息上常常会看到“招聘页面设计师,条件:30岁以下„„欢迎应届毕业生前来应聘”这样一条,因为这一类工员对技术上的要求并不高,找应届生可以节约成本。所以在下觉得“IT行业是吃青春饭的”这句话只是对着以上这类人所说的,如果阁下缺乏“进取之心”,而只抱着“收入高,容易找工作”这样的态度而入行,那“IT行业是吃青春饭”将会应验了。
选择合适的工具
JAVA、C#、PHP、C++、VB„„10多种热门的开发语言,哪一种最有发展潜力呢?其实开发语言只不过是一个工具,“与其分散进攻,不如全力一击”,无论是哪一种开发语言,只要您全力地去学习,到有了一定的熟悉程度的时候,要学习另一种的语言也是轻而易举的事情。开发语言主要分为三大类:
1.网络开发
现在网络已经成为世界通讯的一座桥梁,好像Javascript、PHP、Ruby这几类开发语言大部分是用作网络开发方面。
2.企业软件开发
JAVA、C#、VB这几类开发语言都实现了面向对象开发的目标,更多时候用于企业系统的开发。
3.系统软件
C语言、C++、Objective-C这些软件更多是用在系统软件开发,嵌入式开发的方面。
当然,这分类不是绝对,像JAVA、C#、VB很多时候也用于动态网站的开发。在很开发项目都会使用集成开发的方式,同一个项目里面使用多种开发语言,各展所长,同步开发。但所以在刚入门的时候,建议您先为自己选择一种合适的开发工具,“专注地投入学习,全力一击”。
明确发展方向
当您对某种开发语言已经有了一定的了解,开始觉得自己如同“行尸走肉”,成为一个开发工具的时候,那您就应该要明确一下自己的发展方向了。
平常在公司,您可以看到做UI层的开发人员大多数都有20多岁,他们充满干劲,而且没有家庭负担,在两年前ASP.NET MVC、Silverlight等刚出现的时候,他们可以在晚上回家的时候买几本书或者直接上网看看,研究三五个星期以后,对需要用到的技术就已经有一定的了解了。而年过30的人多数是已经成家了,他们每天9:00点上班唯一的希望就是快些到6:00点,能回家吃饭。吃完饭只想陪孩子玩一下,看看孩子的功课,对新增的技术缺乏了学习的欲望。所以很多接近30岁的程序员都有着一种逼迫感(包括30岁时候的我自己),再过几年应该怎么办?这时候,您就更应该明确一下目标,努力向自己的发展方向前进了。归纳一下,可从下面几项里选择适合自己的一条道路:
1.从技术向业务过渡
在国外,很多发达国家都很重视人才,一个高级的程序员与一个Project Manager收入相差一般不超过15%。但中国是世界上人口最多的国家,国内人才众多,所以人才滥用的情况经常可以看到。一个小公司的开发部里面经常会见到新面孔,但PM却不会常换。因为做老板的对技术是一窍不通,依他们看来只到拉住PM的心,那技术方面方面就能搞得定,至于技术部要换人,他们根本不需要费力气去管。所以从一个技术员过渡到一个PM是向前发展的一个选择,但开发人员也需要知道,要成为一个PM不单单是使用技术,而更重要的是对管理方面的认识。一个PM主要的工作是组织团队,控制成本,管理业务,控制项目进度,与客户进行沟通,协调工作,定期进行工作报告等。所以要成为一个成功的PM更要重视组织能力,PM必须能提高团队的积极性,发挥团队所长,在有限的开发资源前提下为公司得到最大程度上的利润。成为一个PM后,通常不需要直接接触技术开发,而着重管理的是业务发展,但PM对技术也需要有一定的了解(在下曾经为PM对技术了解的必要性写过一篇文章,得到很多支持但也惹来不少的争议)。在这里我还是要强调自己的观点:要成为一个成功的PM最重视的是管理能力,但对技术也应该有足够的了解,因为这是与团队成员沟通的桥梁,只有这样才能与整个团队的成员有着紧密的结合,让团队成员感觉到他们自己存在的意义,从而调动团队的积极性,而不是漠视技术人员的存在。技术并非成为一个成功PM的充分条件但却是必要条件!
2.从程序员向技术管理发展
其实一个Team Leader的职责与Project Manager相像,但Team Leader更着重于技术开发方面,通常一个大型项目都会有一两个开发团队由Team Leader带领,负责开发核心部分,而其它部分分派给不同开发小组或者分派给外包公司。在网上常看到几句话,贴切地形容了PM与TL的区别:“技术人员乐于被领导;但他们不喜欢被管理,不喜欢像牛一样被驱赶或指挥。管理者强迫人们服从他们的命令,而领导者则会带领他们一起工作。管理是客观的,没有个人感情因素,它假定被管理者没有思想和感受,被告知要做什么和该如何做。领导是引领、引导,它激励人们达成目标。领导力是带有强烈个人感情色彩的,它不是你能命令的,也不是你能测量评估和测试的。”
无论是PM与TL,对业务与技术都要有深入的了解,只是PM更侧重于业务的管理,盈利的多少,风险的大小等等,而TL则侧重于项目的成本,开发的难度,软件的架构等技术方面的问题。在某些人眼中,技术与管理就像鱼与熊掌,不可兼得,但依在下看来,两者却是秤不离砣,密不可分。只要及时提升自己对技术与管理的认识,不断地向深一层发展,要从程序员提升到技术管理人员只是时间的问题。打个比方,一个普通的.NET程序员,开始可能限制于ASP.NET的页面开发,但一旦他有了发展之心,他自然会对ASP.NET MVC、Silverlight、WinForm、WPF这些UI的开发手法感到兴趣,学习不需要多少时间,他可能就会认识这些UI开发只不过是一些工具,其实在开发原理上没什么区别。接着他就会向深一层的通讯模式进行了解,认识TCP/IP、Web Service、WCF、Remoting这些常用到的通讯方式,这时候他可能已经感觉到自己对开发技术有了进一步的了解。进而向工作流、设计模式、面向对象设计、领域驱动设计、面向服务开发等高层次进发,最后成为技术的领导者。上面只是一个比喻,但要注意的是,在学习的时期必须注意的是与同事之间沟通,很多的开发人员喜欢独来独往,开发的项目总想一个人搞定,不受外界的干扰。但要明白,就算你有天大的本事,一项大型的项目也不可能由你一个人全扛着。所以团队的合作性与同事间的沟通是必要的,这也是成功一个TL的必要条件。
3.单方面向技术发展
能成功进行技术开发的尖端人才,这是在下最向往的工作,却也没本事登上这个位置。很多从事开发的人都会认为,业务总会带着“金钱的味道”,老板从来不管开发是否合符开发原则,是否经过必要测试,他们只会在客户面前无尽地吹嘘,项目到期能成功交货,只要不出什么大问题那这个项目就算成功了。其实我们也要明白:开发项目最终目标是为了赚钱,在开发过程中对项目成本的限制和效率的控制这也是必须,所以这才需要管理人员对项目进行管理。但开发人员也很想避开这“金钱的尘嚣”,全心投入到技术的世界当中。所以对技术有着浓厚兴趣的人,往往会深入地研究某一项技术,成为技术上的精英。但在这里说一句令人心淡的话:中国已经属于是世界上第二大经济体同盟国,但国民生产总值主要来源于第三方加工产业方面。中国可以说是人才济济,但却在高新产业上却比发达国家落后。这几年的确看到我们国家在高新科技上有着质的飞跃,但跟欧美发达国家还有着一段距离。所以想在中国成为尖端技术的人才,无可否定比在国外要难。依在下看来,要想成为尖端的开发者,必须对C、C++、汇编语言、嵌入式开发、Windows API、Linux API这些底层技术有着深入的了解。要知道解JAVA、.NET„„等这些之所以称为高级开发语言,并不是指它们比C、C++、汇编语言更高级,而是指它们封装了C、C++等等的功能,更适合用于企业软件的开发,使开发变得简单。但如果要开发一些底层的软件,大型的系统的时候,就必须用到C、C++、汇编等开发语言,这是成功尖端人才的一个条件。
确定未来的目标
人是从历练中成长的,古人云:三十而立,形容的不是一个人的社会地位,经济来源,而是形容一个人对未来的目标,对人生的意向。要成为一个成功人,就应该早日为自己定下长期的发展目标,作为一个开发者也当如此。随着人的性格,取向各有不同,大家为自己所选择的路也有不同:
1.自立门户,勇敢创业
快30岁了,很多人会认为要想真正赚得了钱,就应该自立门户,为自己创业建立一个基础。像北京、上海、广州这些一级城市,要买房子,一手楼基本要在2万~4万元/平方米左右,而在一家普通的IT公司当上一个项目经理,基本收入一般都在1.5万~3万之间(除非在大型的跨国企业内工作,那另当别论),要买一间100平方米左右的房子,就算不吃不喝也几乎要10年的年薪,所以选择自主创业,是很多IT开发人员的一个未来目标,想要达到这个目标,就应该更多地把业务作为重点。不可否认的一件事,在中国社会里很多时候讲的是“关系”,即使这30年的改革开放使中国的经济蓬勃地发展起来,但几千年来留下的歪风还是不能完全的磨灭。所以想要创业的人事建议你要多跟客户打好关系,与合作伙伴保持互利互动的模式,这将有利于日后事业的发展。
2.急流勇退,退居二线
这也是不少人的选择。很多人在有了家庭以后,感觉到压力太大,人的一生并非只有事业,他们想把更多时间用于对亲人的照顾,对孩子的关心上。所以很多人会选择一份像系统分析、系统维护、高校教师、专业学院讲师这一类的工作。收入稳定,而且往往没有一线开发人员那么大的压力。
3.不懈努力,更进一步
无论你是一个Project Manager或者是Team Leader,如果你想继续晋升一级,那还是会两极分化的。从一个PM到一间公司的管理层,那所面对的事件会有很多变化。一个公司的总经理,要管理的不再是一到两个项目的成本,而是整个部门的运作,整间公司的业务流程,所以要肩负的任务会更重。在下曾经有一位上司彭博士,他是企业的最高领导人,年薪超过三百万,而且在报纸杂志上也曾经亮过相。平常只会在某些会议上轻轻地亮下相,说两句讲词,平常的公司运作与业务管理都不需要他直接执行。这并不是说一个作为管理层很清闲,因为他们要面对的是更多的社会关系,与公司合作企业的联系上。这跟一个PM的工作有很大的区别,所以要从一个PM晋升到管理层,那可是要付出更多的努力与汗水。
如果要从Team Leader上升为一个技术总监,那工作的方向也有所改变。像之前所说:一个TL可能更重视的是技术层面,讲求与团队之间的互动合作性,更注重的是开发的完善。而一个技术总监就无需要直接参加某个项目的开发,而注意的是开发的效率与成果,如何合理使用有限的开发资源,控制开发的风险和可能带来的效果。
发展感受
经历了8年多时间,在下从一个程序员到一个项目经理,之间经过很多的曲折,但因为每一个人的际遇都有所不同,所走的路也有不同,正所谓条条大路通罗马,成功的路不止一条,在下也不想令各位误解,而只想为大家说一下我的发展方向。如果您是一位开发人员,“程序员->架构师->Team Leader(Project Manager)->技术总监”是一条不错路,这也是在下选择的路。在我国,想要进一步提升自己,无论你想是以技术为重点还是以业务为重点,都离不开管理二字。在一些大型的企业,一个团队往往会配备一个PM与一个架构师,尽管两个人负责的任务各有不同,但你会看到一个架构师的收入往往不如一个PM,PM往往是这个团队的核心领导者,是关键人物。因为公司能否赚钱,PM有着重要的作用。PM与TL并没有绝对的区别,而且在一些中小型企业,一个开发团队只有3~5人,一个TL往往会兼备业务处理、成本控件、架构设计、开发管理等多项任务。所以在下会把Team Leader与Project Manager定于同一层次,一个公司的老板往往不会知道团队的架构师、程序员是何人,而只会向PM询问项目的进度,所以只有晋升到这个层次,才有机会进一步提升管理能力,让自己有上升的空间。至于要成为一个技术总监,那要求就不再单单是对单个项目的管理,而应该更则重于新兴技术的引用,开发资源的合理利用,对开发项目敏捷性的处理等等,对此在下也在试探当中,未敢多言。
与编程牵手 和代码共眠 从程序员到技术总监
从业IT十年,从程序员成为技术总监,现在回头看一看,这条路也伴随国内的IT一起风雨兼程10年,对IT技术由其是IT的纯软件开发这一块,向即将要从事软件技术研发的朋友谈一谈我的看法:
一.认清当前IT形势,选择合适的技术方向和技术起点
估计大家都多多少少知道,这个IT行业知识的更新很快,竞争很急烈.如果你对自己以后发展的方向在从业前有一个清析的计划或认识,相信你会比别人走得更好,走得更远,赚的钱也更多...呵呵
IT软件从业的方向,一般都会有这些机会:产品售前(市场,业务),产品开发(编码,设计,测试),产品售后(支持,实施),产品管理(项目管理等)
A.产品售前(市场,业务)
要从事这一块的工作,主要是在软件开发的前期(无产品),或者合同签订前期(有产品).一般要求对相关的业务和技术都要求很高,这可不仅仅是要求人际关系,交际能力.要想别人买你的产品,你得以专业的产品品质为后台,以专业的谈吐,专业的技术和专业的业务理解能力来取胜.从业者要求:
要求从业者要有一定的社会经验,技术经验或业务经历,或一定的社会圈子和交际能力.建议:
刚刚从学校毕业的朋友或不符合上面条件的朋友最好要考虑清楚了.当然这世上没有什么绝对的东西,就看你自己了.现实情况:
据我所了解的,作这一块的都会是公司一些高层(有关系,有经验)和业务专家或特殊背景的人员等.B.产品开发(编码,设计,测试)
这一块的工作,当然是IT从业大军的主力了,但也得要考虑清楚.如果你要作设计师,或测试,最好先作一段时间的编码, 一个好的设计师是不可能不精通相关技术平台的!
国外好的测试人员也几乎是从开发人员中选出来的,基至是软件开发高手.a.代码编写
在这一个职业选择范围内最好是从代码编写开始.当然你也可以先作测试,看看人家是怎么写代码的是如何来作这个软件的,借用人家的测试经验也可以,以后有机会再来编一段时间的代码也行.有时自己去写一个软件也可以,所以作编码和测试都是一个双向交互的.而不是编码在前测试在后的.作代码的编写最好自己先看看别人的软件,或由一些高手带着指导一下,现在技术的学习都不成问题,关健是要连成一条线来学习和思考就会有一定的局限了.所以要熟悉整个的项目流程或业务流程不是靠个人编码或在培训班学一下就能解决的,个人的技术学习和培训班大部分只能解决技术的学习问题,但作软件不仅是要技术呀
三分技术七分业务说得不为过,业务的学习也是一个开发人员所要必备的,如果你在不熟悉业务细节之前建议你不要急着去写代码,那样肯定会是对以后软件的影响很大.先要熟悉一下业务.所以软件开发人员掌握一门技术平台和语言是必备条件但同时也必须要有一定的业务知识,这样才是一个合格的软件开发人员.当然精通软件编码,懂设计,熟悉业务,熟悉软件项目开发流程的软件开发人员是优秀的,那是高级研发人员的必备条件.如果你才入门或转行或刚毕业,建议从基础的代码编写开始,跟着高手或找一些成熟的项目多学习, b.软件设计
当然这个职业要求行业的经验,技术经验都要有一定的基础,薪水一般也会高很多,所以也是一些开发人员热烈追逐的目标.但一个好的设计师不是一二年所能练就的,精通编码,熟练设计模式和公司所采用的技术平台,熟练一些设计理论并实际多运用,熟练公司业务,其实这个层面的压力也最大,一个好的软件在设计上的比重几乎要占到七成.建议刚毕业的朋友或软件初学者不要在这一块来凑热闹,即使你作成了设计师,但在我眼中看来你也不是一个合格的设计师...当然你有这个能力来作设计师就要恭喜你了.c.软件测试
熟练软件测试的各种理论或实际运用,也要熟悉编码技术及相关的技术平台,熟练掌握业务.软件测试中一般都会有:
单元测试,要求你熟练开发技术进行跟踪调试,也就是白盒测试了
集成测试,对整个项目流程的测试,要求掌握业务知识,对设计的软件能作功能上的测试或压力测试等 ,属黑盒测试
确认测试,对业务要很熟悉,测试软件是否完全满足了客户的业务需求.总体建议:
1.熟练一种技术平台,熟悉一种业务
刚入门的朋友很容易犯的一个毛病是,熟练:VB,VC,.NET,JAVA,C++,C,Dephi,PB,几乎市场上要用的他全部会,唉,如果我看到他的简历上有这么一句话,这个人肯定不会在我考虑的范围了.现在全球用得最广最多的技术平台体系也就三大体系:
sun的J2EE技术体系(JAVA):在高安全性,高性能上更胜一步,中高端市场上用得多
微软件的技术体系(C++,.NET,c#,VB):在中,低端市场占绝对优势,也是全球个人电脑操作平台用户最多的.CORBA技术体系统(一种分布式技术体系和标准),全称:Common Object Request Broker Architecture:公共对象请求代理结构,可以用不同的编程语言写成,运行在不同的操作系统上,存在于不同的机器上。
一般介于底层和上层管理软件之间,其他的还会包括底层开发:C,汇编,属纯底层的开发,当然要求技术的起点和业务背景更强,最好是学的专业:电子电气,嵌入式行业,机械制造,数据采集等...看中你想要从事的技术体系,选好一门语言工具,好好上路吧...:)
永远要记住:你什么都想学,你什么都学不精
2.从基础入手,不要好高鹜远,眼高手低,要与实际结合 B.产品售后(支持,实施)
这一块对于开发技术的要求来讲不是那么明显,主要工作会在软件开发后的工作,跟客户打交道多,但更多要求体现在对业务的把握和客户的交际上.有些软件产品业务比较成熟,如果参与这一阶段的工作,可以快速学习很多的业务知识,积累客户交往的经验
建议:刚入门或刚毕业的朋友,可以在这个工作上多选择,等待时机成熟,立马杀入软件的开发或设计阶段,当然,这一块的工作作得好也不容易,如果适合你作, 工作环境或工资都不错你就大可不必多想了...C.产品管理(项目管理等)
这一块的工作主要体现在管理上,当然适合有一定经验或管理能力的人员来担当, 最后的技术从业方向总结:
技术型:先选择好一种技术平台,熟练一种开发语言和数据库...专业专注的搞几年再说
技术+管理型:如果你有一定的技术经验了,并且人际交往,管理能力不错,你就可以向这个方向发展
技术+业务型:精通一种技术平台,精通一种业务,好好搞,这种人才最受欢迎...管理型: 如果你有一定的社会经验,从业经验,如果人际交往,管理能力还可以,老板也喜欢,就搞这个
业务型(市场):如果你对业务很感兴趣,跟客户的交往等也不错,你可以选择了,有适合的专业技术就更能锦上添花了
技术+市场+管理:老大的位置....:)