Why, Where and How to Start Programming and Approach to Hacking.
Recently, we've been having requests and answers which needed a basic knowledge of programming languages to be fully understood.
Sometimes starting studying programming languages can be seen as a long and tedious process, particularly when people discover hacking and try some tools for the first time. GUIs for hacking are everywhere nowadays, but their objective is to be PoC (Proof of concepts).
They show you how easy hacking can be but the point is not to think "hacking is easy", but instead to think "see how easy hacking you is? Go and fix this". See, with "GUI" and "Proof of Concept" as examples, there's a whole vocabulary behind every field, including hacking, that you should know when you start studying it, although I don't know it all.
So you basically can't hack without programming knowledge, as you would just randomly press buttons and writing senseless commands. Once you start digging in the programming field, you'll slowly make sense of programming commands, and you'll be able to understand how the tools you use work.
If you don't understand how a program works you shouldn't run it, , especially in the hacking field, because you don't know the consequences of a failed attack or of a successful but noisy one.
I want to apologize for any grammar error you might encounter, please let me know if you find any, I'm not mother tongue.
Yes! And, because I like lists, let me recap some of the main reasons why programming is that important:
-First thing first, technology and information technology are considered the future, so they are the key to understanding it.
-Speaking about hacking without programming knowledge is like building a house with only half of the foundation . You can build one or two floors poorly, then it will fall, leaving you with rocks only. Being ignorant on this topic can cause you serious problems with the law if something goes wrong, but more importantly you don't actually know what you are doing.
-Sure you encounter errors of all kinds while working on a computer, right? A better understanding of how computers work can give you the skill to solve problems (in both IT and pure logic field, as IT directly comes from logic) without the constant help of someone else, as training your brain is always positive. And trust me, programming is the way to go.
-Using someone else's tool is, quoting Cracker Hacker, "no fun". This is actually true, what kind of satisfaction would you feel if you hacked something without even knowing how it happened? With programming knowledge you might be able to not only understand someone else's code, but also program tools yourself, and once you understand the basic logic it's not that hard.
-The vantages are infinite after all, just think about smartphone apps (iOS apps are written in C-objective btw), web applications, java running almost everywhere...
As long as we talk about following lessons, the only problem is that "so yeah" (but I think that readers don't have this kind of behavior really), but learning programming is a need first of all. You write a program when another one misses a feature you need, or if there's actually no tool that does what you want.
And the sad thing is that there's no cookbook for it, no step by step how to solve errors. Sure problem solving is a natural skill (you'll need it so much), but it's directly generated by the will of doing what you are doing.
So, in case you didn't understand it, last warning: this is in fact a long process and it is required. No cool tricks to show to friends allowed (newbies, don't worry, just trying to scare unwilling people).
But keep in mind that I'm not a teacher neither I'm trying to be one.
School, courses or self-teaching doesn't matter: find you own way, I'm just posting some start points suggested by me and other Null byte users. I'm personally studying it as with the self-teaching way, but if you are able to frequent a stable course, I recommend you to do it (waiting for experts thoughts...).
Understanding the basics of programming doesn't take too long if you have an advanced knowledge about computers. The hard part is the experience building, and the time spent really depends on each person.
I wrote this article as an inspiration, because I want it to be a general topic about programming and ways to approach this world, as recently there has been a lot of confusion about explaining this to newbies, so if you have any correction or new resource you'd like to add, please participate and write it in the comments.I think that we should build a public of people where the most have this kind of knowledge, but there's absolutely nothing to say about what Null Byte taught until now. I also take the occasion to thank this amazing community which is doing a very great job, especially in pointing newbies in the right direction, so thank you, everyday user of Null Byte.
I'm going to divide the resources in sections, for a better reading and documenting. future updates will be made for references posted in the comments that might deserve to be added.
-Introduction to computer science and programming @ MitOpenCourseware (also linked on the main page): As the Video Lectures list shows, this is a very general though specialized introduction to computer science hosted by Mit. In my opinion this is very reliable and should out stand in this list. I'm quoting the description: "This subject is aimed at students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems. It also aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class will use the Python™ programming language." This course, as said, aims to provide students also with problem solving, which is one of the points I highlighted in the introduction. The programming language used is Python, one of the most common when talking about hacking.
-Choosing a programing language @ MSDN: In case you don't know MSDN (Microsoft Developer Network), you'll learn to rely on it while studying programming languages. This is a very interesting, though a bit outdated in terms of time and not contents, writing about choosing the programming language that fits to you. Although as a developer you should be able to work with multiple languages, it points you in the right direction, and also helps you to better understand low and high level programming, the differences and the features they offer.
-Introduction to programming in C, Podcast: Introduction to C and programming concepts and syntax.
-Learn C @ Learn-C.org: The C programming language is a basic knowledge that IMO everyone should have. My studies started with C, and C is still widely used today. Also deserving to be mentioned the languages C++ and C objective, which are currently used for many applications, e.g. iDevices applications are written in C objective.
-Code Academy: As initially suggested by CyberHitchHiker, this "Academy" is a very interesting and reliable resource to learn major web development and scripting languages like HTML, CSS, JS, Ruby and Python.
Post learning and hacking references
As suggested by ghost_, a useful way to get into the topic of hacking is frequenting "information security news sites, as it's always good to stay in the know".
-CSO Online: suggested by ghost_, this is a valuable reference for news about information security aimed to every security enthusiast.
-Infosec Institute: A huge documentation about hacking is hosted here, I recommend you to visit Infosec Institute.
-Null Byte: You can't skip this one. This is the best community I've ever found about hacking, so go check every Linux Basics how-to (you should also have Bash knowledge), read this introduction to hacking and tools and you can start hacking like a pro (a thank to OTW for the time spent on these awesome posts)!
Warning: I only checked the validity of every reference I posted, not followed the actual courses, so if you notice something strange is going on with any reference, I'll provide to remove them asap. If this post is somehow considered spam, please provide to remove it as soon as possible.
And the list goes on and on.
And I repeat it: I just wanted to start a constructive topic about programming to point newbies in the right direction and to teach myself new things, so that everyone can learn from this.
Because of this post being extremely subjective, please correct any error you find in the comments and I'll provide to edit, as I want it to be as clear as possible.
A thank goes to the user Ray Kurzweil, which helped me to make the article clearer and more correct in terms of grammar
Thank you for reading.