很多同学都会觉得科研是很迷人的,而工程是无趣的。其实对应算法岗和工程岗很多人会误以为前者需要更多的对未知的探索就像设计房子,而后者更多的是按照计划图纸来施工。因此前者有意思,而后者是新时代的体力劳动者。
从工业界的角度来说,算法岗一般的目的是在稳住ABC指标的前提下提升D或者降低E。而所谓的算法一般指的不是有固定解的传统计算机优化问题,而是玄学的机器学习。因为后者的解不是deterministic,你做100次可能得到答案都不相同。为了确定一个新算法真的有提升,人们开始做A/B测试,开始把一个新算法分解为多个部分做ablation study(通过控制变量法去理解一个新算法中到底是哪个部分起效)。
因此我部分赞同「算法岗是心累,开发岗是身体累」的观点。但我不同意的是算法岗的代码量会小,核心原因是因为对于结果的不确定性需要大量的调整、实验、以及测试。这种不确定性带来的额外工作量真的不如纯粹的开放岗需求明确的工作量小。
我觉得(机器学习)算法岗其实更像实验科学,需要大量的排列组合,并期待其中某个配比能有效。我知道理论可以指导设计,但很多理论放在现实场景下真的不奏效。实话实说,我搞研究这几年感觉自己衰老速度全面加速了,大概这是心累和身体累的双重加持。代码一点不少写,还得做大量的尝试得到能用的结果。
所以不要误以为算法岗不需要编程,它需要大量的代码尝试各种排列组合。可能你的1万行代码最后有用的也就几百行,但为了找到这几百行,你不得不试1万行。而很多时候大家不在话你是不是写了1万行代码,而只是在乎最后的几百行是否奏效。除此之外,很多能用的算法你还真不一定想得出为啥它有效,还得为了证明它有效胡吹一些技术上的创新。
但很有可能你只是手动/半自动的搜索到了一组不错的参数。
所以我其实觉得算法岗比较适合实验科学+商科背景的同学,既熟悉各种排列组合又熟悉包装内容,更符合算法工程师的描述。而喜欢严谨的1+1,不喜欢做无用功的同学还是开发岗更好,那种一步一个的脚印的感受,其实是挺踏实的。