`
javasee
  • 浏览: 960664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

软件开发的两种态度

UP 
阅读更多

Martin Fowler说,软件开发(准确说,软件团队的领导者)有两种态度:“指导者”和“激发者”。所谓“指导者”,是认为大多数开发者不具备足够的能力,因此要给他们足够的限制;所谓“激发者”,是认为开发者具有足够的潜力,因此要给他们相当的自由(和足够的监护),让他们充分发挥自己的才华。

相比之下,我更喜欢扮演“激发者”的角色——不解内情的人常常把一个激发者带领的团队称为“精英团队”之类的,这对于团队成员本身就是一种足够的荣誉,足以激励他们去钻研自己的技艺了。

SoftwareDevelopmentAttitude

design 8 March 2004

Many debates in software development are underpinned by whether the speaker has a DirectingAttitude or an EnablingAttitude. These different attitudes affect choices over languages, designs, tools, processes, and lots more.

Here's some examples of this dichotomy:

  • A debate a while ago triggered by Joel's post on exceptions. He didn't like exceptions because they could be misused badly, leading to confusing code (directing). Bill Caputo pointed out that exceptions, when used well, make life much easier (enabling).
  • Some of the static/dynamic typing debate brings up these points. Some arguments in favor of static typing talk about how they prevent people from making certain kinds of mistake (directing) while dynamic typers point out how static typing restricts some useful idioms (enabling).
  • Agile processes are PeopleOriented (enabling), while plan-driven methods seek to ensure that even a poor team can do an acceptable job (directing).

These aren't hard-wired attitudes. Often people are directing in some cases and enabling in others. But I think there is a deep strain running through here, often a personality issue, that runs underneath much discussion on how we do software. (I'm very much in the enabling category, as if you can't tell.)

You might think that all restrictions on what a developer does imply a directing attitude, but it's not that simple. As an example, consider memory management. You can think of this as a directing feature: programmers can't be trusted to manage memory correctly so take away their ability to allocate memory. But I look at memory management as an enabling technology - it takes away something I don't want to worry about, so I can concentrate better on those things I do care about.

------------------------

DirectingAttitude design

One of two SoftwareDevelopmentAttitudes. The directing attitude says that since most developers aren't that good (it's rumored that almost 50% are below average) we need to direct the way they do things. This direction is to prevent them from causing harm to the system they are working on. Typically this attitude manifests itself in designs and tools that prevent developers from doing certain things, limiting what they can do to keep them away from complex areas.

People with an EnablingAttitude criticize this whips-and-chains attitude by saying you can't foolproof anything, because fools are ingenious and will figure out how to abuse any system.

EnablingAttitude design

One of two SoftwareDevelopmentAttitudes.The enabling attitude takes the view that developers are responsible professionals and so should be given the freedom to do whatever they need to do. Designs that follow this attitude should make things easy to use well but should assume that developers know what they are doing and thus not try hard to prevent something being used badly. As such these tools can be misused, but take the attitude that users should know better, and if they don't they deserve all they get.

People with a DirectingAttitude criticize this elitist attitude by saying it can only be used by the upper quartile of software developers. As such they just aren't practical for the general bell curve of software developers.

分享到:
评论

相关推荐

    GZ-2018112 移动互联网应用软件开发赛卷

    9. 软件开发平台:竞赛试题提到适用于Android平台和Win10平台,暗示参赛者需要对这两种操作系统下的软件开发有一定的了解和掌握。 10. 软件测试与部署:选手需要在规定时间内将代码整合并部署到提供的设备上,并...

    软件开发专业 中文求职信模板

    - **持续学习态度**:软件开发领域变化迅速,强调个人对新技术的学习能力和适应性非常重要。 - **团队合作精神**:无论是前端还是后端开发,都需要良好的团队协作能力。在求职信中体现这一点会很有帮助。 综上所述...

    敏捷软件开发:原则、模式与实践

    敏捷软件开发不仅是一种开发方法,更是一种文化和态度。它要求团队成员之间保持高度的信任和开放的沟通环境,同时具备快速学习和适应变化的能力。通过灵活运用上述原则、模式和实践方法,组织可以在复杂多变的环境中...

    互联网软件开发工程师个人简历模板.pdf

    1. 编程语言:软件开发工程师应精通至少一到两种主流编程语言,如Java、Python、C++或JavaScript。熟悉Web开发框架,如React、Angular或Vue.js,以及后端框架,如Spring Boot、Django或Node.js。 2. 数据库管理:...

    众易软件开发流程.doc

    - **两种心态**:保持与客户的真诚合作态度,以及冷静面对需求变更的心态。 - **五种提高**:提升业务知识,熟悉用户行业,避免使用专业术语,强化速记和文字表达能力,以及提高总结能力,以撰写完整的需求报告。 ...

    软件开发新员工转正申请书 (2).pdf

    3. **学习与成长**:在FPGA领域,作者有机会接触ASIC实现代码,并对比分析了与FPGA的差异,这有助于他深入理解这两种技术。同时,他还通过实际项目实践学习了高级的PCB制版软件,这表明他在硬件设计方面也有一定的...

    软件开发人员辞职报告.doc

    这显示了一种积极的态度,有助于保持离职后与前雇主的良好关系。 综上所述,这份辞职报告不仅是个人职业生涯的一个转折点,也提供了关于软件开发人员心态、期望和工作环境的洞察,对于公司管理层来说,了解这些因素...

    java软件开发个人简历

    根据提供的个人简历信息,我们可以提炼出以下几个方面的知识点: ...通过以上分析,可以看出这位求职者在Java软件开发方面有着扎实的专业基础和丰富的实践经验,同时也具备良好的个人素质和职业态度。

    敏捷软件开发

    敏捷软件开发是一种以人为核心、迭代、逐步交付的开发方法论,它强调灵活应对变化,重视团队协作和客户参与。这一概念在2001年的"敏捷宣言"中被正式提出,其核心价值观包括个体和互动高于流程和工具、可工作的软件...

    软件开发实习报告.pdf

    Sql Server 2000用于大学教材管理系统,Oracle则是在海运进口系统开发中使用,这使作者对这两种数据库有了深入的理解,特别是Oracle的PL/SQL编程。 5. **组件开发**:作者掌握了C#组件开发技术,这是构建可重用和可...

    软件开发部岗位描述参考.pdf

    他们需要精通至少两种数据库技术和Unix/Linux开发环境。高级程序员通常要求本科学历,且有3年以上相关经验,不常接收应届毕业生。 3. **高级软件工程师**:这个层次的工程师需要精通面向对象开发和Web开发,掌握...

    c/c++给软件开发初学者

    ### C/C++对于软件开发初学者的重要性 在探讨C/C++对软件开发初学者的意义之前,我们先来看看成为一名合格的程序员需要具备哪些条件。根据给定的信息,一名合格的程序员应当具备以下三个基本条件: 1. **强烈的...

    2021年软件开发实习报告.docx

    1. **软件开发实习经验**:在2021年的实习期间,作者在朗嘉公司体验了实际的软件开发工作,这有助于他更好地理解和适应软件行业的节奏和工作模式。 2. **C#编程语言**:作者在实习期间学习了C#,这是一种面向对象的...

    软件开发游戏设计类岗位求职简历模板.docx

    此外,他还掌握了C和Java编程语言的基础,这两种语言在游戏开发中都具有广泛的应用,C语言用于底层系统和性能敏感的部分,而Java则常用于游戏服务器端或跨平台开发。 【技术背景与实践经验】 求职者的专业是软件...

    软件开发部岗位描述归类.pdf

    在IT行业中,软件开发部涵盖了多种不同的岗位,这些岗位共同构成了一个高效运作的团队,负责软件产品的设计、开发、测试和维护。以下是根据标题和描述中提到的一些关键职位及其主要职责和要求的详细说明: 1. **...

    软件开发公司员工辞职申请书.doc

    1. **职业发展与个人兴趣**:员工提到在公司工作近两年,虽然有成长,但对软件开发工作缺乏成熟感,引发了对自己职业选择的反思。这反映了在IT行业中,个人兴趣和适合度对于职业满意度和长期发展的重要性。对于IT...

    L1软件工程师必备

    - **WCDMA/TD-SCDMA**:这两种技术分别代表了第三代移动通信中的两种主要标准——WCDMA(Wideband Code Division Multiple Access)和TD-SCDMA(Time Division-Synchronous Code Division Multiple Access)。...

Global site tag (gtag.js) - Google Analytics