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?
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.
Yeah HTML/CSS/Javascript and PHP are some of the worst
possible examples of "coding"
So sad to see similar statements. I am the only one who loves working with
HTML and CSS? I wouldn't say I love PHP, sure it is not the best language out there, but it is not that bad. Unless you never bothered to check
out what's in PHP 5 (or 5.3) and keep going with PHP 4 code.Don't dismiss HTML. Sure, it is not programming, but so often good programmers produce crap HTML maybe dismissing it as trivial and not worth learning properly. However producing page in HTML and CSS involves a lot of similar activity: you evaluate the whole system (layout) you have to build, identify different parts, decide how to code them in proper, semantic way, avoiding unnecessary elements, then style it all in CSS, maybe enhance with some Javascript. At the same time you don't forget about progressive enhancement and graceful degradation, cross browser support (this is less fun part).
I think the task of splitting that finished visual picture of design into proper HTML structure and CSS decoration is the actual difficulty some are facing, but mistakenly thinking thats the problem with CSS.
And now, with HTML5 on the doorstep and all the fun CSS3 allows front-end coding is even more exciting. My recent interest — client-side optimization adds to this excitement. I learned about programming by reading code in some magazines (had no access to computers till my first year at university), now I've been coding for 20 years, doing web work for 14, went all the way from first HTML being rendered in Netscape 2 through table layouts (oh those nested tables to get 1px border in IE and 1x1 GIFs…) to CSS3 layouts with fun effects rendered in WebKit nightly. I am equally well versed in both client side and server side development, but I'd say that even after all these years I still think client-side work is a lot of fun.
I initially was attracted to web because I enjoyed learning and trying a wide range of technologies: from working with graphics in Photoshop to setting up and configuring Apache. Still feeling the same.
But it's actually not so bad if you just want some things done and for me I actually started to enjoy sporadic encounters with it. I switched from my own hacked soup to kohana and I found jquery and them alone made it much better.
And I think you're missing context a little, I think javascript is a wonderful language and you can do a lot of "real coding" with it. I guess you mean this stereotypical, boring, web development which I agree is extremely loathsome.
PHP is more like driving a modern automatic. No, it's not as fun as a six-speed, but it is fairly relaxing.
BASIC, now that's like a rundown 1970s Ford.
Whats the best way for a beginner to learn that (I know by practice, but which books, websites, tutorials, and in what order) ?
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.
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?
What's your idea of fun? Surely in this context fun doesn't mean a beach side party with tanned, topless girls. Writing those thousand lines of code which runs Google is fun in the way that it's:
1) Difficult. Mundane and simple jobs irritate the sharp minds. Challenging yourself is very important in the long run. You think the linux kernel developers can't find higher paying jobs at the so called enterprises where they can be PHBs? Why do you think they don't?
2)Sense of accomplishment. It takes a lot to be at the top and even then it's transient. It takes a lot of work to continue to be there.
> Even more so when the code isnt for a cool new feature but for a mundane fix.
That's contradictory reasoning. Mundane fixes won't be thousand of lines. You are heavily mistaken in what constitutes cool features. If I am the one implementing something, more than about you, it's about how I feel about it. I can bet you didn't notice that Google went cooler with their Caffeine search index. It promises 50% fresher content which is a large feat to accomplish, regardless of whether the consumer notices the coolness.
> 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?
It's fun in all the ways any creative, innovative task can be. It doesn't have an "one size fits all" solution. It requires out of the box thinking, challenging the existing conventions, innovating existing solutions, working on NP complete problems...
At this point of discussion, I am really interested in knowing when you said "programming isn't fun", what notion of yours of fun did programming offend?
It's a personal offense to have something that could work at, for instance, 20MB/s, only performing at half the speed. Sometimes management has to step in and and put a stop to that if it's not worth the effort.
Could be worse - seems athletes put many hours in shaving down a couple hundredths of second in races, etc. Or designers in getting that last pixel perfect ...
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.
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?
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.
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.
Programmers think up solutions in code. If you stick with it you'll probably eventually come to realise this.
The project is a compiler to produce serialization and deserialization classes from a datatype description.
I have a lot of fun, because of the following things at the moment:
Sometimes, code approaches a level where the code itself is either clear beyond anything or where the code actually teaches you something about the problem you are solving. For example, in an abstraction of access paths through C datastructures (something like foo.bar->baz), my constructor calls for the various "steps" on the path look like: super(previousPath, "->", accessedMember). This makes me happy, because it is just so clear. You take the path until now, put a -> after it and put the accessed member after that to get the new path. Or, in other words: super(previousPath, "->", accessedMember).
In other parts, I put up some work to get fluent interfaces and internal domain dependant languages going. Parts of the code suddenly look like: BeginWithDerivingSerialiser().andThen(padToByteAligned).andThen(minimizeDuplication).andFinallyEmit(C89) or in another part: return CompositeHash().whichDependsOn(members).andOn(name).andNothingElse().
These little things, coupled with the knowledge what hassle this was before these little DSLs makes me smile everytime :)
Furthermore, my little compiler is growing in visible steps. I have adopted an iterative development style by now. That means, I know inputs for my compiler which are not handled properly yet, and I know what I need to solve to be able to handle this type. From this knowledge, I can pick certain inputs to solve which require a bit more infrastructure to work. On the other hand, once I implement the next input, it is really fun to do so, because I see: This works, that works, I dont need to care about that, because this abstraction does that for me and so on and so on. This is fun, because I can see how a previously large problem shrinks in simple 1-2 day steps until it it is easy to solve and then I solve it and my compiler is stronger now :)
Third, as you said, code is a fun puzzle. Solving the issues at hand is just the first step. Sometimes it is complicated and you need to think a day about the problem, sometimes an algorithm is just known. But after that, nudging and shifting the code until it looks and feels really lean and elegant is very, very interesting. Maybe extracting this into a method works? Maybe turning these loops the other way works? Maybe inverting that if makes it nicer? Who knows! Lets try! Maybe it will become one of thos masterpieces :)
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!
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
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.
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.
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.
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".
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.
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.
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.)
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.
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.
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.
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.
I think programming is the most amazing thing I've ever experienced (well, maybe second-most amazing ;-)
What's the difference? In my experience, finding a solution to a problem with a good programming language is easier than trying to do it entirely in my head.
That said, I don't count PHP as a particularly good programming language. Certainly not one I'd use if I could avoid it :)
sigh. interface=code.
the fun is taking an idea from your head and putting it into reality. This is kind of like asking where the fun in painting is cause it takes so many strokes to fill a canvas.
However, I have yet to find anything that matches the feeling of having what looks/feels/appears to be an insurmountable task ahead of you - a problem that someone says cannot be solved, and then you come up with the most creative solution to not only solve the problem, but do so, quicker, cheaper and easier than anyone else ever has.
Is it that you have to redo and reimplement stuff again and again?
Is it that you know the algorithm but it is so complicated to implement it?
Is it that it does never really work like you intent it right out of the box?
Is it the debugging part?
Is it that the things you are implementing are just trivial things (which you maybe would expect to work just automatically and you don't have to care about this stuff in a perfect world)?
Or what else?
Many of these things are also maybe related to the language you are using. You should look a bit around and dive into other languages. You will find it amazing how trivial and easy some things can be done there. It could be that 1000 lines of boring PHP code become one single line of code in another language.
Sounds like you're primarily talking about the backend PHP coding then? One option already mentioned is to learn a new way to develop backends that you find funner (ex. Python).
The other you should seriously consider is to team-up and form a partnership with someone who enjoys programming more. This way you focus primarily on User Interface which you seem more passionate about and have a friend whip out the backends. You will be able to tackle larger more exciting projects and your prior programming knowledge will make it easier for you integrate your design work with the developer's.
To enjoy it, you also need to tie the effort put in to significantly rewarding output. You have emphasized the design, interface, and user. It doesn't take much to see the code as important to these things in a direct and easily manipulable way. For instance, the implementation of AJAX-y stuff on a previously static page has huge implications to the user. A few lines of jQuery can bump the feel of the page by a decade.
Conversely, when you're dealing with a teetering, creaky code base and writing feature D means rewriting A, B and C, that is not so much fun.
(I find PHP to be extremely un-fun as well. Try Python or Ruby - languages written by people with more of a clue.)
"The problem is that I dislike practical work - making or fixing things with my hands. I find it to be very boring. Where's the fun in messy, practical things?"
Different strokes for different folks. If you don't find programming inherently interesting, it's probably not your schtick. It sounds like you might prefer SEO, content architecture, or a similar related discipline that's not code based.
Maybe the problem is that you're not completely comfortable with the programming language?
Coding gets interesting when you're solving and implementing problems like PageRank, which you're not doing (I'm assuming).
Without the back end the site wont do anything... therefor your "design" is useless...
I believe ideally everyone should do just what he like the most =)
Part of it is the reward from solving difficult problems or puzzles. And with the risk that you might not be able to solve the problem. Part of it is the creation of something that didn't exist before. Part of it is, when you are in the zone, time disappears.
Some of the problems in this business are pretty intractable, or at least appear that way. I remember once when I was younger I got this idea in my head that I wanted to solve algebraic problems by programming. At the time, I was working on the IBM 1800 (architecturally equivalent, instruction-wise to the 1130) (like that really tells people anything), which was a 16-bit accumulator-type machine with maybe five registers. I worked on this for maybe a month, to the point where I felt mentally strained. So I backed off, never solved it. Later, I heard about maxima. I wasn't even close.
But that seems to be the rule, rather than the exception for things I have been involved in. I mostly start things these days that I have no real clue whether or not I will succeed. Real-time acquisition of electrocardiogram data? We certainly didn't know the horde of sub-problems we were going to encounter, and certainly did not stand around enumerating the risks. We just forged ahead. The Matasano challenges? Talk about staring at a web page for a couple of hours with no clue. (That worked out well, as I now work there.) (And despite what tptacek self-deprecatingly says, he is marvelous to work with and work for.)
Compilers? Didn't you ever wonder "hmmm, I wonder how this works", or "why does FORTRAN have this clearly stupid and trivial limitation on elements on the DO loop?" I got a fire in my belly about that one for sure. But I had no idea or expectation that this would lead to a career.
Or the google code challenge. I got it in my head to try this out, kind of to flex the muscles. That was an education. But I learned something.
I know that there is a lot of talk on this forum about "fail early, fail often". I think that perhaps the original intent of that admonition is "don't stand around enumerating risks. Dive in, push forward, adjust, repeat". So in the words of the protagonist in The Art of Racing in the Rain, "your car goes where your eyes are". To translate, "don't look at the wall, look at the track".
So any programming ability can give enormous leverage in many areas of modern life. Full-on programming ability more so.
If you don't have a deep curiosity about how this complicated stuff works, I am at a loss as how to describe that to you, as that is where I come from and where I live.