How to Become a Programmer
做饭的时候看青菜的生产日期,突然回想起,我正好是两年前的今天开始学习编程,第一次写下Hello World。现在作为一个程序员工作都已经一年有余,正好周末总结下两年的学习成果,算是对这两年时间的记录。
编程语言
- Java
目前的工作语言,主要写Web后端。比较熟悉,语言特性,API,JVM多少都有些了解。当时看的是 尚硅谷Java入门视频教程 ,讲的很好很易懂。并不比很多大学老师讲的差,注重实用性,细节且全面,对于两年前初学编程的我来说非常好的教程。 - JavaScript/TypeScript
基本的语法风格和Java有蛮多相似处。学习起来并不算那么费劲,但是写的不多。但是这种动态语言写起来还是很爽的。TypeScript内容也不算很多,看文档学习。阮一峰的两本教程写的很好。JavaScript 教程 - 网道 和ES6 教程 - 网道。现在学习新的技术,看文档效率会高一些。偶尔也会看视频学习。
学了一些React,或许有时间自己写个Side Project。Vue和Angular看过点文档,公司在用Angular。很少写前端。 - Go
最近学习分布式系统,需要用Go,看了A Tour of Go,最近在用Go刷题,熟悉下语法。还是要多写。 - Python
看了Github上的教程 jackfrued/Python-100-Days: Python - 100天从新手到大师。一直没咋用,都快忘了。 - Haskell
其实还看了点函数式语言,看了点Haskell教程,Introduction - Learn You a Haskell for Great Good! 但是并没有坚持下去,之后有机会再学学看。
CS基础
毕竟不是科班出身。很多基础课程该补还是得补。学的东西可能才达到普通CS本科生30-40%的水平吧,道阻且长。
- 操作系统
主要看了 清华 操作系统原理 ,最近看了一些南京大学的操作系统课程讲的会比较深入一些。书读完了OSTEP Operating Systems: Three Easy Pieces,已经有中文版了。 - 编译器
本来在看Engineering a compiler。看了三章实在是过于抽象。又找到了 Crafting Interpreters,教程写的非常好。每一章结束都能有一个能跑的程序,具体多了。但是只实现了第一部分的jlox解释器。第二部分用C语言写一个VM或许才是更主要的部分。精力不足就搁置了。 - 体系结构
看了编码 (豆瓣),非常好的一本书,想要理解计算机是怎么运作的,CPU是如何计算的,这是一本非常简明易懂的书。还有CSAPP也是很著名了,我还没有看完。 - 计算机网络
看了 谢希仁的计算机网络,买了计算机网络自顶向下,但是还没有读完。HTTP, HTTPS(TLS), TCP/IP协议栈。细节比较多。 - 数据结构和算法
在Coursera上看了两周Princeton的算法课,也没有看完,但是配套的教材 算法第四版是本非常好的书,可以时常查阅。另外在B站看了左程云的算法课。理论性肯定不如Princeton的课,但是更加实用一点。对基础数据结构比较熟悉。LeetCode最近没事在刷,目前大概做了230题左右,算是有挺多进步的。 - 数据库原理
之前在看CMU的Andy Pavlo的课CMU 15-445/645 :: Intro to Database Systems (Fall 2021),但是课程也只看了五周左右,看到Buffer Pool部分。之后找时间再继续看吧。 - 分布式系统
在学习MIT的 6.824 Schedule: Spring 2022 希望能坚持把Lab都做完。
DDIA基本读完了。非常好的分布式系统的书。
Web开发
- Git
现在对git算是能比较用的娴熟,之前还是很多都不懂。主要看的 Git - Book - CI/CD
最近项目用到,学习了一些CI/CD 相关的东西。 TeamCity Openshift之类的。还有一些公司在用的不是那么大众的工具,顺便因为公司的一个legacy项目了解了一些.NET相关的技术。 - 其他一些Web框架,中间件,类库。大概是知道怎么用吧,原理还有很多不懂的,不列举了。学会看文档,很多东西学起来也快。
- 设计模式,软件工程等
总结
- 最重要的能力其实是,善于使用搜索引擎,不要用百度,尽量使用英文搜索。自己解决问题,收集信息。
- 需要持续不断学习,保持好奇心,保持折腾,持之以恒。有时候也挺辛苦的
- 注意身体健康。容易久坐和熬夜。多运动,少坐,保持良好的习惯
- 有时候不能把眼光局限在那一点地方,Think outside the box