`
helloyesyes
  • 浏览: 1306854 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论
阅读更多
根据观察,我发现有两类程序员。一类程序员喜欢技术,会认认真真地学习一种语言,设法掌握语言的使用要领和方法。他们关心的是语言的功能,以及功能的运用。对于语言的缺陷有相当的容忍度,并且也乐意接受语言的缺陷,只要语言能够提供足够强大的功能。
另一类程序员则相反,他们更侧重于用语言实现某些具体的业务。对于他们而言,语言的功能强大与否没什么关系,只要别妨碍他们在软件中实现业务。
对于前者,语言的功能至关重要。他们需要一种语言帮助他们最大限度地发挥智慧和创造力,更快、更好、更高效地构造稳定、可靠、快速、可扩展、可复用的软件
而对于后者,语言的简单至关重要。他们需要一种语言帮助他们最大限度地发挥智慧和创造力,更快、更好、更高效地将业务转变成软件的功能
如果认同一类程序员,而贬损另一类,那就太狭隘了。这两种程序员对于软件开发而言,都有各自重要的地位。更重要的是,这两类程序员是互补的。前者的能力适合开发可扩展的基础服务和组件,他们是技术专家。而后者则恰好符合业务实现专家的特征。
然而,我们传统的组织形式却将这两类程序员压缩在一个共同的空间中执行开发工作。也就是让他们使用同一种(或同一层次的)语言和技术开发软件。
现在的麻烦是,没有哪一种语言既简单、方便,又功能强大。如果选用功能强大的语言,比如C++,那么技术专家满意了,他们构造出漂亮优雅的软件。但对业务 专家是个灾难。他们发现自己已经不知不觉地陷入了语言复杂性的泥潭,而艰难地试图抓住业务功能的枝干。而反之,选用使用方便,但功能弱小的语言,对于业专 家是个福音,他们可以专注于业务实现,心满意足地完成工作。但技术专家却无法按他们的想法达到诸多技术性和软件工程性的要求,比如性能、可维护性、扩展性 等等。
最终,多数企业会选择一种“中性”的语言,功能基本完备,但不很强大,学习和使用相对简单,但又不是最简单的。这样的折中一般会基本“摆平”这两类程序 员,但也有很多时候让两类程序员都不满意。大多数情况下,即便两类程序员都满意了,却在客观上使得两类程序员都无法发挥最大的工作效率,从而无法使开发效 率最大化、最优化。
解决这类问题最直接的方法就是让这两类程序员使用各自适合的语言,在各自擅长的领域开发软件。技术专家使用C++之类功能强大,却不易掌握的语言,而业务 专家则使用简单易用的语言,比如脚本语言、宏语言,甚至是某种特定用途的专用语言(DSL)。技术专家开发基础服务平台和组件,业务专家则运用简易的语言 使用基础服务和功能,构建业务系统。这种优化组合往往会产生1+1>2的效果。
对于语言的选择,技术专家无外乎C++、Ada之类的“全能”通用语言,新兴的D也可能成为更加适合的候选人。业务专家,可以使用脚本语言,如 python、ruby、javascript等等“粘合剂”语言。目前尚有一种新的发展方向,是运用专门的专用领域语言(DSL)。这类语言可以非常贴 近业务领域的逻辑概念,语法不一定完备,但足以完成特定的业务工作。比如某种“记账”语言,就可以用来构造财务软件的业务逻辑,直接使用财务术语和概念, 最大可能地消除与业务无关的语言要素,达到最简化的目的。
这两类程序员的差异不一定是先天造成的,但这种差异足以对传统的软件开发组织形式提出挑战。因此,当我们在抱怨一门语言如何如何功能不济,或者如何如何复杂难用,那么请审视一下开发体系,或许一种语言已经被用在不适合的程序员,以及不该用的地方了。
分享到:
评论

相关推荐

    C#接口的作用

    1. **问题背景**:假设最初公司只有两种程序员,即VB程序员和Delphi程序员。可以通过创建两个类`clsVBProgramer`和`clsDelphiProgramer`,并分别为这两个类实现`WriteCode`方法来解决这个问题。然而,随着项目的增加...

    大数据都要学些什么.docx

    以下是对两种程序员角色所需知识的详细说明: 对于Java程序员: 1. **机器学习算法**:理解并能应用各种机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机、神经网络等,了解它们的原理、应用...

    C~C++程序员实用大全

    《C~C++程序员实用大全》是一本专为C和C++程序员设计的全面学习资源,旨在提供这两种语言的最佳编程指南。这本书涵盖了从基础到高级的C和C++概念,帮助程序员提升技能,掌握核心原理,并能有效地解决实际问题。 在...

    程序员个性电脑桌面壁纸

    【程序员个性电脑桌面壁纸】这一主题,其实涵盖了两个主要方面:一是程序员文化,二是电脑桌面壁纸的个性化选择。这两者都是IT行业中与个人工作环境和精神风貌紧密相关的元素。 首先,我们来谈谈程序员文化。程序员...

    程序员的数学4:图论入门.pptx

    图可以分为有向图和无向图两种,边的两端连接到两个节点。在有向图中,边的两端连接到两个节点,但方向是从一个节点指向另一个节点。在无向图中,边的两端连接到两个不同的节点。 图的表示方法有多种,包括邻接矩阵...

    程序员计算器

    二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)是计算机科学中最常见的四种进制。程序员计算器能够帮助用户方便地进行这些进制之间的转换,例如将一个十进制数转换成二进制或十六...

    程序员的酒桌术语

    - **应用场景**:在团队合作中,如果两个或多个程序员需要共同解决一个棘手的技术问题,他们可能会被描述为“同床共枕”。 ##### 4. **“P2P”、“TCP”** - **含义**:“P2P”通常指的是点对点通信模式,在这里被...

    《程序员教程》 电子书下载

    Python和R语言,这两种流行的编程语言广泛应用于数据预处理、清洗和转换;以及像Scikit-learn这样的机器学习库,用于构建预测模型。此外,书中可能还会讲解数据挖掘的基本步骤,包括数据收集、探索性数据分析(EDA)...

    程序员的鄙视李安

    部分内容中提到的MacBook Pro Retina和ThinkPad分别代表了两种不同的选择: - **MacBook Pro Retina**以其优秀的屏幕显示效果和MacOSX操作系统而受到许多开发者的青睐。 - **ThinkPad**系列笔记本则以其坚固耐用的...

    程序员(程序员受益终身的文档)

    文章通过具体案例和分析,深入探讨了程序员在成长过程中可能遇到的两大关键问题:“程序员相轻”心态和沟通交流障碍,提供了宝贵的见解和建议。 ### 程序员相轻 #### 定义与现象 “程序员相轻”是指程序员之间存在...

    程序员面试宝典.pdf

    在《程序员面试宝典》中,这两种优化技巧都有所涉及,并通过具体的模拟题目来展示其在算法设计中的应用。 第二部分是数据结构,它占据了面试宝典中相当重要的地位。主要包括了图、搜索、树和线型等数据结构的内容。...

    软考初级程序员真题

    1. **考试科目与结构**:初级程序员考试通常包括两部分,一部分是基础知识,主要涵盖计算机系统知识、数据结构与算法、软件工程基础等内容;另一部分是应用技术,主要考察编程语言的掌握程度和实际编程能力,如C++、...

    程序员C++提高编程PDF.pdf

    在实际使用函数模板时,有两种方式:自动类型推导和显示指定类型。自动类型推导依赖于编译器来自动识别传入的参数类型,而显示指定类型则是程序员明确告知编译器使用哪种数据类型来替代模板参数。在使用模板时,必须...

    程序员之表白代码

    在这个实例中,“紫色背景恋爱计时”是一个程序员为表达情感而设计的应用或小程序,它使用了浪漫的紫色背景,给人一种梦幻且温馨的感觉,同时通过计时功能,让回忆和期待交织在一起。 首先,我们要理解这个应用的...

    程序员的自我修养—链接、装载与库.pdf

    链接有两种方式:静态链接和动态链接。 静态链接是指在编译时将目标文件链接成一个可执行文件的方式。静态链接的优点是生成的可执行文件具有良好的性能和安全性,但缺点是生成的可执行文件较大。 动态链接是指在...

    程序员如何真正的成长

    同时,熟悉并精通一到两种主流编程语言,例如Java、Python或C++,并不断通过实践项目来提升编程技能。 其次,持续关注最新的技术动态和技术趋势至关重要。订阅相关博客、论坛,如Stack Overflow、GitHub、知乎等,...

    工作总结 工作总结 程序员 工作总结 程序员

    2. Struts框架转换:从Struts2到Struts1的转换涉及到对两种不同MVC框架的理解和应用。Struts1和Struts2各有优缺点,转换过程中需要解决兼容性问题,比如Action的处理、拦截器(Interceptor)的差异以及视图层的适配...

    初级程序员考试的准备资料

    1. **第二讲-线性表.ppt**:这部分内容可能详细介绍了线性表这种基本的数据结构,包括链表和数组两种实现方式,以及它们在存储和操作数据时的特点和优缺点。线性表是许多高级数据结构的基础,理解其工作原理对于后续...

    程序员必备高清壁纸.zip

    这些文件可能是JPEG或PNG格式的图片,这两种格式都广泛用于高质量的图像存储。JPEG适用于照片和其他色彩丰富的图像,而PNG则常用于需要透明背景或者更小文件大小的场合。 综合来看,这个压缩包提供了一组以程序员为...

Global site tag (gtag.js) - Google Analytics