本文简述一下自己学习编程的过程
0x00 前言
-
16年上半年准备做PHP程序猿,自己开发了一套框架+博客,可以当做是一个CMS吧,我并没有大量发布它,只是觉得功能太少,一个人维护不过来。
-
16年下半年学习Python,分享、讲课,开发了不少鸡肋工具
-
17年下半年就开始学习C、C++,期间也有想过放弃,但是走到今天了,并不觉得后悔。
花费了大量时间在Coding上,没去研究安全。
一直以来我坚信编程能给我带来极大的好处,所以才坚持到现在。
这门古老的计算机高级语言,锤炼了我的耐心,消磨了我的性子,让我知道什么时候我是最专注的,什么时候注意力用完了。
0x01 注意力、专注力
在电脑面前对普通人是很枯燥的,除了爱玩游戏的发烧友。我学习编程这么久以来,我发现自己的注意力、专注力是有限的。就像一天有24小时,有几个小时你的大脑是空白的,身体是需要休息的。
当为了学习而消费了我的注意力、专注力的时候,我会感觉一天都过得很充实。这一点我想大家也是感同身受过的。
0x02 为什么要学习编程?
例如C语言属于计算机的高级语言,操作内存很方便,效率很高,而且和计算机网络的发展有莫大的关系。
倘若我后期需要从Web安全转向二进制,会很方便。(自我感觉)
很多标准、协议,都在Linux的一些头文件里,我们可以根据RFC文档去解读每一个协议对应的文件。
在之前我写的DNS协议编程,就学到了很多。
0x03 如何学习编程?
这个问题我拉出来讨论有点担惊受怕,毕竟我掌握这几门语言,只懂得基本的编程语法、网络协议编程、和使用一些开源库来给我添砖加瓦。
学会创造需求
很多人学习语言的时候觉得特别枯燥,是因为感觉学习一个if
并不能满足你想干的事,这时候就会感觉到烦躁,焦虑,惶恐不安,也就不会坚持下去了
我说的“创造需求”中的“需求”可以是写一个计算器、判断大小数、循环输出100以内的质数、鸡兔同笼的解答程序等等……
Web安全开发方向:
当然也有野路子:直接实现一个子域名枚举、目录枚举、爬虫、字典生成 等等
当这些需求映入眼帘的时候,你就已经确立了目标,创造了需求。哪怕这个需求对于其他人或自己没有什么意义,你也有必要去实现它。
学习的过程中收获成就感是一个很好的方式,它可以让你持之以恒的热爱这门语言。
(殊不知在未来你开发的日子里if
是用的最多的语法其中之一)
学会分析需求
假设你已经有了一个小需求、或者是大需求,那么接下来不是直接去做,而是要思考、去查找。
思考你的需求需要具备什么能力去实现,去查找这个需求需要满足什么条件才能够实现
举个例子吧,一个目录枚举
的工具,我们可以使用很多语言来实现,假设你学习的是Python:
那么实现目录枚举需要具备以下基本的能力:
- 基本语法
- 基本熟悉一个HTTP库
条件:
- 一台能够上网的电脑
- 有Python环境
实现需求
这个过程是兴奋的,因为你正在做这件事儿。
中间肯定会磕磕碰碰遇到许多问题,但是Python有其优势,写这个功能并不需要多少行代码。
但是我要给你泼冷水了,上面的能力写不出你满意的工具……
因为效率还达不到!
你还没有了解线程、进程的概念,还没有OOP这个思想
所以,做好一个项目需要不断的完善它,优化它,这才是编程的意义~
往往实现只是开始,当你的代码写的很乱的时候,肯定是你没有在一开始的时候思考够
0x04 学习编程的捷径
没有捷径,老老实实写代码吧!
0x05 长期的维护一个项目
这个目前我还没有去做,也没有发布什么,只是写一写小工具,方便内网渗透、Web的信息搜集
但是以我的理解,长期维护一个项目能让你的思想更加坚定,让开发成为习惯、乐趣
另外,目前我在开发一个前渗透框架,目前服务端已经架构好了,希望有人一起和我实现 它。
服务端语言:C/C++
需要其他语言及组件:MySQL PHP Linux Python
它的功能:
- DNS枚举
- 端口扫描
- 以(IP/域名/开放端口/网页标题)生成Hash版本
- 定时巡检
- 数据可视化
- 用户认证
- API接口
我的微信:Guest_Killer_0nlis