“编程为什么不用中文?兼谈如何学习编程”
相关文章, 中文编程兴起的必然性
[摘要] 知乎上有个问题编程为什么不用中文? 有点意思, 我把回复单独整理后, 写在这了: 编程语言是个符号系统, 能否广泛使用要看使用人员基数
_
0. 概述
题主是一个挺好的程序员, 独立思考, 提出疑问也有意思, 只是问题本身的表达, 比较多是在陈述一个事实, 以及题主的思考:
编程开发语言( 强调可读性) 当前很少用中文表述.
题主认为: 中文对于我们中文母语的开发者, 更直观明了啊……
我个人呢, 不太谦虚的说, 是平面设计者, 自由职业程序开发者, 同时非常喜欢音乐(有个音乐培训小机构), 在这一基础上陈述一下个人观点
1. 编程语言是一个符号系统
就像音乐的乐谱, 音乐家们写出乐谱, 演奏家们按谱演奏出音乐家所表达的音乐. 注: 音乐是一个不同强弱的声音(包含休止), 以时间长短构成的声音序列.
程序员们以某种现代计算机开发语言, 写出程序源代码, 表达了自己想让计算机以及计算机构成的网络, 相关的工作网元如打印机, 去执行程序希望实施的某些工作或任务, 这些程序源代码, 最终转化为二进制 CPU 执行指令序列, 交由计算机( 们…..) 去执行
演奏人或电声音设备演奏的声音序列 <—-> 音乐符号集 <—> 乐谱 ( 音符构成的表达符号序列)
可执行的 CPU/GPU 二进制指令序列 <—> 开发语言指令符号集 <—> 程序源码( 开发语言符号系统构成的源代码序列)
JAVA 语言的符号系统转换, 如下:
某CPU/GPU 二进制指令序列 <—> 汇编语言<—> java中间码< —> Java 符号指令集 <—–> java 程序源代码集合( 与数据)
现代音乐的五线谱:
演奏人或电声音设备演奏的声音序列: 音乐 <——-> 五线谱定义的音符<——-> 国际标准通用五线乐谱
因为历史发展原因, 编程语言的符号系统, 也一直在发生变化, 但总体变化就两个方向:
- 让人更容易读, 更轻松而有效率地去表达, 符号系统构成准确/科学/精练
- 符号系统转化后的二进制代码序列, 被CPU/GPU 执行起来准确而有效率
2. 由于历史与文化变迁, 现代开发语言一直在新增/消退, 及快速进化发展
这就不多说了, rust 与 golang 的出现及持续普及, typescript 加强了 javascript, 而 wasm 是 java 中间码思想在浏览器内嵌语言的华丽重生…………..以及 LLVM 的持续得到重视与广泛使用
cpu 指令集 <—–>( 汇编语言———> LLVM………) <—-> 高级开发语言 ( 强调易读, 强调效率, 强调安全性,强调多态抽象智能…….. )
高级开发语言, 有 js / java / c / c++ …………….. 当然可以有中文编程语言
3. 影响现代编程语言的因素, 只有两个因数, 人员基数及使用领域
有些领域开发语言, 是某领域的特殊需要, 但也有人员基数在主导, 比如生物基因研究领域, perl 依然是主力, 而机器学习, python 占有一席之地, 对于数据抽取, sql 是当然的皇者
而通用编程语言, 主要是人员基数在起决定作用, 比较 erlang / haskell 与 java / php 的使用人员基数就知道了
注意, 走的人多了, 没有路的地方, 也就成了路.
相关:
我乎有人提类似问题, 为什么广东人对取消粤语这个提法, 反应很大?
我个人看法是, 广东人祖祖辈辈都在用的粤语, 关你外人什么事? 为什么要来取缔广东人自己的语言?
历史是不容否定的,并且应该尊重.
粤语作为广东人传承, 粤语,粤剧,粤菜,南岭文化……. 是一体的, 并且在全球范围都被承认是优秀的传承. 广东人保护自己的传承, 我个人非常非常支持.
—————- 以上表述, 来自我, tsingson ( 2019/08/04 深圳南山)
那么, 影响中文成为编程语言的因素, 只有一个,有多少人在用或将会使用?
所以, 如果让中文成为使用人多的开发语言, 第一个问题, 用中文表示的符号系统(假设完美的定义出来了) , 真的好到能让很多人认可并使用吗?
对比:
int var1, var2, var3,var4
if var1 == var2 then var4=var3
中文?
自然数 变量一, 变量二, 变量三, 变量四
如果 变量一 等于 变量二 那么 变量三 赋值给 变量四
来, 我们来构建一个中文开发语言的符号系统 come on…………………………………
大家一起来努力 ………
4. 关于中文作为编程语言
相关:
或许有人想翻翻我的"黑"历史 ( 自嘲地笑………. ) 就知道, 我是最早 perlchina 组建者之一. perl 是优秀的开发语言, 自1999到2005年, 用了6年,最终放弃了, 因为 perl 非常优秀, 但部分语法有点晦涩难读.
java 也是我以前常用的开发语言, 符号系统完整而精确, 表达力一流, 看看 java 的泛型, 漂亮啊………… 但 java 的 OOP 被某些 OOPer 过份的强调可重用性而让代码层层嵌套, 所以, 个人不喜欢用 java 的某些 framework 们但又不得承认 java 的规范与优秀
当然, 用过 python , 在用 javascript / typescript , 在用 haskell , 在用 plpgsql……….
但 go 语言出现了, 我转到了 go , 因为 go 语言的符号系统, 简明直白, 难有歧义, 而且使用 go 的同道者一直在增长.
纵观计算机的历史发展, 英语有先发优势, 英语做为国际通用语言, 使用人数不少, 英语成为编程语言符号系统, 有历史与人员基础两大原因
所以, 想要中文成为某种高级编程语言, 需要用中文编写一个符号系统, 下接 llvm , 上编译中文编程代码……. 个人认为挺有意义, 但没什么建议
而将来的历史, 由我们去创造, 题主与支持中文编程的朋友们, 期待中文编程语言的广泛普及.
_
_
( 注: golang 有 google 大厂背书, 发展了10年………..现在这个样子, 依然有人不看好, 呵呵) .
_
_
5. 关于学习编程, 以及其他
关于如何编程, 我认为,
学习某种编程语言的符号系统, 以及这种编程语言附带的定义问题, 解决问题的哲学, 以及这种语言一些约定俗成的"习惯”, “规范”, “范式”, “模式”……. 套路
自己要精于发现问题, 定义问题的内涵与外延 ( 边界) , 精确定义解决问题的方法(算法)与步骤…….
学会用你学的这种编程语言, 转化, 表达成为解决问题或指派计算机(们….) 去干活的编程源代码………
所以, 实现编程, 你有需要,
- 了解事物本身, 比如, 了解行业基础, 了解业务场景, 了解业务流程, 了解业务过程中各细分过程的各数据以及数据处理方式与限制条件( 边界)
- 用编程语言去表达, 你了解的事物与解决流程
最后, 只要精通一种编程语言( 解决问题的方法, 以及用程序语言表达) , 其他编程语言基本只要熟悉特有的符号系统与"套路”, 基本是可以用了 (当然, 用好, 还得多码多用…………)
_
_
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
—————Martin Fowler
最后, 祝大家码钱愉快………
ps: 编程不为挣钱, 纯为兴趣爱好? 嗯哼, 偶表示不太相信……….吼哈…………
_
_
_
关于我
网名 tsingson (三明智, 江湖人称3爷)
原 ustarcom IPTV/OTT 事业部播控产品线技术架构湿/解决方案工程湿角色(8年), 自由职业者,
喜欢音乐(口琴,是第三/四/五届广东国际口琴嘉年华的主策划人之一), 摄影与越野,
喜欢 golang 语言 (商用项目中主要用 postgres + golang )
_