`
阿尔萨斯
  • 浏览: 4179829 次
社区版块
存档分类
最新评论

程式三元素

 
阅读更多

文 / 蔡學鏞

正如同陽光、空氣、水,是生命三元素;我認為程式三元素是語言、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為主,工具為輔。

分享到:
评论

相关推荐

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

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

    程序设计教程答案龚沛曾(第三版)

    Visual_Basic_6.0_程序设计教程答案龚沛曾(第三版)

    计算机二级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页....

    赵璐python教程答案-《Python语言程序设计教程》赵璐著【摘要书评在线阅读】-苏宁 .pdf

    赵璐python教程答案_《Python语⾔程序设计教程》赵璐著 【摘要书评在线阅读】-苏宁。。。 第1章 计算机基础及Python简介 1.1 计算机基础概述 1.2 Python语⾔的发展及现状 1.3 Python语⾔的特性与应⽤ 1.4 开发环境的...

    python教程答案第三章-python从入门到实践课后习题第三章.pdf

    python教程答案第三章_python从⼊门到实践课后习题第三章 """ 3-1 姓名: 将⼀些朋友的姓名存储在⼀个列表中,并将其命名为 names 。 依次访问该列表中的每个元素,从⽽将每个朋友的姓名都打印出来。 """ names = ['...

    计算机二级Python教程 Python语言程序设计 Python基础入门教程-第8章-Python第三方库概览共60页.ppt

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

    Python语言程序设计教程 北理工Python课程W02V01-Python程序元素分析 共19页.pdf

    2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-函数库的引用 3-1-Python中类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及...

    GIS程序设计与开发AE实习教程实习10:创建自定义工具AddDateTool实现添加日期元素.pdf

    GIS程序设计与开发AE实习教程实习10:创建自定义工具AddDateTool实现添加日期元素.pdfGIS程序设计与开发AE实习教程实习10:创建自定义工具AddDateTool实现添加日期元素.pdf

    perl 程序开发教程

    三、访问关联数组的元素 四、增加元素 五、创建关联数组 六、从数组变量复制到关联数组 七、元素的增删 八、列出数组的索引和值 九、用关联数组循环 十、用关联数组创建数据结构 1、(单)链表 2、结构 3、树 第十...

    MATLAB三维数组示例.md

    本文介绍了如何使用MATLAB编写三维数组,并提供了一个简单的示例程序。通过学习本文,您将了解以下内容: 如何在MATLAB中创建和操作三维数组; 如何使用嵌套循环遍历三维数组的元素; 如何使用索引操作符访问和修改...

    C语言程序设计标准教程

     可以说C程序的全部工作都是由各式各样的函数完成的, 所以也把C语言称为函数式语言。 由于采用了函数模块式的结构, C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。  在...

    一个超高级的元素周期表页面html源码

    使用教程:下载页面源码→上传到网站空间就可用了!一个超高级的元素周期表页面html源码 使用教程:下载页面源码→上传到网站空间就可用了!一个超高级的元素周期表页面html源码 使用教程:下载页面源码→上传到...

    谭浩强C语言设计第三版.pdf

    很好用的东西很经典的一本C教程,TKS这算是谭浩强C语言设计比较新的版本了!目录很详细,使用很方便目录 第1章 C语言程序设计的概念  1.1 程序与程序设计语言  1.1.1 计算机与程序  1.1.2 计算机程序设计语言  ...

    Python语言程序设计基础教程(北京理工大学版,持续更新).pdf

    Python语⾔程序设计基础教程(北京理⼯⼤学版,持续更新) Python语⾔程序设计基础教程(北京理⼯⼤学版,持续更新) ⼀、python基本语法元素 1.2 Python开发环境配置 1.3 实例1:温度转换 1.4 python程序语法元素...

    Visual C# 2010程序设计教程(教程PPT+源代码)

     《高等学校计算机应用规划教材:Visual C# 2010程序设计教程》详细介绍了Visual C# 2010程序设计的基础知识、基本方法和应用技巧,共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向...

    Java程序对数组元素进行升序排序.docx

    每个 Java 程序都会为您提供不同的方法来解决 Java 中的特定问题。如果您是 Java 编程新手,我们强烈建议您阅读有关Java 教程的文章,其中我们通过实际示例和程序介绍了 Java 编程的所有基础知识和高级主题。

    Fortran语言MPI程序设计

    第三章 需要邊界資料交換的平行程式 36 3.1 MPI_SENDRECV, MPI_BCAST 37 3.1.1 MPI_SENDRECV 37 3.1.2 MPI_BCAST 37 3.2 邊界資料交換的循序程式 T3SEQ 39 3.3 資料不切割的邊界資料交換平行程式 T3CP 40 3.4 資料...

    谭浩强C程序设计第三版

    C语言教程 C语言概述 7 C语言的发展过程 7 当代最优秀的程序设计语言 7 C语言版本 7 C语言的特点 7 面向对象的程序设计语言 8 C和C++ 8 简单的C程序介绍 8 输入和输出函数 9 C源程序的结构特点 10 书写程序...

    jQuery详细教程

    三. jQuery 事件函数 jQuery 事件处理方法是 jQuery 中的核心函数。 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。术语由事件“触发”(或“激发”)经常会被使用。 通常会把 jQuery 代码放到 部分的...

Global site tag (gtag.js) - Google Analytics