写给希望读研/博或参与科研实践的同学
回到主页
0. 关于我
浙江大学计算机科学与技术学院-网络空间安全学院"百人计划"研究员, 博导, CCF形式化专委执行委员, ACM SIGPLAN会员,国家级高层次青年人才。主要研究方向为编程语言(程序分析、程序验证、程序合成、编译优化)、数理逻辑(自动定理证明)。相关成果在编程语言(PLDI, OOPSLA)、软件工程(ICSE, ESEC/FSE, ISSTA, ASE, TOSEM)、安全(S&P, USENIX Security, TDSC)、系统(ASPLOS)等领域发表系列CCF-A论文(包括浙大第一篇PLDI),获ACM SIGPLAN杰出论文奖、谷歌论文奖等奖项, 发现Linux Kernel、MySQL、Firefox等开源程序数百真实缺陷。担任相关领域顶级会议(POPL 2025, PLDI 2023, CCS 2024, ISSTA 2024)程序委员会委员(其中POPL和PLDI均为浙大首次&至今唯一).
1. 研究相关
1.1 基础/背景知识
1.2 主要研究方向
总的来说:编程语言,包括程序分析与验证、程序合成与定理证明
- 从目的上:有"狭义"的安全(主要是软件安全,侧重内存安全、信息流安全),也有广义的可靠性(如鲁棒性、功能正确性等),以及性能(和编译优化类似),乃至代码重构等
- 之前做的比较通用(对领域场景限制较少)。个人目前想适当多结合密码学相关的(不强求每个学生都一起"探索")
- 不要求学生都做安全相关(比如也可以做广义的可靠性,或者性能,或者提升程序员生产力的其他方法)
- 从方法上:既有比较偏基础理论/算法的,也有比较偏上层应用的
- 偏基础:
- 约束求解算法(如PLDI 21a): 和离散数学的数理逻辑部分相关
- 图算法(如OOPSLA 22a):比如图的可达性、强连通分量识别
- 其他一些底层算法: 指针分析(如PLDI 24 ), 希望回答"指针p能指向哪些地方"; 抽象解释(如OOPSLA 21), 希望知道"整数x的取值范围是什么" etc.
- 偏应用
- 做得比较多的给程序自动找bug: 比如发现缓冲区溢出、内存泄露等问题
- 也做过一点小规模程序的功能验证: 比如检查某个快排算法的实现是否"真的对输入进行了排序"、推导某个循环的复杂度是什么
- 以及一点软件性能优化: 比如如优化Java Collection的使用 (OOPSLA 22b), 减少数据库的冗余查询(ICSE 23)
(可能看上去有点"杂"/多,但很多都是我博士期间一手经验做过的。。周期略长。。)
- 是否用机器学习/深度学习:目前的论文只有一篇用了相关的(非第一作者)。后面可能会更多使用(但是目前个人不太擅长:),比如ML for PL, PL for ML 两个大方向。
1.3 是否对数学要求很高
- PL是个很大的领域,如果数学很好就可以做偏理论的研究,如果编程很好就可以做偏工程的
。偏理论的话,有的可能用比较多的数学,比如type theory(这个偏向纯数理逻辑,已经超出PL了,和type system不太一样?)
- 其实总体我用的要求不高(即便是偏基础算法的一些)。目前有两块。一块是处理代码。偏安全、性能和编译原理课程有些交集(主要是中端的一些,其他部分“没学好”也可以的:)。 偏正确性的和离散数学有些交集。很多在于对被处理对象/程序的理解、然后基于理解做些"hack", 算法本身不会多复杂。另一块是对逻辑约束的处理,这里可以做得比较深,但是也有相对简单的
- 结论: 对数学要求不高!(当然如果愿意的话, 也有机会用比较"高级"的数学)
1.4 相关方向/老师
1.5 研究逆向/二进制吗
- 之前绝大部分做的是源代码的测试/分析/验证/合成/优化,以C/C++为主
- 二进制了解一些,发过一篇相关的论文(只是用了一点相关工具),之后有一定可能会做一点相关的
1.6 研究类型系统吗
- 有研究,但是倾向type system(更接近程序语言领域), 而非type theory(跟接近纯数理逻辑领域)
- 目前关注的偏向类型系统和程序验证、安全等方向的交集,比如refinement type, information flow type, type-based synthesis(而非偏向“给函数式编程语言加扩展")
1.7 学生指导经历
- 帮助指导多名博士同学,均发表了各自的第一篇论文(当然有的是Idea,有的是方法改进,有的是写作提炼),包括{S&P},{PLDI, OOPSLA},{ICSE, ASE}, 均为CCF A类+Core Rank A*,而且是信息安全、编程语言、软件工程各自的旗舰会议,其中OOPSLA获杰出论文奖
- 自己的学生:第一届23年才入学,还没有毕业的。。
1.8 未来研究课题
不得不说,这个问题相当程度上受导师研究项目影响(毕竟需要交差:),但是具体研究什么也有灵活性。以下是一些可能的话题/方向:
-
Foundamental algorithms for program analysis&verification: Pointer analysis, CFL-reachability, numerical abstract interpretation, SMT-based invariant generation
-
Practical bug finding: fuzz testing, metamorphic testing, static vulnerability detection
-
Compiler optimization: superoptimization, redundancy elimination, etc.
-
Applying PL/SE/FM/Sec techniques to more domains of computation: crypto, system software (e.g., OS), ...
-
Automated theorem proving: for formulas with or without quantifiers; with or without applicaitons in PL/SE/FM/Sec
-
Other ideas the students come up with.
2. 毕业相关
2.1 毕业要求
- 硕士:按学院要求。目前是"一个创新成果",如果没发表小论文(会议/期刊学术论文的"别名"),写个专利保底也算创新成果。剩下的话就是毕业论文,需要相对完整做一个东西,比如基于小论文的工作按毕业论文模版写长一点(小论文不一定要发表)
- 博士:按学院要求
2.2 是否允许实习
- 一般大家的建议是达到毕业要求再实习(具体也不一定)。如果自己找的话,学生本人认为对未来的工作有帮助就行,没有其他要求。如果导师推荐的话,最好是大公司的相关团队,比如对方有自己的朋友/同学/论文合作者(不要求项目形式,也就是不一定我和对方有正式的项目合作)
2.3 工作前景
下面主要面向硕士&&工业界工作,博士&&学术界相关见本文最后
- 除了安全之外,很多其他"业务/方向/应用"都涉及代码分析,比如
- 研发效能: 通过各种方式提高开发者生产力,比如代码搜索、代码特征度量、代码大模型。。
- DevSecOps: 做/维护基础工具,给程序员、安全研究员等相关人员用
- 测试开发:比如测试用例生成工具(不限于这个),具体工作不一定就是在"测开"部门
- 编译: 不限于优化,比如可能是前端/后端的适配。不过编译圈子比较窄,就业选择主要是大公司或初创公司
- 形式验证: 国内公司应该很少, 华为等大公司有相关部门,如2012实验室里面的费马实验室(还有其他部门也用形式化方法,包括Coq等交互式证明工具!)
- ...?
- 很多不那么直接相关的方向(比如数据库等)也会涉及相关工具,比如性能profiling、错误诊断、重构支持、...
- 案例: https://zhuanlan.zhihu.com/p/691230938 (和我相关的论文一部分是博士期间原实验室的项目合作,另一部分是因为之前实验室的同学在那里)
3. 浙大相关
3.1 夏令营和预推免
- 夏令营:浙大计院夏令营主要面向直博,招外校和本校外院的学生;需参与一个月左右的科研实践(可线上或线下);导师可以最多招3个参加夏令营、最后推荐1个优营
- 预推免:没有参加夏令营的可以报名预推免;参加了但是没拿到优营的也可以报,两者不影响(也有学生可能不想直博、倾向于保研,那夏令营可以看做是一个互相了解的机会);预推免也有直博和保研(网安这边的话,似乎预推免的时候报直博的比较少)
- 关于本院预推免:计算机学院的同学,如果填志愿时没报网安,似乎是学硕/专硕/直博/直博或硕士/(还有啥?)多种类型,然后按最后分数平行志愿录取。即便录了博士&志愿没网安,只要网安导师有名额,也可以比较方便地改志愿(但是硕士不可以!)
3.2 考研
(TBD)
3.3 普博申请
(TBD)
4. 其他问题
4.1 招生标准
- 喜欢编程, 对以上提到某个研究方向有兴趣, 或者只是对编译器、操作系统,或各种代码分析工具的原理感兴趣(不要求有相关的项目/比赛/科研实践经历)
- 加分项: 编程能力强(有较复杂软件的编程经历,或在算法竞赛中表现出色); 数理能力强
(PS: 原本我想用这个https://jyywiki.cn/Letter.md, 但它的内容可能有点“理想化”,比如关于“会编程”那块我不要求那么多😄)
对以上内容有疑问/困惑/..., 或者关于招生指标、硕/博士待遇等其他各种问题,欢迎微信私聊或者面谈(本校学生玉泉/西溪/紫金港/萧山/..均可)(关于微信:可先联系 pyaoaa@zju.edu.cn或其他可能认识我的同学,谢谢!!!)