不知不觉,大学第三年就已经过半了。

在前两年一直沉迷于学各种编程语言,为此感到快乐,所以并没有感到有什么不妥。如今即将面临找工作的问题的情况下回顾往事才终于感到有些遗憾。

无所谓的序言

从结论上来说,学这么多编程语言似乎对找工作并没有什么用处。反倒是现在似乎已经对未来迷失了方向。

当初学语言的时候也没有想过有用无用的问题,只是单纯在“学习”的过程中感到了快乐,至于为什么快乐后面会提。每当遇到一门看起来有意思的语言总会去看一看,最后结果是其实什么都没学会什么都没精通。最遗憾的是,在这个过程中看似学会了一些什么,但是其实是没有用的。就好像大学花了四年时间在打游戏上,而专业知识却一点没学到(当然了,现在这个时代一位硬核玩家或在这方面有擅长还是可以谋生的)。如果用那些时间好好学习Java或者Python,研究一些HTTP后端技术,记记一个热门框架的API怕是不至如此。不过也就是想想罢了,一是已经回不到当初了,再一是这似乎也不符合我的性格。

刚好,在这段时间想了想学习编程语言的事情,就以此写下这篇文章吧。本文不会谈到编程技术,语法也只在说明时必要的程度,定位更像一个CS学生写出的拙劣的散文吧。

现在开始吧。

想问自己几个问题

XXX天下第一

之前我也觉得某一个/几个语言天生就是比其他语言优越。甚至经常为此和小明掀起圣战。

现在想来这是一件挺没有道理的事情。编程语言无非是一个工具。他们的特性取决于他们要处理的领域问题,或者解决之前用于解决某个领域问题的工具出现的问题。他们可能在设计上有一些不尽人满意的地方,但其中或许有历史局限性,或者是因为某些特殊的需求。对于某种语言的热爱或厌恶其实是一个挺主观的挺个人的想法,当然可以提出观点论证自己的想法,也可以完全没有观点支撑的提出来,但是因为观点不同而争吵那就大可不必了。

我是在写代码还是用它完成一个目标

Computer programming is the process of designing and building an executable computer program for accomplishing a specific computing task. Programming involves tasks such as: analysis, generating algorithms, profiling algorithms' accuracy and resource consumption, and the implementation of algorithms in a chosen programming language (commonly referred to as coding).

-- Wikipedia

曾经有过一段疯狂像别人安利Golang的时候,几乎逢人便推荐Golang。现在回想起来确是感到有些不妥。

编程最开始的目标就是通过一系列完善的计算工具来达成一个计算目标。在这个过程中,算法、数据结构也好,程序设计语言也罢,就算是图灵机模型和冯诺依曼体系都只不过是为了完成这个目标而选择的工具。因此,离开这样一个计算目标(还有环境条件)来讨论一个语言的优劣是没有意义的。

也许在写代码的时候选择一个适合的自己又喜欢的语言,而在不得不使用一种自己不喜欢的语言/框架的时候接受这个事实,也是一种选择。编程为了解决问题,如果能在过程中选择自己喜欢的工具当然是一件令人高兴的事情。

为什么会在学习编程语言时感到快乐

从正面来讲当然是学到了新知识的时候特有的满足感。另一方面来讲可能也有因为找到了一件可以用于消磨时间的事情来排遣空虚感吧。就好像在无聊的时候看小说、打游戏,或者做一些需要沉下心做的事情。

你难道不觉得编程语言是计算机科学大环境中的仅有的一点人文关怀嘛?

你难道不喜欢这种人与人之间思想的碰撞吗?

编程语言有些特别之处。它是一种由人来设计的工具,但相对于具有实体的工具来说他并不会收到自然定理的制约;它是数学的衍生,但它却将晦涩的道理以一种简洁的规则体现出来;它更像是文学创作,但又不是随心所欲的写作,它是用来解决问题的工具,它需要数学的依据支撑。在学习它的过程中,能够感受到作者面临的处境,也能感受到在枯燥的规则中隐藏的锋芒直指问题的内核,还能感受到作者即使是受到了种种制约仍能够条条框框中创造。在“学习”它的过程中,并不是学到了一些枯燥的语法,而是在和作者进行交流一般。

这也是我感到快乐的原因吧。

编程语言们

前两年也见了不少语言,学了几种觉得有意思的。也没有必要介绍语法什么的,就说说对它们的印象吧。

那么让我想想见过哪些通用编程语言

2019-12-26

因为太久没写完导致不想写了,基本弃坑了,开始水下一篇博文。(

以后有心情再补吧。(十年以后.jpg

文章写了一半就弃坑而且是停在主体内容之前文风还很差这样的博主你喜欢吗?

机器语言

操作码?寻址方式?地址?

冯诺依曼体系。0和1的语言。驱动CPU进行运算需要的程序序列。不清楚的建议重修计组(

汇编

因为机器语言对于人类来说太难以记忆了,所以给这些操作码以具有语义的标识,让人也能编写和阅读。所以和机器语言本质上没有区别。

C

和 C++ 差不多

--小明

在这里,编程有了质的区别。(暗示后面都没有区别)

C++

和 C 差不多

--小明

Java

Java 到 Kotlin 都是带 GC 的 C

--小明

JavaScript/TypeScript

C

Kotlin

Haskell

没有中括号的 C

--小明

Lisp

括号比较多的 C

--小明

Scala

写起来像是 Java 的 C

--小明

Python

写起来像是英文的 C

--小明

Golang

有通道的 C

--小明

Dart

写起来像 Java 的 JS

--小明

Rust

写起来像是 Haskell 的 C

--小明

VB

BASH and more

乱入的标记语言