

Shipping vs. Learning - mstarkman
http://blog.markstarkman.com/blog/2013/01/16/shipping-vs-learning/

======
gfodor
Learning via Shipping is the only certain way to be sure you are spending your
time learning useful things. You can, of course, learn things that are useful
that don't involve shipping. But if you are learning something that results in
shipping, then it was certainly useful.

That's not to say you shouldn't spend time learning things that don't involve
shipping. Just that these things should be the exception, not the rule.

This extends beyond software. For example, learn Mandarin when you are going
to actually be going to China, not because you think it's a "useful skill."
Learn accounting when starting a business. Start reading Tufte when you have a
tangible information design task at hand.

In general, it's another form of lazy evaluation, which is _almost_ always a
good idea ;)

------
ssharp
This is definitely the way I prefer to learn things. I've had a few of
successes and one failures doing things this way. Things I learned this way:

\- PHP, CodeIgniter \- Ruby, Rails \- CSS \- Javascript, jQuery

I'm hoping to get into some of the newer JS projects this way as well,
node.js, backbone.js, etc.

I think having a deliverable project in mind keeps you focused while learning.
It's an extra layer of motivation, but unlike finishing a book, you're left
with a real asset. I don't think everyone learns best this way, however, and
realize that others may prefer going through book exercises or online
tutorials. One drawback I've ran into every time I've learned this way is that
you tend to cut corners out of ignorance and end up having to invest time down
the road in either learning things your project didn't require or unlearning
the bad habits you picked up when you were focused on the end rather than the
means.

I will say that I failed miserably when I had an idea for an iPhone app and
jumped in head first this way. The process was intensely frustrating and I
felt like I spent a lot of time spinning my wheels. Looking back, I would have
been much better off working through an intro book on iPhone / Cocoa
development than trying to piecemeal educational materials and tutorials. I'm
not sure why this one specific process didn't work. I may have been too
ambitious or it may just have been entirely out of my wheelhouse, coming from
a web-only background.

~~~
hamxiaoz
I have similar experience. When I built my blog (Jekyll) I knew nothing about
css/html so I was constantly tweaking elements in an inefficient way. Now I
have finish some basic css/html books/tutorials I have much better
understanding what I was doing.

When learning new things, reading a book first works best for me. You might
feel slow at the beginning, but it'll pay you off in the long run.

~~~
jwdunne
For CSS/HTML, things like Firebug and Webkit Inspector can help massively too.
You cut out the edit-save-refresh process across two applications out. You can
usually cycle across available properties and their valid values too, which
makes it even better for learning.

Seeing things in real-time as opposed to refreshing over is a much better way
to learn, based on my experience. It's a shame we can't do this with more
stuff.

I guess, in general terms, anything that cuts the time between writing code
and seeing results will be a great help to you. Not only that, these tools
will stay with you as you progress past a beginner stage since they'll always
provide that efficiency boost.

------
viscanti
I find I go through cycles. Sometimes I feel like I learn better reading
through books and blog articles (and working through any exercises that might
be provided). Other times I feel like I pick up more (or at least have more
motivation to pick things up) when I'm actually trying to ship something.
Different strategies work for different people at different times.

------
speg
This is one of my new years resolutions. I love to spend time learning new
things, but then just leave them behind when I move on to the next thing.

Hopefully you are right and I will still be able to learn new things even
while I focus on shipping.

~~~
mstarkman
Thats awesome! Sounds like we're on the same path.

------
npsimons
This may be the best, nay, the _only_ way I learn, long term. Hence why I'm a
big fan of books with problems/exercises, and typing out code, even if an
electronic copy already exists.

I'm fairly certain neuroscience (or a related field) has studied this and come
to similar conclusions. Of course, since I don't practice neuroscience, I
can't remember where I learned this. Perhaps someone who has researched this
can elighten us?

~~~
jwdunne
I think the concept of deliberate practice and perhaps even spaced repetition
in psychology might be what you're looking for?

Mark is dedicating himself to shipping projects, each of which contains
challenges that are designed to push him just past the edge of his current set
of abilities. Further more, each project will have to be maintained or else it
will go stale, meaning constant, spaced exposure to each concept he is working
with.

For example:

 _For my next project, I want to focus on having a more reactive user
experience on the client side of a web app. I have narrowed it down to two
technologies that I want to use, Ember.js or Meteor._

Here, Mark chooses a project that centres around Ember.js. Rather than writing
some toy Ember.js stuff, I imagine he will be using Ember.js in a practical
setting, which is more challenging from the outset.

Since he plans on shipping, again this will need to be maintained, perhaps new
features may need to be added, which means spaced but regular exposure to
Ember.js.

If I'm correct in the above, this may actually be a fantastic way to learn new
stuff.

~~~
npsimons
Deliberate practice is something that really fascinates me, because it never
seems like I have enough time. I've picked up "How to Read a Book", but it
will have to wait until I'm done with my current non-fiction book (I try to
keep focused on one non-fiction book at a time).

Reflection and deep understanding are important, but the mantra of "good
enough" is very powerful as well, and perhaps the fastest way to "ingest"
something is by pushing yourself, hard, to do something "impossible", well
beyond your limits. Some people would say that if you could do it, it's not
"well beyond your limits", but how do you know until you try?

For me, I have a tendency both to get distracted easily, and occasionally
focus deeply (perhaps _too_ deep) on highly specialized subjects. C++ is my
current obsession, and not necessarily because I like it; there's just so many
dark corners. I do need to learn and practice more deliberately, but also push
myself, hard, out of my comfort zone.

And sorry to continue the free association (see how I get distracted easily?),
but I feel that perhaps rejection therapy wouldn't be needed if people took
more challenging opportunities, with the inevitable failures being all the
rejection therapy they need.

~~~
jwdunne
Well, this is interesting because I've got another bit of research/info that
ties in with what you have said and also the OP's post.

According to research done by Carol Dweck, there are two types of mindset when
approaching a challenge, much like learning new, tougher-to-grasp things. You
either lookst it from a fixed "be good" mindset or a growth "get better"
mindset.

With a be-good mindset, you will be less persistent because failing means
you're not so good.

With a get-better mindset, failing won't matter as much, if not at all. This
is because, in your minds eye, you're focused on improvement, so even if you
fail you feel you will learn something (99 ways to not make a lightbulb).

With a get-better mindset, fear of rejection and failure are extinguished.

It also ties in with what the OP is doing because he is focused on learning
when building and shipping products. If his sole intention was to ship and not
actually learn anything from it but rather as a demo of his skills, would he
ship as much?

------
hamxiaoz
Nice, this is exactly I figured last year. Now I'm learning web development
(HTML/CSS/JS/Ruby), here is the 'product' I build (or you can call it shipped)
recently:

<http://hamxiaoz.com/BeijingAir/>

It monitors the PM2.5 reading of Beijing and changes color/text based on the
reading. Nothing fancy but I'm happy I made my idea come to true.

------
hatking
I came to the same idea. One of my New Years resolutions was to really learn a
Lisp so I can finally see what the big deal is. I'm doing so by rewriting
various utilities I use often (nc, ls, etc) in Scheme (Racket actually). It's
great fun so far!

------
tlarkworthy
you might want to avoid whitelisting spammers in comments

