这个好像是台湾人写的,不过觉得有道理,我就收藏了。
文 / 蔡學鏞
正如同陽光、空氣、水,是生命三元素;我認為程式三元素是語言、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為主,工具為輔。
分享到:
相关推荐
scratch少儿编程逻辑思维游戏源码-足球冠军.zip
实训商业源码-【超人】积分商城 5.2.26-毕业设计.zip
windows,C# WInform,Excel操作类
这个函数可以直接把tdms文件的数据直接储存为MAT文件,并显示在工作区.具体的使用教程可以参考这篇文章。https://blog.csdn.net/weixin_41968197/article/details/106287744
φ3.2m两段式煤气发生炉CAD工艺流程图.rar
实训商业源码-daohang-毕业设计.zip
内容概要:文章深入探讨了在汽车电子电气架构中,网关ECU采用多CPU解决方案实现网关功能的技术背景、设计原则、挑战与解决方案、典型场景及其未来发展趋势。随着汽车电子电气架构向高集成化、智能化发展,网关ECU需处理复杂的多协议数据转发、协议转换、安全过滤等任务,单CPU难以满足需求。多CPU解决方案通过合理的架构设计,确保满足时延、吞吐量、资源管理等核心要求。文中详细介绍了多CPU架构的核心设计原则,包括内部接口设计、资源协同与容错设计,并针对典型场景提出了具体解决方案。此外,文章还讨论了多CPU架构面临的挑战及应对策略,并展望了未来的发展趋势,如异构计算融合、区域网关、确定性以太网等。; 适合人群:从事汽车电子工程领域的工程师和技术人员,尤其是对网关ECU设计和多CPU架构感兴趣的读者。; 使用场景及目标:①理解网关ECU中多CPU解决方案的必要性和优势;②掌握多CPU架构设计的关键技术和最佳实践;③了解多CPU架构在汽车电子电气架构中的应用前景和发展方向。; 其他说明:本文不仅提供了技术层面的深度解析,还强调了长期主义的重要性,鼓励读者在技术追求的同时保持对自身成长的关注。
实训商业源码-ddos压力测试-毕业设计.zip
JavaScript语言教程&案例&相关项目资源,奖励仅限VIP资源
实训商业源码-超级图文最新资源包及上传位置说明-毕业设计.zip
X-Y数控工作台机电系统设计.rar
实训商业源码-活码自动进群V1.0.0 开源版-毕业设计.zip
YZ8H压路机振动轮设计.rar
PE400x600复摆颚式破碎机设计.rar
scratch少儿编程逻辑思维游戏源码-像素森林.zip
scratch少儿编程逻辑思维游戏源码-躁狂症 RPG游戏.zip
scratch少儿编程逻辑思维游戏源码-战争模拟器(1).zip
内容概要:本文详细介绍了如何使用C# WinForm开发一个纯原生的工作流表单设计器,涵盖动态控件生成、拖拽移动、对齐辅助线、属性调整等功能模块。作者通过具体代码示例展示了如何利用鼠标事件、坐标计算、绘图API等技术手段实现这些功能。文中还提供了扩展功能的方向,如控件Tag属性存储业务数据、自定义控件外观、XML序列化保存流程图结构等。 适合人群:具有一定C#编程基础,尤其是对WinForm开发感兴趣的开发者。 使用场景及目标:适用于需要快速构建可视化工作流表单的应用场景,目标是掌握WinForm的事件机制、GDI+绘图以及控件管理等核心技术。 其他说明:本文强调了纯原生开发的优势,即不需要依赖第三方库,所有功能均由系统自带组件实现,有助于深入理解底层机制并提高代码可控性和灵活性。
内容概要:本文深入探讨了无人驾驶车辆使用动力学MPC(模型预测控制)算法进行蛇形线路径跟踪的技术细节。首先介绍了蛇形线的特点及其对无人驾驶车辆带来的挑战,随后详细讲解了动力学MPC算法的基础理论,包括车辆状态表示、运动方程建模以及控制输入的选择。接着重点阐述了如何通过定义合适的目标函数并加入适当的约束条件来优化MPC算法,使其能够高效地完成蛇形线路径跟踪任务。此外,文中还讨论了一些常见的错误做法和技术改进措施,如引入航向角误差补偿项、采用松弛变量处理约束条件等。最后,作者分享了多个实用的小技巧,例如预测时域内的速度适配和平滑处理、适当降低控制频率以提高跟踪精度等。 适合人群:对无人驾驶技术和控制算法感兴趣的科研人员、工程师及高校学生。 使用场景及目标:适用于研究无人驾驶车辆路径规划与控制领域的项目开发,旨在帮助读者掌握动力学MPC算法的具体应用方法,从而更好地解决实际工程问题。 其他说明:文章不仅提供了详细的理论推导和代码实现,还结合具体案例进行了充分的实验验证,确保所提出的解决方案具有较高的可行性和可靠性。
实训商业源码-【超人】商家联盟 3.2.2-毕业设计.zip