在Web开发公司里,有个问题会被一而再、再而三的提出来,这就是:
“是否应该允许开发人员进入生产环境?如果是,允许到什么程度?”
对于此,我的观点是,整体上,应该限制开发人员访问生产环境。在论证我这个观点之前,我想声明一下,我的立场绝对不是基于对开发人员的品质品行的判断——所以请不要往这方面想。首先我要公布一些常见的程序员们不喜欢或讨厌这个观点的论据:
“系统管理员什么都不让我们干,他又解决不了,我们根本没法完成任务。”
如果真是这种情况,那么他们应该是对的。如果是因为没有足够的管理员或管理员不称职,那么瓶颈就会出现。然而,允许开发人员访问生产环境并不是一种
解决方案,因为即使这一回你把问题解决了,以后还是会出现缺少管理员的情况。有时候一些管理上的规章制度会使事情变的繁琐,耽误时间,但我想这时间也不会
是一种不可接受的漫长。
“我们以前就是这么干的。”
创业公司很少一成立就有一些系统管理员。出于某些原因,系统管理员会被认为是一种奢侈品。尽管这种状况在以前是可以的,但随着公司的成长,管理员应
该慢慢增多。事情会变的越来越复杂,这也是公司为什么需要系统管理员的原因。所以说,“我们以前就这么干”的说法并没有多少说服力。
“我们需要进入生产环境解决问题。”
也许是,也许不是。管理员应该能够给你想要的各种信息。如果这个过程成为瓶颈,那么允许有限范围内的访问是合适的。
还有很多的关于限制开发人员访问的讨论,但来让我们把目标转向我真正想讨论的——为什么这是一个好建议。
限制访问的产生由来:
如果开发人员不能够访问生产环境,一个最大的含义就是他们不能自己去安装程序。也就意味这管理员要去为他们安装程序。这其中会发生两件事情:
1)开发人员和系统管理员必须交流——相互的交流!管理员必须学会如何安装程序(我可不希望是由我去解释),这应该是件好事。
2)开发人员必须制作安装文件和编写简单有效的部署步骤说明。这也是很好的事情。能按步骤来重建系统是应对灾难恢复的重要的一部分。
所以,一旦开发人员被限制访问生产环境,我们就能避免那种因为程序过于复杂以致于只有开发人员出面才能部署安装的情况出现。同样,开发人员也避免了把时间浪费在部署和安装程序的工作上了,节省下的时间开发新程序岂不更好。虽然起初他们会多花一点时间,但以后会越来越方便。
这样管理员也能学到更多的关于安装过程中需要备份哪些东西的知识了。即使在管理员对程序不太了解的情况,他们只需对着开发人员提供的文档来执行他们的备份操作。
开发人员所关心的并不一定是系统管理员所关心的:
通常开发人员所关注的安全领域并不一定会是系统管理员所关注的领域。对于Web网站安全,他们只是擅长他们自己特有的领域。诸如跨站脚本攻
击,SQL注入等安全问题是开发人员擅长的,对于系统管理员则不然。诸如账户权限,文件权限,web服务器配置通常不是开发人员擅长的和感兴趣的,而这些
对于生产环境确十分重要的,它们是系统管理员擅长的领域。我对这个领域的见解是越少人访问越安全。还有,这能有效的避免凌晨两点被电话吵醒——因为系统管
理员怀疑你们15个程序员中的某个人在服务器上做了不当的操作。
变更控制:
我不认为一个稳重的程序员会不把变更控制当作重要的事情。因为在程序中经常会有这样的事情。然而,我发现许多程序员却不会慎重的把在服务器上的每次改动都做上日志。(当然我也看到过一些配置文件是有版本控制的)
如果你没有这样做,这意味这生产环境不可能正确的重建。这也意味着如果某些改动导致了问题,对于来解决问题的人却未必能知道这些曾经发生过的改动。这就好像是一个系统管理员打开产品代码,在未通知任何人的情况下修改了程序或提交到产品里。哇,我估计程序员们会抓狂的。
拥有者对其有控制权:
Joel’s Spolsky有句话放在管理工作上很合适:
“每人都有自己的一块领地。是谁的,就是谁的。如果一个管理者或其他人,想插手一个事情的管理方式,他必须保证自己是事情拥有者。拥有者有最终话语权。”
系统管理员通常被认为是生产环境的拥有者。他们是持续跟踪机器运行状态的人,是凌晨2点会被电话叫醒的人,基本上也是和生产环境问题距离最近的人。如果开发人员直接访问的生产环境,那这种管理控制无形中就给破坏了。
系统管理员的职责:
为了能在这种原则下正常的工作,管理员必须完成一些工作。
1)向开发人员们询问他们想从你这得到什么信息,你要很乐意的给他们想要的。
2)确保开发人员在他们自己的空间里有一个好的开发环境。
3)理论结合实践。每个公司都有自己的特殊情况,有些公司由于自身业务的原因决定了开发人员的无访问权限(比如金融类)。然而,即使你那不是个金融
公司,取消开发人员的访问特权的作业制度也是最好的方案。有可能某些开发人员同时担任这系统管理员的工作,所以每个公司都有自己的情况。
就像我在开始时声明的那样,我认为所讨论的问题跟程序员是否优秀无关——有很多的开发人员的技术跟系统管理员一样出色。
我们所关注的更多的是如何在公司的发展中让两种角色的人都专注于自己擅长的领域。也许事情的改变需要时间。然而,最终的目的是让我们有一个更加可靠和安全的生产环境。
翻译来自:外刊IT评论
:)
分享到:
相关推荐
为了保证服务的稳定性和用户满意度,代码必须在进入生产环境前经过严格的测试和验证。 5. **开发包**:开发包通常包含源代码、依赖项、配置文件等,用于在不同环境中部署应用。它们可以是编译后的二进制文件、容器...
- **是否允许开发人员进入生产环境**:探讨了这一争议性话题,并提供了不同视角下的思考。 - **Crontab使用心得**:分享了在Linux环境下如何有效利用定时任务调度工具Crontab。 - **Shell学习笔记——总括篇**:总结...
9. **部署与发布**:学习如何配置IIS服务器,以及将ASP.NET应用程序部署到生产环境的步骤。 10. **示例与实践**:通过实际的代码示例和练习,加深对ASP.NET的理解,并能立即应用到自己的项目中。 提供的资源包括...
它允许开发人员或运维工程师在不直接接触生产服务器的情况下,对运行在远程服务器上的Java应用进行调试和性能分析。这不仅可以减少停机时间,还能提高问题解决的效率。 ##### 远程调试架构 远程调试通常基于一种...
PowerBuilder 6.0支持实时调试功能,这意味着开发人员可以在程序运行过程中随时中断并进入调试模式。这一功能极大地提高了调试的灵活性和便利性,尤其是在处理复杂问题或难以重现的错误时更为有效。 ##### 1.3 剖析...
这两个特性极大地提升了开发人员的生产力,为应用程序的创建带来了革命性的变化。 首先,让我们来了解Windows Presentation Foundation (WPF),这是微软推出的一种强大的用户界面框架,它允许开发者创建具有丰富...
2. **开发效率高**:通过集成的开发工具和优化的工作流程,缩短了开发周期,提高了开发人员的生产力。 3. **使用简单**:界面友好,操作简便,使得无论是初级开发者还是经验丰富的工程师都能快速上手。 4. **可扩展...
Windows Mobile作为开发平台,对于想要进入移动应用开发领域的人员具有吸引力。它提供了与桌面Windows系统相似的开发环境,使用Visual Studio等工具,支持C++、.NET Framework等编程语言,使得开发者能够轻松地移植...
在软件开发生命周期中,涉及多个角色,如系统架构师、项目经理、开发人员、测试人员和解决方案架构师等,他们通过明确的沟通和协调机制进行合作。V&V(验证与确认)是软件开发中的重要环节,目的是确保软件符合需求...
STM32 USB开发工具库通常包含了多种USB类库,如CDC(通信设备类)、MSC(存储设备类)、HID(人机交互设备类)等,这些类库允许STM32设备模拟常见的USB设备,如虚拟串口、USB存储器或鼠标键盘等。 3. STM32 F0/F1/...
4. 虚拟机支持:KmdManager可能允许在虚拟环境中调试驱动,这样可以在不影响生产环境的情况下测试驱动。 5. 代码覆盖率分析:为了确保驱动程序的全面测试,KmdManager可能具备代码覆盖率分析功能,帮助开发者了解...
通过管理代码库中的管道配置,Screwdriver 允许开发人员以他们熟悉的方式配置管道,另一个好处是,也可以轻松地审查管道的变化。主干开发:在 Yahoo 内部,鼓励主干代码总是可交付的工作流程。团队使用修改后的 ...
增量模型则将软件开发分为多个阶段,每个阶段产生一个可发布的增量,这允许开发团队逐步增加功能,同时允许用户在早期阶段就接触到产品。这种模式的优点在于人员分配灵活,可以分阶段投入资源,并能应对需求变更。但...
1. **S60平台介绍**:S60平台提供了一个开放的环境,允许开发者创建丰富的应用程序,包括通信、娱乐和生产力工具。它基于Symbian OS,这是一个专门为移动设备设计的操作系统,具有高效内存管理和多任务处理能力。 2...
本软件的使用者可以是超市内部各个部门中的高级主管,软件开发人员,扶助开发人员和支持本软件的超市人员,软件验证者。 1.2、背景及范围 本项目的名称:超市库存管理系统。 本项目中用户是超市中库存管理的各个部门...
### 金蝶K3_10.3报表开发查询手册:深入解读与应用 #### 查询分析工具:报表开发的核心利器 ...然而,开发人员和使用者也应注意其限制,特别是在处理复杂报表需求时,可能需要额外的技术策略来弥补不足。
此外,MOM能够保证消息的传输,并且允许应用程序开发人员不必深入了解远程过程调用(RPC)和网络/通信协议。 ActiveMQ是Apache软件基金会的一个项目,它支持Java消息服务(JMS)1.1规范,并且是一个用Java编写的、...
开发人员需确保软件设计能够适应企业的需求,同时考虑到系统的可扩展性和灵活性。 项目实施阶段包括数据迁移、系统设置、人员培训和规章制度的建立。这一阶段要求项目实施小组与各部门密切合作,确保所有相关人员...
这一阶段是防止缺陷进入生产环境的关键步骤。 最后,软件维护阶段是为了适应变化的需求和环境,对已部署的系统进行改进和更新。维护工作是软件生命周期中持续时间最长的部分,因为软件需要随着用户需求和技术的进步...