抛点砖屑:
我自己的经验是,像ctf这种非常非常吃经验的,基本上不用想着系统学,都是遇到了不懂的,就去研究,然后把涉及到的东西稍微拓展一点地去学,然后继续循环hhhhhhh
就好像最近在打的一个鹅厂的娱乐赛 https://geek.qq.com/tree/ 后面的 reverse engineer 题就是边学js和字节码静态分析边打的。
然后顺便就引申到常见的混淆方式、反debug方式、栈式虚拟机之类的
总之就是多打题,多google,然后尽量不要“够用就行”地去学东西,碰到了,那相关的也适当拓宽着学一下。
还有一个就是,安全这东西就是猫鼠游戏,不可能一成不变的,也要紧跟技术潮流。像最近大火的“云开发”就搞出来允许前端直接访问数据库这种设计,那里面的安全性怎么保证就是一个可以研究思考的问题。有时候安全靠的就是一个技术敏感度,充满洞察力的敏感嗅觉建立在雄厚的经验上。
至于方向的话,大一都学一点其实就很好了。计算机方向很多,光拿 web 来说,一点前端开发和业务都不懂的后端肯定是很难融入实际工作的。同样一点业务和工程都不懂的安全,往往就没法找到一些明显的缺陷,“最高效的黑客是最懂一般程序员写代码的时候的思维的黑客”,因为熟悉工程的安全,知道开发人员开发的时候注重什么,容易疏忽什么。
所以其实不用迷茫焦虑,程序员长期保持竞争力本身就是要靠不断学习,找自己感兴趣的先学起来就是了。只要学的东西不是什么野鸡技术栈,也不用过分担心什么“押错技术”还是“技术换代”。因为长远看来,优秀的程序员本来就不是靠“会用某某技术”去竞争,而是靠不断适应和不断学习的能力去竞争,这样才不会被轻易取代。更别说计算机的很多技术还是融会贯通、触类旁通的,因为基本原理是同一套东西,只要是在学着,肯定不会亏的。