自学计算机的5年

今天无意打开了Github主页翻到了2015年9月的第一个commit,突然意识到我的“计算机”转行之旅就是在那段时间正式开始的。(那年,Github还没被微软收购呢)

赖的朋友直接看这里,如何自学计算机?

  • 先学一门语言,啥基础没有就Python
  • Github是最好的资源,学习、接受、贡献
  • 经典书籍要读,练习要做,亲手编码
    • CSAPP
    • SICP
    • CS3110
  • 注重基础,练习要做,亲手编码
    • 操作系统
    • 数据结构
    • 数据库
    • 计算机网络
    • 计算机语言原理(编译原理)
  • 寻找自己的业务知识专精,围绕它展开计算机学习
  • 在灵魂语言后,探索多种语言,注意是探索不是精通。
    • Python
    • C
    • Ocaml/F#
    • Clojure
    • Haskell
    • Erlang
    • Go
    • Rust
    • Java (我真的爱不起来Java,太啰嗦了。。。。)
    • C++ (我真的爱不起来C++,太复杂了。。。。)
  • 无他,唯手熟尔

2015

2015年的Github主页

那一年,我做了我的第一个博客,另外两个仓库:一个是 《C++Primer 5th》的练习题,一个是《数据结构与算法分析C++实现(第五版》的练习题。燃鹅,我点进去一看,一个做了三章,一个做了两章,就没有后续了。:) 具体发生了什么已经记不住了,但是隐约感觉自己应该是被C++给恶心到了,感觉自己完全不适合学习计算机,因为练习题都做不出啊,全是抄代码。

同年12月,开了另一个坑《Data Structures and Algorithms in Python》,这次坚持了4章。但是,感觉Python跟C++比起来好舒服啊,算法题居然也能写出几个了。在那个时候,我还不清楚C++和Python究竟哪里不一样,编译型?解释器?分不清,仅仅是听说过。总之,我的自学之旅就这么开始了。

2016

2016年,我博士三年级,找到了人生的第一个“计算机”行业的兼职工作。是一家只有两个人的金融公司,老板是半个程序员+交易员,而我,就是所谓的程序员。

2016

那一年,我的Github上面有了第一个给其他仓库的PR,VNPY。PR的内容竟然是把IB的API接口翻译成了英文哈哈。那时候,VNPY只有几百个星吧,现在已经有足足16k星了!除此之外,我的github没什么动静了。那一年,我大部分时间都用在了工作上。因为公司只有我跟老板两个人,老板大部分时间用来搞业务了,我就成了唯一的开发人员。我魔改了VNPY的事件引擎,做了自己的交易系统,用来交易老板的一个日内CFD策略。而开发语言就是Python。

现在想想也是后怕,当时FUM大概7百万英镑,不是大数目,但是我的代码就那么风风火火的上线了。这期间,乱七八糟的功能修修补补的,也除了各种Bug,也赔过钱。但是,我对编程的理解加深了,然后莫名其妙的学会一些量化交易的知识。

2017

2017年,那年我博士毕业了(结构工程方向的博士,如果你感兴趣的话)。我的github留下了我的第一个“开源项目”:缠论(已经不再维护了)。因为工作一直都是量化交易、金融相关的,哪一年我其实花了很多时间在学些这方面的知识,就是所谓的 Domain Knowledge。

但是,我的计算机知识并没有太多提升,我只是会用Python实现一些不那么优雅的代码,它们刚好可以完成我想做的事情,虽然有各种各样的问题,但是我能忍受,况且,我也不知道要怎么改善它们。但是,好在公司很小很小(虽然陆陆续续又来了几个程序员),我几乎成了全干程序员。从后台数据库、API、到前端的Web我都碰过,因为工作需要,我们不追求好看、高效,仅仅追求快速迭代、上线,实现最基本的监控和操作。

这期间,我给 VNPY 和 QUANTAXIS 这两个仓库提了一些Issue,而我也从这两个项目中间获得了很多灵感。

我的第一个笔记仓库(已经归档了)

2018

2018年,我的Github格外安静。这一年除了工作,就是零零星星的学习一些计算机“技术”,为了应付工作中的各种问题,比如AWS全家桶。。。这一年,我开始逐渐意识到计算机科学和所谓的“技术”是不一样的。

2019

这一年,我开始刷leetcode了,因为想要跳槽换工作,换一个平台去学习新的技术。

这一年,我也fork了许多量化交易的框架仓库,比如 AlgoTrade, backtrader, bt 等等,主要是学习他们的框架和编码模式。

这一年,我开源了一个奇葩库:知乎热榜。哈哈哈,可能算不上库把。。

这一年,我的忘了我的初心:计算机科学。我花了不少时间在量化交易的框架上,也花了很多时间研究一些交易策略。我为数不多的commit都去了自己的一个研究量化策略的私有仓库里。所以,我开始计划零零星星的时间去学习计算机科学的基础知识:计算机组成原理、操作系统、数据库、计算机网路、编译原理。

2020

啊,2020年,我换了新的工作,到了一个大一些的对冲基金,公司的FUM从1亿美金变成了40亿美金。我终于看到了“大”的对冲基金是怎么用计算机的。每天除了完成被分配的任务,就是疯狂的阅读代码,感受到了真的成长。以前,什么都是自己写,没有参考,在这个更成熟的代码仓库里,我看到了自己曾经想要而不得的东西:如何构建大尺度的项目?如何协调计算机集群进行计算?当然,我也学到了更多关于量化交易的 Domain 知识,如何构建复杂计算?如何处理异常?如何设计API和前端?等等。

啊,2020年,新冠疫情来了,我开始了长达一年的“work from home”。我的Github也热闹起来了。

2020

我提交了两个更加有意思的项目:Py Graphpyca。这两个项目,无论是成熟度和完整度都更高了。

这一年,我开始集中补充我的计算机基础知识,开始上一些网上的公开课,写作业,读计算机的经典书籍,基础各种各样的计算机语言:C,Java,Haskell,Ocaml,Erlang,Clojure,基本上是课程或者书籍设计到的语言我都接触一下。

这里是我的计算机书单,然而,我又犯了老毛病:没长性。很多课程和书籍都是,学了一点点就放弃了,或者被其他的主题吸引了。所以这一年,我是涨了见识,但是我觉得我的思想似乎没有变得更深邃,我写了一片关于这个的文章:https://wangzhe3224.github.io/2021/05/30/admin2/ 。 即便如此,付出还是有收获的,我对计算机本身和编程也算有了更深的认识,也更认识到计算机这行业,基础知识是何等的重要,特别是对于转行的人来说。这不是学习一门语言或者学习一个框架可以带给你的。

框架来框架去,操作系统、数据结构还是你大爷。

同年,我在AWS部署了第一个“自主研发”的比特币日内交易系统。

2021

转眼已经是第五年了,兜兜转转我还是决定回到基础了。我终于慢慢的读完了CSAPP这本书,慢慢做了很多练习,慢慢的发现C语言其实挺好理解的,并发和并行也不再神秘。我终于慢慢的读完了SICP这本书,慢慢的做了很多联系,慢慢的发现Clojure其实也挺好理解的。我终于完成CS3110这门课的联系,慢慢的发现组织程序的规则其实也挺好理解的,慢慢的发现Ocaml其实也很有意思,一点都不另类。

这一年,我的博客也开始热闹起来了,我开始更新自己对CPython内部的各种新的认识,毕竟Python仍然是我的灵魂语言!与当年不同的是,因为基础变得好起来了,Python对我来说不再神秘,不再是一个黑盒子,我渐渐的了解如何去分析程序,如何去理解它的性能,如何理解他跟其他语言的区别,明白他的长处和弱点。

这一年,我也开始变成了视频博主,开始把自己的得找分享给更多像我一样的人,像我一样想要在计算机中寻找乐趣的人们。Python知否

这一年,我也真正意义的开始为开源社区做贡献了!

2026

我希望5年后,当我再次回首,可以看着过往微笑。然后,写下下一个5年。