编程小记
本文仅针对于面向科研的编程内容。下文AI也多指语言大模型,如Chat GPT、Deepseek、Gemini以及Grok等。
1,编程现状
嗯,没错,聊起当下的编程,不得不提的便是AI对于该领域的加持。
AI的出现,特别是对于编程领域,在速度和质量上对于普通编程人员(比如主业是从事科研的人员)可以说是“降维打击”。就个人体会(笔者并不是科班出身,因此编程语言多为自学),对于“COF材料性能预测“这个课题,从零写一段实现文件读取,数据预处理,模型建立,性能指标计算以及SHAP分析,特征扰动实验的代码,至少需要1H左右的时间,还是在有参考资料的前提下书写的,而使用AI,从思考提示词,到最后得到能实现和我手写的代码相同的功能的内容,只使用了不到半小时。
而且,不论是逻辑还是排版,AI都更胜一筹,甚至能给我进一步的建议(比如其他可能需要的模型,作图,排版以及潜在细节等)。
即使已经很熟悉,但每次重新意识到的时候,都会感到震撼——AI时代,针对自己不熟悉的领域,想要达成目标,善用AI远比闭门造车来得快。
2,为什么?那先聊点题外话。
感觉会有很多人好奇,为什么AI在代码领域这么强?未来码农还有活路吗?怎么做才能不被淘汰?
其实详细回答这三个问题没什么用,对于普通人来讲,它们都指向一件事——如何在AI浪潮下成为时代幸存者。
人类与动物的最大区别便是能够制造和使用工具,AI工具也不例外。
答案也是老生常谈——顺时代则昌,逆时代则亡。
拥抱新时代的产物才能更好地融入新时代。
3,在本次科研项目中的所感所想
本次科研项目主题为“基于深度学习的COF材料性能预测的探索“,其实当笔者选择这个题目时,是对深度学习一窍不通的,只是有粗略的了解。
在面对一个全新的领域时,笔者认为最重要的是清晰这个领域的知识树:参考马斯克分享过的学习方法——将某一领域的知识看作一棵树,分为主干、树枝以及树叶,以求条理清晰,按需学习。这里笔者推荐将这种学习方法描述给AI,提供学习领域(也就是主干,如“人工智能“)并且让AI给出学习思路,同时可以让AI设置阶段性目标,以提高学习积极性。用这种方法可以快速梳理出知识体系,相比于闭门造车,无从下手而使精力分散,能大幅提高学习的效率。不过,当然,浅尝辄止终究只能习得皮毛,想要深耕某一领域仍需积累经验,咨询领域大佬,深度反思等。
幸运的是,本次科研项目并不需要非常深入的代码知识,使用这种方法便可。
在这次的科研过程中,代码的书写是必不可少的。从全部完成后的视角来看,在正式开始书写第一行代码前,规划一个统一的,模块化的,可编辑程度高的代码框架非常重要,有助于清晰思路,就某一变量进行深入探索等。
从最简单的来讲,例如,第一阶段需要我们构造一个MLP(多层感知机),进行拟合和性能测试,要进行文件读取,数据预处理,模型构建,性能指标计算这四步。若想形成一个通用的框架,则:文件读取中,要统一对象名,如datasat,database等,同时根据数据文件选择最合适的读取方式,由此构建“文件读取“这一模块的代码;数据预处理时,可以先进行数据浏览,确定需不需要划分数据集/归一化/标准化/处理缺失值/独热编码等,随后编写可以单独执行每一块内容的代码,以便在不需要时直接注释掉即可;随后的模型构建模块,可以注意构造隐藏层时,通过适当的代码换行与缩进以让隐藏层部分更加清晰,以便调整隐藏层结构;性能指标计算部分则只需要注意不要混淆训练集和测试集的特征目标y即可。
除此之外,对于作图部分,笔者强烈建议将数据结果输出为文件后,在JMP、excel或者origin中作图,当然,再次读取到python或者matlab中也可以。不保存而直接作图使用的是缓存内的数据,断开python核心后数据会直接丢失,你也不想跑了几个小时的数据直接丢掉而在需要调整图片的时候重新再跑吧。
4,除此之外的一些碎碎念。
这一部分就当作对AI加持下的现代进行的一点反思吧。
或许当下的科研人所需要具备的能力是掌握解决一个问题或一类问题的知识体系,而不是具体的某一个知识点或某个规则。
举个例子,前文所述的项目,其基础知识包含Python语言中的基础库、numpy库、pandas库、sklearning库、matplotlib库,TensorFlow、keras库…以及基础的有机、无机化学知识,结构化学知识…以及其他计算机知识。但在真正解决问题的过程中,我们是可以使用工具的,特别是AI已经发达并且仍在高速进步的当下,信息的查找与收集变得更加方便与准确。
这便导致具体的某个知识在你“知道”它后,变得容易获取,从而,具体的某个知识的“记忆“便变得不再重要。
举个具体的例子,编写用于训练的代码时,我们只需要知道要使用MLP这个模型,要进行标准化,模型的隐藏层结构以及作图的具体需求即可,所有的代码书写工作均可以交给LLM,经过实测,效果很好,几乎不存在阻滞。
而这种情况下,对于问题的分析能力、把握能力以及方案规划能力——也就是解决问题时,对一个知识体系的掌控能力,变的格外重要。
从这个角度出发,解决“基于机器学习进行高性能COF膜的研发”这个课题,便只需要知道“数据收集→特征筛选→模型建立→参数调整→获得新数据→实验室验证”这个问题解决方案即可,而具体的某一个知识点的使用,比如”TensorFlow库怎么用“,只需要在使用到的时候进行查询即可。
如果把维度再提高一些,一个科研人,在解决问题的能力之上,是要拥有提出问题的能力——“一个有价值的问题远比一个有价值的解法更加珍贵”。
提出一个有价值的问题,能够引导某一领域的下一步发展,这要求提出问题的人对一个领域有足够深入的了解与足够强的整体把控。同时,还需要有强大的洞察力,也就是从新的角度看问题的能力。
笔者从学生的角度出发,认为首先要具备的是解决问题的能力,而后是掌握提出问题的能力。拥有解决问题的能力可以让你发更有水平的论文,掌握提出问题的能力可以让你开拓认知的边界。
本次项目历程不算长,主要是进行了一系列的科研培训,在论文思路,实验思维,客观描述以及作图上给了笔者一些启发,让笔者入门了科研之路。心得不算多,先写到这里吧。





