
How to learn new things using side projects - rullopat
http://blog.greatcodeclub.com/learn-new-things/
======
tdees40
The best thing I can recommend is taking some code you put together and
rewriting it in a drastically different language that you don't know. I
rewrote some Python code I put together in Haskell, and it was a
transformative experience for me.

~~~
btbuildem
I'm doing that with an old project of mine right now. It's mind-blowing..

------
oweiler
> THERE IS NOT SUCH THING AS A FAILED PROJECT

This can't be stressed enough.

------
danso
I've "published" a few "books" online (by that, I mean, I put text onto the
Internet and called it a "book") and even though I've been lax in
finishing/updating them, my primary goal has always been to learn something
about programming...in this case, programmatic workflow. My first go, I
thought that Rails would be a good publishing platform...which was a horrible
idea, but when you're a Rails programmer professionally, why not? But every
attempt since then has been to find ways to simplify and streamline things,
either through new frameworks or disciplined programming. I'm glad that a few
people stumble upon my work through Google searches, but even if no one ever
read them, I've still accomplished my main goal of practicing and refining my
programming.

------
potomak
I totally agree.

That's the exact reason why I created two simple open source projects:
Draw![1] and Tomatoes[2]; the former to understand Redis better, the latter to
know more about MongoDB.

[1] [http://drawbang.com](http://drawbang.com)

[2] [http://tomato.es](http://tomato.es)

~~~
hfsktr
I was really impressed with that drawing one. I only clicked to see how I did
with my side project(s) of drawing and it was nothing as polished or nice as
that. On one hand I'm a bit sad (with myself for not being able to do that on
my own) but it really is cool. Especially liked the slideshow (that's what I
see) part of it.

------
slackpad
Anybody have experience with his site, greatcoderclub? That looks like an
interesting way to get over the activation energy and build up some discipline
for pushing out side projects.

~~~
ambiate
I was a participant for a month. I realized that my problem was time rather
than motivation. Other than that, it is an excellent community and well worth
the fee! The instructor's path and the community's expansion is a really great
thing to be a part of. I almost kept paying to just watch the community grow,
but felt guilt in eating up a spot.

------
andrewflnr
I disagree with point 1. For me one of the best parts of programming is
creating something from nothing. Going from an empty file to working program
is part of that.

~~~
macournoyer
Empty file yes. But do you start with an empty/blank project?

~~~
andrewflnr
Usually, yes. Especially when I'm learning a new technology, I won't even
write a Makefile until I get lazy. I've never been entirely comfortable with
those project boilerplate generators; another factor in starting from scratch
is that I want to understand what all the pieces do and what happens when
they're missing.

------
akvlad
I was eager to learn about HTML5 Canvas, so I created a small project and
learned a great deal while developing a lightweight canvas library, which
hopefully others will also find helpful.
[https://github.com/vladakilov/imagine](https://github.com/vladakilov/imagine)

~~~
listic
How hard would it be to make a fullscreen demo?

I want to teach myself to make games in HTML5 and most of the examples I see
use fixed size frame; so I must be fair to assume going fullscreen is a hard
problem.

The games I'm interested are visual novels
[http://en.wikipedia.org/wiki/Visual_novel](http://en.wikipedia.org/wiki/Visual_novel)
or Undum-based interactive fiction
[http://almostgoodbye.textories.com/](http://almostgoodbye.textories.com/)
upgraded with full-screen static 2D graphics and music, so graphics perfomance
requirements are quite modest, but running fluidly on screens of different
resolution is a must.

~~~
stevejohnson
It's not a hard problem; you just need a little JavaScript to update your
canvas's width/height attributes when the size of the DOM element changes.
Then you can just use CSS to fill the window with your canvas, and use the
fullscreen API to take the browser fullscreen.

~~~
akvlad
Well, it's also not a simple as you describe. You might have objects within
the canvas that might also need to be resized, images, text, bg images,
bounding borders, etc. All these things will need to be taken into
consideration when being scaled or resized.

------
stickperson
I use Perl at work but have been working on a side project using Django and
Angular to 1) learn/keep up with the languages I'm interested in and 2)
potentially turn it into a business. I'm sure there are tons of things wrong
with it, but I know I'm learning a lot just by forcing myself to figure things
out.

One problem, though, is that I may start looking for a new job soon. I don't
want to make this open source since I may try to sell this at some point. If
you look at my Github you won't see a lot of activity even though I'm working
on this every single day. I know employers are interested in seeing that
you're working on something though. How do I make sure I don't get looked
over?

~~~
Duhveed
I've used side projects to learn every valuable skill I have. Open source
projects are a great way to publicize your new talents, but I don't think it's
a prereq for landing a job that makes use of the new skill. Being able to talk
intelligently about a subject during an interview goes a long way. As does
having a depth of knowledge on a variety of languages, environments,
technologies, etc.

------
mcx
Definitely reminds me of the 70/30/10 model[1] for learning. It's amazing what
you can pick up when you are given a problem and need to solve it. I continue
to learn a ton from work and from personal side projects. Being given a
ambiguous problem and then going through the process of breaking it down into
smaller solvable problems was a big thing for me. I realized that being an
expert in something isn't necessarily being able to regurgitate something from
memory but is having a lot of experience to recognize patterns.

[1]
[http://en.wikipedia.org/wiki/70/20/10_Model](http://en.wikipedia.org/wiki/70/20/10_Model)

~~~
gk1
Interesting that Wikipedia automatically escapes any forward slashes after
_wiki /_.

------
shanecleveland
I've started more than a dozen "side projects" as a way to develop coding
knowledge. Most of these have never seen the light of day outside my computer,
but they have all built upon each other and made me better at my day job. And
a few are actually make a little passive income on the side.

There's typically little to no investment necessary, other than time. And I
consider time spent learning something that can at the very least be applied
to later projects or furthering my abilities a wise investment.

There's no such thing as overnight successes, and the more things you make,
the likelier it is that you will create something that becomes more than just
a side project.

------
atko
There is a pile of 8 books on my table right now (pro asp.net mvc 5, visual c#
2012, software architecture in practice, database solutions...". I started by
skimming through each and every one of them, and it all seemed rather boring.
Nothing taught me more than working on my side project.[1] I am far from good
at anything and there is a long ways to go but actually digging in and
creating something was very rewarding.

[1] [http://whoaverse.com](http://whoaverse.com)

~~~
sreyaNotfilc
I can't even tell you how much I have learned outside of school and work by
working on an outside project.

I had a co-worker ask me "How do you code so well in C#? I want to be a master
in that language."

My reply... "Create a simple blog project and then work from there. Eventually
you'll want to add more and more features that will move you throughout that
chosen language."

I've learned so much by creating and uploading semi-unfinished side projects
on the web.

e.g. artJutsu.com/lightbox

------
michaelchum
Great to see a software blogger from Montreal

------
j45
Side projects are incredibly important to keep the tinkering in the shed
creativity, experimenting, learning and ultimately growth alive. It's fine to
have a few to work away on as long as they are not taking up all of your time
relative to the return you are seeking in other areas of life.

------
rememberlenny
This is also applied to Hackathons.

