如何管理技术团队

管理基础

管理人员是与人打交道,其任务是使员工能够协同工作、扬长避短。
                                           --Peter Drucker

开发岗位解释

程序从设计作为一种严肃的职业已经存在70多年了(二次大战结束后)。从技术能力或分工来看,应用程序的开发人员分为应用程序员、系统程序员、系统架构师/工程师、开发团队管理者。

应用程序员:应用程序员开发的程序或其他结果通常给终端用户直接使用。应用程序员开发的程序包括文字处理软件、OA系统、Web浏览器、安卓应用程序等等。

系统程序员: 系统程序员理解系统中的所有组件的工作原理,包括客户端/服务端的操作系统和通信系统。以某个产品为例,系统程序员负责编写与硬件交互的设备启动程序,创建能够为设备驱动程序和应用程序执行提供运行时环境的操作系统,为其他程序员创建编译器和调试工具,还需要为其他程序员提供工具和服务用于交付程序。

系统架构师/工程师:大多数系统架构师/工程师都是从系统程序员做起的。在所有开发类职位中,系统架构师/工程师是最需要技术和经验的。要想理解所有相关的系统组件(操作系统、通信系统、数据库、在线/离线访问方式、安全性、硬件等)之间的复杂关系,需要你对所有这些技术和系统都有丰富的专业知识和实际工作经验。Google公司的联合创始人Larry Page和Sergey Brin就是类似的人,他们在设计和实现上培育的优雅风格帮助Google公司在技术和商业领域都取得了伟大的成功。

开发团队管理者:与项目团队管理者不同(项目团队管理者需要在自己规划的职业道路上花大量的时间学习并获得证书),开发团队管理者一般都是优秀程序员出身,有一点点人际关系处理能力,即智商、经验、情商的三者结合。                                          

程序员经验对比

  我这里简单做了一个表格,举例说明对于某一个岗位不同能力的程序员对比:
  1. 入门级程序员
    了解Windows、Mac或Linux
    对良好的编码实践有初步的认识
    了解因特网技术
    了解数据库技术
    了解C/C++
    适应团队工作,能根据指导完成工作
    能够配合领导制订工作计划

  2. 高级程序员
    开发过两个或多个商业应用软件
    熟悉多种平台
    熟悉因特网技术
    熟悉数据库技术
    深刻理解C/C++
    有良好的软件设计能力
    有良好的沟通能力
    能够自我激励,需要的指导很少
    有优秀的分析、项目规划和工期预估能力
    能够密切关注形式的变化,并制订调整计划
    提出、改进并推广新的流程

  3. 有一些经验的程序员
    开发过一个或多个商业应用软件
    熟悉Windows、Mac或Linux
    有良好的编码实践经验
    熟悉因特网技术
    熟悉数据库技术
    有扎实的C/C++功底
    能够自我激励,能根据指导完成工作
    能够独立制订工作计划

  4. 有经验的程序员
    开发过两个或多个商业应用软件
    熟悉多种平台
    熟悉因特网技术
    熟悉数据库技术
    精通C/C++
    有良好的沟通能力
    能够自我激励,需要的指导很少
    有良好的项目规划和工期预估能力
    能发现问题并协助团队进行调整

团队成员品质

做事专注

技术工程师,做事专注力是必需能力,是你成为技术专家的前提要素。

乐于挑战

当你加入一家新公司时,要挑一个比较棘手的难题(其他人尽量回避的)来加以解决。这样可以使你快速积累经验,并赢得成为一名卓有成效的开发者和影响者所必需的信誉和尊重。

永不气馁

我在职业生涯中投篮失败9000余次。输掉了300场比赛。有26场比赛,我被委以投出致胜球的重任,却没能命中。我不断地遭遇失败,而这恰恰是我取得成功的原因。
                                                 ---- Michael Jordan
软件开发领域,每次失败之后善于总结,确保下次不再犯同样的错误,比胆小怕事要强太多。

承认错误

如果你知道大家正在找的问题的根源出在你的程序上面,那么主动站出来,简要地解释一下存在什么问题,出现问题的原因,以及你能提出的解决对策。在商业领域,出现这种大规模讨论的原因,往往是由于主导者在情况变得糟糕时得不到直接的答复。如果能够及时向他们提供信息,说明问题出在哪里、正在采取哪些措施以最大限度地降低问题再度发生的可能性,他们就能对问题的影响作出准确的评估了。

你可能感兴趣的:(如何管理技术团队)