

Learning to Hack: the Tipping Point - bryanh
https://zapier.com/blog/2012/07/08/learning-hack-tipping-point/

======
lubutu
I think the way that one learns to program says a lot about the programmer. I,
like many people, started with games and websites, but although I understood
conditionals and loops, and even glimpsed OO, I wasn't very good. My software
sucked, I got bored of it, I slowed to a stall.

A couple of years later I picked up Python, and instead of trying to make
games or websites, I worked on stupid little puzzles. Pointless things,
really. After a _lot_ of work I built a Befunge interpreter (probably my own
"tipping point"). And many useless puzzles later, I somehow wound up a genuine
computer scientist.

People always talk about "getting things done". I just worked on meaningless
puzzles, and that was the best thing I could have done. Anecdotally, to me it
_was_ about achievements and challenges. If you grow tired of the drive to
"get things done", make something pointless.

~~~
zaphar
The "thing" in getting things done is fuzzy. For you it was a "meaningless"
puzzle. For me it was an implementation of Conway's game of life. For others
it was modifying their wordpress blog or making automating their financial
tracking.

The point is there is something you _want_ to do and you used a programming
lanaguage to do it. As a result:

    
    
       * You were self guided not following someone elses steps.
       * You were rewarded with some self confidence when it worked.
    

That's the tipping point the OP was talking about I think.

~~~
lubutu
I suppose what I'm trying to say is that for me it wasn't that there was
"something I wanted to do and I used a programming language", but rather that
I wanted to use a programming language so I found something to do. For me it
was about the (self-guided) achievements and challenges: I wasn't "hacking a
way to a solution," and would often return to the same problem and solve it
again and again, never "falling back to really hacky solutions to get things
done." It's a bit fuzzy (things do get done either way), but I think there is
a distinction in approach.

------
tatsuke95
As someone with an interest in the programming world, I'm slowly "learning to
code". I don't intend on ever developing in any occupational capacity. I'd
just like to be able to have both a better understanding of what goes on under
the hood, as well as be able to cobble together tools.

But I'm having trouble finding my own tipping point. I've worked through
tutorials, online classes and introductory texts. Most of these things have
you typing code in an editor, solving very minor problems, and seeing the
results. But there's a big gap between, say, typing a little program in an
editor, and a full blown web page or game. I understand that when you drill
down in an iPhone app, for example, there's code back there, most of which I
can't recreate, but can understand on a basic level. But what I _don't_
understand is how that code gets there; how do all the pieces of code fit
together to make a finished product, and how do you get it there? It's still
sort of a black box to me, and haven't found the resource that can get me
across that chasm.

I bring this up because I'm waiting for the epiphany, when I can say what the
author does:

>" _What had previously been a mysterious and confusing world suddenly started
making a little bit of sense._ "

It's difficult when learning from scratch.

~~~
anthonyb
Two things:

It definitely helps to have some sort of scaffolding or small seed program to
help get you started. If you're looking at other people's projects you don't
see all of the small choices and decisions that they made, just the final
product. That always seems a lot more complex and intimidating than whatever
it is you're currently working on. (If they're on github, you can sometimes go
back to revision 1 and see what they started with, then roll forwards and
watch them work)

The second thing is that programming is a lot like maths, in that learning it
in and of itself is pretty dull. Having something that you want to do, with
programming being the tool that you apply to help you get there, is a lot more
motivating (and seems to be the tipping point experienced in the article)

~~~
tatsuke95
Appreciate the responses. Keep in mind this comes from a guy with no
programming background.

I suppose I'm finding it easier to get exposure to the _science_ , but not the
_art_. Or maybe a better way to put it is, writing code is one thing, but
making software seems completely out there to me.

I was a big fan of MUDs as a younger guy, so as a practice project as I work
through texts and tutorials I've been building a little choose-your-own-
adventure game. It started as a slightly modified "Hello, world!". As I
learned about more complex things, from loops to functions and packages, to
objects and classes, I've found ways to complicate the program by adding in
the things I've learned. Now I have a couple thousand lines of code (bloated,
I'm sure!) and a little game that, at the least, has a wee bit of depth beyond
"enter your name:". But at the end of the day, it's some code in a text
editor. I could spend more and more time adding more and more code, but it's
still a command-line executed script. How do you make it "software" if you get
my meaning?

There are other examples: I've been using python to learn to play with data,
with some success. I can get data in, manipulate it a bit, and spit it back
out. Great. But how would I automate that, drawing a file in from a folder
automatically, manipulating the data according to my python code, then
ejecting it onto a webpage into some graphing package. I know that isn't a
complicated procedure (it's essentially a transfer of data), but I don't even
know where to start.

Or you mention Github. While I know what it _is_ (sort of), I have no idea how
it works or why people use it,outside of sharing code. APIs? I know that
they're a way to transfer data between pieces of software. But I don't know
the first thing about how I'd use, say, the Twitter API, even to mess around
for practice, by adding some extremely basic functionality to my "game".

This probably sounds ridiculous to people with experience. But I'm living it.
I guess I feel like I've done enough _programming 101_ and am ready to see
what _102_ is all about. To me that's not "learn another language", it's "how
do I turn code in a text editor into _something_ ". There don't seem to be
many resources that cover the subject. That's the epiphany I'm waiting for.

It seems the answer is to define a small project, specifically, then set about
doing it, with Google as your friend.

~~~
anthonyb
There's really not much difference between a script and a program, other than
size/features. A program just has a few more added :) It perhaps seems like
there's some extra sauce if you're looking in from the outside, but it's
really just a case of iterating, adding stuff and polishing the "out of the
box" experience.

Minor plug - I actually wrote a book which I think follows the pattern that
you're looking for: <http://manning.com/briggs/>

It's essentially completely ass-backwards if you're used to traditional
programming books, in that you don't learn everything about Python up front.
Instead, it's a bunch of small-ish practical projects, and you learn as you
go.

Chapter 6 is an adventure game, and chapter 10 turns it into an networked MUD
via twisted - it sounds like what you're trying to do. But there's also
business stuff - csv parsing, etc. - an asteroids clone, writing a web app in
Django and so on.

~~~
tatsuke95
> _"There's really not much difference between a script and a program, other
> than size/features."_

Saying so is the luxury of having reached the tipping point!

You sold a copy of your book, so plug justified. It looks interesting.
Hopefully it can fill in a few gaps. Thanks.

~~~
anthonyb
Cool! :)

Don't forget that there's an author forum if you get stuck and need a hand. I
check in every day or two.

------
jpadilla_
This is something I talk all the time with students that are being taught all
the programming classes in college. Most of them know how to program, or at
least know the syntax of a language and know basics, but getting to that
tipping point of having hacked something up is kinda hard for most people.
After you've built that first thing, that isn't the obvious programming
exercises found on textbooks, you've passed that tipping point and hacking
will then come naturally to you.

~~~
sreyaNotfilc
A lot of people don't like the "discomforts of exploration".

Folks have mentioned that creating solutions to your own problems helps a lot.
Well it does, but it takes some out-of-the-box thinking to realize that you do
have a problem to solve.

Programming is like using an Erector set. You get a lot of pieces and can
place them together quite easily. But when push comes to shove, how many are
going to (or willing to) build a baseball launcher so they can avoid "pickling
the Beast" (Sandlot reference)?

That's where imagination and subdivision comes in. Yes, you can learn all the
theories and syntax that you'd want, but if you don't use your imagination and
divide-n-conquer methods, you'll never make it.

Once you'd get past all of that, the sky's the limit. I'm proof of that. I
hear of all of these miracle languages and frameworks, but I stick to what I
know. Why, because it had solved so many problems before. And its because I
have a vivid imagination and know what it takes to get the task completed.

------
simondlr
I remember learning to code in Game Maker a while back, so each time I had an
end goal in mind: the game I want make. In that time, I made 8-10 crap games,
but each time I would code, I would more and more swap out the pre-build code
actions with actual code as the complexity of the games increased. Besides the
fun of making games, it was great discovering the underlying code, even if it
is something as rudimentary as Game Maker's scripting language.

~~~
Xcelerate
Wow! This is how I learned to code too! I remember when I around 12-13, I
wanted to figure out how to make my own message box in Windows (yes, I was
weird). But I didn't know there was such a thing as "programming". In fact, I
had no idea how software was made.

Eventually I stumbled upon Game Maker -- I think it was at version 4 when I
found it. So I began creating little games with that cheeseburger icon and
snowmen. Eventually, I realized that this thing called GML would let me do
more. When I looked in the help file, one of the functions said to enter an
"argument" and I seriously spent like 2 days trying to figure out what an
argument was.

Eventually I got a Mandelbrot fractal going in Game Maker and discovered C at
that point.

~~~
simondlr
Wow.Straight from Game Maker to C? Sort of happened the same to me. Up until
uni I only knew Java, Game Maker and basic PHP/MySQL then started with C in
freshman year. Although I mostly do web development these days, I liked
working with pointers and memory management in C (once again delving down
deeper).

------
tonyx
Well said. I still go through that cycle every time I try to learn something
new. Cocoa was really frustrating, especially as the debugger threw me into
compiled assembly code. But once I got through the initial hurdle it became
much more fun. Had that experience with Django lately too. The best (arguably
only) way to learn seems to be learn by doing, reflect(which includes
summarizing mistakes, reading tutorials, talk to expects, etc), and do some
more. It tends to work out best when you have an end in mind, a real project
that you are working on, which is what a lot of coding tutorial fails to
deliver.

------
fredsters_s
Agreed. I feel like we are probably the first generation who has grown up with
the world's knowledge at our fingertips. Once you know how to use it, every
problem seems solvable. Yet still the majority of my friends don't have this
attitude. I've forgotten how many times (as the 'tech' friend) I've directed
them to an lmgtfy.com link. I wonder what stops people from grasping the
concept you're talking about here - from experiencing their own 'tipping
point'.

~~~
graeme
That's an excellent question. Our current institutions (school, work) are set
up so that people by and large respond to commands from a higher authority.

Entrepreneurship gave me the incentive to find things on the one, and also
made it necessary.

------
alberich
The article is nice, learning by doing is way more effective than just reading
about something. I just don't feel very confortable with the word "hacking".
This term is so overloaded nowdays that it's almost meaningless.

Anyways, good job :)

