比如,借助算法库里的 MD5 算法和 OS 提供的目录遍历API,把系统所有要害文件(应用程序、DLL、注册表等)的大小、修改时间、数字摘要都算出来、储存到一个文件里。以后每隔几天遍历一次,检查它们的大小、修改时间,如果有变化就计算数字摘要——也可以强制计算所有的数字摘要——从而找出哪些要害文件被修改了、这些修改是系统自己打的补丁呢,还是不法程序(病毒木马流氓软件等)的非法修改。这就是一个极为简陋、但效果还行的反病毒工具。它的缺点是,这是个白名单工具,只能检查到通过修改要害文件获得执行权的病毒/木马,同时会对系统更新产生误报。但仍然不失为一个效果不错的系统问题排查工具——因为 OS 要害文件经常是好些年不变的(现在你知道为何有时候有的杀毒软件会杀系统文件甚至杀自己了吧?)。再比如,利用现成的深度学习库/语音识别库搞一些貌似高大上实则没什么技术含量的人脸识别/语音识别/声线识别程序——别紧张,你能行。能折腾这些,你到公司基本上就可以算是个“能人”,可以跟风做一些听起来很帅但其实仍然没什么技术含量的工作了。
比如图形图像压缩,比如加解密算法,比如网络协议栈等,每一个子领域都够很多专家投入一辈子的。不过这些领域经常返璞归真,C 反倒会成为更常用的语言;而且往往需要高等数学作为发动机。比如著名的卡马克牛顿迭代法求平方根的倒数算法,其中用的魔幻数字就引出了好几篇论文。专家们用卷积找出了一个魔幻数字,但是效果不如卡马克数字。再后来有人暴力穷举,这才找出一个优于卡马克魔幻数的新数字来。再比如,现在的 CNN 神经网络,有次我提到要理解它你得懂卷积;于是跳出来几个自以为很懂的出来杠我“我敢打赌,你是听到这个东西的名字里有个卷积于是胡乱脑补。其实这东西和卷积没半毛钱关系”……他们不知道,CNN 里面的确没有卷积符号、也没有使用卷积计算公式;但它的实现思路就是卷积运算。只不过它的设计者把卷积算法化用进简单的连续矩阵计算中,在深度神经网络中实现了“特征抽象和特征空间变换”——这是矩阵和卷积全都学到出神入化、用出来让普通人看不懂、但内行一看就知道还是新瓶装旧酒的结果。其实前面提到的数据结构与算法等基础知识,会玩的同样能玩到返璞归真。比如有人随随便便三两行代码就把一个数组变成了环形缓冲区,或者简简单单两行声明就搞定了一个递归算法。如果你积累不够深厚、头脑不够灵活,这个东西就很难看懂。总之,这个领域是属于创造者的。能踏入这个领域,那就不是你找工作,而是工作找你了。综上,如果仅仅是学 C 这门语言的话,学到什么程度你都不好找工作。你需要学的,是用 C 这门语言去解决问题。能解决课后练习题是一个水平,能刷网上的算法题又是一个水平;能自己搞定简单的实用项目是一个水平,能充分利用操作系统以及第三方软件/库给你提供的抽象(意味着你能理解他们的设计思路)实现几乎所有东西又是一个水平;理解各种东西背后的原理是一个水平,把这些原理玩的出神入化又是一个水平;学会用数字认识这个世界是一个水平,能够化用高深的数学知识、信手解决没人说得清的难题又是一个水平……一般来说,只要你能达到“用 C 解决简单问题”的水平,找工作就不成问题了;只是受限较多,只能从事一些较为初级的工作,极易陷入没日没夜机械的写代码的窘境,然后看着层出不穷的新技术欲哭无泪。你往前赶的越多,你代码里的智慧和灵气就越多;此时你才可以尝试那些必须用巧力的工作,或者用巧力把繁重的工作变得简单、甚至促进你所在公司乃至全人类的开发效率。玩到这个程度,你才算真正踏入程序员的行列。