`
wuhua
  • 浏览: 2106235 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

程式三元素

阅读更多

这个好像是台湾人写的,不过觉得有道理,我就收藏了。

文 / 蔡學鏞

正如同陽光、空氣、水,是生命三元素;我認為程式三元素是語言、API(Application Programming Interface)、工具。

【語言】
語言通常是中立的,和特定的平台無關(組合語言與系統語言除外);但是,某些語言確實比較適合某些平台。以Apple平台來說,顯然Objective- C會是最好的選擇;以.NET平台來說,顯然C#會是最好的選擇。好的語言選擇可以讓你具有更多資源,和平台有更好的整合,且新版本推出的速度更快。

語言通常也和專業領域無關(當然,像VHDL這樣的語言除外),大多數語言在介紹自己時,用到「General-Purpose」(一般用途)形容自己。 但不可否認的,不同語言可能會有不同的適用性,有些語言適合開發Web前端,有些適合開發Web後端,有些適合開發桌面程式。

語言通常會帶有作風(paradigm,也稱為「範式」),有些是OOP的範式、有些是FP的範式…。經過多年的融合與演變,大多數的語言至少會同時具有 兩、三種範式,有些甚至會多達七、八種。語言範式越多時,程式設計師可以依據自己的需求和喜好,採用不同的範式。但範式多不見得是好事,有可能表示這個語 言沒有中心思想,駕馭的難度可能更高,寫程式時犯錯的機會可能更大。

語言有高階和低階的分別,高階者比較接近人類,低階者比較接近機器。很多人誤以為越低階的語言越「難」,事實上可能不是如此。在我使用8086組合語言的 時候,我就領悟到,組合語言其實相當好學,因為語言元素(指令)相當少,且變化不大,基本概念都差不多。多數人認定組合語言很「難」,其實是在於「難 讀」(不容易藉由閱讀源碼得知原作者的意圖)與「難寫」(即使要表達一件簡單的事,也必須寫出很多程式碼),而非「難學」。

對於語言的選擇,除了平台、領域、範式之外,還有相當多面向需要考量,其中有一些是許多人所疏忽的,像是可讀性、可寫性、上手快慢。另外,也要考慮到API,如果你選擇的語言沒有你需要的【API】,那麼你的麻煩就大了。

【API】
API通常和特定的平台無關,但是和專業領域有關。至於那些和專業領域無關的API(例如排序、字串處理),我都把它們歸納到語言中,而傾向不認定它們是API。

大多數的API都是以函數的方式存在。OOP的API會將函數集合成類別,將類別集合成框架;FP的API會將函數集合成模組。API的單位很難認定,你可以說一個框架或模組是一個API、一個Class是一個API、或者一個函數是一個API。

我認為語言、API、工具這三者中,API是最難學的。以Java來說,package有上百個,類別有上千個,方法(函數)更是有上萬個。API牽涉到專業領域的知識,有特定的呼叫次序和參數需求。

其中最難的API通常是GUI(圖形化使用者介面)。資料庫的API可能反倒很簡單,因為許多資料庫API都只是CLI(Call-Level Interface),只負責將SQL語法送到DBMS。從某種角度來看,不只這些負責連線到資料庫的函數是API, SQL語言應該也算是資料庫API的一部份。而SQL是一種DSL(Domain Specific Language)。

這又牽涉到這幾年開始流行的一個話題 -- 以DSL形式存在的API,例如Ruby-on-Rails。由於DSL是語言,所以使用彈性自然比函數(類別、框架)大,加上語言用途特定,所以很容易 學,這些都是DSL式的API受到大家的矚目的原因。而且,DSL可以讓程式碼大幅縮短,有助於減少對某些開發【工具】的依賴。

【工具】
當然,最基本的開發工具是編輯器、編譯器(或解譯器)、除錯器,但這已經是遠古時代的事情了。現代的軟體開發,用的工具越來越多。尤其是程式產生器的地位越來越重要。

現在的開發工具都很強調程式產生器,利用程式產生器提高生產力。以往只需要UltraEdit就能寫程式,不需要這些龐大的開發工具,現在卻很難辦得到, 正是因為程式碼產生器的緣故。很多人即使不知道底層的作法,也可以很快地把系統做出來,可以在名片印上「資深軟體工程師」,這也是拜程式產生器之賜。

現在的軟體開發都已經走火入魔了。開發的速度提升,不是因為需要寫的程式變短,而是程式碼產生器幫我們產生出更多程式,而這些產生出來的程式,如果沒有像Visual Studio這樣的工具協助,以後會相當難以維護。

我希望語言能更精簡,且支援建立DSL,而DSL類型的API大幅度減少程式碼長度,減低我們對於某些工具的依賴。語言、API、工具不應該是三足鼎立,而應該以語言和API為主,工具為輔。

分享到:
评论

相关推荐

    C++标准程式库自修教程与参考工具

    《C++标准程式库自修教程与参考工具》是一本专为C++初学者和进阶者设计的自学教材,旨在帮助读者深入理解和熟练运用C++标准程式库(STL)。STL是C++编程中不可或缺的一部分,它提供了一组高效、可重用的数据结构和...

    windows程式设计

    总之,《Windows程式设计》是一本全面介绍Windows平台上C++编程的教程,它将帮助开发者理解和掌握从底层机制到高级特性的各种技术,包括Windows API、MFC、GDI/GDI+以及用户界面设计。无论是初学者还是经验丰富的...

    Chrome_SPY 谷歌浏览器网页元素分析工具

    Chrome_SPY 谷歌浏览器网页元素分析工具 Chrome_激活标签 (当前标签) 网页.跳转 (“www.baidu.com”) 程序__等待 (1000) 网页.取元素坐标 (“input”, “id=kw丨name=wd”, 0, 元素坐标) 提示 (“元素坐标 ...

    c#程序设计经典教程第三版(含例题和实验)

    《C#程序设计经典教程第三版》是一本深入浅出的C#编程教材,它针对初学者和有一定基础的学习者提供了全面的知识体系。本教程涵盖了C#语言的基础语法、面向对象编程概念、高级特性和实际应用开发技术。下面将详细阐述...

    C语言程序设计教程 第三版 谭浩强ppt zip

    《C语言程序设计教程》是谭浩强先生的经典著作,第三版更是深受广大编程初学者喜爱。本教程通过深入浅出的方式,引导读者掌握C语言的基础知识和编程技巧。PPT形式的教学材料使得学习更为直观易懂,配合例题习题源...

    HTML5元素周期表

    HTML5元素周期表是一种利用HTML5、JavaScript和CSS技术创建的交互式网页,它将化学元素周期表的概念与Web开发的元素相结合,为用户提供了炫酷的视觉体验和丰富的交互功能。这个项目展示了HTML5的新特性,如语义化...

    C#程序设计经典教程第三章课后习题

    在"C#程序设计经典教程第三章课后习题"中,我们主要探讨的是C#语言的基础和Windows窗体应用程序的开发。本章的学习重点在于理解C#语法基础以及如何利用这些知识来创建交互式的图形用户界面(GUI)。 C#是微软推出的...

    C#Windows應用程式設計

    从给定的文件信息来看,主要讨论的是C#在Windows应用程式设计中的应用,特别是排序算法的部分,包括了气泡排序法(Bubble Sort)、选取排序法(Selection Sort)、快速排序法(Quick Sort)以及锥形树排序法(Heap ...

    浅谈戏曲程式

    【戏曲程式】是中国传统戏曲表演的核心元素,是将唱、念、做、打、舞等艺术形式融合并形成规范化、标准化的表现方式。戏曲程式源于中国古代的文艺思想,尤其是先秦时期的"物感说",以及诗、歌、舞一体的美学理念。自...

    计算机二级Python教程Python语言程序设 Python基础入门教程-第2章-Python语言基本语法元素共46页.ppt

    第2章-Python语言基本语法元素 共46页.ppt 第3章-程序的控制结构 共53页.ppt 第4章-组合数据类型 共57页.pptx 第5章-函数和代码复用 共40页.ppt 第6章-文件和数据格式化 共54页.ppt 第7章-Python标准库概览 共47页....

    QML小程序:定位元素

    在本教程中,我们将深入探讨四种主要的定位器布局——“Row”,“Column”,“Grid”和“Stack”,以及如何通过“Repeater”来重复创建元素。 1. **Row布局**: - Row布局允许你水平排列组件,它们会从左到右填充...

    C++标准程式库 C++标准程式库

    2. **迭代器**:迭代器是C++标准程式库中的一个关键概念,它提供了对容器内元素的访问方式,类似于指针但更加强大和灵活,支持前向、双向和随机访问等多种模式。 3. **算法**:如`std::sort`、`std::find`、`std::...

    微信小程序开发教程流程详解.pdf

    以下是一个详细的教程流程,帮助你理解如何从零开始创建自己的小程序。 首先,明确开发目的与功能需求。这是任何项目启动的基础。你需要思考小程序的目标用户是谁,它能为用户提供哪些服务,以及它如何与你的企业...

    查找定位C/s的元素(自动化用)

    在IT行业中,尤其是在软件测试和自动化领域,"查找定位C/S...在提供的压缩包文件`Inspect`中,可能包含了一些关于如何使用`Inspect`工具的教程或示例,通过学习这些资料,你将进一步提升在自动化测试中定位元素的能力。

    OSG程序教程_杨石兴编著

    **OSG程序教程_杨石兴编著** 本教程由杨石兴老师编著,主要针对初学者,旨在提供一个全面的OpenSceneGraph (OSG) 入门指南。OpenSceneGraph(简称OSG)是一个高性能的3D图形库,广泛应用于科学可视化、虚拟现实、...

    windows95程式设计指南代码

    《Windows95程序设计指南》是一本面向C++程序员的经典教程,它深入讲解了在Windows 95操作系统环境下如何进行应用程序开发。这份压缩包包含了该书的源代码,为学习和理解Windows API以及C++编程提供了实践素材。下面...

    C++标准程式库.rar

    7. **异常处理**:C++标准程式库支持异常处理机制,通过`try`、`catch`和`throw`关键字,可以在出现错误时进行异常捕获和处理,确保程序的健壮性。 8. **IO流库(I/O Stream)**:`std::iostream`、`std::ifstream`...

    zy_显示链队列元素_

    本教程将详细解释如何显示链队列中的元素,以及它在课程中的应用。 链队列的定义: 链队列是由一系列节点组成的线性结构,每个节点包含一个数据域和一个指针域。数据域用于存储元素值,而指针域指向下一个节点。链...

Global site tag (gtag.js) - Google Analytics