总结一下自己目前的不足,希望2020年能做的更好:
C/C++
我的C语言才刚刚入门,虽然有其它语言的基础但是卡在了编译调试和内存管理这两个地方。希望自己能在如下方面有所进步:
- 熟悉并会运用gcc/clang的具体指令,生成.obj文件并用cgdb进行调试。要对C语言从源代码到可执行文件的各个过程有基本的了解。
- 了解C语言的内存管理,明白程序运行的途中发生了什么,要深入到内存的层面。
- 考虑学习MIT网课《C语言内存管理》。
- 吸收几本经典部头(等看完了再谈我认为看哪几本书收获很大)的内容并从源码层面理解C语言。要花相当的时间读C语言的库源码,借机复习数据结构知识。
- 在Unix平台上做一个小玩具,用 终端 + gcc/clang + cgdb,毕竟目前主要的目标是Linux C。
- 完成以上目标再考虑C++。到时候LeetCode估计是刷第三轮了,用C++把之前做过的题再刷一遍。
Linux
目前会用一些常用的shell命令,之前也写过一点makefile,但要想进阶我的水平自然是不够。
目标如下:
- 看《鸟哥的Linux私房菜》,重点看二、三、四部分和第五部分的软件安装:源码与Tarball。边看书边实践。
- 以上部分看完可以接着看第五部分的其它内容。
- 对终端的各种键盘的快捷键要做到肌肉记忆。
- 熟悉makefile和cmake的操作。对vim也要有一定的熟练程度。
- 学有余力就入一本《UNIX环境高级编程》,学习操作系统相关知识。
数据结构与算法
目前主要在做的事。在LeetCode上刚刚刷到100题,看了除字符串与贪心动归的绝大多数内容,但这个熟练度显然是不够的。
- 每天刷2-3道LeetCode。一刷注重对算法思想的理解,新题型首先看答案以及涉及的基本思想、旧题注意复习,要知道这类问题可以用什么基本方法解决也要知道每行代码的作用是什么;二刷就需要自己的思考,判断出解题的可行思路并给出可以AC的代码,尽量求多解,再看答案优化。主要用Java解题以便debug,数据结构的基本题型用C再写一遍。
- 完整吸收《算法4》中前五章给出的数据结构与算法(不包括练习)。
- 如果进展顺利今年会有三刷,如果是二刷能写出来的题就考虑换C++解决。三刷不仅要AC,还要注意考虑边界条件、时间复杂度与空间复杂度。注意做题用的时间。
编程习惯
- 控制住动不动就跑程序的冲动。在跑程序之前,仔细检查自己的代码,对跑代码的效果要心里有点数。
- 看源码,尤其是优秀源码的时候追求慢而精,不要浮躁。能力是练出来的,看源码也是。
- 学会写单元测试,不仅是C语言。现在能写出能跑的东西,但还需要写出健壮的代码。
开源项目
- 做两三个自己爱用的开源项目的本地化工作(如果维护者给机会的话),有时间会考虑翻译一些优秀的技术文章甚至视频。目前准备着手做Wine HQ wiki的本地化。
- 好的开源项目应该做到一键编译、一键运行,代码也需要可扩展、足够健壮,当然项目本身必须得好用,希望自己能写出这样一个开源项目。这个应该是长年的目标吧?
- 维护并改进自己写的/魔改过的项目,按照TODO list上的一点点来。
其实也有其它方面的想法,但这些事情更优先。就写到这里吧。