
Web Programming Is Hard  - grayhairmomma
http://www.shubharamani.com/wordpress/?p=31
======
patio11
I periodically think "Man, I really shouldn't be getting paid for this. Any
idiot could stick these two APIs together."

In my more sensible moments, I remember that that idiot only needed to know
HTML, CSS, the DOM model, Javascript, jQuery, HTTP (mostly headers and status
codes), Ruby, Rails, basic MVC design, Oauth, SQL, SQL performance, five-ish
APIs to support the two that needed integration, how to configure and maintain
a server, system architecture, a bit of security, etc.

[There's also object oriented programming, class inheritance, polymorphism,
algorithms, time complexity, discrete math, data structures, imperative
programming, and a few other things I forgot the first time around. Lest we
forget, we might take these for granted because we've been programming since
we were $ARBITRARILY_YOUNG, but to most people these are just black magic. My
girlfriend, a smart cookie, asked to see "how I made the phone ring" and,
after I showed her the code that did that, told me it had never even occurred
to her that every program she's ever seen was once a collection of special
words placed in a particular order.]

After that, it was pretty much done, except for the marketing.

On the plus side: you can learn one or a few of these things at a time, and
get more comfortable with how deep the rabbit hole goes as you go along. I
coded my website in static HTML written in Notepad with no JS or CSS, crikey,
only four years ago. (And my brain still recoils at how much better I'd have
to get to do e.g. web scale work.)

~~~
mechanical_fish
It's like maintaining a skyscraper built out of Tinker Toys.

What I wonder is: Does the following sentence run through the head of every
expert in every field?

 _Man, I really shouldn't be getting paid for this. Any idiot could [do X]._

It certainly felt true of most of my day-to-day work in graduate semiconductor
electronics. It felt true of a lot of biology research. My conclusion is that
there are a mere handful of days in your career when you will have to do
something so hard that you will _feel_ smart about it. But most of your career
as an expert will be spent doing stuff that you know so well that it's kind of
routine, even if it is totally esoteric stuff that only you know how to do.

Feynman said it well when he teased the mathematicians: "Mathematicians can
only prove trivial theorems, because any theorem, once proved, is immediately
seen to be trivial."

~~~
dboyd
"It's like maintaining a skyscraper built out of Tinker Toys."

Actually, it's like maintaining a skyscraper built from steel, concrete and
glass integrated with complex HVAC, plumbing, electrical and elevator systems.

~~~
elptacek
"Actually, it's like maintaining a skyscraper built from steel, concrete and
glass integrated with complex HVAC, plumbing, electrical and elevator
systems."

Adding, "Designed by a committee. Of MC Escher fans."

~~~
kingsidharth
Designed by a committee?!

It never works!

------
dasil003
As a web developer I appreciate the concession from an embedded systems
programmer that I am in fact not simply a monkey, but the quoted section
probably goes a bit too far.

For instance, terrible UIs on the web are just as common as terrible UIs in
GUI applications. And making a cross-platform GUI application that looks good
on all platforms requires familiarity with tools specific to each platform,
which is much more involved than learning browser quirks.

The hardest thing about the web is probably how fast it moves, but that's also
what makes it exciting.

~~~
andywood
I did C and C++ programming for more than 10 years, before suddenly delving
into serious web development only 3 years ago. I soon realized that I had
vastly underestimated how deeply technical web development is.

But the reason was simply that I had formed my opinion back in ~1998, when
"web development" really did mean just HTML, and maybe some roll-over script,
most of the time! Being a systems programmer, I simply never had occasion to
update my perception, as "web development" dramatically evolved while I wasn't
looking.

------
ibagrak
I am not sure which particular flavor of "embedded" the author is referring
to, but the argument, in my view, is completely off the mark, and here is why:

The main challenge of embedded is that you are in charge of controlling and
managing everything. The developer is closer to the hardware and the cost of
things breaking is far higher because you cannot for one second forget about
some part of the technology stack that's below you. Everything is suspect, and
nothing can be ignored.

On the web, you get used to your automatic garbage collection, your GUI
toolkits, your nice browser sandbox with infinite memory that gets
automagically replenished, your in-browser JavaScript debugger and all that
jazz. You get to enjoy none of it in the embedded systems I've worked with.

Fixing embedded systems in the field is freaking hard, so the quality of code
matters is in a completely different dimension from what's on the web today.
Now, I am not talking about Linksys router or your iPhone. That's just a
fraction of "embedded" devices. I am talking about things that don't have a
TCP/IP stack (or any connection to the outside world), don't have a GUI, and
are installed at the contractor rate of $1,000/hr and must exist in the field
for 10-20 years. There are millions of these devices shipping every month, and
they are all around us.

Are you telling me these systems are easier to design than a webpage that can
be twiddled with at your whim a million times a day?

Don't downvote just yet! Just so you know where I am coming from:

I am a product manager for a 100K LOC embedded stack that runs in 128K of
flash and 8K of RAM. It's all C code, no OS, no toolkits, no MMUs, no garbage
collection and no dynamic memory allocation. These devices get 15 years on a
single battery and go inside your house. I've also had good exposure (not an
expert) to the online technologies the author mentions. Yes, things may be
tough to learn (I don't actually believe they are), but the web is a lot more
forgiving of mistakes too.

~~~
Murkin
You won't get much upvotes as the vast majority of HN readers appear to come
from the Web world.

And as someone who made the switch from embedded to web,I find web much easier
in 90% of the time.

Sure its hard to learn CSS, but I want to see you learn how to handle Linux's
buffer-heads or program a custom dma chip.

~~~
grayhairmomma
You have a point. Sure, embedded problems can be very tricky and difficult --
much more so than web stuff. But most embedded folks don't solve problems of
THAT complexity in their day jobs, just as most web programmers aren't
implementing Machine Learning code during their day jobs. The embedded
problems you're discussing are usually tackled by the elite, or by highly
specialized Linux kernel types -- and no, I'm not elite. Many employed
embedded people, believe it or not, have never worked with DMA.

------
verysimple
One common mistake when one tries to tackle the web is to do it all at once.
What you need:

\- get familiar with HTML and css. That is, learn the basics, their purpose
and how they interact.

\- get familiar with some basic JavaScript and how you use it on the browser.

\- learn one of the prominent web languages for the server-side. Python, Ruby,
PHP, etc. I used to recommend PHP as a first language because compared to
other languages, it was ubiquitous amongst hosting providers. Nowadays, I
recommend against, especially if you already have some programming experience.
Python and Ruby also have a decent offering and they have the added benefit of
a community that generally promotes _better_ programming practices than PHP.

Having an overview of the entire development process, you should now be able
to pick one area where you'd like to expand. Being a programmer I suspect you
might pick either server-side or browser scripting (JavaScript). Stick to one
at first and learn it well. When I started the web I rarely did any front-end
at all. I concentrated on the server-side and was aided by some CSS and
JavaScript coders. Likewise, I often worked with JS programmers who didn't
want to know anything beyond the realm of what they were doing. It's a
symbiotic relationship. \- It may be tempting to do everything vanilla at
first, but quickly switch to using a framework, they're often packed with lots
of best practices. They're like training wheels, you can always take them off
later when you feel confident.

As you get comfortable with one field you can expand on others. After years
playing in the server, I'm only now expanding my client side skills. Also,
beyond technologies, other areas of interest that can expand your overall
understanding and web expertise, are interface architecture, usability and
various other optimizations. As you go, you'll stumble upon many.

~~~
nathanwdavis
I would add one thing: get to know HTTP. Even a basic understanding will
prevent you from making costly mistakes.

~~~
astrofinch
What are a few costly mistakes that can result from lack of HTTP knowledge?

~~~
johnny22
not designing with REST in mind

~~~
DrJokepu
Why is that a costly mistake? REST is great but it's not the only way to do
web development. Read up on continuations, for example. In fact, this very
website is using continuations (check out how paging works) and it doesn't
seem like a costly mistake.

------
jemfinch
Yes, it's hard. _Unnecessarily_ hard, which is why I hate when I have to do
it.

The complexity of web development is not intrinsic to the problem, but an
extrinsic reality imposed by widely differing implementations of a number of
overengineered technologies.

~~~
jordanlev
Well, if you expand your definition of "the problem" to "how do we enable
people all over the world to interact with this information on any computing
platform over an untrustworthy connection running on low-end hardware", then I
think the chaos and technology soup is a little more necessary to things being
where they're at now. So no, it's not technically necessary, but
politically/economically it is.

------
newobj
First, she thought implementing a linked list during an interview was hard.
Then, she says that web programming is hard. And I'm not saying it's "easy",
but talk about blogging yourself into a professional grave?

~~~
grayhairmomma
I never said linked lists were hard. I said that it's not necessary to know
how to reverse a linked list from memory -- from scratch. I can look it up and
get to it right away.

~~~
sofuture
You know, at one point I thought that as well. I felt, that as someone who
programs almost solely in 1) C# 2) Erlang -- "thanks I've got a stdlib for
that".

And then I actually thought about what it takes to reverse a linked list for a
second.

And immediately realized I will never, ever hire someone who can't regurgitate
or reason how to reverse a linked list "from scratch" within a few minutes.

~~~
capstone
To play the devil's advocate, and I am speaking specifically within the
context of web development, what is a practical example of a linked list?

~~~
jules
Would you hire somebody who can't compute 2+4? For the same reason you
wouldn't hire somebody who can't reverse a linked list, even if the actual
reversing of the linked list doesn't come up in the job.

------
edw519
_But upon studying CSS, HTML and Javascript over the last month, I can
honestly say I’m humbled._

About half the time, I feel humbled whenever I encounter some new technology.

The other half, I wonder why anyone bothered.

The trick is knowing which half is which.

------
groaner
As someone who has only dabbled in web programming and done webdev-ish work at
a company that doesn't "get" the web, I was in shock to see how much I didn't
know that was really the bare minimum:

[http://stackoverflow.com/questions/72394/what-should-a-
devel...](http://stackoverflow.com/questions/72394/what-should-a-developer-
know-before-building-a-public-web-site)

~~~
geekfactor
I've come across a few of those "bare minimum you need to know to do X" posts
on SO and on one hand I think they can be great pointers to the best reference
material in a given field.

On the other hand I worry that these kinds of lists promote an impractical
approach to mastering a field that is at odds with being a "Hacker".

Think of it as being like Waterfall Subject Mastery versus Lean Subject
Mastery. In Waterfall Subject Mastery you try to anticipate what you need to
know up front, learn a bunch of stuff, then try to apply it to a problem.
There are two problems with this model: First, you really don't know what you
need to know. Second, you won't really understand it as well in the abstract.

With Lean Subject Mastery OTOH, you pick a problem and crank on it until you
run into a wall. Then do some learning until you can overcome the wall. At
first the walls will be many and frequent. But over time your baseline of
competency is increased and you actually become productive in the new
technology.

What's great about the lean approach is that when it comes time to learn about
a specific topic, you have a much better context for understanding it, and
thus the effort to learn it is greatly reduced. And because you have an active
project, you can put your learning into practice more quickly and thus
retention is increased.

The secret, though, to making LSM really work well is to commit to learning _a
bit more_ than just what you need to get over the wall. This is the difference
between truly learning and being an eternal cargo culter. Don't just start
banging against the OAuth library; try to understand how OAuth works. Just do
it in the context of a real-world problem.

Don't get me wrong. I'm not against education and learning for learning's
sake, I'm just more for efficiency and getting stuff done.

~~~
astrofinch
Another advantage of just-in-time learning is that forgetting is less of a
problem. You don't have to worry about forgetting in between the time you
learn it and the time you use it, and the fact that you've used it both helps
you understand it better and gives you a working example to use as a
reference. (Am I the only one who looks at their old code to see how they did
something?)

Probably the best is to sort of skim over the stuff you're supposed to know at
first and then refer to it when you're reminded of it in your everyday work.
Like the breadth-first approach Steve Yegge advocates for math: [http://steve-
yegge.blogspot.com/2006/03/math-for-programmers...](http://steve-
yegge.blogspot.com/2006/03/math-for-programmers.html)

The only problem I've found with this approach in practice is that skimming
makes me antsy.

------
PhrosTT
Web Programming is nigh impossible for 1 person any more.

To build a legit website:

1\. Mockup a pretty design in photoshop. Use color theory, design principles,
UX theory, typography skills, etc. 2\. Convert the design into HTML/CSS. Make
it degrade gracefully, it should be cross-browser compatible, validate, be
lightweight, meet accessibility standards. 3\. Add unobstrusive javascript if
you want, site should work without it. 4\. Run YSlow, convert all images into
sprites where possible, condense/minify your JS/CSS. 5\. Do SEO tweaks and
best practices. 6\. Oh wait, does the site display well on iPads? build a
mobile version and a tablet version.

...

We haven't even gotten past the front end. Learn good db design, code your
middle tier. Choose or roll your own framework. TONS of work.

Once it works, go back and secure everything for the OWASP10 and other
potential holes. Also make sure it will scale gracefully.

Maybe you should optimize your cacheing scheme? Maybe tweak your php config so
it runs faster.

AGhghghsdhdshf%@!$^#$ it never ends!

~~~
gbog
With all due respect, putting OWASP at the end is a big mistake, you may have
to refactor a lot to secure your code.

------
pocoloco
I'm currently working on a set of SOAP web services using tomcat, cxf, mysql,
and hibernate among others.

I decided to do a switch from embedded to web development about a year and a
half ago after being laid off. My paycheck is smaller but I now work on a
whole new set of problems. After working about 10 years in embedded and
everything around it, I felt that I needed a change. It was as if I was
solving the same problems over and over. And don't get me started in the state
of the tools. I remember thanking the heavens when we switched platforms to
PowerPC and ELDK.

At first I did not know were to start in web development. But I did decide to
concentrate on the back end quite early. At first I approached each technology
separately, mostly because of my ignorance. For example, I saw that tomcat was
very popular, so I decided to take a look into it. But I quickly realized that
I needed a birds eye view of the whole web service stack and not its
individual components. At least not yet.

I started to look into frameworks. After realizing that there are lots of
those and that I learn about a new one almost every week, I had to narrow my
search. I've been working and learning Groovy on Grails which is all based on
the JVM since then. What sold it to me was the fact that Groovy is a language
very similar to Python, which I know, and that Grails is a web framework that
integrates all the necessary technologies to get a decent site up and running
thanks in big part to the amount of plugins available for it.

Like grayhairmomma says, it's a humbling experience.

~~~
weej
Interesting. I'm considering doing the exact opposite (10 years web/server-
side development - switching to embedded). Currently, I'm taking some
extension engineering classes at UC Irvine while still working full-time.

Any ideas on where to start to get my foot in the door in the embedded world?
I was thinking newbie kernel bugs and eventually Linux drivers.

~~~
pocoloco
The linux drivers idea is good particularly if you want to learn about
communication with embedded system. But there are other approaches too. You'll
need to ask yourself how low-level do you want to go. For example:

Do you want to work on a system that has an OS, utilities, filesystem, etc
such as the ELDK[1]? Or a little more stripped down with only the OS such as
FreeRTOS[2], uClinux[3], or uC/OS[4]? Or even lower and use no OS at all. Use
instead a foreground-background system--basically a forever loop.

Another way of doing this is to select the hardware first according to what
you would like to do. You must keep in mind that you will most likely not have
access to all the debugging tools that you're used to. This translates into
very expensive compilers and debuggers for the high end hardware. But these
days it seems that there is something for every taste and wallet.

Two particular development kits that come to mind are Arduino boards [5] and
TI's MSP430 development kits [6]. I find the wireless watch development kit
[7] particular interesting. I haven't used either.

If you see something that you like, try to find the corresponding development
kit that comes with a development board, cables, and software.

A good place to start is by checking DIY or hacker magazines such as Make[8].

I hope this gives you an idea.

[1] <http://www.denx.de/wiki/DULG/ELDK> [2] <http://www.freertos.org/> [3]
<http://www.uclinux.org/> [4] <http://micrium.com/page/home> [5]
<http://www.arduino.cc/> [6]
[http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=9...](http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=95&tabId=140&familyId=342&DCMP=MCU_other&HQS=Other+IL+msp430)
[7]
[http://focus.ti.com/docs/toolsw/folders/print/ez430-chronos....](http://focus.ti.com/docs/toolsw/folders/print/ez430-chronos.html)
[8] <http://makeprojects.com/>

~~~
weej
In most of my course work to-date it's been with no OS and just a while
(forever loop) driven by interrupt service routines.

Currently, I use an AMTEL AVR 2560; however, I've heard good things about the
TI ones.

I honestly don't know where I want to focus yet. I figured I'll continue to
take some more classes to get some breadth on the subject. Once I have a
better idea of what peaks my interest I'll jump into the depth for a more
specialized approach when I can make a better educated decision.

Good call on Make. I've been meaning to check it out, but haven't gotten
around to it.

Thank you for all the resource links. I really appreciate your response.

Cheers!

~~~
pocoloco
I'm glad that you like the info. I see that you're working on very low level
stuff. Can you go even lower and deal with sensors, resistors, capacitors,
opamps, and the like? These days there is a reference design in white papers
somewhere so you don't need to be and expert in electronics to get away with
something that works. You just need access to the tools such as multimeters
and oscilloscopes.

I'm thinking sensor networks. If you can, then I would recommend to try
something using the MSP430 for example, given its low power requirements. Take
the microcontrollers and pair them with different sensors (eg., IR,
temperature, etc) and an RF module such as xbee [9] in order to create a mesh
network [10]. You'll need to work on the protocol and management side too-- a
linux box somewhere with a database but that should not be a problem for you.
But I realize that is more of a team project given the amount of work.

I mention this because I see some activity in this field and lately I've seen
several articles, mostly in The Economist, that talk extensively on how sensor
networks and the system that manage them will encroach our daily life. So if
you can't figth them, might as well join them.

[9] [http://www.digi.com/products/wireless/point-
multipoint/xbee-...](http://www.digi.com/products/wireless/point-
multipoint/xbee-series1-module.jsp#overview)

[10] <http://en.wikipedia.org/wiki/Wireless_mesh_network>

~~~
weej
I'll be taking a DSP and RF class soon - so, yes, I'll be able to go lower
eventually :-) My background is in CS with the bare minimum of EE. For the
most part, this is all new to me.

I'll take a look at the sensor networks. Thanks again.

------
rbranson
Working for any primarily software driven company is going to be challenging.
Working in an expensed IT department is what most developers do, and the work
is pretty pedestrian. This seems to provide the most clear line of delineation
in software development.

------
MarkPNeyer
They're hard for different reasons. In my experience, games, scientific
computing, trading, and 'real' web backend work (i.e. not 'move this shit into
the database' but 'make the database scale to a million users') are hard
because they challenge you to solve difficult problems. Web frontend and
simple backend work are hard because of the pain in the ass of managing all
the different languages and paradigms involved.

------
arohner
Yes, Web Programming can be hard, but it's probably harder than it needs to
be. The whole ecosystem of HTML + CSS + JS + IE6 is a mess.

Something along the lines of Cappuccino will help a lot. Then you're "only"
left with the problems of UI/UX, scaling, security, A/B testing, big data and
marketing.

~~~
jordanlev
Until you want to do something new that Cappuccino developers didn't think
of... now your ecosystem has expanded by 1 to HTML + CSS + JS + IE6 +
Cappuccino :)

------
iamwil
It's not the sort of thing we should have pride in--that web programming is
hard. For me, it goes to show that web front-end programming has a long way to
go to make it better for developers.

We're still looking for X to do to front end web programming that Rails did
for back end web programming.

~~~
wh-uws
I believe Jquery is doing at least some of that

------
tibbon
Conversely, I think traditional programming seems really hard compared to RoR.
I have to think about _memory_? I have to tell the computer what the variable
type is? What are all these funny characters and symbols? I can actually crash
the computer with this? What is this compiler thing and all these funny
options?

I'm (slowly) trying to re-learn C/C++ after getting decent with Ruby and
honestly it just hurts. Few things I do need speed or system access on this
level. The verbosity is painful, and you need so much (ugly code) to do so
little.

------
jallmann
Front-end web work, at its basic level, is not hard in the traditional "let's
go shopping!" sense, but what I find maddening is how unintuitive some of it
is (CSS, I'm looking at you). Then you have to worry about how broken or
incompatible browsers are. I think "pain in the ass" is a more apt term.

When you get deeper into the UX, things like A/B, optimizing load time,
scaling the backend, etc, and that is where it becomes less tedious and the
domain knowledge required is more respectable.

------
jarin
It seems like there's always been a little bit of a rivalry between compiled
language developers, web developers, and network administrators. Having done
all three at high levels, I can say that in my experience web development (top
to bottom) requires the most diversity of knowledge, which also makes it the
most enjoyable to me. At any rate, I'm going to show this to my game developer
buddies next time they give me crap about "working with toy languages"!

------
Aegean
Web programming is hard but not necessarily intuitive. That's what I dislike
about it. Its a heap of different technologies put together in unstructured
fashion. This applies to individual technologies as well, take CSS and see how
unintuitive a syntax it has.

Web programming is popular because it drives the web. I don't necessarily find
it an intuitive programming experience. This way of thinking is the biggest
obstacle ahead of the likes of me (hackers for pleasure) for business success,
i.e. primarily focusing on what's interesting from an engineering perspective.
This approach is sure to fail in business because people always care about the
end result. Technology is just a tool to get there.

I guess part of the problem is when you study computer science or engineering
in university, you try to learn the best engineering approaches out there and
improve on your engineering skills. Then you face real life where the result
matters. I cannot really say CSS or javascript is the best technology out
there, but they play a crucial part driving the web.

------
petercooper
It was funny to read this as I now find client side development ridiculously
hard (I last did it frequently > 10 years ago) and difficult to get my head
into, whereas even large scale Web development feels quite surmountable or
even easy to me. I think it merely proves that what you keep doing, you
eventually find natural.

------
csomar
I think the main difficulty for Web Development is the separation between the
Front-End and the Back-End. In Desktop development, the two are linked
together, so if you want to handle a button click, you do that in the back-end
and no other hassles.

However, for Web Development, you'll need something called HTTP POST or GET
and you want to improve it with AJAX (and make sure that it still works even
without JavaScript). The user input become sensitive, and you have to take
into account many other thing to secure your server.

Still, Web Programming is fund. Having a server that answer requests is funny,
for me. The author found Web Programming is hard, because it underestimated
it.

------
jacquesm
Yes, web programming is hard. The amount of techniques and the haphazard way
in which they interact (jsonp??) are terrible compared to 'real' software
development in a controlled environment.

But you really should be grateful for that. If it were easy a large number of
us would not be earning what we do because things that are easy tend to
devalue quickly.

Remember when being able to write HTML would net you $80 / hour?

Ten or fifteen years from now, when web programming is 'easy' you just might
long for the times when web programming was hard but you could basically name
your price if you were competent at it.

------
fjabre
Yes - it is indeed hard to make something do what it was never intended for.

------
curiousyogurt
I made the jump from Objective-C/Cocoa development to web app development
after Startup School this year. Two things surprised me when I really got down
to coding my initial project. First, the sheer number of technologies involved
in developing my web app. For me, that's Ruby on Rails, Javascript, jQuery,
Ajax, HTML, CSS.

Second, the lack of integration between the various technologies was
surprising. I often knew what I wanted a particular page to do, and the
solution was to learn a new technology, and then figure out how to shuffle
data between the new technology and those technologies I was already using.

Integration problems also crop up in the form of mismatches between
technologies. For example, I use bignum integers in my code; but ran into all
sorts of interesting problems: Ruby/Sqlite work fine; but as soon as I
uploaded the app to Heroku, I uncovered issues with how these integers were
being stored in the PostgreSQL. And Javascript needs special routines if it is
going to handle bignums. I haven't encountered this sort of mismatch on the
desktop.

That said, now that I've got a working app, I think the learning curve was in
some ways (though not all ways) less steep than the desktop. A couple of
reasons for this, I think:

1) The communities share code prolifically. It is not that there is no code
sharing going on in desktop development, but code sharing seems much more
prevalent in web development. As a new web developer, this makes my job a lot
easier not only because I can just plug in code, but also because I can read
that code and learn from it.

2) You can get minimal results quite quickly, which is very encouraging.
Again, you can get minimal results quickly on the desktop, but the standards
are different on the web. In my experience, a desktop app needs a lot more to
be minimally functional than a web app, probably because the level of
complexity is different. Yes, web apps can be just as complex as desktop apps;
but I think a minimally functional web app is in many ways less complex than a
minimally functional desktop app. Just think about all the menus, help files,
and other accoutrements you need to get a desktop app minimally functional;
web apps can get away with less.

3) The web technologies I depend on are more modern. Compared to
Objective-C/Cocoa, Ruby is like a dream. Javascript and less so, but only
because it seems more like what I'm used to on the desktop. What can I say, I
like syntactic sugar and the readability that comes with it.

So, perhaps web programming is hard, but there are several ways travelling the
path is made easier - maybe even easier than on the desktop.

------
donaq
I've not done any embedded stuff, but I've had jobs doing low level c/c++ to
interface with poorly documented serial devices passing bit-masked instruction
codes and status codes around and I'm now doing web programming and man, all I
can say is this: Nothing is easy. If it looks easy for some reason, someone
has probably done a lot of difficult work for you previously.

------
englishVoodoo
Is there a need to learn it all though? I'm a designer at my place and here I
do all the html/css work and a bit of jQuery fluff on top of that whenever
it's quite basic. I do think that's how most places work.

Of course for a developer it's necessary to have some knowledge of html
primarily, but no real need for deep knowledge. Not in my, somewhat limited,
experience anyway.

------
siculars
When people complain to me about so and so technology related I tell them to
relax, breath and consider the millions of things that need to go right in
order for you to watch the latest Lady Gaga video on youtube.

I am constantly reminded of this by Louis CK
<http://www.youtube.com/watch?v=8r1CZTLk-Gk>

------
jaspero
I appreciate the author for recognizing web development. I often stumble upon
my 'programming' friends who think web development and especially front-end is
boring and trivial. I have hard time explaining how important and how complex
things can get.

It's something my fellow hard-core programmer friends will never understand. I
love my job and what I do.

Web Development rules!

------
catshirt
I oft encounter Java, C++ programmers, etc. who don't understand the fragility
of the client. This is difficult to deal with.

------
nathanwdavis
There are frameworks full of very high-level abstractions that can make it a
lot easier up front. BUT, that only delays it being hard down the road when
the abstraction you got for free has to be replaced. Often that time comes
very quickly.

~~~
grayhairmomma
Yup. I've "built a website" with Ruby On Rails but frankly wasn't too
impressed with myself afterward. It was a worthwhile exercise because it got
me to understand the basics of web development. I'd rather focus on learning
the nitty gritty basics.

------
mfukar
Yeah, web programmers are regular geniuses.

------
wnoise
s/web//

Yes, it's a somewhat different skillset working with somewhat different
software, but there's not _that_ much difference.

------
ataranto
"Desktop GUI can easily be made cross-platform."

lol wut?

~~~
grayhairmomma
OK, if we're talking about games, maybe not. I'm talking about your average
Desktop GUI out there which can be made to work across different OS's using a
GUI Toolkit such as Qt.

~~~
ataranto
Yes, it's easy to make your average Desktop GUI ugly as hell across different
operating systems using a GUI Toolkit such as Qt.

~~~
grayhairmomma
You read my mind. Most are ugly as hell ! That's exactly what I said on my
blog, and Desktop GUI developers get away with it.

~~~
Knack
Most of the time desktop apps and web apps serve completely different
purposes. Desktop apps do _not_ intend to be flashy or beautiful, they need to
be usable for getting things done. They should follow the conventions of the
OS, be fast and intuitive. So when a GUI developer creates a GUI that is
highly usable and not showing off with eye candy, the GUI developer has done
his job properly. Saying "they get away with it" because desktop GUIs are ugly
is just wrong. Web sites often need to draw attentation. They want to sell
something, be interesting. They should be flashy and beautiful.

~~~
grayhairmomma
Thanks for getting me to see another point of view. Your argument makes sense
!

