top | item 1446493

Ask HN: Where's the fun in programming?

53 points| alexwyser | 16 years ago | reply

I work as a freelance web designer and developer.

When I first started out I only offered web design services, but soon found out that it is almost impossible to get clients who need design only. Most clients just want a complete functional website not just a design.

So I learned HTML, CSS and eventually Javascript, and PHP.

The problem is that I dislike coding. I find it to be very boring.

I read on HN and on other forums and blogs about how passionate programmers are about coding and how they love nothing more than to code away into the wee hours of the night, but I never understood why.

I get the part where its a thrill to solve problems. I love solving problems too, but conceptually not through coding. For example, I like the concept of ranking a page higher based on how other sites link to it (ie Google's Pagerank), and would enjoy conceptualizing further improvements, but I would find it extremely boring to translate that solution into code.

For a web application, the code might make the entire thing operate, but it never affects the user the way the design or interface does.

Can anyone passionate about coding tell me where the fun is in coding?

71 comments

order
[+] scott_s|16 years ago|reply
Many people enjoy cooking. I suspect the kind of coding you're doing is the cooking equivalent of warming up a can of Spaghetti-O's.

The enjoyment from programming depends on the problem you're solving. If all you're doing is making sure the round peg is connected to the round hole, it's not going to be much fun.

[+] leftnode|16 years ago|reply
A lot of other posters are saying that the web dev you're doing is boring (and as someone who's been doing it for 10 years, I can concur). Setting up the 1000th Wordpress blog or making a basic 10 page website gets boring after a while.

So, pick harder problems to work on. As the web expands, they're definitely out there. If you're setting up basic Wordpress blogs, you'll rarely encounter them, but if you work on something where you'll need to dig into actual computer science to solve, you'll find it much more enjoyable (at least I do).

Here's an example: a client I worked with sells sheet music to schools and churches. There's a lot of sheet music out there. Alone, they have 350,000+ products. They had an osCommerce installation (which is some of the worst software in the world, by the way) and the search engine in OSC took about 15 seconds per search to find something. Not to mention it wasn't suited for their products. So, I wrote something much better. I researched search algorithms, tokenization, string matching, indexing, word proximity algorithms, and a slew of other problems. It was incredibly interesting, applied many of the concepts I learned in college, and in the end, produced a search engine that was really powerful and fast. It search all products in under half a second.

In hindsight, I could've used something like Apache Solr or Lucene, but I just enjoyed finding the solution to a complex problem and building it myself (well, along with the other developer on the team, of course). So, try to find work like that to do.

Or, pick a totally different domain and write software in another language for it. I really like search and artificial intelligence, so one of my favorite algorithms is the A* (http://en.wikipedia.org/wiki/A*_algorithm). It's simple enough that you don't need to be a Ph.D in computer science to under, but uses enough concepts (min-heap, breadth first search, hash tables, nodes) that you'll get a good understanding. So try to build an implementation over a weekend in a language you don't know. You'll learn a lot, and chances are, you'll be burning both ends of the candle to get it to work.

Enjoy!

PS. If that doesn't get you going, perhaps you just don't enjoy programming, and thats fine too.

[+] angilly|16 years ago|reply
Slightly off topic, but this jumped out at me: "In hindsight, I could've used something like Apache Solr or Lucene, but I just enjoyed finding the solution to a complex problem and building it myself..."

If I were your client I could see getting fairly annoyed at this. Is/was your client pissed that you spent (wasted) time building something from scratch when you could have just used something open source? Or were there legitimate reasons in this case to build something from scratch?

[+] 10ren|16 years ago|reply
See p. 7 of Brooks' The Mythical Man-Month, for "The Joys of the Craft" http://www.amazon.com/Mythical-Man-Month-Software-Engineerin...

He lists 5: creation; usefulness; intricacy; constant novelty; tractability.

Some of these are in common with graphic design; but the "constant novelty" perhaps addresses your "boredom". Turing said that programming need never become boring, because any repetitive coding (or concept) can be captured in a function or module. Once you're worked out the solution to a problem, you write a reusable module to deal with that problem, and embodies your understanding of it, and you don't have to do it again. So it's always new problems.

Now, in practice, it isn't always that easy. Code that can be reused generally is much harder to write than code for one specific case (the literal meaning of ad hoc: "for this"). The hardest part is specifying what it do, not coding how. This approaches AI: to go from a problem that initially you cannot even understand, to one that you can automate 100%, is transcendent. Almost Frankensteinian... (aka The Modern Prometheus).

For me personally: I get a simple pleasure from making something happen on the screen (like any act of creation); but I actually don't like programming much for its own sake. I enjoy solving problems, and making them real. It's easy to dream something; but to do it is a real accomplishment. And anything on the road of that journey becomes equally important.

I don't know what stage you're at, but it's possible that you're not yet up to wrapping up the common parts of your coding, so you don't have to do them again. If you keep on typing the same predictable, mechanical things, that would be boring. Computers are ideal for this kind of mechanical work.

[+] dieterrams|16 years ago|reply
It wouldn't surprise me if the sort of code you're writing is boring. A lot of website dev is.

Programming doesn't become fun (or at least obsessively involving) until you start working on something that's challenging to architect well, optimize, or code elegantly. If the functionality is inherently interesting, that helps, too.

Chances are that your programming education (which I'm assuming was self-taught) lacked a teacher that introduced you to interesting challenges of architecture, optimization, and elegance. In other words, showed you how programming can be a highly intellectual activity. I recommend working through Structure and Interpretation of Computer Programs while watching accompanying lectures and doing exercises. It's as good an intellectual introduction to programming as you can get.

[+] irahul|16 years ago|reply
> So I learned HTML, CSS

IMO if you don't do HTML/CSS, you aren't a web designer.

> For example, I live the concept of ranking a page higher based on how other sites link to it (ie Google's Pagerank), and would enjoy conceptualizing further improvements,

You don't know the details to understand it isn't as easy as you think. If you think you can conceptually do further improvements, I would really like you to try that. You will get a better picture.

To give you an analogy, I can say that many users are on slow networks and are irritated when their download freezes mid way and they have to do it again. So, it would make sense to have a download implementation in which the user can pause/resume download at will. I can pause a download today, come back tomorrow, resume it and it just works. What more, since I already have some part of the file, I can switch off my system, switch it on, resume the download and still be able to get only remaining chunks.

I can say I conceptually solved a problem but practically, all I did was whine, some wishful thinking and showed my ignorance.

> For a web application, the code might make the entire thing operate, but it never affects the user the way the design or interface does.

You are totally misguided here. I would have a lot to say here but I am afraid you won't be able to relate with it. I am making this assumption because had you been familiar with what it takes to run any significant web app, you won't have made this statement.

I would just like to point out that Google services has minimal interfaces and the users are happy, surely it isn't because of the interface.

[+] alexwyser|16 years ago|reply
Google's a great search engine, and its all due to their brilliant algorithms and codes and everything.

I get that.

The programmers at Google are tackling a lot of problems and coming up with birlliant solutions.

I get that.

I just cant imagine someone has fun writing those thousands of lines of code. Even more so when the code isnt for a cool new feature but for a mundane fix.

I image a lot of programmers at Twitter spend hours writing code just so their site/product can handle all the traffic. How it that fun?

[+] gte910h|16 years ago|reply
>Can anyone passionate about coding tell me where the fun is in coding?

You're doing a very unfun form of coding. IMO.

HTML/CSS/Javascript and many uses of php are about the equivalent of finishing a kitchen off in a home. Other forms of coding are like building the Eiffel Tower.

You may wish to try outsourcing the coding portions and taking on more volume.

[+] nopassrecover|16 years ago|reply
Yeah HTML/CSS/Javascript and PHP are some of the worst possible examples of "coding". I was forced to use PHP on a recent project and I felt like tearing my eyes out it was that bad and immature compared to other methods. It was like telling a formula one driver they have to drive through peak hour in a rundown 1970s ford and then asking if they like driving.
[+] robryan|16 years ago|reply
Depends what your using those tools to do and how your doing it. It's true that a lot of web development with some simple PHP to glue it together and give it some basic interactivity can be boring.
[+] nopassrecover|16 years ago|reply
"For a web application, the code might make the entire thing operate, but it never affects the user the way the design or interface does."

The way an iPhone slides, the way Google suggests what you're about to type, the way wikipedia can undo vandalism, the way Firefox merges your history and favourites and countless other things never affect the user?

It's like saying, "the PSD image never affects the user the way the design or interface does".

[+] amanuel|16 years ago|reply
I've been a programmer for almost 20 years. When I code into the wee hours of the night I usually do so without realizing that so much time has passed. I get lost in the act of writing the code.

But to get lost in the code you first have to find it easy to do so. I'd wager that someday after you have been doing it long enough you will find the comfort zone and you will start taking joy in coding.

Dislike, frustration and boredom are the taxes you must pay to learn anything new that is worth learning.

I recently chose to take cello lessons and I can tell you I dislike it at this point. Someday I will find the joy I see in others playing the cello expertly...so I practice each day looking forward to that day...and each day it gets easier.

Code or read someone's code on Github everyday. It will get easier and more fun.

[+] tptacek|16 years ago|reply
Any competent designer could come up with the interface for Dropbox. The code affects the user far more than the design or the interface ever will. Code decides what's possible. Design decides how what's possible will feel. Both are important. Some of us want to change what's possible for users. Others enjoy being knocked on our ass by how hard the problems are when you try to make the impossible possible.
[+] cromulent|16 years ago|reply
The fun is in the parts when you get to be creative.

There's plenty of boilerplate, repetitive, coding work out there. Sometimes, though, you get to wrap yourself around a juicy requirement and solve it, or add extra functionality that no-one asked for but someone will notice one day.

Same with writing - doing the same old client proposal for the 50th time is no fun, but writing a fun new blog post about an awesome discovery can be great. Same with lots of work, I guess.

There are two times when I really love coding - when a user expresses pleasure at using the software, and when a fellow coder expresses pleasure at fixing my stuff. If you build it right, it works on so many levels.

I wish I got to code more, and I dismay constantly at the idea that coding is something to be passed out to the lowest bidder.

So much time spent in meetings, an hour with 10 people discussing how a feature should work, when I know I could have just coded it up in that hour and they would have just said "Yeah, like that".

Coding is engineering, but in an accelerated form. Improve the performance of an engine by 10%, something the user could notice instantly? Hard work, big dollars, lots of resources, hard to deploy to many users. Improve the performance of an application by 10%? You might do it by yourself in 30 minutes. Lots of fun.

[+] Khao|16 years ago|reply
I am a programmer and I am very passionate about coding. I think it all comes from the fact that I loved mathematics and physics in school. I love solving problems, finding ways to reach your goal using your logic. On the other hand, I dislike designing because I am not good at creating something without a specific goal. I can't just think up ideas for design. However, when I am faced with a problem where I have a starting point and I have a target to reach (implement feature X into Y), I am thrilled by finding the logic behind making everything work like desired.

As for you, I don't think there's anything you can do to really love coding. You love designing because something in it thrills you I am sure. But if you cannot find something to thrill you in coding, there's not much to do about it. How about you use free frameworks to create websites instead? It would save you a lot of time on the coding part and you would have more time to spend on things you like. Try to find one that minimizes the parts you dislike about website creation and that gives you the most freedom on thing you like.

[+] alexwyser|16 years ago|reply
I too like finding the logic behind how everything works and how to implement a certain feature. And I can think up innovative (and effective/efficient) solutions to problems, But I find it very boring to translate that into lines of code.

For example, I can think up a way in which users will never have to register or login to individual websites, by storing all their information on their browsers, and I can find a millions flaws in that concept and solutions for all of them. And I have fun doing that. But I could never sit and write the thousands (or millions) of lines of code to make that work.

[+] kirvyteo|16 years ago|reply
It is kinda like music. Practice can be boring to most. But learning a new piece, and performing it, or composing can be fun. So is music boring? You are asking people to explain why they love music. No matter how much anyone love music, scales can be boring or playing the same piece the 1000th time can be boring. Coding is just an activity, like playing music, your purpose in coding it ultimately determines the fun.
[+] philwelch|16 years ago|reply
"For example, I like the concept of ranking a page higher based on how other sites link to it (ie Google's Pagerank), and would enjoy conceptualizing further improvements, but I would find it extremely boring to translate that solution into code."

As far as I've gathered, there are two steps to learning a foreign language. One step is when you think in your own language and translate everything over. The next step is when you think in the language. Enjoyable coding comes only when you think in terms of the programming language. But that only happens once you run into problem domains where you have substantial thoughts, and once you use languages that allow for those kinds of thoughts. Or, once you're used to one type of language and one way of thinking about things, learning to speak another is enjoyable as well. (Imperative vs. functional programming, etc.)

[+] Yaggo|16 years ago|reply
> Most clients just want a complete functional website not just a design. So I learned HTML, CSS and eventually Javascript, and PHP.

I think you are answering yourself. If your clients are your motivation to learn coding, it doesn't surprise me at all that you don't love it. Most of (good) coders learn to code because they are simply fascinated by the coding itself. They are not paid for it.

If graphic design is what you love, maybe you could try to extend your contact network to digital media / e-business companies that would buy your designs and do the actual coding for their CMS? I used to be a web frontend developer in a company that regularly bought designs from "trusted" freelancers.

Having knowledge of HTML/CSS/JS is one of the key requirements for a good web designer, so your learning is absolutely not misspend.

[+] rosejn|16 years ago|reply
If you don't know what's fun about coding, then you should just find something else to do that you do enjoy. Everyone I know who really enjoys hacking has been into it since day one, including myself. It's the general joy of wrapping your head around a problem, breaking it into bite size pieces, and then tackling them and getting psyched as you knock out working code. Initially basic logic constructs, iteration and recursion were enough to get psyched about, but later it is more about about the problems you are solving then the programming.
[+] jgg|16 years ago|reply
Doing my own thing in languages I like using was what made me enjoy it.

What you're doing now sucks. HTML and CSS are boring to write and, IMO, are better suited to being generated by a program than being explicitly written by hand. Vanilla Javascript isn't so terrible, but what you typically do with it is boring. PHP is terrible in so many ways I don't feel like naming them, and the type of thing you do with PHP is also fantastically boring.

You need to pick a high-level language that makes implementing things easy. You don't want to be bogged down in the details of implementation. You just want to think of something and have it work, right? Get started using Python/Lisp/Ruby/Perl/Whatevermakesyouhappy. Find a language that meshes with how you think and go with it.

Don't think I'm placing too much emphasis on language choice though. The important thing is to do something you want to do. Start writing the programs you want to see written, or that you think will be the most fun to write. I think the latter is more important in your case. You seem to enjoy the "thinking of" more than the "doing" part, a preference towards which I myself am inclined.

Good luck!

[+] gtani|16 years ago|reply
Python/Lisp/Ruby/Perl/Whatevermakesyouhappy.

Note all the hubbub about functional languages:

1. Common Lisp, scheme (ML/haskell people argue they're not fully FP).

2. Haskell and erlang have been evolving since the 80's into really powerful constructs.

3. Scala, clojure, F#, JRuby, groovy for JVM and .NET CLR.

4. OCaml, SML, some other ML's.

5. And also some you don't hear about so much: clean, dylan

[+] Ixiaus|16 years ago|reply
It's boring because you are "coding" and not "programming". Coding is just pasting together libraries and pieces of code that have been written by someone else; there is little fun in that. Even the passionate and brilliant programmers out there will tell you that.

So, what parts of a project when coding are boring and monotonous? Program it, don't code it; IOW, create a utility or tool to automate that aspect of it.

Instead of copy pasting your controller from project A to project B to get started, write a script that will generate the skeleton of that controller for you. Find the little nooks and crannies of your project that could be cleaner, clearer, or abstracted enough to reduce duplicity of effort.

Programming is thinking and coding combined (you always have to "type" something), coding has the thinking aspect removed, which is why it gets so boring.

As has been stated, you simply may not be wired for it - in which case you should sub-contract the programming work to someone who is good at it and enjoys it. That's how I made the majority of my living the past year, I was sub-contracted by a designer who managed his own clientele.

[+] dbz|16 years ago|reply
I do a lot of coding. Hours and Hours a day. A lot of that coding is for other people. I like coding, but there is something else I like. I like when people receive my code, take a look at it, and say "Wow. Erm. Thanks."

I like being appreciated.

I like thinking about how I am going to code something, and then doing it in an efficient algorithm; I like feeling as if I did something clever. I also like how I view everything in life differently because coding is a huge part of it.

The other day someone asked why I always respond to their texts 'no matter what,' and I said, 'well, people with a friendship level of 1 or higher always get a response.' They asked me to give them my friendship levels, so I had to make up a system on the spot- I said 'lowest should be (-2), wait no- (-1) so I can use bitwise operators,' and then structured the system around the use of bitwise operators just because I thought it was cute.

The fun in coding is the same fun that you receive in web design, however, I like to think that coding gives me more pleasure in more areas because I can use concepts I learn in everyday use, like ranking friends.

[+] junkbit|16 years ago|reply
The way that I taught myself as a nipper was games programming. Even the smallest graphics demo can be very satisfying as you can tweak them till your hearts content; endless variations and incremental improvements.

I had to do it by hand in C and Asm (mode 13h ftw!) I'd imagine it's much easier now to start with OpenGL, XNA, Unreal Engine and higher level languages.

Also I never had screencasts. Or the internets.

[+] drcode|16 years ago|reply
A computer program is a little world you build where you decide the rules and can see what happens. More than that, the rules are followed perfectly and you can observe your world thousands of times and it will always do exactly the same thing.

I think programming is the most amazing thing I've ever experienced (well, maybe second-most amazing ;-)