(Old - 6) Programming
Welcome back!
Howdy, internet friend! It’s been a while since my last blog post, so I figured it was about time. In this post I am going to talk about my experiences in programming. I’ve actually written a post about my first time at DefCON as well, which was at least 50% written so I have a reminder to myself next year about what I should and shouldn’t do. However, life got really hectic and it still hasn’t been edited yet. Once it is edited, I will be sure to post it. However, in the meantime, I wanted to share a post about something that’s been keeping me busy for the last two weeks or so. Before I do that though, I want to talk briefly about one of my other projects in the works.
Unfortunately, I was rather abruptly returned to the researcher and consultant life on August 28, so on August 29 I set up one of my old GNU+Linux machines to fuzz let’s just call it “a free software tool many know and love” that hasn’t been updated in quite some time. Also unfortunate is the box I’ve got doing the fuzzing is an old dual core rig, so while it has plenty of ram it only has two cores churning away. For those of you who’ve never fuzzed software, all you need to know is that you can use each core to work together on a project, so the more the better. But I digress, because my point in this blog post is not to complain about the crappy hardware I have fuzzing something interesting, it’s about programming, hence the title! I wrote a post about this on LinkedIn, but they limited my space and I have much more to say on the subject, so I wanted to write this post.
The first thing I want to mention when talking about programming is that I think it is really hard. I mentioned in my LinkedIn post that I first started programming when I was in junior high, but gave it up because I thought it was too hard. I also studied it in college a few times but abandoned it for the same reason. However, two years ago I got some advice from an infosec person I really look up to who suggested I learn how to write code, and ever since I’ve been trying really hard to do just that. Since coming upon a bunch of free time (as one can only apply for so many jobs) I’ve volunteered to work with my friend Acetolyne on a programming project he is writing in python. I’ve written my most meaningful code in python, so I felt comfortable volunteering to help him. This may have been a mistake….
I’m totally kidding. One thing that really surprised me about contributing to this project was how fast I would learn. In that first day of coding I felt like I learned more than in the previous six months. By the end of the first week my head was spinning. I thought I knew how to use the version control system git (lol I am not great with git) but I learned so much, and I continue to learn every single day.
For a long time, I resisted contributing to a project because I didn’t think I had the chops. I was in a catch-22 conundrum, where I didn’t feel that I had the skills to contribute to a project, but I couldn’t raise my skills on my own without contributing to a project. In this way, working with Acetolyne on this project has resolved both of my issues. I will also admit it is not without growing pains. I’ve made a ton of newb mistakes, and I know I’m slowing him down. However, I also think he is learning a bunch of stuff in having to explain it to me as well. So in the end, I think it’s been a win-win.
If you are on the fence about contributing to a software project, let me encourage you to take the leap. You will probably make a bunch of mistakes, and that is OK! I’ve written before about how I learn more from failure than success, so keep that in mind as well. I’ve been spending time doing CTFs with some of my friends from Irvine Underground and guiding them with my experiences, and I’ve found that in explaining things to others it reinforces my understand of that particular concept. This is inline with my belief in the Feynman technique, which is worth looking up if you aren’t familiar with it. I know it can be scary volunteering for a software project. However, if you take the leap I’m sure you will find it can be just the thing to help you push your skills to the next level. If you have aspirations about getting paid to write code some day, I would highly suggest this as well, since you can not only demonstrate skills and a portfolio to a potential employer, but you can also get experience writing code with others, which is very different than programming by yourself.
In the end, there are many ways to get better at programming. I still find myself watching tutorials on classes Acetolyne suggests I need to learn more about (because that’s how I learn best, following along with the code in the tutorials so I can have a reference for later) and then making mistakes, but I’m quickly learning important lessons as well. If you are working by yourself and you break your code, you can just leave it broken until later. If you push broken code, no one can work until it’s fixed. That’s forced me to get better at triaging bugs (as well as making sure to comment my code and using meaningful commit messages) as well as just generally forcing me to be more thoughtful about what I’m doing, which is a valuable skill in life. Overall I would highly encourage anyone who wants to get better at programming to find a project and contribute. Nothing has helped me improve my skills faster, or been as fun, as contributing to this project. So go out and have yourself some fun as well!
Cheers, internet friend!