一、入门研发有多难?
最近一段时间,我听到了很多暴论
1. 学安全不需要学研发,不需要写代码,只要会挖洞就行
2. 学研发要先学算法、数据库、编译原理,学底层的东西
于是就变成了,我是做安全攻防的,我想学研发,但是我又学不懂那些算法,所以我不会研发
事情似乎无解,真的吗?
换个角度说,相信大伙都用过LLM,在不同程度上帮助我们提高了工作效率,解决了不少难题。
但是,你懂LLM的原理吗,你了解Transformer架构和他的注意力机制吗?虽然我也只懂这一点,这是LLM的皮毛,可是我相信很多人连这些都没了解过。但这并不妨碍他们写prompt,制作出一个又一个好玩有趣的工具。
这些工具优化得有多好?能比其他软件节约多少Token,输出快多少,准确率高多少?真不一定吧。
这就是理论和实践的区别,或者说是理论和应用的区别,我们作为使用的一方,没必要了解那么多原理。我们只需要考虑怎么用,先做出来,然后再考虑优化的问题。
对于研发来说也是如此,你要懂的只有Mysql的CRUD,Nginx的HOST+SSL配置,Java/Python/Golang写个简单后端,再用HTML写个简单的前端,全栈也就这么点东西。
至于各种调优,真的有那么重要吗?
二、准备开发的环境
A. 学习一门全栈语言
上手开发首先得有一门通用的全栈语言,我首先推荐的是Python,然后是Golang/Nodejs,最后是Java。
Python作为一门解析性语言,可以快速修改相关功能函数,逻辑比较直观,但是其语言特性暂未原生支持多线程,在高并发场景下性能欠佳
其次是Golang,作为一门和C差不多的语言,上手难度不大,原生的go rountine协程可以有效发挥高并发优势
最后的Nodejs和Java我就不评价了,个人接触的不是很多,不过作为全栈语言来说也是相当优秀,仅是相关经历给出的顺序,带有极强的主观意愿
B. 了解相关中间件及系统的配置
Mysql等数据库:简单SQL语句学习,会CRUD就行,管他要跑多久呢
Nginx等中间件:转发个网页,配置个反代,并发优化你也能做到百万是吗
Docker:运行个容器与实例,把环境与程序一键跑起来,k8s啥的前期有必要吗
HTML:写个form提交脚本,抄个bootstrap美化一下,vue是什么真不熟
学那些专业的东西之前,先把基础搞好,了解下你真的能用上那么多“高级”的特性吗
开发就只需要这么多东西
三、怎么上手开发
首先我建议是从二开开源项目开始,魔改一下逻辑,或者加一点插件。
你可能会说,这到底改该怎么下手?一般就是不知道该写什么,饼画的太大自己都吃不完,没有动力去完成。
那么我推荐从改进自己工作的流程,提高自己工作的效率入手。
举个例子,现有的fscan/kscan能不能满足你的所有需求呢,你扫到一个目录会不会dirsearch一下,poc是否够足够,要不要自己加一点呢?
或者说现有的C2,例如vshell/cobalt strike是否在渗透中存在某些卡点呢,主机上线自动化操作,通知等等。
或者再简单点,我能不能写一些脚本去减轻我自己的重复工作,分析一些日志、样本等等。
四、学习拆解应用
开发其实就像搭建积木一样,把不同的功能串联起来。绝大部份的开发很过程可以说是对其他项目模仿和学习,那么在此之前,我们要学会如何拆解一个应用。
让我们拆解一个博客系统为例
1. 拆解核心功能
博客系统的核心功能通常包括:
文章编写:创建、编辑、删除文章。
文章展示:列表、摘要、目录、分类
用户管理:用户注册、登录、注销
评论系统:读者对文章进行评论
2. 分析每个模块所需的技术要点
文章编写:Markdown支持、图像上传等前端功能;后端数据库存储相关记录,验证上传数据。
文章展示:前端页面布局和样式设计
用户管理:认证和授权机制,如Session、Cookie、Token,并对密码加盐哈希等
评论系统:评论发布、审核、展示的前后端逻辑
3. 拆解成小的子任务
将每个模块进一步拆解成小的任务。
例如,对于文章撰写模块:
1. 设计文章数据模型(数据库设计)。
2. 实现文章的CRUD接口
3. 开发文章撰写和编辑的前端页面。
4. 实现Markdown编辑器集成。
5. 开发图像上传功能
……
4. 确定技术栈
然后根据自己的技术栈,灵活选择自己的语言
前端:H5+Bootstrap等。
后端:Python/Golang
数据库:MSQL、PostgreSQL等。
鉴权:JWTh等认证机制。
其他:全文检索等
五、反复尝试并优化项目结构
后面的过程就是不断试错和优化了,但我们没有必要着急弄清楚每一个优化的地方,这太多了,我们写的代码并不可能是完美的。
我们可以边使用边优化
1. 文章需要公式和代码高亮 -> 加入Katex.js和Highlight.js
2. 全文检索效果太差 -> 优化SQL语句或者换用全文检索引擎
3. 图片加载速度慢 -> 换用CDN+OSS或者后端对图片进行压缩
4. 垃圾评论太多 -> 接入评论拦截API
如果不知道怎么优化的话,去抄!抄开源项目不丢人,这是学习开发的必经之路。或者啥现在LLM这么成熟了,问问GPT,总能找到几个合适的方案
六、最后的最后
说了这么多研发相关的,也没见你提一句算法啊。
算法真没用了吗?不是!那么东西呢
我认为学习算法更多是学习计算机编程的一种思维逻辑,而不是算法本身,例如最经典的分治、贪心、递归等等
如今研发的很多算法都被隐藏并封装成了一个又一个系统和应用,我们更多是需要了解怎么用,而不是他的底层原理。
(八股面试造飞机、上班却在打螺丝)
面试若如此有时候也是无奈之举,我之前背八股背的那么多现在实习一年多了一点都没用上XD
文章的最后也希望对各位想在安全或者其他计算机相关岗位转研发的小伙伴有帮助。