I want to be a hacker
October 6, 2010 1:58 PM   Subscribe

From 0-Hero programming filter: Help me build a long term learning plan to go from a cursory knowledge about how to control and fix my machines to a capability to control and manipulate my machines to do what I will them?


I can, with others pre-written code, manipulate my operating system, root my phone, and the like. But, I can't build a program myself (I am interested in data mining and manipulation), or even know the types of scripting I need to know to have my computer do simple things like un-sleep and open up my to-do list for the day when my alarm goes off (think a digital pee-wee's playhouse - sans rube goldberg).

I want to contribute to the hacking culture (contribute to large scale projects to build a better, more open, and more accessible internet), policy evaluation research (analyze current policy and model options to build better social policy), I want to at least understand what my friends who are white-hat hacking are doing, and I want to make my own simple point-and-click games for my friends and I to play but, most of all I want to know where to start. Assuming I have a basic algebraic background what would be a streamlined progression of topics that would allow me to build my expertise and understanding while allowing my to see some tangible benchmarks in ability?
posted by elationfoundation to Computers & Internet (9 answers total) 17 users marked this as a favorite
 
Read this article. I'll wait.

Back? This site will start you on the path.
posted by sonic meat machine at 2:07 PM on October 6, 2010


Response by poster: Thanks Sonic Meat Machine. Have read that article. Thanks for the second link.
posted by elationfoundation at 2:15 PM on October 6, 2010


I think you need to focus this down a little more. Programming is both abstract and specific. The path you take will depend upon what platforms interest you. And those things will change as you go, but you have to start somewhere.

Pick a general purpose language. C, perhaps, or Ruby, if you want to go the object oriented route from the start. Learn a scripting language for your preferred OS, so you can automate things.

The more languages and their platforms you mess with, the more you'll see that languages have a lot in common, conceptually (e.g. variables, loops, conditional branching) and it will be easier to understand the big picture. But you need the small picture too. So, what platform(s) interest you right now?
posted by wheat at 3:09 PM on October 6, 2010


You're going to have to become a beginner, which means you will have to start being comfortable asking your "white-hat hacker" friends what they mean when they say something you don't understand, but want to. Start anywhere, just pick a language and a project. The rest will follow from there.

However, most of your needs sound more technophilic or anthropological. The alarm clock integration sounds good though, so be sure to post that to Projects when you have something worked up.
posted by rhizome at 3:26 PM on October 6, 2010


The standard answer to this question is: learn Python. smm's link is a good one, but the standard tutorial works, too.
posted by signal at 4:15 PM on October 6, 2010


elationfoundation: "Assuming I have a basic algebraic background what would be a streamlined progression of topics that would allow me to build my expertise and understanding while allowing my to see some tangible benchmarks in ability?"

The traditional way is to something like this:

1. Output.
2. Print out basic arithmetic expressions
3. Variables and user input.
4. Booleans and conditional expressions (if-then-else)
5. Loops.
6. Functions / subroutines.
7. Recursion and function composition.
8. Strings and File I/O.
9. Arrays and Data structures.

Unfortunately, most novice programmers don't really know what this stuff means, or have a good idea of projects that can be completed without knowing the more advanced stuff, so textbooks pair these topics with programming practice assignments. Off the top of my head:

1. Hello world. The point here is to understand how to write and run the most trivial program in a given language, and to design it.
2. Solve some basic problems using the program as a calculator to print out results. Fahrenheit to Celsius conversion for example.
3. Same as above, but instead store user input in variables so you don't have to recompile or edit the program to use different numbers.
4. A program that prints out whether the input is odd or even. (Sorry this is lame, but all the cool stuff needs 5).
5. FizzBuzz. Or a hold/cold number guessing game. The computer picks a random number and the player tries to guess it, with too high/ too low feedback.
6. You could rewrite some of the above programs like F->C converter to use a function.
7. Fibonacci is one example, but you could also rewrite FizzBuzz using recursive functions.
8. Write a program that reads a file and compares it against an input. Basically, search a file for a string, line by line.
9. Use the Sieve of Erosthenes to calculate all prime numbers from 1-100.

You should be able to do all this in Python, but I'm afraid I don't teach programming to students so I don't know of a book geared towards this. But I'm sure they exist.
posted by pwnguin at 4:47 PM on October 6, 2010 [3 favorites]


There's a lot of ways to learn how to program and they all involve 2 things -- reading a lot and experimenting a lot.

I like python, it's a readable language, there's a good community around it, and if you want to program games, there's a games library for it and a great free introductory book that you can download from this site that introduces you to programming by writing games in python.

If python looks to computer-y to you, try Inform. It's a 'natural language' game engine for writing text adventures.

You'll probably also want to get yourself familiar with SQL, have a machine you can install linux on, and to run through a ruby on rails tutorial or two. You'll have a working webapplication up in just a few hours and you can make changes on a live, working application, which is a lot easier than starting from scratch.

Also, buy some general books about computers and logic. Godel, Escher and Bach is a good one, but there are lots of others. Computer logic isn't natural and getting yourself accustomed to it takes a lot of time.
posted by empath at 7:17 PM on October 6, 2010


I've taught intro programming a couple of times. I don't have much to add beyond what's already been said here, but:

Write code. Every day. Come up with projects that interest you and figure out how to do them. Write a game, write an instant messenger program, write a web server, write a text editor. They don't have to be great or even usable, just get them done enough so you have the underlying principles down.

When I was learning, compilers cost a lot of money, and there was no reference information on the web. Now they're free and there's tons of free learning material. But don't get caught up reading and learning every technology under the sun: focus on clear, specific projects and learn exactly what you need to accomplish them.

I'm a Python fan myself. I think scripting languages are a good place to start: Python, Groovy, and Ruby are all pretty comparable. I unfortunately don't know of any great books, but the official Python Tutorial is decent.
posted by miyabo at 9:27 PM on October 6, 2010 [1 favorite]


It sounds like you might be more interested in low-level systems (meaning things like drivers, embedded software, tight optimization) and that kind of thing. That is to say, work closer to the metal rather then throwing a bunch of crap together on the web running on some server somewhere.

If that's the case, you might want to start by learning C. C is considered "hard" but it's not very abstract and you work closer to the metal. Things like python have lots of great features for working with the conceptual elements of the program (like objects and classes and closures and generators, etc). Those things make it easy to do things that can be a huge pain in C. But you won't need that when you're just learning for the first time.

After you're good at C you can move on to (a little bit of) Assembly programming.

Then move on to stuff like python. It'll give you an appreciation of everything it's doing for you :). If you're smart and can handle complexity, this path won't be too difficult, and it will give you a deeper understanding of how computers work.

For the datamining stuff you really need to know the math. Learn probability theory and linear algebra, then move on to machine learning topics. Norvig's textbook is pretty good
posted by delmoi at 1:26 AM on December 25, 2010


« Older Sorry, it will take me more than 3 days to go...   |   Saving boring olives Newer »
This thread is closed to new comments.