How do I get more motivation to code outside of class?
August 19, 2010 9:07 PM   Subscribe

I'm lacking motivation to code outside of programming classes... I enjoy the classes a lot, but when it comes to coding outside of class, I get stuck on what I want to code or what kind of projects to contribute to.

So I've been taking several classes to prepare myself for upper division computer science courses when I transfer to UCSC next fall. These classes consisted of 3 quarters of C, 1 quarter of Java, 1 quarter of Python, and 1 quarter of HTML. I enjoy my programming courses the most out of any of my other classes. They are challenging, yet rewarding when all of the bugs in the assigned lab assignments/projects are dealt with.

However, when I think about contributing to open source or making my own iPhone app, I run into a wall. I hopped onto several IRC chatrooms and thought that the users would be genuinely pleased that a newbie would be interested in contributing to open source projects. I asked around on the Pidgen, Django, Python, and other chatrooms, but they all seemed to just ignore me.

In my classes, all I've ever dealt with were small-scale programs. When I look at repositories and large amounts of code, it becomes rather overwhelming. A couple people that I spoke to told me it was simple. All I had to do is grab a repository and make changes to it. They make it seem really easy. Maybe I'm just being a gripe about it.

Ditching that idea, I decided to learn objective C and Cocoa Touch simultaneously with Apress's "Beginning iPhone 3 Development" book. I stopped about 1/3 into the book, as apps for just about anything already existed. It took me a few weeks of brainstorming and browsing through the app market to realize that it has become so saturated, and the $99/year subscription would probably chew holes in my pockets due to the odds of my apps ever reaching an audience.

I had an internship a few months ago that dealt with django/python, but it didn't work out well for my employer or myself. It seemed that neither of us were interested in my own progress. He wasn't interested because I'm still green, and I wasn't interested because I didn't like dealing with large amounts of code. I know I have to deal with it when I get into the real world, but it's just overwhelming for some reason.

So I have two options. One is to basically harass the open source community with my own bug fixes so I can actually get feedback (whether it's positive/negative), or my other option is to create iPhone apps as a freelancer (creating other people's app ideas for commission). Which option would be better for me in the long run? I'm favoring the latter option myself, as I need to start saving up money for college somehow, and I would like to keep my jobs within the computer science realm so my resume will look a lot better once I get my bachelor's degree.
posted by RaDeuX to Computers & Internet (11 answers total) 19 users marked this as a favorite
In my opinion, you can find a good app idea. It's just that when it comes to the idea, you have to be able to code it. Just ask your friends for app ideas.
posted by antgly at 9:11 PM on August 19, 2010

Response by poster: @antgly

Possibly. But while I come up with an app idea, I was thinking about freelancing programming for people who want their own iPhone app ideas developed. That way I could almost guarantee that by the time I have a good idea, I'll be able to code it with relative ease. I heard the freelancing market is very competitive, and I'm unsure whether or not my latter option is a feasible one.
posted by RaDeuX at 9:23 PM on August 19, 2010

You could flex your programming muscles by tackling some Project Euler problems. They're tough and will stretch your programming abilities. The problems are designed to resist the obvious brute force solutions. You can do pretty much all of them in at most a page of code, if you're clever enough, so no need to plunge into a huge existing codebase.
What is Project Euler?
Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

The motivation for starting Project Euler, and its continuation, is to provide a platform for the inquiring mind to delve into unfamiliar areas and learn new concepts in a fun and recreational context.

Who are the problems aimed at?
The intended audience include students for whom the basic curriculum is not feeding their hunger to learn, adults whose background was not primarily mathematics but had an interest in things mathematical, and professionals who want to keep their problem solving and mathematics on the edge.
I'm a professional programmer and I like to do these from time to time to keep my math and Python skills sharp.
posted by Khalad at 9:25 PM on August 19, 2010 [3 favorites]

Programming competitions are great for this, you'll get practice and have a deadline, which forces your brain into "work" mode.
posted by hellojed at 9:28 PM on August 19, 2010

Open source projects are really not interested except patches. What you can do is find a bug in their database, make a patch to fix it, and send it to the maintainers.

I asked a question about how to find a project once, and the hive had some good answers.
posted by mkb at 9:35 PM on August 19, 2010

RaDeuX: "In my classes, all I've ever dealt with were small-scale programs. When I look at repositories and large amounts of code, it becomes rather overwhelming."

This is the main challenge you face as a software developer in The Real World. Or at least, the one academia can least prepare you for. This is the reason people say new developers take months to become productive, and why internships can be hit or miss. There's a common meme I see people propose about helping open source projects, and it goes like this:

1. Find an open bug
2. Reproduce it
3. ???
4. Fix it.
5. Attach the patch to the bugzilla.

What's missing here is where you spend ages understanding the whole program. What the data structures and types are, and all the places that call the function you're about to change. This is a very large unspoken burden. It's not like open source coders are dilettantes who contribute to dozens of projects in different languages and frameworks. I believe, but cannot prove, that most 'prolific coders' contribute to one or two projects someone else started. The only people who break this pattern I know of never collaborate and instead write their own software for themselves; because they designed it, they know it and can fix it.

What I've gotten pretty good at is identifying root causes of bugs. I can reproduce a bug, write it up in a bug tracker, and maybe locate the offending line with gdb. But once I've found the segfault, I'm at a loss on how to fix it. But doing that work makes it pretty clear to the developer who knows the embedded logic what's going wrong and how to fix it. So I let them know there's a segfault at line X and they decide whether to just skip the rest of the code or how to handle the null pointer case.

The alternative, which involves you writing code, requires an up front investment in reverse engineering and code review. There are tools for this, like object diagram generators and call graph generators and DB schema analyzers. There's also tools like lint and valgrind. You'll have to do a fair amount of code reading that nobody talks about because it undermines the Many Eyes Makes All Bugs Shallow concept.

A few tips about open source coding:
1. Expect some latency on IRC. We're not always paying attention. I, like many people, leave an irssi session running at all times behind screen. I'm also in 14 different channels and converse regularly in only a few. So have some patience if you have a basic question. Nothing's more frustrating than coming back to a channel to see someone ask a question, wait 30 seconds and depart before you can answer them.
2. If you have honest to goodness patches to submit, skip the general channels. For example, there's #eclipse, and #eclipse-devel. Guess where the people who code eclipse reside? -devel channels exist for a reason, hunt them down.
3. IRC isn't always the best place to discuss patches. Bugzilla and Launchpad are good ways to find interested parties if you can wait say 24 hours. These are congregation sites for people who have a problem and want it fixed. They're far more likely to test your patch than most random folks in an IRC channel.
posted by pwnguin at 12:48 AM on August 20, 2010 [2 favorites]

RaDeuX: "But while I come up with an app idea, I was thinking about freelancing programming for people who want their own iPhone app ideas developed. "

You should freelance if you don't have one or more app ideas floating around already, but there's no shame in bugfixes. Would that there were more.

On IRC there is a fresh supply of thousands of newbies every year in the form of college freshmen. They/you aren't a bane, but it does take more than showing up. There's an old adage that I think applies to IRC as well: "Unix is user friendly, it's just selective about who it's friends are." Anyway, rant off and good luck in whatever you decide!
posted by rhizome at 2:48 AM on August 20, 2010

I graduated with a software engineering degree five years ago, so I can relate to some of your thoughts and concerns.

First off, Khalad is right on about Project Euler <>
This is just personal preference, but I really feel like you should consider looking into Microsoft's .NET architecture. I've had a ton of fun designing and programming everything from complex data-driven websites (my favorite) to direct-x apps designed so that I could record and loop my guitar through my computer.

You're always gonna find folks that just fire out spaghetti code, and that stuff is going to be near impossible to diagnose. I think you're going to find that C# is a really polished language, and that MS's free "express" IDE's are a joy to use.

The web developer IDE:

And VS 2010 express

Good luck
posted by Glendale at 3:01 AM on August 20, 2010

Rofl, it's too early. Sorry I forgot to link :P
posted by Glendale at 3:02 AM on August 20, 2010

Try cloning some small programs/apps you like. If you were interested in games, you could write your own Tetris/Hang man/Othello/etc. clone. If you want to learn to write apps for the iPhone, identify a few (up to 10) that look simple and try to create clones on your own, without looking at their code.

Focus on 1) making it work (not caring about appearance), then 2) making it work well/fast and then 3) making it look nice.

Once you have a program/apps working, have your friends try it out and give you feedback.

THEN, you can think about doing apps for others for commission.
posted by aroberge at 4:27 AM on August 20, 2010 [1 favorite]

Is your goal really to code a lot? Or is your goal to become a better programmer? If the latter, you might spend more time reading: papers, blogs, others' code and watching talks. Here're some starters:
On the Cruelty of really teaching computer science

Alan Kay Graphical User Interfaces
posted by at at 5:08 PM on August 21, 2010 [3 favorites]

« Older Who the fuck is Eminem, anyway?   |   Traveling in Nagano Japan in November Newer »
This thread is closed to new comments.