How to Become a Programmer

做饭的时候看青菜的生产日期,突然回想起,我正好是两年前的今天开始学习编程,第一次写下Hello World。现在作为一个程序员工作都已经一年有余,正好周末总结下两年的学习成果,算是对这两年时间的记录。

编程语言

  1. Java
    目前的工作语言,主要写Web后端。比较熟悉,语言特性,API,JVM多少都有些了解。当时看的是 尚硅谷Java入门视频教程 ,讲的很好很易懂。并不比很多大学老师讲的差,注重实用性,细节且全面,对于两年前初学编程的我来说非常好的教程。
  2. JavaScript/TypeScript
    基本的语法风格和Java有蛮多相似处。学习起来并不算那么费劲,但是写的不多。但是这种动态语言写起来还是很爽的。TypeScript内容也不算很多,看文档学习。阮一峰的两本教程写的很好。JavaScript 教程 - 网道ES6 教程 - 网道。现在学习新的技术,看文档效率会高一些。偶尔也会看视频学习。
    学了一些React,或许有时间自己写个Side Project。Vue和Angular看过点文档,公司在用Angular。很少写前端。
  3. Go
    最近学习分布式系统,需要用Go,看了A Tour of Go,最近在用Go刷题,熟悉下语法。还是要多写。
  4. Python
    看了Github上的教程 jackfrued/Python-100-Days: Python - 100天从新手到大师。一直没咋用,都快忘了。
  5. Haskell
    其实还看了点函数式语言,看了点Haskell教程,Introduction - Learn You a Haskell for Great Good! 但是并没有坚持下去,之后有机会再学学看。

CS基础

毕竟不是科班出身。很多基础课程该补还是得补。学的东西可能才达到普通CS本科生30-40%的水平吧,道阻且长。

  1. 操作系统
    主要看了 清华 操作系统原理 ,最近看了一些南京大学的操作系统课程讲的会比较深入一些。书读完了OSTEP Operating Systems: Three Easy Pieces,已经有中文版了。
  2. 编译器
    本来在看Engineering a compiler。看了三章实在是过于抽象。又找到了 Crafting Interpreters,教程写的非常好。每一章结束都能有一个能跑的程序,具体多了。但是只实现了第一部分的jlox解释器。第二部分用C语言写一个VM或许才是更主要的部分。精力不足就搁置了。
  3. 体系结构
    看了编码 (豆瓣),非常好的一本书,想要理解计算机是怎么运作的,CPU是如何计算的,这是一本非常简明易懂的书。还有CSAPP也是很著名了,我还没有看完。
  4. 计算机网络
    看了 谢希仁的计算机网络,买了计算机网络自顶向下,但是还没有读完。HTTP, HTTPS(TLS), TCP/IP协议栈。细节比较多。
  5. 数据结构和算法
    在Coursera上看了两周Princeton的算法课,也没有看完,但是配套的教材 算法第四版是本非常好的书,可以时常查阅。另外在B站看了左程云的算法课。理论性肯定不如Princeton的课,但是更加实用一点。对基础数据结构比较熟悉。LeetCode最近没事在刷,目前大概做了230题左右,算是有挺多进步的。
  6. 数据库原理
    之前在看CMU的Andy Pavlo的课CMU 15-445/645 :: Intro to Database Systems (Fall 2021),但是课程也只看了五周左右,看到Buffer Pool部分。之后找时间再继续看吧。
  7. 分布式系统
    在学习MIT的 6.824 Schedule: Spring 2022 希望能坚持把Lab都做完。
    DDIA基本读完了。非常好的分布式系统的书。

Web开发

  1. Git
    现在对git算是能比较用的娴熟,之前还是很多都不懂。主要看的 Git - Book
  2. CI/CD
    最近项目用到,学习了一些CI/CD 相关的东西。 TeamCity Openshift之类的。还有一些公司在用的不是那么大众的工具,顺便因为公司的一个legacy项目了解了一些.NET相关的技术。
  3. 其他一些Web框架,中间件,类库。大概是知道怎么用吧,原理还有很多不懂的,不列举了。学会看文档,很多东西学起来也快。
  4. 设计模式,软件工程等

总结

  1. 最重要的能力其实是,善于使用搜索引擎,不要用百度,尽量使用英文搜索。自己解决问题,收集信息。
  2. 需要持续不断学习,保持好奇心,保持折腾,持之以恒。有时候也挺辛苦的
  3. 注意身体健康。容易久坐和熬夜。多运动,少坐,保持良好的习惯
  4. 有时候不能把眼光局限在那一点地方,Think outside the box