Hacker News new | comments | show | ask | jobs | submit login
To Learn Programming, Do Projects You Care About (datarebellion.com)
205 points by sidcool 370 days ago | hide | past | web | 47 comments | favorite

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 :)

I have a similar experience. Got fascinated with computers before school offered classes. Learned QBASIC, then VB (3?), then C (the basics of each, not mastery!).

Eventually majored in CS and graduated with the degree. But I find a complete lack of passion for 80% or more of my colleagues. I mean, I don't really care that much about the product I am making, but I still want to do a good job and learn something I can use for myself (or my future career).

Other people just seem to "write code to make it work". Don't follow tech news, don't follow security news, etc. Just a job to them I guess, no interest in side projects.

I think the problem you describe exists not only in programming, but wherever people do work for other people. And its not only that, also if 'you' get a promise to get paid every time, like in socialism, than 'you' wont have enough incentives to be productive or do quality work again. There are a lot of economics and politics concepts there.

I do little self programming, but the task I want to do is more important. When I finish I dont care much about the code just like I dont think about the inventor of electricity when I use it. Also programming alone is huge area and takes all my time, and I dont understand how employers sometimes ask for so many jobs in a single job title.

I really dont know much about programmers as employees as I have never worked in the same department with them, but I wish to work in a technology company again.

The visualization aspect of working on game related projects definitely adds to the motivation to learn. Instead of a game engine, I got my start in a less legal/savory area: botting. MMORPGs like Runescape and WoW were huge when I was a teen. Obviously I joined the botting communities to get some relief from the grind-playstyle that is involved in that type of game; but eventually I was writing code just because it was so satisfying to watch something I created work.

D2 LoD Bots paid my high school addiction to Magic trading cards. That I ever convinced a girl to touch me will never cease to amaze me.

I got my start by writing mods for Morrowind. The easy learning curve and ability to see my work in near-real time definitely sparked my interest in programming. Modding (and interacting with the Morrowind mod community) also taught me how to A) ask questions the smart way and B) deal with toxic internet folks very early in my internet career. I honestly wish I could thank the people who helped me and dealt with my 12-year-old self.

Kind of the same, but much less hardcore.

When I was younger, I really loved games. So I spent a lot of time reading books about Kevin Mitnick and hackers, and also played around with C++ and a little bit of game development. It never really came to fruition.

In college, I was premed and then a Narrative Studies major, and also worked as a lighting designer and lighting technician. However, a lot of the logic flows I learned as young teen helped with lighting programming. It was really easy to pick up front end web development... and then eventually, become a back end engineer. Definitely not the traditional path since I never was a CS major, but learning a lot of the fundamentals as a kid helped.

I'm going to take a wild guess and say it was a MUD. Got into programming and the open source world the same way.

Yep that's right! When I got out of academia and started interviewing around for CS it was quite interesting how many former MUDders there are in hiring positions :D

ha it was SMAUG for me too coincidentally enough. I still hack on it occasionally and eventually went on to make my own shitty codebase (RanvierMUD)

RunUO for me ;)

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

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.

RunUO here too. I'm still in touch with many of the people I met between the RunUO and UOGamers communities, and lots of us have gone on to work in industry. Don't know where I'd be without it honestly.

I wonder how many programmers came up through the mod scene? Bethesda RPGs, especially Morrowind and Oblivion, had very lively modding ecosystems. The Skyrim mod community seems less active, relative to # of installs.

Which game engine?


Not on Github, but this fork is: https://github.com/InfiniteAxis/SmaugFUSS

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.

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!

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.

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.

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

I had that problem too. So then I started making things that I thought were humorous. -Very innapropriate flappy bird clone. -An app that makes a playlist out of a bands most recent setlist on google play. -An app that reads articles using tts and allows you to play/pause/save them. -An app that lets you tell people you are on the way (like yo but with location streaming)

Just think of something you think is funny or talk to your friends that are into tech either directly or tangentially. A lot of my ideas come from phone calls my Mutual Fund investing best friend.

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.

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.

Excuses are the nails that build the bridge to failure.

I dunno, man, there's only so much tech can do. There's not much an app or CLI can do for the economy or civil rights legislature, for example, and those are the two biggest problems for me.

I don't find that to be true for me at all. Like the other poster said, there's endless possibilities for automation. I just don't have enough time to do all the weird projects I'd like to do, but I've got ideas for a bunch of things. At a minimum, there's plenty of places where there's some open-source software that does part of what I want, but I'd like to make changes to it. On top of that, there's a bunch of things I'd like to do that need a more serious project, and existing software that does something similar really sucks, or only works in Windows.

I see this with basically everything I use and look at in life: there's always something that can be done better (or better for me at least). Things I'd like to change on my car, things I'd like to change on my house, etc. The problem is lack of time, and too-high barriers to entry. For instance, my car's pretty new and there's some things I wish I could change on it which are really just software, but it's all closed-source and proprietary and completely inaccessible so it'd be a giant project to reverse-engineer it to make even a simple modification. But with open-source software running on a PC, this is a golden opportunity to be able to jump in and learn how others did something, and be able to make your own changes with a relative minimum amount of time getting set up (i.e., not needing to do reverse-engineering). Even writing your own applications is pretty easy these days with Free/open-source compilers, toolkits, libraries, etc. You can do all kinds of things with Python, for instance, and all the tools you need (including the OS) are freely downloadable.

I've gotten a lot of my best ideas from my friends. Right now my polo league wants some software for scoring tournaments. A few years ago, the local drift racing organization wanted some similar software to replace their excel spreadsheets for scoring laps. Someone wanted an app for calculating variables related to suspension springs. There are plenty of of software solutions for scheduling volunteers, hairdressers, acupuncturists, or receptionists, but even so, a lot of the ones in current use are shite. A boring problem becomes more interesting when you're doing it for someone you love.

I have the problem. Sometimes. And sometimes not.

The other day, I was making a website as part of my project. I needed a static site generator. As I looked over the options, I became increasingly of the opinion that they all sucked, and were all far to complicated, especially given my needs (simple blog site: Put together some HTML fragments with templates, and generate an index from another template). I could write something better than this. In fact, I was about to visualize a design when I realized that I had six projects going and really did not need another one.

I had a problem a bit like this a while back: I had (and still have) a small side business, and needed a shopping cart for it. I looked around at open-source solutions like osCommerce and Magento and decided they all sucked, especially for my use-case (I have a small number of products for sale, each with a lot of documentation, instructions, illustrations, etc., not a giant retail site with hundreds or thousands of products with a minimal description for each). I tried, but these programs were all such huge monoliths that it was too impractical to strip them down to the minimalistic code I wanted to run, nor did I want to use a database (I run on a small, cheap, slow webserver and want to keep my page-load times decent). I ended up finding a somewhat broken but minimalistic shopping cart program in PHP, and learned enough PHP to fix it up and customize it for my site. That program is now abandonware, but my heavily modified version is working great on my site, and does just what I need: gives me a simple but functional shopping cart and is very fast, and if I need to make more changes is easy to modify because it's not a giant mess of tens of thousands of lines of code in hundreds of source files with zero comments (I'm looking at you, Magento...).

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


<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

Looks extremely similar to the original CodeKatas list - http://codekata.com/

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.

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.

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


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

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.

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

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?

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

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

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

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

and yellow!

Maybe an hommage to the good old Hot Dog Stand theme?

this goes for learning anything

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact