
To Learn Programming, Do Projects You Care About - sidcool
https://datarebellion.com/blog/to-learn-programming-do-projects-you-actually-care-about/
======
xamuel
I cut my programming teeth on the open-source engine of an online game I was
into. It was C, and I had no prior knowledge of C, or anything else besides
BASIC.

I didn't care about career development or resume padding. I was just a teen! I
wanted to understand how that game worked, maybe add some cool stuff to it.

Things like pointers, memory management... I learned by copying existing code.
I understood it because I had _experienced_ it. If it was code for a fireball,
I had experienced that fireball, in-game.

Now I'm a full-time programmer making more money than anyone in my family ever
dreamed and it all started with that open-source game engine :)

~~~
mentos
RunUO for me ;)

I can still find a post from 2001 on their forums where I was overwhelmed with
all of the { and } squiggles

~~~
supernintendo
This comment brings me so much joy. Ultima Online is my favorite game of all
time, having played since T2A (I was nine years old at the time). I have fond
memories of hacking away at my own shard, cobbling together scripts and
editing MUL files (a custom file format that the game used to store binary
content) to add new creatures and items. My first exposure to "programming"
was SphereServer, which used one of the worst scripting languages I've ever
written in retrospect. Later I took a stab at C# with RunUO and while my
attempts never manifested into anything noteworthy, they did establish a
foundation for the career in software I have today. It warms my heart to see
kids embracing this sort of creative spirit for games like Minecraft. The
modders of today could be the engineers of tomorrow.

------
gregmac
This is the advice I've given anyone who asks me for years now.

Build a utility to automate something you do anyway, build a website, make a
simple game, or even just try to build your own clone of a
utility/app/site/game you like.

Don't worry about language, frameworks, or any of that distraction. Just get
something working.

You know you're on the right track when you find yourself thinking about a new
feature to add or how to solve a problem when you're in the shower/going to
bed/driving/etc, and can't wait to get back working on it.

~~~
b1c837696ba28b
Yes, for decades I have practiced and preached this. Even more motivating:
take a job that requires a deliverable in your language of choice. Swim or be
eaten by sharks!

~~~
Gruselbauer
That's what I am currently going for. Took a job that I cannot afford to lose,
doing something most people on here would accomplish in an afternoon tops.

I guess your stance is right. You don't grow unless you're challenged.

------
carlmcqueen
I got started on programming scripting for AOL chatrooms, making tools that
let me type out larger blocks of text and it would quickly enter it so it
showed as concurrent messages for turn based role play.

Then, Starsiege tribes had a pretty open to modding stance and started making
custom chat scripts, which evolved when more advanced programmers let you add
on to their work.

This idea is so true, I watch as the foster kids my wife and I do respite care
for get into programming through sharing time with me getting a raspberry pi
into a minecraft servers.

Even just having customizable options got them very excited.

------
adrianN
I have the problem that basically all my needs are already addressed by
existing software.

~~~
bloomca
This is actually true only to some degree. Of course, you can't create your
own full-fledge game, but in terms of automation you can do a lot. You like to
listen to certain radio, but it has shitty interface? Build site/app/etc to
address it! Yes, it will be small and won't do anything else, but for you it
will be helpful, so you will do it with passion.

The same applies for other "utility" stuff – you can create your own
flashcards service, which will be super convenient exactly for you, and so
forth. So, don't underestimate yourself – software often is good only to some
use-cases, not for yours.

~~~
adrianN
My usecases are typical enough that I don't encounter things that I could
improve, or if I do I would have to replicate a lot of the stuff surrounding
that particular minor annoyance. That would usually require man-years of work.

~~~
fergyfresh
Excuses are the nails that build the bridge to failure.

------
gshubert17
An older source of interesting projects is "Etudes for Programmers" by Charles
Wetherell, in book form (out-of-print, unfortunately):

[https://www.amazon.com/Etudes-Programmers-Charles-
Wetherell/...](https://www.amazon.com/Etudes-Programmers-Charles-
Wetherell/dp/0132918072)

~~~
Nzen
<formatting edit>

The college I attended had a copy. I leafed through it. I recall (but didn't
reimplement)

* map coloring

* maze generation

* some company forecasting / resource allocation game

* a vm and compiler

* huffman encoding

* conway's game of life

------
metasean
Looks extremely similar to the original CodeKatas list -
[http://codekata.com/](http://codekata.com/)

------
qwertyuiop924
Yep. That's pretty true. This is why I write weird crap. Like MUDs, Bulletin
Boards, and other nonsense.

Right now, I'm trying to write a video game for the Gameboy. Or something. But
then I got distracted learning about the 6502. And now I'm getting distracted
by something else, as we speak.

I start many projects. I rarely get far.

------
a3n
I've given the following advice to people who want to learn python, which
overlaps with people who want to learn programming:

Go through the python tutorial at python.org, until you start to get bored and
start having ideas. Then write something simple that occurs to you. Then write
something a little more interesting, and start treating the tutorial and other
resource as resource, and your creative efforts as the main thing you're
doing.

------
kpennell
Couldn't agree more, I wrote a similar piece on this a couple years ago:

Solve your problem with Javascript It’s the best way to learn

[https://medium.com/@kyleapennell/solve-your-problem-with-
jav...](https://medium.com/@kyleapennell/solve-your-problem-with-javascript-
fe6a4fcb5241#.cgq6h2h5n)

------
samayshamdasani
Agreed. This was on HN two days ago, but I created
[https://enlight.ml](https://enlight.ml) (a place to learn to code through
projects) Let me know your thoughts!

~~~
bloomca
I personally think that the problem with your approach is exactly as it is
described in the article. You offer tutorials which you can compare with your
implementations, but let's be honest – it is boring as hell. People usually
treat it as a mundane, like they have to study it and go through it.

So, there is no personal thing in this, and therefore no passion. The article
is basically the opposite – do something! But do it by yourself, do what is
interesting, just for the sake of doing and enjoying.

If you ask me, I'd say it is too boring to make 1000-ish timer or some basic
app.

------
denzil_correa
You are god damn right. Programming is a means, not the end.

------
Heavenhunter
Thanks for sharing these insights. I had similar problems when I started with
Python!

------
hsavit1
I don't understand why the author references the "mega Project List." The
author cites the github list as an inspirational tool, which seems quite
contradictory as the author also pitches using programs to solve problems that
you personally care about. So what does the author actually recommend?

~~~
Kluny
See if there's something on the mega project list that you care about.

------
PunchTornado
you really need to decrease the width of your content. it's hard to read.

~~~
zoidb
white on red also makes my eyes hurt a little bit..

~~~
_r_o_y_
and yellow!

~~~
yoz-y
Maybe an hommage to the good old Hot Dog Stand theme?

------
modzu
this goes for learning anything

