「杂谈」我与几门编程语言之间的故事

第二次学完 Rust 基础之后没事闲的来写篇博客讲讲故事

本来想只写 Rust 来着,想了想又觉得其它语言不说也不好,干脆都写下来吧(

Python

初识 / 学习

应该是接触的第一门语言了,之前在 与 manim 之间的往事 这篇文章里也讲过,初中通过 3Blue1Brown 的视频了解到了 manim 引擎,进而认识到了 python 这门语言

由于了解 manim 的时候已经临近中考了,就没再深入研究。考后凭借着对于 manim 的向往开始学习了 python。买了《Python 编程:从入门到实践》这本书(算是我的代码启蒙书了,所以我总是到处推荐这本书 2333),当时甚至手写记笔记,记了半本

还记得当时假期上物竞数竞培训课,而课前我一直在看 python 书 2333。当时家里可能也觉得挺新奇的,一直喜欢数理化的孩子怎么突然鼓捣上编程了。当时我也没想到我之后会走上这条道路 _(:з」∠)_

看完了那本书基本上就快要开学了,也没写多少代码(印象中好像就照着教程给奶奶写了一个爆搜解数独的程序?)manim 试图看了看,看不懂,而且还没装上。开学之后选了信息竞赛,开始学了 C/C++,有一段时间没接触 python 了

熟悉 / 深入

明确了要打信息竞赛之后,下午总是呆在机房,空闲时间自然很多。又学了学 LaTeX,鼓捣着学了点计算机基础知识,把 manim 装成了,还做了一些视频。

视频做着做着代码也越写越多,不会的时候也开始从搜百度到搜 issue 再到直接搜源码,对 manim 也越来越熟悉了。大概是高二上学期期末考试后,我打算开始看一看 manim 源码,那段时间正好是学校竞赛班假期上课,就打印了一部分核心源码带到学校没事的时候看一看(当时还并不是很能看懂)

也正是那个假期,刚春节放完假,我也刚完成 FFT 那期视频,即将重新回学校上课,这时疫情爆发,居家上网课,一上就是半年,这半年网课着实没少摸鱼,总是在空闲的时候或者偷偷摸摸地玩一玩 manim,也有了时间从入口点开始一点一点扣源码。逐渐整个框架就变得清晰了,也从中学到了很多用法

这之后买了第二本书也就是《流畅的 Python》,里面讲了很多“高级”的用法,收获很大。到了高三,变成了 manim 的 collaborator,也在使用 python 上越来越深了

一些看法

Python 确实是一门非常方便、写起来非常自然的语言。直到现在仍在日常使用,随手打开 python 交互窗口算点东西啊什么的。

感觉 python 达到了一个很好的平衡,初学可以很简单,很容易上手,而想要深入学习的话又确实有很多内容可以探索。虽然日常被吐槽运行效率低,但是可以大大缩短编写代码的时间,有了目标直接上手开写就好了。而且第三方库非常多,有些需求调库就完事了。

总而言之,在不追求效率和安全的情况下,python 在我心里几乎是完美的

C/C++

感觉……没什么好说的(x

高中打信息竞赛一定要用的,学也就是看的算法竞赛入门书籍学的,基本上是能用就行(不像大学后认识的贺老师一样看了一大堆 C++ 的书籍)

没写过什么项目,没有什么特殊感情,不是很喜欢这门语言。不说深入的东西,单从表面上看就让我觉得很难看很难用。单文件还算可以,多文件还要整什么头文件、还要考虑怎么编译,就很烦。以及没有像 pip 之于 python 的这种包管理器,想用第三方库也很烦(实际上我基本没用过)

总而言之就是很不喜欢了 _(:з」∠)_

Haskell

高考结束后的暑假凭借着对函数式语言的好奇学了学(以及当时 pdcxs 转载了许多 haskell 相关的视频,还有感觉 reanimate 项目挺好玩的,想看一看)

基本上看了大半个假期,笔记在这个博客以及 notebook 里都有

怎么说呢,确实很好玩,但是我不会用这个语言来写一些项目什么的。也就是学一学看一看玩一玩的程度吧。

学的并不很深入,但基本也就止步了。因为是函数式语言,和其他语言也没什么可比的。倒是之后可以再看一看其它的函数式语言玩一玩(咕咕咕

Rust

本文重点属于是(为了这盘醋包的饺子

第一次学

那个暑假基本上看完了 Haskell 之后,到开学又有一段距离,感觉不如再学点别的。问了问 GZ,他推荐了 Rust(他当时也在学)以及 C#(他很熟悉很喜欢)。GZ 给了很多 C# 还有 .Net 的资料,结果最后意识到我一直在用 mac 很多东西用着并不如在微软自家产品上自如,故放弃。所以就来看了看 Rust

第一感觉,生态很好,文档很齐全,甚至有官方的学习路线以及官方书籍。所以看的官方的那本书(其实是翻译版)学了下

第一次接触到了很多奇怪的概念,所有权、借用、生命周期、特征、智能指针…… 当时的我甚至连计算机的栈和堆都不太了解,硬着头皮看的。开学前基本上看完了那本书,不过从生命周期开始基本上就全程掉线了

后来刷完了 rustling,不过基本都是边搜边做,有些代码也是过得不明不白,而且一些深入用法当时并没有对应题目。虽然糊完了,但感觉并没有记住很多(不过 rustling 这种练习模式我是很喜欢的,以及真的很能突出“编译器是你最好的老师”这一个特点)

但是当时就已学的内容来看,已经能够体会到 rust 社区的用心良苦了。一些写法和设计很符合我的口味,打算以后有时间再看了

第二次学

暑假看完之后一整年基本上都没有再碰过 rust,之前学过的东西都忘得一干二净(甚至类型都记不太清了 2333)

这一年期间看了好多好多 rust 项目,意识到了很多在用的、很喜欢的命令行小工具是用 rust 写的,以及围观了 GZ 用 rust 写 GGOS,两个大二学长用 rust 写操作系统参加比赛,观望编译原理课大三学长用 rust 写自造语言的编译器。总之就是很羡慕(x

暑假(又是暑假)在家呆着没事就掏出了之前 star 的一堆 rust 资料。开始看了《rust 圣经》,也就是 course.rs,这本书真的是很全面,而且作者写的很通顺(不像之前看的生硬的翻译版)后来确实是看上瘾了,超算小学期的 lab 一直拖着不管,就只想学 rust

一年之后我又了更多的基础,更容易理解 rust 这些语法、这些要求的意图,学得很通畅。也记了一份笔记,在 notebook

但是现在还没细看很多 rust 项目,也没写过多少 rust 代码,感觉没什么评判资格。不过整体上还是很喜欢这门语言的,简单来讲主要有以下这么几点

  • 性能和安全性方便自然不必说了
  • 资料充分:官网上就有不同层次的学习资料,有入门教程、有例子、标准库文档、cargo 手册、针对各用途的手册、更全面的参考手册、更深入的秘典、未稳定特性……
  • 编译器 / clippy:相当智能,不愧是学 rust 最好的老师,很多问题会直接指出甚至给出解决方案
  • cargo:一年前我觉得它很多余,如果想要写段代码,编译出个程序,那直接 rustc 不是就够用了吗。但是现在我意识到了 cargo 的好处,管理包相当方便,也提供了很多命令和工具,真正的一家独大(不像 python 近几年除了 pip 之外还有 poetry 等包管理器兴起)
  • 文档:官方的一堆库文档就不必说了,主要是官方提供了文档工具直接从源码中生成文档,非常方便,也统一了样式。虽然 python 也有工具来生成文档,不过感觉都不太好用,还需要各种配置,比如 Sphinx 的一些写法我也不是很喜欢,而 rust 就没这些烦恼
  • ……(其实还有好多,懒了不想写了)

但还是有一些地方是不太喜欢的,比如说多文件和模块的组织,感觉不如 python 自然,两次看到这个地方的时候都很懵逼,翻了一些项目才基本理解。

接下来的时间就打算多看看官网上的其它资料,多看看项目,多写写代码,争取早日熟练 rust。

其它语言?

还有好多语言也都是简单看了看(暴论警告

  • js / php 就用的时候现翻现学
  • solidity 在学 blockchain 类题目的时候学了学,感觉很自然,还是比较舒适的
  • Java 各种版本,又什么 jdk,一会儿版本号是 8 左右,一会儿又是 1.8 之类的,再一会儿又是什么 16 什么的,望而却步,根本不想学,止于可以跑 mc、玩 processing 的程度(x
  • Go 在打 CTF 做题的时候“有幸”读过一些源码,给我的感觉就是太**丑陋了,很多写法都很不喜欢,不想学*2

后记

深夜瞎白话,图一乐

没搞过啥大项目,没了解多少 pl 理论,说的也都是些简单的看法。(要学的东西还是多啊(摊

だから,不要停下来啊(指学习

「杂谈」我与几门编程语言之间的故事

https://blog.tonycrane.cc/p/293d7afe.html

作者

TonyCrane

发布于

2022-09-03

更新于

2022-10-27

许可协议