本文简述一下自己学习编程的过程

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