Ask HN: Do you intentionally practice kindness? If yes, how? - <AUTHOR> Got screwed over for thousands of dollars by a recruiter. Did work (haven't gotten paid for anything yet) for a client only to be insinuated that I broke something (I didn't, the code base was a major mess before I touched it and I was careful not to change anything related to workflow).
I've been really polite, especially in my client's case, as they got screwed by previous dev and they are under pressure from their investors to show results (I do like them, they are nice people). But it really stung when they insinuated that I broke stuff.
How do I keep calm and still be polite and kind? I've already decided to quit this client, but don't want to do it when they are just going live. It will only make their situation worse. But I also don't want to be accused of stuff I didn't do. Also trying to figure out how to quit politely, kindly without them creating a scene.
What would you do in this case? <comment><USER2> Demonstrating kindness, in scenarios like this, boils down to having options. And having options, boils down to you personally making sure you have options. The answers to these questions will depend on how kind you're going to be.

Looks to me like some people spent some money. Some other people's money demands results. The current state of things is a real mess, and there's pressure to start going live and getting returns and doing all that other good stuff.

It also appears extremely likely that none of that's going to happen as it needs to.

Someone is going to own these problems. You could inadvertently end up owning these problems. There's not going to be a way to be kind about that. So take a step back assess this, and be a hundred percent real with everyone, and maybe do it simultaneously so they all know, and manipulation is reduced to a low Factor.

Good luck.

</comment><comment><USER2> And they're going live? You've done work? Haven't been paid? Don't have an actual job position? Contract?

Looks to me like you're being manipulated, or taken advantage of, or they're just really naive. Something like that.

The other question I have is, can you take them live and have it work?

And can you keep it working?

Once you have the answer to those things, very politely tell them what you will do, what you require them, and then don't do another thing until that's agreed to and happens.

They've got a lot of problems, and if you ask me they're looking for a person to blame about those problems. Looks like it's you.

Did you keep a log of your activities?

I suggest you get that polished up and ready to use.

<comment><AUTHOR> Other than emails, no logs. The original request was to help them a few hours a week, but now it snowballed into full on bug fixing.

I suggested they block the non working parts and go live with the working ones, remove fluff. They reluctantly agreed.

No contract, not paid.

I'm not worried about money. I'm more interested in getting out on good terms and moving on.

<comment><USER2> Tell them that.

Tell them you will be kind, forget money, and are done unless:

And right now, decide what that is.

For everyones mutual benefit, going forward, things need to work this way:

Decide what that is.

Communicate all that, and then let them make choices. You will make sure you have options, and that they also have them.

Best you can do. You did not build that problem.

Make all those rhings ultra clear. Hear all their emotions, concerns, etc... feed them right back with your own and point to those options.

When they own it, you can move away easily and on reasonable terms.

Or, you won't care because they are not veing good humans about all this.

Or, they agree to make your ownership worth it, and then you can take care of them properly.

I put all the cases here for clarity and to be complete.

If you are going to quit them, omit what does not apply, leave them with a recommended process for their next engagement, and step away.

It may not be possible to do it and have everyone feel good. So make double sure your communication is documented snd very defensible.

Good as it gets.

I have been there.

Oh, one thing I did for a very difficult client was bring a peer in for review and consult.

We did it together client and I. They were enlightened. So was I.

Learned to manage expectations much better. I paid for that, and did it to reset a gig gone bad.

Got someone you trust to deliver competent, brutal truth?

Fresh eyes can be worth gold.

Honestly, after thinking about it. The root cause on this is likely the help out a few hours a week expectation combined with a full-time reality. There was probably no winning this. They need to know that. Or they're just going to continue to suffer.

<comment><AUTHOR> This is very helpful. Thank you for taking the time to respond!

<comment><USER2> Hope it helps. Talking through stuff like this is high value.

Your turn one day.

One of us will hear the bell ring at the school of hard knocks.

</comment></comment></comment></comment></comment><comment><USER2> Did you leave it unbroken, as in a copy, or only make your changes on a secondary version of the code base?

Put simply can you put it back? Do exactly how it was before?

And you can you do that in a documented, like can't miss legal type of way?</comment>


Dirty Coding tricks used in Production Video Games - <AUTHOR> http://www.gamasutra.com/view/feature/4111/dirty_coding_tricks.php?print=1 <comment><USER2> Ok, this is just golden.

 _We were still 1.5 MB over the memory limit!

At this point one of the most experienced programmers in the team, one who had survived many years of development in the "good old days," decided to take matters into his own hands. He called me into his office, and we set out upon what I imagined would be another exhausting session of freeing up memory.

Instead, he brought up a source file and pointed to this line:_

static char buffer[1024 * 1024 * 2];

 _"See this?" he said. And then deleted it with a single keystroke. Done!

He probably saw the horror in my eyes, so he explained to me that he had put aside those two megabytes of memory early in the development cycle. He knew from experience that it was always impossible to cut content down to memory budgets, and that many projects had come close to failing because of it. So now, as a regular practice, he always put aside a nice block of memory to free up when it's really needed. _

<comment><USER3> I don't get this though. At that point, the _entire team_ had busted their bust and _had actually met their goal_. This guy basically took credit for the work that the entire team had done in meeting the memory constraint. He just reserved some bogus memory so that at the last minute he could say, "Hey look! We've magically met the requirement! I'm a genius!"

<comment><USER4> Which is why the story is here as an example of "dirty coding tricks", and not as an example of "brilliant forward planning for coders".

<comment><USER3> Well, when I read 'dirty coding tricks' I'm thinking 'ugly hack' not 'lousy cheater'. This wasn't some 11th hour 'patch the symptoms but not fix the underlying problem' story.

</comment></comment></comment></comment><comment><USER5> The problem with linking to the print version is you don't get to see the comments. My favorite story of all was in the comments and comes from Ken Demarest who worked on Wing Commander:

 _Back on Wing Commander 1 we were getting an exception from our EMM386 memory manager when we exited the game. We'd clear the screen and a single line would print out, something like "EMM386 Memory manager error. Blah blah blah." We had to ship ASAP. So I hex edited the error in the memory manager itself to read "Thank you for playing Wing Commander."_

</comment><comment><USER6> Here's my favorite war story, from a GameCube launch title.

QA discovered that if you rapidly toggled back and forth between two menus in the front end you might get a hang, though it could take 10 minutes.

I was eventually able to reproduce it in the debugger, and it was bizarre. A local variable getting corrupted to strange values, but there was no memory corruption visible at all, just the register was incorrect, when it was only ever assigned to once.

No matter what test cases I tried to cut the code down into, it didn't crash. Inspecting the disassembly everything seemed fine.

Finally, I noticed something strange. The suspect variable was in r19, which thanks to the allocation strategy was very unusual, it was most often unused. That gave me enough of a clue to create a cut-down test case that included all the function arguments and local variables without the code, to make sure I got the same register allocation.

I was able to write a single main.c that set the variable once and sat in an infinite loop waiting until it changed. Bingo! _Something_ crept in and changed that value, and it sure wasn't our code. There wasn't much of an OS on the Gamecube, but there must have been some interrupt that wasn't cleaning up its changes to r19 like it should.

I sent off the minimal code to a Nintendo developer support engineer, and monkeyed with our code to avoid having so many local variables in that one function, which fixed our problem. The Nintendo engineer fessed up that it must be their issue, but then the report vanished into the Nintendo bunker, never to be seen again...

Despite being a nightmare I'm glad I escaped, there were some sheer moments of coding joy in the game industry.

<comment><USER7> This is the type of thing that makes me love and hate emulator development. It's amazing how much code can actually depend on behavior like this, and how often bugs in an emulator are cases where things aren't implemented in the same "broken" way as the original hardware/firmware.

It does make it interesting and challenging, though.

</comment></comment><comment><USER8> Not a coding trick but more of an artistic hack:

I used to work at a major video game studio where one guy in the building was moving from production to production as a "reverse concept-artist"

I explain: Some modelers that design characters for video game sometime skip the concept-art phase (paper pencil drawings) and move directly to 3D CAD. But those rough sketches are really good for gaming magazines or online articles to show the progression of the artistic direction.

So that guy's job was to render the final 3D model of the character in wireframe mode and then re-touching it in photoshop to make it look like an original paper drawing. The result was quite convincing and appeared in several magazines as the initial artistic sketches for the game characters.

</comment><comment><USER9> The "Velcro" bug seems uncannily familiar. We had extremely similar issues on a game I worked on. Our lead programmer was going down the "dirty hacks" route, which worked in some cases but in others was producing new bugs. In one instance, I think it was a hovership colliding with a tower, there was a back- and-forth between him and QA for about a week, where he'd patch against a specific symptom, and QA would (literally) find a new angle of attack where it would break yet again. The deadline was looming, so one day, he came up to me and asked, "you studied physics at university, right? Can you have a look at this?" So I did. It took me a weekend, but I eventually tracked it down to a horrendously broken box-to-capsule collision detection and response, which I rewrote. (capsule = sphere-capped cylinder) Sometimes, the less dirty fix does make it into the game. :)

</comment><comment><USER10> I found the Damp falling through the geometry holes kind of interesting. My current company does fluid-flow simulation, and we have large meshes coming in from CAD with precisely this sort of problem. Our solution was to create an algorithm to remove the holes. It probably would have been hard to brainstorm the idea of fixing the geometry algorithmically, but I bet it would not take too long to write up something. Even if the algorithm is very inefficient, you could let it run over the weekend. A throwaway app is probably a small price to pay for clean geometry.

<comment><USER11> Have you seen bubble meshing? It handles non-manifold geometry.

</comment></comment><comment><USER12> I really like the story about the programmer faces to match the frame rate. I enjoy solutions that employ humor and human aspects.

<comment><USER13> You'll like this comment then :)

\-----

(Author: Hélder Gomes Filho)

And I was thinking that only newbies like me shipped those horrendous code... :P

At university there was a team (not related to me, but these guys are the perfect example :P) that made a FPS flash game...

For some bizarre reason, the programmer instead of checking if you was colliding with the wall and not allow you go there, he made the inverse, he checked if there was a wall, and allowed you to move parallel to it...

This sparked a bizarre bug: In crossings, you could not actually cross, only turn to the passage on your left or right.

The deadline was closing, and they had no idea on how to fix it...

Then the team writer fixed the issue! He told the artist to draw a animation of hands touching the walls, and then he wrote in the story that the protagonist was blind and needed to touch the walls to know where he was going.

</comment></comment><comment><USER14> Can someone explain what is the horrible to pack an integer into void* pointer? A void pointer takes 4~8bytes, an integer takes no more than 4 bytes. As long as the program don't passing value from little-endian to big-endian system, it should be all fine except the semantic meaning?

<comment><USER15> It's not guaranteed by the language that pointers are as big as or bigger than integers. Some architecture somewhere might die horribly on this. comp.lang.c FAQ on this: <http://c-faq.com/ptrs/int2ptr.html>

<comment><USER16> You're right -- the general rule is that ints and ptrs shouldn't be interchanged.

However -- In this case, it's likely the number of integers required (controller ids, which I guess might be 1 to 4?) would fit in almost any ptr you can think of.

Conversions aren't guaranteed, but if you copy/pack it yourself there shouldn't be a problem -- e.g. do a memcpy of one byte.

More likely the author was pointing at the fact that this value was later 'free'd' by the event loop. Which is fairly nasty.

<comment><USER17> The general rule is that you shouldn't go free-ing memory you didn't allocate. I had one colleague who would insist on trying to free FILE* after he had closed the file.

</comment></comment></comment></comment><comment><USER18> Nice stories. I don't understand how exactly the solution for 'All Signs Point to "No-No"' works. He says he packs the controller id into the pointer slot, allright, but doesn't he also say that the framework will free() the pointer later?

<comment><USER19> I was wondering about that as well. Maybe there's an invalid memory region on this platform which free() knows about and will silently ignore (for example the first N bytes of the address space), and the controller IDs happen to be in that range? Seems unlikely, but I can't think of anything else to explain it...

<comment><USER2> _It turns out that the event system would take it upon itself to free() the event's void pointer after processing the event._

You could set the pointer's value to be the controler's ID and then set it to null while you handle the event, and before you pass it down the chain. Or, the OS might be ok (and do nothing) when trying to free memory that's in the middle of a block of allocated memory.

<comment><USER20> If so his original approach of putting the controller id in a region allocated for the purpose and putting the pointer to that region in the event would have worked just as well and he wouldn't need to do what he did.

</comment></comment></comment></comment><comment><USER21> Identity crisis doesnt sound like a hack - more like,well, a solution (I cant see how changing the resource indexing was even _considered_ as an approach :D)

Good article.

</comment><comment><USER22> I'm inclined to think that this is part of the reason why the computer security kids are focusing more on online games.

<comment><USER23> and because there's easy money to be made there. Well not really easy, but spending a month or so reversing WoW can pay for a nice summer vacation.

<comment><USER24> ...to BlizzCon.</comment></comment></comment>


Dating app Badoo is now using AI to detect unsolicited dick pics - <AUTHOR> https://thenextweb.com/neural/2020/07/01/dating-app-badoo-is-now-using-ai-to-detect-unsolicited-dick-pics/ <comment><USER2> Is a hotdog? [https://www.theverge.com/2017/6/26/15876006/hot-dog-app- andr...](https://www.theverge.com/2017/6/26/15876006/hot-dog-app-android- silicon-valley)

Also, how is this not already a thing on all dating platforms.</comment>


Show HN: Bit - Bitcoin made easy in Python - <AUTHOR> https://github.com/ofek/bit <comment><AUTHOR> Hello HN, I'm the author. Feel free to ask me any questions!</comment>


BBC iPlayer - Wait Till Your Teacher Gets Home - <AUTHOR> http://www.bbc.co.uk/iplayer/episode/b00vl3zc/Wait_Till_Your_Teacher_Gets_Home!/# <comment><USER2> I got a message that I couldn't play the video in my area. I'm in the United States.

<comment><USER3> Iplayer is UK only.</comment></comment>


Ersatz neural nets try day trading - <AUTHOR> http://www.blackcloudbsg.com/article/Ersatz_tries_daytrading/

<comment><USER2> Ok, this looks awesome. I've been meaning to get some use from deep learning. However. . .

I'd like to read about a bit more specifics as to what exactly in daytrading or stock trading in general using deep networks can figure out particularly. If you can provide something more than just saying it does predict prices and gives reasons as to "why" it is accurate each and every step I will definitely use this.

The issue is generally the explanation for this article is too darn long. Split it up. There is at least 2 different parts here. One is getting the data ready for training including what you are looking at and why. The second is doing some of the training and analysing what needs to be changed. And maybe a third which would be some analysis of what should be changed.

If you create a forum like the one from quantopian.com where people can share/discuss their models then this is a no brainer for use.

<comment><AUTHOR> The post did come about a bit long... I considered splitting into pieces, but I also wanted the first part to have some pretty specific results in it.

Re: specifics on what it's learning: The short answer is _no one knows_. It's actually an active area of research, and while there are some methods for vision problems to visualize the sensitivity of feature detectors (they end up looking like faces, for example), it's harder to make sense of other types of data.

In general, an RNN is learning 2 things: 1) a function to transform the data at a static level (so, in this case, one day of trading) and 2) a function to transform that learned representation/state across time in a way that reflects the dynamics found in the data.

One of the reasons I built ersatz is because I wanted more rapid experiment results. Now that I've got that, I'm just beginning to scratch the surface on what's possible. Now that the machinery is in place, we're building out better tools for analyzing the data and what the predictions have to do with it. I share your general concerns re: all of that--which is why I've decided to stick to startups instead of day trading myself. Think of this post as more of a toy example/demonstration, albeit a promising one.

Re: a forum--yeah, that's a good idea, we will do that.

<comment><USER2> Thanks for the reply.

From what I've read researching deep learning is still very promising regardless if it's a new field or not. I was just wondering if you had any idea of how to interpret results a bit more. It seems that I'll have to find more reading on this stuff though.

I imagine deep learning to be more predictive than simple regression testing and some of the back propagation type predictors but I can't imagine it being extremely predictive when the stockmarket is known for being very subjective to attitudes as well as other unpredictable factors. Deep learning is supposed to pick out factors that may provide some information about things.

As another test I'd recommend trying to do deep learning with weather data and a few stocks. This might give you something more discerning because the whole point of deep learning is to identify unknown factors that effect things. People have long suggested that weather plays a good factor in certain stocks but it'd be interesting to see what a trained model thinks.

</comment></comment></comment><comment><USER3> This is a project that I've been following since it first appeared on HN, and was pleasently surprised by the email they sent out today! Way to go guys.... Looking forward like crazy for using this product! :) :)

Even got a friend to sign up for a beta invite! :P

<comment><AUTHOR> Thanks for spreading the good news! We'll finally be sending out invites to the rest of the beta signups in the next few weeks, so you will have a chance to use it soon :-)

</comment></comment><comment><USER4> I'm pretty curious about your displays. I'm doing some DBN stuff at work and having a hard time visualizing what's going on. I may wantonly copy some of your displays :) Do you plan on incorporating a way to visualize the results of higher level's of the network in the future? e.g. sample two layers at a time to visualize the weights?

<comment><AUTHOR> I shared your frustration when I first started working with neural networks, and that was part of the reason I built ersatz.

Yes, there are two things we're adding next: better ways to visualize the results of your nets and how those relate back to the data (with help from D3.js), and automatic feature detection (IE, autoencoders). So to answer your question directly, yes.

</comment></comment><comment><USER5> I'm definitely excited to play with this; I do a lot of manifold, subspace etc type stuff in finance and am slightly terrified of DBNs but see them as the necessary progression in what I'm working on.

</comment><comment><USER6> Do they still ask for your business idea when you register for their beta?

<comment><AUTHOR> Yes, we do--But it's not because we're looking for business ideas, it's more for us setting development priorities. I know it's been awhile since announced, but this stuff turns out to be kind of tricky to do right. We'll open it up soon enough, hopefully before a competitor gets a product out...

</comment></comment><comment><USER7> I am excited as you to use this product.</comment>


The Business Card Is Dead - <AUTHOR> https://wayfare.io/blog/2015/03/the-business-card-is-dead--long-live-the-call-to-action/

<comment><USER2> At our company we have "call to action" cards but we just call them flyers. Ours are actually in the design of poker playing cards.

I do find myself rarely passing out my business card for work-related stuff anymore, and half the time I forget to even refill my wallet. Usually it's just when I meet somebody out and about and we decide we should keep in touch.</comment>


Vim keybindings for eclipse - <AUTHOR> http://vrapper.sourceforge.net/home/

<comment><USER2> I use it. The main downside is that you need to manually disable quite a few Eclipse key bindings in order to have a goodVin experience.

</comment><comment><USER3> Its kind of a pain but it works pretty well.</comment>


The meaning of AMP - <AUTHOR> https://adactio.com/journal/13035 <comment><USER2> It's hard to have a good-faith debate about AMP when Google says that AMP sites aren't given favor in search results, by defining the carousel as not being part of search results.

<comment><USER3> Even outside the carousel; three weeks ago we implemented AMP with our content marketing strategy and we have received 34% more visits.

I don't think people our target is more inclined into clicking on AMP results as they're non-technical, I'm guessing we're higher in the results.

<comment><USER4> _I don 't think people our target is more inclined into clicking on AMP results as they're non-technical_

The whole point of AMP is to target those users. Hence the little lightning bolt. Even non-technical users can notice "hey this had a lightning bolt and it was fast"

<comment><USER3> I do user research for a living, and even technical users appear to be blind to this kind of features. Maybe they're delighted by how fast the site loads after they tap the result, but can't see them making the connection between the bolt and the load speed.

But I'm digressing, what I'm seeing it's a sudden and constant traffic increase in a short time span. I'm sure it's not because the result that was on 3rd place now has a bolt icon and users are craving it; it's because my result is higher.

<comment><USER5> There are thousands of threads on search ranking forums of folks reporting traffic rising or falling significantly, right after making change X on their site, for myriad values of X, many of which make zero sense as a ranking factor.

Search ranking is complex, and sites move in search referrals by ~30% on a daily basis without making any changes. Perhaps a different major site removed pages. Perhaps a few important links were added to your site (or to a site linking to your site).

<comment><USER6> as someone who tracks rank on a daily basis and in great detail. i can tell you that rank [and traffic] changes can very clearly be attributed to specific events or actions such as new inbound organic links or new on-page changes. for web properties that have few changes which occur daily, it is very easy to see the direct impact from deploying something specific within the following week or two. there is no ambiguity as to where these things come from. our rank is very steady across thousands of keywords over time and any statistically significant changes are never a mystery.

to say that the boosted position/visibility of AMP can somehow get lost in the "noise" of rank fluctuations from other factors is demonstrably false. i dunno what kool-aid you guys are selling over there, but i'm certainly not buying it.

the mission of AMP is fully Google-centric, not user centric. it is possible and easy to build pages faster than AMP without any of AMP's additional artificial limitations. AMP's carrot is that you get much greater visibility and faster loading as a result of pages being hosted on google's servers and loading via a pre-established TLS/TCP session.

you can read more here: [https://www.reddit.com/r/javascript/comments/78fevc/amplify_...](https://www.reddit.com/r/javascript/comments/78fevc/amplify_automatically_convert_plain_html_to/)

real-world AMP pages are not what they're billed to be:

[https://imgur.com/a/OPVdN](https://imgur.com/a/OPVdN)

[https://imgur.com/a/mt6s6](https://imgur.com/a/mt6s6)

</comment></comment></comment></comment></comment></comment><comment><USER7> The crazy thing about AMP to me is that we wouldn't have nearly as much front- end bloat on the web if it wasn't for the data-driven (read: click-driven) form of advertising championed by (who else?) Google. They put the burden on small time publishers for fixing a problem that they created.

Some of the stuff I see Google and Facebook doing to the web developer community these days makes Microsoft in the mid-00s seem like a model citizen.

<comment><USER8> If it wasn't those two it'd be someone else. You might not even have the web as we kno it without the ad analytics.

Unless you have a viable alternative monetization method?

<comment><USER9> I kind of liked it better when it was hobbyists and enthusiast sites. The "web as we know it" isn't necessarily a great thing.

<comment><USER10> Hobbyists and enthusiasts do not scale to ~3 billion people.

<comment><USER9> Neither do most other things done by hobbyists. I don't understand what you're saying. The only things that are good enough to do are those that scale to 3 billion people?

<comment><USER10> I am saying, if you want a web by and for hobbyists and enthusiasts, billions of people has to be excluded.

Where do you think _new_ hobbyists come from?

<comment><USER9> I don't think lack of participation is the same thing as "exclusion". Bird watching is another enthusiast hobby. Anyone can do it. But not everyone wants to.

<comment><USER10> It seems clear at this point that several billions of people want to use the web, not just hobbyists.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> Good article.

My main objection to AMP is not that is it being portrayed as a community project (although, that does bother me). It is that Google are creating their own subset of already well established standards (HTML, CSS), and forcing developers to adopt them if they wish their content to appear at the top of search results.

If this is truly a project to increase the speed and readability of the Web, as it was initially promoted to be, Google have better tools for achieving that outcome (demoting excessively slow sites in search results, for example).

In it's current guise, AMP is little more than Google aiming to force all content on the web to be consistent with their own look-and-feel, and breaking the fundamental philosophy of the web in the process.

<comment><USER12> Why do you think has Google created these restrictions on HTML and CSS code in AMP pages?

<comment><USER11> I do believe that it is an effort to increase the speed of pages, by preventing content creators from doing things that can harm the user's experience on slower connections - I just don't think it's the right way to go about it.

It also has the side-effect that all AMP pages must look fairly similar and 'on brand' for Google - which I doubt is an accident.

<comment><USER13> What's the right way then? When I worked at a media conglomerate, AMP was the only thing that reigned in and enraged the biz-dev and ad-ops departments. I'm still proud that my AMP launch partner pages are out there and serving up content really fast. I hate that it took this to provide that experience, but I prefer it to the FB and AAPL walled garden syndication approach for business and tech reasons.

<comment><USER14> The right way: influencing ranking by load times for some exemplar (and easily replicable) device and inter-actability events.

That way, sites like HN are boosted to the top, while sites which take 10 seconds for their JS frameworks and ads to load before showing text on the screen are penalized.

<comment><USER13> If a site gets 100m unique in a month they will be at the very top. They can then choose to provide a fast site, or slap on a bunch of analytics, tracking, and 3rd party bloat that provides business intelligence and millions in revenue - while staying ranked at the top.

They get to have their cake and eat it too, and there was no incentive (before AMP) to reign that in.

<comment><USER14> That's the thing about parameters - they can be tuned. The factor for page speed could have been tuned to matter as much, if not more than their unique views, trashing their ranking the moment they started adding bloat.

Google appears to have decided not to, in an apparent effort to boost their ecosystem, at the cost of the open web.

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Great article, I despise AMP and Google using its monopoly to peddle these lies, and using this position to embrace and extend open web standards. We have seen this pattern from a monopoly before and they are currently being taken to task for this behaviour in the EU. I'm still a bit amazed that the devs who work on this don't understand what they are doing is squarely on the side of evil but I guess it's a pay check.

A few other things AMP lies about:

* Wastes bandwidth downloading content in the background

* Wastes battery rendering content in the background

* Downloads Google links you haven't given permission you want to see

* You can't even opt out

* Breaks the web url extending it for Google's own purposes

* Copying URLs to send to friends or post online no longer works correctly

* Breaks the understanding that the domain you are on is the authority for it's own content

* Traps publishers further inside Google's web, not the open web.

<comment><USER12> > Wastes bandwidth downloading content in the background. Wastes battery > rendering content in the background.

That's Google Search, not AMP. How much bandwidth does Search use? Is it big enough to be a problem for some users?

> Downloads Google links you haven't given permission you want to see.

Google Search can load assets from its own domain, like any other website. The user can use browser extensions to block certain requests.

> You can't even opt out.

You mean you can't opt out of seeing AMP results on Google Search? Well, yes, for obvious reasons. AMP is Google's product. It would make little sense for them to add such an option.

> Breaks the web url extending it for Google's own purposes. Breaks the > understanding that the domain you are on is the authority for it's own > content.

Yes, it does.

> Copying URLs to send to friends or post online no longer works correctly.

It works in iOS Safari and Firefox for Android (and probably other browsers as well), which use the canonical URL when the user shares the page. There is also a Share button in the header of the AMP page.

> Traps publishers further inside Google's web, not the open web.

You can say that Google traps publishers, but not that AMP is not the open web. Google AMP Cache is a website on the (open) web.

<comment><USER16> > That's Google Search, not AMP.

That's AMP. AMP prefetches content from AMP sites which must be hosted on google.com.

The AMP team, when asked about hosting AMP content outside google.com, mention they can't prefetch from other domains with current tech as a blocker for this.

<comment><USER12> That's Google AMP Cache, to be specific, which is used by Google Search. I was pointing out that the (alleged) extra bandwidth and battery use happens then the user visits Google's website.

I'd limit the term _AMP_ to the library and framework for creating AMP pages.

<comment><USER17> What term would you give for how Google Search treats AMP pages from regular HTML pages?

<comment><USER18> That's Google's implementation of the AMP Cache. It acts as a CDN for pages that implement the AMP standard.

[https://developers.google.com/amp/cache/](https://developers.google.com/amp/cache/)

<comment><USER17> OK, why does Google put AMP pages on Google's implementation of the AMP cache above the carousel in mobile, or add the AMP icon to search results that are AMP pages? If AMP pages are faster than regular HTML pages, then Google Search's ranking algorithm would rank higher these faster pages organically.

<comment><USER19> The biggest issue is that if search results were actually ranked by speed, sites would already become 100x faster without any of this AMP nonsense.

<comment><USER18> This seems to be a common misunderstanding, but page speed is already a search ranking factor.

[https://webmasters.googleblog.com/2010/04/using-site- speed-i...](https://webmasters.googleblog.com/2010/04/using-site-speed-in-web- search-ranking.html)

<comment><USER20> How fast do you have to be to get into the AMP carousel?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I honestly love amp pages. They load in rural areas unlike other bloated pages.

When you've got good service they load quick without annoying popups / ads.

If people hate amp, maybe it's time to adjust the web standards to enable amp experience with the html6 web.

(Disclaimer, I do work at Google)

<comment><USER21> Just yesterday an HNer was saying they are in Puerto Rico and the vast majority of pages won't load due to bandwidth restrictions - except for HN and one other site I'm forgetting. I would bet you AMP pages would load fine for them. HN loves to hate on page bloat _and_ AMP, confusingly.

I have noticed HNers conflate AMP the standard and Google Search's caching behaviour and/or ranking of AMP pages. I love the former, and not the latter. They really ought to make it possible for mobile search users to opt-out of getting AMP results.

<comment><USER22> How is it confusing?

I hate page bloat because it's slow.

I hate AMP as it's an obvious, extremely damaging, land grab.

<comment><USER21> I went on to differentiate between AMP the standard and Google's search result and serving from Google's cache (the "land grab" aspect). Dismissing both is throwing the baby out with the bathwater IMO - I'll get behind anyone who's encouraging trim pages - such as adhering to the AMP standard.

<comment><USER23> I haven't seen anybody hating on making pages "adhere to the AMP standard." When people express loathing of AMP, we're objecting to exactly what this article describes: an expansive and dishonest land grab by Google.

It is reasonable and correct to hate both web page bloat and Google's so- called "solution" that breaks the web.

</comment></comment></comment></comment></comment><comment><USER24> I have found some sites have made the "main" site better than AMP in terms of speed and download, but because its often the first result, sometimes you get an inferior experience. As someone who built and deployed the bbc news amp experience, i didn't really know how it was going to be used, but i would have raised serious concerns knowing what we know now.

</comment><comment><USER25> I've been pushing back hard on adding AMP as a feature on our product and I am glad I did. We host/publish millions of articles for our clients and I just don't feel comfortable enabling AMP and allowing the big boys to get away with this crap.

All large CMS players and publishing platforms should read this post.

<comment><USER7> I think a decent compromise (one I'd like to see more sites adopt) is only putting a subset of your page's content on the AMPed version, with a "Read the full article on XYZ.com" banner at the bottom. It gives you that preferred real estate while also acting as a funnel to your site.

<comment><USER26> I've seen a bunch of sites do that, and honestly I appreciate that as an end user because I want to get to the actual site, but at that point, AMP's story that it makes the web faster is actively untrue: you have to wait for the AMP page to load, scroll, and _then_ load the normal page.

<comment><USER27> Doesn't that make it win-win? It both gives the site the advantageous position AMP offers it, while undermining AMP's entire purpose and hence discouraging support of it.

<comment><USER8> Even in that case I find it useful. You get enough context to quickly drop out if the content didn't meet your needs.

Try looking for recipes. I only click read more if the recipe met my needs. Else I swiped right to get the next matching recipe.

</comment></comment></comment></comment></comment><comment><USER28> It's meaning is: _all your sites, sites, sites, sites, all your sites, are belong to us_

</comment><comment><USER29> Google promised a way to make your content more powerful, but it turned out to be just an easy way to control it themselves...

It's like they took on the role of Sauron almost immediately after giving up their "don't be evil" slogan.

</comment><comment><USER30> Worse still, if you mention any of these issues on AMPs GitHub page, they will be closed with "nothing to do with AMP, it's how Google chose to implement it, ask Google"

<comment><USER31> Do you have any concrete examples of this? Would like to see the actual issues and wording from the AMP team on it. Not that I don't believe you, just want to read it for myself.

<comment><USER30> The biggest discussion AFAIR is [https://github.com/ampproject/amphtml/issues/6210](https://github.com/ampproject/amphtml/issues/6210)

"This is a Google Search issue, not AMP issue"

</comment></comment></comment><comment><USER32> Same link, submitted yesterday:

[https://news.ycombinator.com/item?id=15581276](https://news.ycombinator.com/item?id=15581276)

I don't get HN dedup anymore.

<comment><USER33> articles that get no real traction are not counted for dedup purposes. Its annoying when you submit them, but then this comment topic wouldnt have occured.

<comment><USER32> IMO there should be a window, say a year. That way evergreen topics can be rediscussed over and over. But the way it currently works fragments the comments over multiple links submitted on the same week. This one, for instance, is lost in the ether [https://news.ycombinator.com/user?id=ocdtrekkie](https://news.ycombinator.com/user?id=ocdtrekkie)

Why not aggregate on the same thread?

</comment></comment></comment><comment><USER34> It's a shame there's so much controversy around AMP. It's not a simple task to set up a performant website. Ignoring the search result preference and caching, but AMP is an interesting attempt to tame website development so your pages load quickly. People keep commenting you can make a website fast without AMP, but this is difficult when you're working in big teams and with management that don't put priority on performance.

<comment><USER35> If Google just flat-out said they would penalize sites in rankings for poor performance, then management would very much prioritize it. Same thing happened with responsive design a year or two ago and now https this year -- my clients never cared about doing either of these when presented with the choice (since it would cost more money), but the second they received and email from Google about it affecting their search rankings (or showing the site as "insecure" in chrome, as per the recent push for https), they were asking us to do this for them.

<comment><USER34> I'm curious about this as well. How easy would it be to game performance measurements? For example, when you can lazily load content it becomes much more difficult to measure. The advantage of the AMP restrictions for them is that they know for sure certain performance metrics will be met but this is much more difficult for arbitrary webpages.

<comment><USER36> Run a WebPageTest on an AMP link and tell me it fits within the 1 second promise AMP keeps making.

Without prefetch, on a lot of the pages I've cross-checked manually, it doesn't. So there's already gaming from the other side of the aisle in a sense.

</comment></comment></comment></comment><comment><USER37> Hmm, while some of the critic i see here may be valid and justified, i like the enforcing of this strict rule set...

i am senior frontend-dev and imho we wouldn't need AMP if in 99% of the cases devs, or better their customers would give a damn about doing their job right ( most of the time they just don't know better, because they are just beginners and never learned much about 'advanced' html/css - i haven't seen to much senior devs lowering themself to do html/css work and/or are knowleadgable in this areas ).

Most of AMPs advantages regarding FOUC, Jumping-Content and Performance is to enforcing good HTML/CSS practices. Again citing guardian as example... So at least know i have a way to simple enforce a minimum best practice for mobile pages...

Whenever i had to sign off a responsive/adaptive mobile page loading 'insane' amounts of unused styles and/or javascript i wanted to hit something with a hammer... I am for giving it some time and see how it develops..

</comment><comment><USER38> For a bit deeper understanding of AMP pages and how Google makes all of this work – check out this talk from Segment co-founder Calvin French-Owen [https://www.heavybit.com/library/blog/get-ampd-an- introducti...](https://www.heavybit.com/library/blog/get-ampd-an-introduction- to-accelerated-mobile-pages/)

</comment><comment><USER39> I think Google should be allowed to do whatever they want, as long as they don't lie to their visitors and pretend they are a search engine, which is what they're currently doing.

Perhaps this is the solution; require Google to stop calling itself a search engine.

<comment><USER40> And why do you think that? I could understand why you'd want to be thinking that, if you own lots of Google stocks, but either way this does not provide any resolution to anything.

Whether you call it a search engine or a curated content platform, users aren't going to suddenly stop using it now.

</comment></comment><comment><USER41> Let all the hyper monetized, ad-funded, people stalking, profile building content head to amp, google and facebook ecosystems.

The more egregious Google's creepy behavior becomes the more urgent the solution becomes. This is an opportunity to find a solution.

</comment><comment><USER16> I dislike AMP too, despite being an author of an AMP library for node ([https://www.npmjs.com/package/amps-in-the- trunk](https://www.npmjs.com/package/amps-in-the-trunk)), but:

> AMP is, I think, best described as nominally open-source.

That's not how open source works. Projects are either under an OSD license or not. See [https://github.com/ampproject](https://github.com/ampproject) for the licenses involved.

The article's premise still stands, but the author probably meant 'nominally open standard' or just 'nominally open', both of which are accurate.

</comment><comment><USER42> I just googled "house of cards cancelled" in Firefox on my iPhone and every result for a several screens worth of scrolling are AMP. I can't find a single result that isn't AMP.

</comment><comment><USER43> > AMP pages don't receive preferential treatment in search results.

Think it's true. At the beginning AMP pages got a huge rank bonus. Now, it's much less. I feel Google sees AMP just for news pages. Guess the project got a lot resistance internally which is understandable: With the hundreds custom AMP components they are actually rebuilding the web.

<comment><USER44> > At the beginning AMP pages got a huge rank bonus.

That they ever got such a thing is ridiculous to begin with. One of Google's principles is that they're neutral, besides clearly labeled paid-for ads which have always been the business model. I don't think they succeed 100% in setting aside unconscious biases that the programmers must have that build and tweak/configure the thing, but I believe that it is one of the basic ideas. If you say that was not the case, and is "much less" not the case now, then saying it's not biased is just weird.

<comment><USER45> if they are "clearly labeled" now, what terms do you use to describe what he ad labels were in the past?

[http://www.benedelman.org/adlabeling/google-colors- oct2014.h...](http://www.benedelman.org/adlabeling/google-colors-oct2014.html)

<comment><USER44> Good point, I didn't know that. I've not been on the internet much before 2006 or so, and have been using ad blockers for as long as I can remember. Just that in my mind, they're currently clearly labeled. I never saw the chart in the post you linked, that's very interesting. Thanks for linking!

</comment></comment></comment></comment><comment><USER46> lol. This doesn't even need a discussion. If you have a website hooking nearly all over websites without asking the users consent and without giving the user a recognizable way to opt out, then of course it is toxic. It is toxic by nature.

</comment><comment><USER12> > 1\. AMP is a community project, not a Google project.

It's a community project _and_ a Google project.

> 2\. AMP pages don't receive preferential treatment in search results.

They do due to the AMP carousel at the top, but that's it. AMP pages don't receive bonus points in the search ranking for being AMP.

> 3\. AMP pages are hosted on your own domain.

They are, but they're also hosted on Google AMP Cache.

<comment><USER47> >due to the AMP carousel at the top, but that's it

Are you for real? Read your sentence aloud to yourself and realize how ridiculous it sounds.

You're basically saying: "They're just at the top of the page because they're in a specific AMP section of the page at the top of the page, but that's it. They don't get bonus points in the search ranking, which affects how high up you are in the search results, which is not on top of the page"

<comment><USER12> English isn't my first language. I didn't mean to trivialize the carousel by saying "that's it." My intention was to clarify that the carousel is the _only_ form of preferential treatment on Search. A big one, yes, but the only one.

</comment></comment></comment><comment><USER48> Copy of my comment from another thread: You can do your part as a developer and tell managers about the dangers of AMP. It is a stupid idea technically (we have HTML, you can build a slim sites, Google can rank them higher) and stupid business wise by giving away the control, branding, options.

I have convinced one project manager to not implement AMP and will continue to try in the future. Please do your part by spreading word of the dangers of GOOG and FB.</comment>


FriendLynx helps you find your Facebook friends on Twitter - <AUTHOR> http://thenextweb.com/apps/2010/12/02/friend-lyncs-helps-you-find-your-facebook-friends-on-twitter/ <comment><USER2> Also,

Even if you just started with names, it would be possible to be slightly smarter than just looking for the individual names.

For each name you found, you could scan its immediate social network and see if that contained a match for any of the other names. Putting this together might pull up the whole social graph.

Add more networks and publicly available information and I'd expect a name- list could come close to uniquely identifying each name on the list.

Project anyone?

</comment><comment><USER2> The frustrating thing about using an app like this, that lives in the cloud, is that I have to expose my Facebook profile to it to get its services. And who knows what kind of app it will become the future.

Essentially, I'd love to find Facebook friends that use Twitter but I never, ever use any Facebook apps, everything about them seems totally dodgy.</comment>


Visualizing the Ongoing Drug War - <AUTHOR> https://tryplainjane.com/visualizing-the-ongoing-drug-war/ <comment><USER2> This is a neat visualization, I wonder if this is more persuasive than written numbers of users and money. I just think it should use some sort of chunking to avoid breaking the page flow.

On another note, I'm from Germany and here there is absolutely no motion from the government towards legalization. Instead they double down on their failed and regressive prohibition, while still being mostly ignorant towards the dangers of alcohol. This is odd, since not only do more and more countries in the EU decriminalize or legalize weed/drugs but they do so successfully with regards to users, protection of youth and taxes (where it applies). At least the US is moving in the right direction with regards to weed, albeit slowly.

<comment><USER3> Maybe they're not ignorant but the alcohol companies have a much stronger lobbying arm and more connections/acceptance with the audience of lawmakers who are the key decision makers on this than cannabis smokers/companies do?

<comment><USER4> And taxes. Booze is a good revenue stream for the Gov. And in regulated US states. It's why both booze and weed got "essential" business status in those places.

Where the weed industry is getting more lobbying, well, the effects on laws are clear (that is the lobbying is working to change laws to help (some) of the pot business.

<comment><USER5> One of the reasons alcohol sellers got essential business status is because suddenly stopping drinking alcohol can kill people who are dependent drinkers.

<comment><USER6> no that is not why

<comment><USER5> [https://blogs.scientificamerican.com/observations/yes- liquor...](https://blogs.scientificamerican.com/observations/yes-liquor- stores-are-essential-businesses/)

> In the midst of the COVID-19 pandemic, access to alcohol will likely become > limited due to social-distancing measures mandated by government officials. > Some of these necessary public health strategies—shelter-in-place and > closing of non-essential businesses—may in turn cause people with alcohol > use disorder (AUD) to find themselves in unsafe scenarios. Forward thinking > about how to reduce harms to people with AUD is critical. Untreated AUD is > often managed with daily alcohol use, necessary to stave off cravings and > withdrawal.

</comment></comment></comment></comment></comment></comment><comment><USER7> I wish they hadn't chosen colour schemes that seem intended to bias the reading. In the first infographic, white characters are very low-contrast while brown characters stand out. In the other, both seem to be about equal in terms of contrast.

That said, I'm not sure how to get this kind of presentation right, since the "white" population is not the same size as the "black" or "brown" population. They say a black person is almost four times as likely to be arrested for drug offenses as a white person. While I think their graphic seems a bit manipulative, at the same time it doesn't seem to capture the real awfulness of the situation. Non-Hispanic whites are something like 60% of the US population, while black people account for 13%, so just showing drug arrests by skin colour paints a very rosy picture of the actual situation.

My suggestion, normalize contrasts and weight the number of characters by demographics. It'd be pretty shocking and would avoid this odd whiff of dishonesty.

<comment><AUTHOR> The first graphic is racially biased according to the arrest rates. The second graphic simply is based on overall population demographics.

My intention was to be able to visually see the difference between consumers and arrests.

</comment></comment><comment><USER8> I tried to click the links towards the bottom for eg Norml but the animation populating more ppl in jail kept moving the links around so I closed the tab. This was on iOS Safari

<comment><USER9> Same for me, I tried to click on the animation to pause it but to no avail.

<comment><AUTHOR> Good feedback, I'll add something for that.

</comment></comment></comment><comment><USER10> How many people here, ACTUALLY think cannabis is "completely not harmful" ?

I'm all about making your own choices and i've tried most drugs on the planet, probably more than you dear reader, and totally assume the potential risks. but still most people I know who do cannabis regularly either:

\- Have scary memory problems.

\- Have autodestructive or at least exagerated "passive" tendencies toward improving in any way you want to define it.

\- Have similar friends who definetely drag them down and not up.

I literally know NO ONE i would admire that do it. And please don't say Elon Musk who's the most famously unbalanced CEO on the planet.

I don't understand the push of legal cannabis because i don't want my children to think it's risk-free to do it. The danger of drugs is always the frequencies you do them. Hopefully it stays contained to the US.

<comment><AUTHOR> Cannabis certainly has negative side effects but these pale in comparison to the effects of prohibition.

From a physical standpoint, the negative effects of cannabis are far less severe than smoking cigarettes or drinking alcohol.

We should put the money used for policing into community building and health services so people feel less inclined to use drugs of any kind.

<comment><USER10> > From a physical standpoint, the negative effects of cannabis are far less > severe than smoking cigarettes or drinking alcohol.

Thats an argument against cigaret, not pro cannabis.

Yes for the money but still do we reeeealy want it legal ?

<comment><AUTHOR> Absolutely. The only benefit of illegality is imprisonment. It does not reduce consumption. The only way to reduce consumption is by treating it as a health and community problem. Not a crime.

<comment><USER10> The benefit of illegality isbthat a majority of people dont think its ok and thus dont do it. With your argument you legalizr everything.

<comment><AUTHOR> With your argument, we should live in a criminalized nanny state. Ice cream is pretty bad for you. Heart disease kills way more people than any drug. Maybe we should make it illegal to be fat.

Or in a sane world, we treat health problems like health problems.

<comment><USER10> You still need to put a line otherwise yeah sure lets legalize heroin. Also your argument doesnt hold because theres not one unique cause of heart disease. And yeah tbh i would say everyone know being bat is b1d.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> I support the decriminalization of all drugs from both a libertarian and humanitarian perspective. That being said, the numbers geek inside of me always hates how out of context statistics usually are.

For instance, how do these rates compare to other drugs or other crimes? How do you determine whether or not there is similar drug usage across populations? (The answer is to claim that an equal number of people who have used at least once in the past year implies equal usage over the past year. Another frustrating use of numbers.)

But none of this really matters. Its a no-brainer. The war on drugs doesn't work. The real problem in my opinion is that people who don't use drugs usually have no reason to do anything about it. Decriminalize everything.

<comment><AUTHOR> I tried to keep these numbers within the context of cannabis. The 663K arrests in 2018 refer to cannabis only related arrests. The ACLU mentions how cannabis use is approximately equivalent between white and black people: [https://norml.org/marijuana/fact-sheets/item/racial- disparit...](https://norml.org/marijuana/fact-sheets/item/racial-disparity-in- marijuana-arrests)

Frequency is a hard one and can be muddled a bit. There isn't great data on the frequency or quality of usage of racial differences.</comment></comment>


Hijacking the Verified Knowledge Panel - <AUTHOR> https://yvoschaap.com/weblog/another_mass_hijack_attempt_of_the_google_search_results <comment><USER2> Why is this not considered (and prosecuted as) fraud? If I start making websites impersonating some big businesses you bet I will be in trouble pretty fast, so why is this scum allowed to get away with it?

</comment><comment><USER3> Anybody have an example where a "growth hack" brought a net positive to the world?

<comment><USER4> Sure. The oral polio vaccine was given away for free, undercutting and disrupting any attempts to region-limit its availability. To this day, it's hard to charge more than a dollar per dose, and nearly all countries have eradicated or are eradicating polio using this vaccine.

Might be hard to find examples that are business-friendly, though; the growth- hacking of a business usually means harm to its customers. The prior polio vaccine, manufactured using Salk's method, had had quality control problems leading to illness in hundreds of vaccinated people; maybe they shouldn't have rushed to market.</comment></comment>


Life of a startup employee: it's like being a firefighter led by an arsonist - <AUTHOR> https://www.theguardian.com/commentisfree/2016/sep/26/secret-life-startup-employee-rudderless-founded-by-capricious-narcissists <comment><AUTHOR> "In a normal company, the personality of the boss is usually diluted by the fact that the question of how to successfully run the business was answered a long time ago."

Definitely true for me and other people I know. Often all of a founder's egotism, paranoia and other foibles seem to be magnified whilst trying to find a business model.</comment>


Strikingly, BuildZoom and Bitnami Lead Hottest Y Combinator Winter 2013 Startups - <AUTHOR> http://www.daniellemorrill.com/2013/04/hottest-y-combinator-winter-2013-startups-1-month-after-demo-day/

<comment><USER2> I've finally put my finger on what's been rubbing me the wrong about these. Although these are mostly factual and non-sensational, they smack of cable- news disease. The sort of preoccupation with a continuous update that has people glued to news and stock tickers.

For some things, a stream of information is useful. But for this sort of stuff I feel it fosters a climate of more short term thinking and concentrating on the wrong things in the community at large.

In a year, releasing and examining these numbers is going to be really valuable. But right now, I feel like it's CNBC for Startups (hint: that's not a good thing).

<comment><USER3> Yep, and it has the same cable news echo-chamber effect of creating self- fulfilling prophecies off weak fundamentals.

</comment></comment><comment><USER4> Title needs an Oxford comma. (I first read "Strikingly" as a comment on how surprising it was that Buildzoom and Bitnami were leading.)

<comment><USER5> I agree for the same reason; however, this is a matter of style and decision makers offer differing opinions:

<http://en.wikipedia.org/wiki/Serial_comma>

</comment></comment><comment><USER6> Without a mapping of a company's score to its value, these ratings are non- sensical. Considering probably only public data is the input and the actual function isn't open, there is great reason to doubt the rating.

I've made a similar exploration of W13. My scoring is my personal biased judgement. The whole effort isn't to get a US News Top 100 list, but to better understand the rating system itself. <http://blog.kirigin.com/angel>

A simple thought experiment: how is this different from a random ranking? How would you know?

</comment><comment><USER7> Alexa is the last place you want to get data from.

</comment><comment><USER8> This dataset you're compiling gets less interesting with every new lens we look at it through. You're YC and you're 500S and there must be a way to get data nobody else has access to that _really_ indicates growth and success - like headcount, who's hiring, the 'true' positions they're filling (vp of nobody?).

</comment><comment><USER9> Danielle, have you heard about what Paul Singh is doing with dashboard.io? He basically has made a product out of diagnosing this shit realllllly in depth.

</comment><comment><USER10> Why does this matter? Who cares what happens 1 month out?

</comment><comment><USER11> half of these companies don't do anything other than conglomerate information and present it nicely. How are they supposed to make money?

<comment><USER12> Isn't that what Google does too?

</comment></comment><comment><USER13> Zenpayroll was W'12

<comment><AUTHOR> Fixed</comment></comment>


Web Programming Is Hard  - <AUTHOR> http://www.shubharamani.com/wordpress/?p=31 <comment><USER2> 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.)

<comment><USER3> 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."

<comment><USER4> "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.

<comment><USER5> "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."

<comment><USER6> Designed by a committee?!

It never works!

</comment></comment></comment></comment></comment><comment><USER7> 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.

<comment><USER8> 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.

</comment></comment><comment><USER9> 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.

<comment><USER10> 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.

<comment><AUTHOR> 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.

</comment></comment></comment><comment><USER11> 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.

<comment><USER12> I would add one thing: get to know HTTP. Even a basic understanding will prevent you from making costly mistakes.

<comment><USER13> What are a few costly mistakes that can result from lack of HTTP knowledge?

<comment><USER14> not designing with REST in mind

<comment><USER15> 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.

</comment></comment></comment></comment></comment><comment><USER16> 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.

<comment><USER17> 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.

</comment></comment><comment><USER18> 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?

<comment><AUTHOR> 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.

<comment><USER19> 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.

<comment><USER20> 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?

<comment><USER21> 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.

</comment></comment></comment></comment></comment><comment><USER22> _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.

</comment><comment><USER23> 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)

<comment><USER24> 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.

<comment><USER13> 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.

</comment></comment></comment><comment><USER25> 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!

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

</comment></comment><comment><USER27> 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.

<comment><USER28> 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.

<comment><USER27> 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/>

<comment><USER28> 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!

<comment><USER27> 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>

<comment><USER28> 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.

</comment></comment></comment></comment></comment></comment><comment><USER29> 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.

</comment><comment><USER30> 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.

</comment><comment><USER31> 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.

<comment><USER17> 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 :)

</comment></comment><comment><USER32> 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.

<comment> wh-uws I believe Jquery is doing at least some of that

</comment></comment><comment><USER33> 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.

</comment><comment><USER34> 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.

</comment><comment><USER35> 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"!

</comment><comment><USER36> 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.

</comment><comment><USER37> 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.

</comment><comment><USER38> 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.

</comment><comment><USER39> 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.

</comment><comment><USER40> Yes - it is indeed hard to make something do what it was never intended for.

</comment><comment><USER41> 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.

</comment><comment><USER42> 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.

</comment><comment><USER43> 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.

</comment><comment><USER44> 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>

</comment><comment><USER45> 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!

</comment><comment><USER46> I oft encounter Java, C++ programmers, etc. who don't understand the fragility of the client. This is difficult to deal with.

</comment><comment><USER12> 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.

<comment><AUTHOR> 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.

</comment></comment><comment><USER47> Yeah, web programmers are regular geniuses.

</comment><comment><USER48> s/web//

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

</comment><comment><USER49> "Desktop GUI can easily be made cross-platform."

lol wut?

<comment><AUTHOR> 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.

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

<comment><AUTHOR> 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.

<comment><USER50> 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.

<comment><AUTHOR> Thanks for getting me to see another point of view. Your argument makes sense !</comment></comment></comment></comment></comment></comment>


Development dream teams? - <AUTHOR> http://codemonkeyism.com/dream-development-teams/

<comment><USER2> It's more like "Development's Dream Team." Skills aren't found, they're developed. Developers don't have to limit themselves, but they like to. If they didn't, they'd be doing a different (broader) job. It's odd to see a product manager as a sort of assistant to developers.

Avoiding skill-overlap limits productivity, innovation, and truck numbers. It's hard to connect dots separated by meat helmets, space, and language barriers.

</comment><comment><USER3> One tester for 6 developers ? No project manager ? (a product manager is not a project manager).

Funny world that guy is operating in.</comment>