

Twelve Tips to Master Programming Faster - breck
http://breckyunits.com/twelve_tips_to_master_programming_faster

======
JustAGeek
The author got the 10,000 hours-rule slightly wrong. :)

It's not as simple as merely doing something for 10,000 hours and then you
magically become an expert.

The 10,000 hours-rules refers to the act of performing 10,000 hours of
"deliberate practice" (or sometimes called "deep practice") in order to become
an expert.

And that's something very different to simply code 10,000 hours in your day
job. When googling for that term, you'll find plenty of studies and other
resources. :)

If you are interested in this topic, I can recommend the book "The Talent
Code" by Daniel Coyle - yes, the title is cheesy but it's a good book, I've
read it in pretty much one sitting. A gentle and entertaining introduction
into the whole field of how to become an expert.

"Pragmatic Thinking and Learning: Refactor Your Wetware" by Andy Hunt also
spends an whole chapter on deliberate practice. It's a very good book, too.

EDIT: This blog post by Derek Sivers could be considered as an example of
deliberate practice: <http://sivers.org/kimo> Just stumbled about it as a
submission to HN, nice coincidence... :D

~~~
mattmanser
I'm tired of seeing the 10,000 hours everywhere, there are so many counter-
examples I have no idea why anyone buys it.

It doesn't take 10,000 hours to become a master striker in football, they are
all young and the older you get, the worse you get. Does it take 10,000 hours
to write master songs? No. Look at virtually any modern band. Not many people
go through the same gruelling tours as the Beatles did before success.

Also, to pretend the complexity of the task has no bearing on the hours it
will take to master it is nonsense.

You don't need 10,000 hours in virtually anything to be an expert. 10,000
hours to be a master of tic-tac-toe? No. Does it take 10,000 hours to become
an expert coin-flipper? No. An expert dish washer? An expert waiter?

I also have take umbrage with the word expert. I think if anything it should
be something like virtuoso, an exceptional ability, not just an expert. All of
the examples I've seen used are people with exceptional abilities, not mere
experts.

Ach, I don't know why I get so annoyed at it, it just seems to me that it's
trotted out for totally inane lists like this one all the time.

~~~
bad_user
Wow, a single post where football, the Beatles, coin-flipping, dish-washing,
waitering and the implied programming ... appear together.

> _Look at virtually any modern band_

If modern bands don't have to practice so much to be famous, that says so much
more about their quality and the record labels that promote them.

And I don't see any "modern band" being as popular and as eternal as the
Beatles. Michael Jackson was close, but he wasn't exactly known for his quick
and painless path to success.

~~~
mattmanser
Hehe, yeah, pretty impressive :)

I think the point I'm trying to make is that they can write high quality songs
at the beginning of their career as well as at the end. They didn't need
10,000 hours to come up with a great song, an expert quality song. I bet many
had only written 20-30 songs before getting famous, certainly nowhere near
10,000 hours of song writing. You even get bands which then fall into
mediocrity after a fantastic debut.

I have no doubt they put in hours beforehand, but they've been at school,
certainly not playing for 3 hours a day for 10 years.

Not only that they have some mastery of the instruments, song writing, stage
charisma, all distinct skills. Many great guitarists write crap songs.

So where did they get the 30 years to get all 3 skills?

I think the Beatles example is bad because they had an extra skill, the
ability to morph their music with the times that many other bands don't (Bowie
is another example of someone who was able to do this). They are eternal
because they constantly changed, put out great albums, which has nothing to do
with the 10,000 hours of practice they put in in Germany.

~~~
breck
I'd agree with you. You can be talented and create a hit early on. I think one
of the points of the 10,000 hours thing, is that you have to be _really_
dedicated to a pursuit to become an expert/top percentile in your field.

Innate talent is another requirement and will slow you down or speed you up,
but I would doubt that you find any experts who are not greatly committed to
their field (even if they hadn't dedicated 10,000 hours to it yet, they fully
expect to).

------
derefr
As to #6—software engineering, at a sort of medium level, is mostly object-
oriented. At a high level, when talking about how to parallelize and scale,
it's more relational, and at a low level, when designing algorithms, it's
first very functional and mathematical, then when optimizing them, very
imperative. OOP is only really done to figure out _what_ you're building; once
you know that, figuring out _how_ you'll build it isn't necessarily OOP at
all.

~~~
alexgartrell
Agreed, at the end of the day, Programming is just structures and functions
that operate on those structures. Languages like Java tell you that's a
"class" and do some extra nice book-keeping to make it much more clear to say
dog.bark() (as opposed to, for example, dog->bark(dog) as you might do in C),
but there's really nothing super fundamental about it.

------
messel
Great starter tips.

I've been programming for almost 20 years now (some of that in school), and
just recently began exploring web programming (started looking at php over the
summer).

I found the information helpful, even though I can code pretty massive
simulations with complex algorithms in C++ for a desktop environment, I
couldn't build simple ruby/rails apps. Slowly learning about the fundamentals
of persistent web databases (migrations), http restful I/o, and many languages
for data access and views on that data
(HTML,php,JavaScript,java,scala/lift,ruby/rails,python/django, along with many
APIs). This is probably going to take me more than 10k more hours to learn
well.

~~~
patio11
I don't know about that. Three years ago, my entire programming career had
been spent in Swing apps and utility scripting. I only started on Rails to be
able to sell my Swing app better, and only started to get into SQL,
Javascript, and all the rest of the rabbit hole as my business (and day job)
required me to. Thats, hmm, about 7 kilo-hours as an upper bound if you assume
that all of my day job and business time goes into web programming, which is
very, very far from the case.

------
thechangelog
This scares me. I can relate to the OP in that I denied my interest technology
until my twenties until finally embracing it. Evidently, we're both looking to
up our game and become better programmers. However, a few of his points are
really... concerning.

"Great code is easy to read"

Not at all. JWZ's code challenges me; heck, some of the Rails code baffles me
until I sit down and think carefully. A lot of code can be unintuitive to the
uninitiated and still be great.

"Use github."

Seems awfully narrowly scoped. Using SCM is undeniably beneficial, but using
it to become a "master programmer" seems a bit misguided, like becoming a
master hammer swinger will make me a master finishing carpenter.

"Code is surprisingly more like English than like math."

Ruby? Very little code I've read would be understandable if read out loud.

"Learn Linux."

Well, maybe. OP must be a web dev who grew up on Windows (like me). I don't
understand how memorizing a series of command line switches will help anyone
master programming. While understanding pipes, regexes, ACL, etc... is
undeniably useful, there must be better approaches than "learning Linux."

All that said, I must give kudos to the OP. I'd like to master programming,
too. I have no formal CS education, I get lost when spelunking through big
code bases, I need to "learn Linux." But it seems to me that a better approach
is needed.

The most intriguing part of the post was this comment: "You will read and
learn more from a good $30 paperback book than dozens of free blogs."

I'm really curious about this. Does this hold true for anyone else? Are books
about design patterns really more beneficial than reading the jQuery ( _par
example_ ) source? Dozens of times more useful?

~~~
breck
> "Great code is easy to read"

Maybe it should have been "make it as simple to read as possible, but no
simpler."?

>"Use github." >Seems awfully narrowly scoped

It is narrowly scoped. The thing I've witnessed with newbies and SCM, is that
they are so intimated by it they never get in the habit of using it(until they
go to a good shop that uses it). But it takes 1 minutes to sign up for github.
And 1 hour of typing "git commit, git add, git init, git push" etc to master
the basics. Then building upon that knowledge is easy. But just getting
started with SCM is the hardest part, imo.

> "Code is surprisingly more like English than like math."

Kind of the same point as earlier ("clear as possible, but no clearer").

My linux advice was pretty weak, I got some good emails suggesting it should
have been more specific, and I agree with that. I should have said "Learn key
linux programs". pipes, regexes, vim, etc.

Great feedback, thanks!

~~~
thechangelog
I do agree that in terms of getting people excited about SCM, github is the
way to go. And helping a dev enjoy SCM and getting them involved with the
community through forks and patches certainly _will_ making them a better
programmer. So, fair point on that one.

------
mdemare
Mostly good advice, but the 10,000-hours-until-you're-an-expert meme bothers
me. First, not everything is equally difficult. Playing the violin is harder
than knitting.

Also, being an expert programmer suggests that you've levelled out, that
you've reached a permanent high plateau. There is no plateau. It's a slope all
the way to infinity.

If you find you've reached a plateau, shift gears and change to a more
abstract programming language.

I'm at 30,000 hours, and I'm not an expert programmer. I'm still learning
every day, and I like it!

------
alexgartrell
All you have to do to be great is love it.

When you love it, you pass on the other stuff to do it. You buy the books and
read them purely out of your own interest. You take on projects you don't have
time for because they're too damn cool to pass up. Most importantly, you talk
to your friends about it all the time, because it's what's on your mind and
it's what you want their opinions on.

And guess what, that's not just a "Programming" thing.

~~~
stan_rogers
Oh, good Lord, no. If I had a nickel for every hard-slogging, monomaniacal,
talentless writer, poet, painter, actor, singer, musician -- and yes,
programmer* -- I'd met in this life, I'd probably have more than enough money
for a down payment on a house I couldn't possibly afford to live in. Love
isn't enough. Love and study together aren't enough. Love, study and
application aren't enough. Love, study, aplication and diligent practice
aren't enough either -- one may be able to elevate himself above equally apt
colleagues, but actual aptitude counts for a lot. As does the ability and
willingness to realise that most people (and therefore, probably, himself) are
merely adequate to the task.

*Okay, there's a difference between self-deluded artistes and self-deluded programmers. Artistes can always claim to be before their time, misunderstood, and operating on a whole different spiritual plane. Programmers need, at a minimum, to create something that works in order to claim any success or ability at all. A real genioid can produce code good enough to receive "Works on My Machine" certification, and that can be proven to scale to five or more "simultaneous" users (depending on how many automated virtual machines he can get to hit the server from his laptop, his workstation, and that old Pentium II in the basement).

------
kabdib
He missed: Learn how to read code, and read lots of it.

Also: Find someone who knows how to debug, and sit next to them for an hour or
two while they tear apart a problem, fix it, and make sure it's solved. I've
had a couple of tough sessions with world-class debuggers, and learned an
amazing amount in a very short while.

------
themullet
some more: unit testing - annoyingly rather handy, had a good argument about
why it's better not to use it, well I use it, I lost that argument but gained
a lot. design patterns open source projects - a great benefit to your skills,
there's something that needs kicking for any level. learn why it's handy to
use version control rather then just use it (tip - it's because if something
borks can roll it back a lot easier) linux - not just learn it, know it. bash
scripting, piping commands and expect all have saved me multiple hours rss -
handy

------
eh
Thank you. This comes at the right time for me. I have been trying to learn
programming for a long time but i never get past simple console programs. I
also suck horribly at math which is a major cause of embarrassment from middle
school to college. Lately i am trying to make up for lost time by starting to
learn again. Programming as well as mathematics. I can't afford to buy too
many books. So i am relying on torrents/wikibooks/carlh on reddit for now.
Progress has been excruciatingly slow and painful. But this gives me hope.
Thanks a lot.

~~~
g1adiat0r
Same here. I want to reach a level where computer technology is a tool in my
hand that I can wield skillfully to accomplish any computer related
application.

------
woadwarrior01
Point #1 is in the same vein as Peter Norvig's Teach Yourself Programming in
10 years. <http://norvig.com/21-days.html>

~~~
ComSubVie
I'm currently reading "How to write a lot" from Paul J. Silvia, where he is
saying that you shouldn't try to find time for writing, but you should
allocate time for writing and start doing it.

This is very similar to this Tip #1, take your calendar, find a sport where
you have time each week and allocate this time to coding (or to learn coding,
you are also allowed to read books about coding in this time, or do your
research regarding coding, etc. - but whatever you do, it should be relevant
for coding).

------
dopkew
Can somebody enlighted me why my comment shows up only when I am logged into
my account? It doesn't show when I am logged out or when I am logged in from
another account. Is this a bug, or, what? Details: [http://walkie-the-
talkie.blogspot.com/2009/12/hacker-news-us...](http://walkie-the-
talkie.blogspot.com/2009/12/hacker-news-user-profiling.html) I am posting here
because I don't know where else to post.

~~~
pg
You happened to use an IP address that had been banned for spamming.

~~~
dopkew
I boot-time scanned my entire computer which ruled out virus infestation.
Since I have only recently started using this IP address (4 months), I am
guessing that the person using this IP address before me may have either been
a spammer or may have had an infected system. I don't think it is because I
goofed up in some way. So will this IP be blocked from HN for eternity?
Shouldn't HN take into consideration that my account from which the comment
was posted is older than a year with frequent activity throughout? (Mainly
upvotes on submissions and comments) -and without any history of spamming or
any wrongdoing? I would very much like to participate in the HN community. I
request you to allow this IP address.

------
dopkew
Can somebody enlighted me why my comment shows up only when I am logged into
my account? It doesn't show when I am logged out or when I am logged in from
another account. Is this a bug, or, what? Details: [http://walkie-the-
talkie.blogspot.com/2009/12/hacker-news-us...](http://walkie-the-
talkie.blogspot.com/2009/12/hacker-news-user-profiling.html)

------
bufordtwain
It's worth remembering that how fast you master programming has something to
do with your innate ability as well.

------
dopkew
This is weird. Even my complaints are not showing when I am not logged in. Is
there any body there listening to me? The link to my comment does not work
when I am logged out. It gives the message: parent [dead] . But the same link
works when I am logged in. What is going on?

------
pmorici
"Something that you’ll spend 5 hours panicking to learn will take them 2
minutes to explain to you."

I disagree with the mentor one. The Internet has always provided faster better
and more complete answers than the "ask a co-worker" method, for me anyways.

~~~
apsurd
From someone that is 100% self-taught I can say from experience that its more
an issue of "you don't know what you don't know. This is the major crux of
self-learning. How can google possibly help you if you don't know how to frame
the problem or even what terms are involved in whatever it is you want to
learn? One example I remember was learning about database optimization; how do
I know to search for "normalization" if I don't know what normalization is? So
of course getting answers from google is super-fast, but that entails that you
know what to search for.

My first experience with "coding" was trying to make a website for my tshirt
printing business. I spent literally 12 hours a day for 10 days learning css
and html and I loved it. So I coded about 10 pages for my website. Naturally I
just copied and pasted the layout and menus and common stuff over and over
throughout all pages. Finally on the 11th day, through a random search for
something I don't remember, I stumbled upon this concept of "include_once"
where you could create your website in this "templated" style. You just put
"include_once(header)" and then includ_once(footer) and you didn't need to
constantly duplicate everything. But it was in some language called php so
that entailed that i start googling "php" ...

So you see, a 5 minute talk with a guy that knew about coding websites could
have quickly briefed me about the differences between client-side and server-
side languages, and why and how to use them. Could have told me to _start_
with a framework like kohana rather than write spahgetti-rific code for the
first 3 years of my coding hobby. Could have told me about using things like
jquery for quick js development (and why and how js is appropriate). Yes yes,
expert "crash courses" are definitely valuable.

Note: I tend to disagree with the term "self-taught". Plenty of people have
taught me, it just has not been in a classroom environment. I have learned
endlessly from the great teachers that write books, code open-source and take
the time out to answer forum posts- so I'm not self-taught, its more like
self-motivated.

~~~
pmorici
I can see in your case where you are really just beginning so nearly anyone
you talk to is going to have a approximately correct answer to your question
but once you reach a certain point where you know the basics I'd argue that it
will be much harder to answer your questions by simply asking those around
you. You are also perhaps not asking Google the right questions. because I
just did a search for "optimize MySQL Database" and the first heading of the
first result that popped up was titled "normalize" so I stand by my claim that
I prefer searching over asking by default.

------
known
"I hear and I forget. I see and I remember. _I do and I understand._ " --
Confucius

------
dzlobin
The entire time I was reading this I was thinking, "wow this seems so
familiar". Then I realized it's your blog and we just had this conversation
two days ago. Thanks a bunch for your help the first time and again for this
post!

------
flojito
And what about those using VBA and PL/SQL?

Just one disagreement: 5 hours fighting against code can be sometimes better
than getting it solved in 2 minutes ;)

------
Confusion
I think this kind of advice is lacking in a _major_ way: being a good software
engineer is not just about being able to write code. Writing code, even 10K
hours worth of code, does not make you a good software engineer, unless you
also practice how to _design_ your software. You should be able to determine
when you are violating DRY, what parts of your program should be separated by
a clean internal API and how to separate responsibilities.

Programming, as outlined by guidelines as in the linked article, is nothing
more than being able to write the code that solves a problem. Engineering
requires you to be able to organize the code and the machines, networks and
other infrastructure required to allow your client to reach your code.

~~~
apsurd
I think this is more of a _starter_ tip list. I see this more of as a
motivation push that some people need in order to get over the self-imposed
obstacles of just starting. Just start!

~~~
breck
You're both right. I definitely should have added "design patterns" to the
list though.

------
dopkew
Thanks. I needed this advice. Especially that 'Read books' one.

------
topbanana
"Get mentors" is the best idea, if you can.

------
mbongo
mmh!!

------
mattking
More like 12 tips on how to be a poser.

