Ask HN: Where's the fun in programming?
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?
[+] [-] scott_s|16 years ago|reply
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
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
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
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
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
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
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
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
[+] [-] robryan|16 years ago|reply
[+] [-] nopassrecover|16 years ago|reply
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
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
[+] [-] cromulent|16 years ago|reply
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
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
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
[+] [-] philwelch|16 years ago|reply
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
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
[+] [-] jgg|16 years ago|reply
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
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
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 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
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
I think programming is the most amazing thing I've ever experienced (well, maybe second-most amazing ;-)