Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Web Development: A Crazy World (rubiken.com)
383 points by cygwin98 on Feb 12, 2013 | hide | past | favorite | 196 comments


I've found that a large subset of programmers share the same trait as a large subset of photographers: they become so obsessed with tools that they lose sight of the fact that the end product is what matters at the end of the day.

For example: there are many people who spend thousands on cameras and gear, and still take terrible photos. There are many developers who spend a lot of time keeping up with what they think is the latest trend, and yet they never finish any projects that get used.

Then you have the photographers who take great shots no matter what gear they use, and developers who write and ship great code and products using Java and other unsexy languages.

Can better tools help you be more productive? Absolutely. But if you spend all of your time worrying that you're not using the latest and great tools, you won't get much done, and you won't be satisfied with what you do get done. I have 15 cameras and unfinished projects in 10 languages that demonstrate that.

My advice? Sit back, pick technology a couple of steps behind the bleeding edge, and focus on results. Choosing Ember over Backbone isn't going to cause your project to fail; building the wrong thing or failing to finish, however, will.


"Let's argue about whether Haskell or Clojure is better while somebody else ships products using PHP and duct tape."

@agentdero

https://twitter.com/agentdero/status/174965036928868352


If one bothers to learn about tools and why they are useful, they can think a little bit deeper and understand why some intellectual argument do result in software that ships. We write Scala at my company because we've found that with the right developers who seek to understand type systems and fp we can ship fast as fuck. I'm dozens of times faster working in Scala than I ever would be in php. We want to beat the average, not be the average.

http://www.paulgraham.com/avg.html


I've programmed large projects in 6 or 7 different languages now and I simply don't believe your statement "I'm dozens of times faster working in Scala than I ever would be in php." That's like saying "I would write that essay dozens of times faster in Spanish than I would in English."

The tough problems that take most of the time are the design and theoretical understanding of the problem. The actual tools used to implement the solution, while not trivial in their differences, are never as important as fully understanding the problem and having a good architectural design.

Or put differently, if you found me the fastest, most knowledgable person in the world with PHP web development, and then found the same guy for Scala, my assumption is they would both build a particular project in the same amount of time, all other things equal. And I could guarantee that one of the two wouldn't be "dozens of times faster" than the other.


That's a situation particular to you and your team, unless you're saying everyone would do a better job in scala?


Made my day. I will quote this tweet as often as I can to coworkers.


I really dislike the anti-intellectualism in fallacious quips like that. People discussing haskell and clojure are not magically prevented from writing code as a result of their intellectual curiosity and desire to explore better tools and methods. The implication that people who are smart and use quality tools never accomplish anything or do any work is quite insidious, as newcomers start taking pride in ignorance because they are "shipping product" while falsely believing those other people aren't. It becomes used as a way to dismiss opportunities to learn because they've equated learning and being educated with not accomplishing anything.


I guess strictly speaking it's a false dilemma to say you're either arguing endlessly or shipping, but I don't really think that was the spirit of the quote. Unless there are infinite productive hours in your day you have to choose your stack and go for it, and the less boilerplate you have to do to get your stack running, the more time you'll have for productivity.

It's nuanced. We all of us owe our careers to the people who came before us asking, 'what if we could do it this way?'. But, you have to draw the line between intellectual wanking and thoughtlessness. It's a surprisingly hard line to draw - more for some than for others.


>Unless there are infinite productive hours in your day you have to choose your stack and go for it

But the people advocating haskell and clojure have done that. And they feel that their choice worked out so well that they should be nice enough to tell others how good it is. The people "just shipping with PHP" aren't spending their entire day coding, how is spending a half hour advocating for a programming language any different than spending that half hour watching TV (or as a more apt analogy, spending it arguing that PHP is totally good enough because I am shipping software in it so there's no need to ever try anything else)?

>and the less boilerplate you have to do to get your stack running, the more time you'll have for productivity.

This seems like an implication that using haskell or clojure somehow means having to deal with lots of boilerplate. That is not the case, and it is a rather odd thing to believe. This argument actually works against "just shipping in PHP". The less time you have to spend dealing with bugs that would have been prevented in another language, the more time you'll have for productivity.

>But, you have to draw the line between intellectual wanking and thoughtlessness

I believe the idea that there is anyone engaged in "intellectual wanking" instead of "shipping product" is fallacious. I've advocated haskell here before. Obviously I wasn't writing code while doing so, but would I have been writing code were I not advocating haskell? No, I would have been talking about something else, still not coding. Using downtime to advocate for your preferred language, platform, OS, library, framework, etc is a perfectly reasonable use of time, and if you are willing to read the contrary opinions of others, it can even be educational.


> the idea that there is anyone engaged in "intellectual wanking" instead of "shipping product" is fallacious

The idea that you could know what everyone is not doing at all times is fallacious.

The time I'm talking about (and I thought has been implied in this thread) is the time where you sit in a meeting room/coffee shop/founder's house, during work hours, arguing about why X is a better stack than Y and why project Foo should use it instead of your "default" stack (not necessarily haskell v. php; X vs Y).


>The time I'm talking about

And again, I am saying that time is virtually non-existent. It is a red herring, used to try to pretend that "those weird people who actually learn stuff" aren't getting anything done. People are not talking about haskell and clojure instead of working. That is the entire point.


agreed. Just because someone can use a pocket knife and some twine to lash together a chair in 20 minutes doesn't mean someone is going to buy that chair.

Craftsmen care about their tools, and great craftsmen ship. Shitty ones can ship too, but it won't be good.


That's reading into it quite a bit.


Honestly, I wish I could believe that. But I really don't see how I am reading anything into it. The implication that people who talk about programming languages that he doesn't want to learn about are not "shipping product" is quite clear. I don't see any way to interpret that sentiment other than as anti-intellectualism.


Author of the original rant here, funny it became viral and translated to Chinese (and back to English) :)

The rant was made as a comment here: http://www.zemanta.com/blog/i-bet-you-over-engineered-your-s...

Picked up by a Tilo Mitra: http://tilomitra.com/the-crazy-world-of-code/

And as discussed here in HN before: http://news.ycombinator.com/item?id=4226990

The point of it was actually: it's impossible to always keep up anyway so take something you like or already good at and move with it otherwise you'll never get your project done. It's nice to learn new frameworks, and you should, but it's mandatory that by the time you pick up something there will be something else that is considered better / more popular.

(I'm not saying "use Java Applets / Flash / XML+XSLT" just because "you are already good at it", sometimes you must let go of what you know and adapt to change, just don't over-kill it by learning EVERY new technology as it comes out, taking 1 step back is always a good thing)

I think the spirit of it was a bit lost in translation so here is the original text:

> I agree, I can't keep up, I just finished learning backbone.js and now I've found out on HN that it's old news, and I should use ember.js, cross that, it has opinions, I should use Meteor, no, AngularJS, no, Tower.js (on node.js), and for html templates I need handlebars, no mustache, wait, DoT.js is better, hang on, why do I need an HTML parser inside the browser? isn't that what the browser for? so no HTML templates? ok, DOM snippets, fine, Web Components you say? W3C are in the game too? you mean write REGULAR JavaScript like the Google guys? yuck, oh, I just should write it with CofeeScript and it will look ok, not Coffee? Coco? LiveScript? DART? GWT? ok, let me just go back to Ruby on Rails, oh it doesn't scale? Grails? Groovy? Roo? too "Springy?" ok, what about node.js? doesn't scale either?? but I can write client side, server side and mongodb side code in the same language? (but does it have to be JavaScript?) ok, what about PHP, you say it's not really thread safe? they lie?? ok, let me go back to server coding, it's still Java right? no? Lisp? oh it's called Clojure? well, it has a Bridge / protocol buffers / thrift implementation so we can be language agnostic, so we can support our Haskell developers. Or just go with Scala/Lift/Play it's the BEST framework (Foresquare use it, so it has to be good). of course we won't do SOAP and will use only JSON RESTful services cause it's only for banks and Walmart, and god forbid to use a SQL database it will never scale I've had it, I'm going to outsource this project... they will probably use a wordpress template and copy paste jQuery to get me the same exact result without the headache and in <del>half</del>quarter the price

p.s. it would have been a longer rant today, I have lot of new things to add to it, sadly things didn't get any better: Now I'm trying to choose between yeoman and brunch, coffeescript vs livescript vs typescript, LESS vs Sass vs Scss vs stylus, Haml vs Jasmine vs that weird language called HTML, testacular vs mocha, fixtures vs mocks, RequireJS vs CommonJS, with almonds or without, I started using underscore then figured out it's already "old school" and I need to actually use lo-dash. So I think I'm going to take your advice ;).


The absolute worst is SOA (the "enterprisey" buzzword for lots of small services) architectures in which every service is written in a different language!

"Oh, our payment processor is in Node, but our site's in Ruby. Our file caching layer is in Python with bits of C for high performance and our crypto stuff is in C++ with Boost and libcryptopp but it talks to a Java app that uses Cassandra..."

(Runs outside, sets self on fire, shoots self in head...)


I'd take that situation any day over a monolithic monstrosity written in only Java. Small losely coupled services that do one thing is the only way to build a large system if you want to keep your sanity.


What's wrong with that if every service is using the right tool for the job and provides a sane API? Maybe maintenance?


A few things:

(1) Code reuse, or lack thereof.

(2) Multiplication of surface area for things like security bugs... now you have five different stacks to keep track of security updates for instead of just one.

(3) Multiplication of deployment resources-- now you need multiple VMs, maybe multiple instances with different stacks to run them on, etc.

(4) Developers can't pinch-hit for each other unless they know every damn stack in the world.

(5) If you sell, God help whoever has to support that stuff in your new organization.


(5) If you sell, God help whoever has to support that stuff in your new organization.

It would be interesting to know if an acquisition fell through because due diligence revealed something like this and the purchasing entity didn't want to deal with that mess or it conflicted with their culture.


Absolutely not - no it manager worth their salt will pass up the opportunity to say - well we can do it but we will need more cash - we have to hire a ruby team a node team a ...

:-)


In the 1970s, the US DoD had what one could parallel to SOA. They had hundreds of languages; they'd start a new project and with it came a new programming language, stack and toolset. They created the High Order Language Working Group which worked on a document of requirements for one language to rule them all, the Steelman. A competition was had to which 4 colorful languages were entered. The winner, Green, became Ada which coincidentally has just wrapped it it's latest language revision process at ISO. Much of the Steelman focused on maintenance, reliability, readability and other traits that make for good software that will last. It is a good thing take that step back and make sure we are programming up to her level.


Yes. The more different languages (and frameworks) someone has to know, the harder it is to hire them. If you hire people who only know the language of one small part of your system, they can't help out on other parts during emergencies and there will be difficulties adding new parts (which language do you use, or which existing part do you steal developers from). If you hire people who know one language and train them in the rest, the more languages there are the more that training will cost.


And it's rather a good thing, no? I mean, for me, as a developer who happens to know at least a dozen of languages quite well and has a basic grasp on a dozen more, I like it that way. Namely, I like being a harder to find good with limited supply, this means that I will be paid more.

Otherwise what would be the point of learning all these languages, frameworks, libs and environments? Of course the learning experience can "make you a better developer", but is it supposed to be only that?


Read the article the original rant was posted as a comment on. It discusses exactly that.


Author of original post here ...

... this is a crazy trip for a comment to make! And I still think most people over-engineer and over-think their startup tech.

Customers don't care what you use, as long as it solves their problem. The rest just helps with recruiting I guess.


I am amazed a rant can go English -> Mandarin -> English via half the world's tech forums, and still be recognised by its original author.

But what really blows my socks off is how a tech forum in Beijing follows rants from Slovenian blog to a Californian forum and back again. And it actually matters to the Chinese because they liked it as much as we did.

Welcome to the new global culture, sharing the same memepool.


This is scary, we are loosing diversity at an incredible rate.


Of all the conclusions to be drawn from this observation, I believe yours is the most pessimistic.

I'm much more excited by the fact that information was able to quickly traverse national and language barriers, making it's way all around the globe to catch up with where it began in such a short time. That's pretty amazing if you ask me!


Heh, not surprising that comment isn't popular among the group of people who are currently exporting their worldview.

Harder to see the harm in it when it's your culture that's becoming the monoculture. That's the "good one"!


I don't think that's entirely fair - we can safely assume the Chinese tech forum techsmth has a techie culture, because to the relevance of the rant.

That does not mean they do not have heavy influences from their own (and from a quick surf-by Japanese) culture - lots of threads on photos from the 70s and what was it like then.

They will export back. Just because all the money in Hollywood is forcing young pretty WASP vampires at us does not mean its the only way to express oneself


Yeah, it's not just a one way thing. "Western" culture and American in particular is mostly exporting at the moment. I just found it quite funny that a pro diversity comment was downvoted and so disagreed with (well, it was when I posted) here. The startup culture (that HN had a large part in defining) is extremely monolithic and really skewed to exporting ideas right now. Sure, it's happy to import arguments or small ideas from anywhere, but only if they don't disturb the core philosophy.

I feel a powerful need to poke at people, especially smart ones, when they seem to be knee jerk supporting the status quo. Just a good/bad habit of mine.


Some forms of diversity we want to lose - the current Syrian culture stands as a good example, China's own culture of terrible human rights abuses is another. On a more usual definition of culture diversity of attitude towards race or sexuality covers diverse opinions such as the KKK and that guy who protests at gay funerals.

Not all diversity is positive - and given that the norms on the forums this passed through are themselves widely different is a indication of how culture will disconnect slightly from geography.

A genepool is strong if it has variety and if it can spread the beneficial genes widely. This can be dichotomous, but trust me 4chan proves generating a wide variety of memes quickly is something we can do.


I don't think this implies we are losing diversity. Internet makes easy to connect with like minded people and share information. That sounds good. Like minded people around the globe becomes more alike? Maybe. But just in the field they share. And they started with similar interests anyway.


And the ability to spell as well.


Ironic since the original comment complaints about too much diversity. Just because a good rant is recognised across cultures does not imply a loss of diversity. Somethings are just common on this planet, like gravity.


It stands to reason, therefore, that humans do not want this diversity.


Because humans are rational actors with perfect foresight?

What on earth would make you think that this leap "stands to reason"?


To those who are confused due to the myriad of OPs here, Swizec is the author of the excellent blog post that is the beginning of this interesting global thread.

(I bet you over engineered your startup, posted on July 2012 at http://www.zemanta.com/blog/i-bet-you-over-engineered-your-s...)

If you haven't read it yet, highly recommended, much better than my rant.


Sometimes I love over engineering my projects. It helps me hone my skills and keep updated. But I limit my self to one side. E.g. Back end or front end.

In my case, it's back end. API and stuffs. I'm also trying to limit my self in using different kinds of language. My current Back end stuff today are Grails for web app, Scala for non web, Redis, memcached, MongoDB.

Don't ask me about front end. I'm not updated with it by choice.


Hi, OP here. Didn't know the existence of your original post, hope that you don't mind my 'unofficial English version', :) I've updated my blog to reference your post and previous discussions. I'm glad that my version isn't too far off.

it would have been a longer rant today, I have lot of new things to add to it, sadly it didn't get any better

Please do. I would look forward to the newer version.


:)


"you'll never get your project done" This, it is about shipping product in the end. You will have a hard time selling an incomplete project. You are solving problems for customers.


Thats true of almost any hobby/endeavor. I know some people who call themselves "guitar players" but all they ever do is go to the guitar shop every weekend to exchange gear. They never actually play their instrument.


Another problem with this is that tech companies (mostly startups) also fall into this trap where they feel like if they're not using the absolute latest and greatest frameworks they cannot be successful. This leads them to only hire developers who are "experts" with these frameworks (which is basically no one since they're so new) and they spend more time figuring out how to adapt this new technology to their business than they do shipping an MVP. It becomes a viscious circle because now the developers who are experts in some older technology feel like they have to spend all their time learning the latest shiny toy so that they can compete for jobs with said startups.


Absolutely. A truly cool app written in VB.NET is more interesting than FizzBuzz in Haskell.


Depends on the audience, and the implementation of fizzbuzz.

This haskell fizzbuzz is great: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html


Beautiful. I think it's also important to recognize that all tools have their warts, and to stop trying to pursue The Perfect Language/Framework/Environment™, because aside from marginal slow improvements, many modern tools are not that much better than their peers.


"A bad carpenter blames his tools." -- Unknown


Carpenters with bad tools often permanently lose fingers.


Bad tools can still severely hamper even the best of experts.


Bad tools also completely confound beginners and can make them think they aren't suited to or do not enjoy an activity that they might otherwise enjoy if they had better tools.

For example, I used to hate cooking, because I hated the prep work, it was very difficult for me. It turned out that my hand-me-down knives were very, very dull, a fact I didn't realize until I decided to invest in a nice set of Henckels. A sharp, quality knife makes the prep work easy and now I enjoy cooking much more than I used to. And now, whenever a friend tells me they want to learn to cook, my first recommendation is to make sure they have a good sharp set of knives, because for me, that made all the difference.


Absolutely. In this case, though, bad tools aren't the problem. The problem is that there are too many roughly equivalent tools, and many of them are very good, but there is a lot of arguing and navel gazing about which new one is the best to use.


A good carpenter blames himself for using the wrong tools and gets new ones?


A good carpenter knows how to use his tools and which ones to use for the appropriate task.


A good carpenter doesn't fail, so he doesn't blame anything.


Good carpenters ship. Or at least they get wood.


"A good carpenter will crave wood with its own teeth if he can't have good tools." :)


The second sentence really tells all. " Just learned Backbone.js and only found out it’s already out of fashion." This is why critical thinking and a sight of the big picture is so important. Who cares if something is fashionable? Does Backbone help you solve your problems? Yes? then use it. No? Don't use it.


"Does Backbone help you solve your problems?"

This really bears repeating over and over again, and I think it's a corollary of "start by writing the dumbest thing that can possibly work."

If you start with dumb, simple things, the problems become more obvious. Dumb simple things tend to shake out the parts that are tedious to build, or non-conformant, or confusing to read, or hard to maintain. It may be that Backbone (or any of the dozens of other gizmos) alleviate the problems, but you really have to understand the problem first.

I really think a lot of people are seduced by the marketing of various tools and frameworks into thinking they have (or will have) problems that they don't actually have. Then they end up with over-engineered solutions that are all the things they hoped to avoid.

Don't meant to criticize backbone, or any other framework (or language, or platform). A fancy, hip tool can be just thing. The question is: do you know what "the thing" is really for, and does it fit your situation?


I hear what you're saying, and I basically agree. However, I still see some shops building new product with Jakarta Struts, hand coded javascript, and no continuous integration. They spend way too much time doing things that could be automated, which would allow them to spend more time on quality, or more features. (Say, if you want to use a java webstack, have you heard of spring & jquery, and maybe you should try hudson for your builds?) So, its also important to keep abreast of whats happening in the field, so long as you don't fetishize the newest/latest thing.


Exactly. Unfortunately this kind of discussions often leads to "black"/ "white" suggestions instead of the looking for a good balance between poles.

I wish all the energy of these polarized discussions would go into learning of the ways to find a good balance.


I don't know if this is good or bad, but when I read "... the dumbest thing that can possibly work" I immediately thought "PHP!"


I agree 1000% - very good point. The best tools (for you) are the ones that solve the problems that bug you the most and feel the most "right". It's a personal thing.

For example: In my case, I used to write a lot of plain HTML. I found it got annoying to type brackets and keep track of all the closing tags. So I tried ZenCoding, and it helped, but only on creation, not on editing. I finally settled on haml, because to me (not everyone), it solves the exact problem that I found troublesome and gave me the results that I like. No closing tags, cleaner markup. Others may disagree, but that doesn't matter - I like it for my purposes, and that's all it takes.

So to your point - learn the underlying tech, find your personal pain points, and use the tools that best solve them for you.


Haml is soo 2012. :) Try Jade (http://jade-lang.com/), it has a much cleaner syntax and integrated markdown support. You can even use it as a preprocessor for other templating languages.


Totally agree plus Haml is slow like shit.


There can be significant risk in choosing unfashionable tools if upstream maintenance dies off and you aren't equipped to maintain them yourself.


No, this isn't correct. Fashionability has nothing to do with it. PHP is not fashionable - in fact I'd argue that right now it might be the most despised language around - but upstream development isn't slowing down at all but in fact speeding up and it's being improved at a very rapid pace as of late.

I think choosing fashionable tools because you think upstream maintenance will continue into the future is actually misguided. In my experience the old, boring tools are what have staying power. The new fashion comes out, gets lot of attention, then the next big thing steals its thunder and you start seeing your fashionable tool's upstream updates go from a stream to a trickle to droplets here and there and finally you start to wonder if the project is dead.

Maybe you meant something different but just by going off what you said I'd say you're wrong. There's a difference between something popular with staying power and the latest fashion. I think the JavaScript world, node.js in particular, is in a period where for all its new hotness we'll start to see a lot of these popular modules just die. I think node may soon become a good example of why fashionable tools are not to be relied upon. That isn't to say that node itself is going anywhere but rather that its in a transition period from new hotness to something more stable and the NPM packages are what we'll see start dropping like flies before we can be sure what we can count on later.


Right, the difference between "fashionable" and "unfashionable" is just what the cool kids on HN say it is.

To take your example on a stroll, PHP is like regular (non-skinny) blue jeans. Everyone knows them, most people use them, every store carries them, at one point in history they were revolutionary, they're probably never going to go away. But the cool kids say skin-tight crazy-colored jeans are the new hotness...


I think this goes for the latest and most hyped where the communities could be small. A good middle ground would be well-established projects with a relatively big community and preferably strong industry ties. Usually projects over a certain size will survive by some faction of the community even if it's losing steam or something dramatic happens sort of like MySQL and MariaDB.


While some might complain or worry, this is what makes this field so fascinating. A myriad of options, toolsets and methodologies means that it is alive, open and thriving.

Imagine is Adobe, Oracle or MS had won the Flash/Flex, Java or ActiveX battles, where would we have been today?

As much as I use Chrome (and love it), I can't help but admire the work done by Mozilla to rescue the Netscape codebase and mould it into Firefox. I think they deserve a lot of the accolades that enables this zany ecosystem to thrive.


> Imagine is Adobe, Oracle or MS had won the Flash/Flex, Java or ActiveX battles, where would we have been today?

I don't know what 'would have been', but I know that we would not be where we are today (in a positive sense) without those companies and the many many technologies and products they have provided us with (even though some of them can only serve as bad examples).


I'm not bashing them as a whole, just some of their technology decisions. To be honest, I've always felt that MS gets a bad rap. As much as it was anti-competitive, bundling IE in Windows enabled users to download alternative browsers. Obviously, there are other ways to do it but I doubt many users would have gone down that road with higher technical obstacles.

As for Oracle, not much can redeem them. Flash had it's day, but I wish Adobe would let it die already.


> As for Oracle, not much can redeem them.

If anything. :)

> I wish Adobe would let it die already.

I know many here can't accept the truth that Flash had, has and will have its place on the Internet. There was a need for such a technology and there still is. I will be here for another 5-15 years or so, so we should make the best out of it instead of screaming 'DIE ALREADY'. But as always, there is plenty of room for improvements. :)

FYI: Adobe donated Flex to the ASF a while ago and the mailing list is already the most active on ASF. It is actively developed and people are quite motivated.


If it wasn't the security issue laden monstrosity that it is, I could see it living on.

But the facts are that the only real "secure" version is the PPAPI implementation in Chrome (which has it's own limitations), Adobe has dropped future development for embedded systems and that it is almost non-existent on mobile does not speak to the longevity that you predict.

Flex is cool, but it's dependency on Flash will be it's noose.


I love how YouTube approached this: Choose the simplest and most stable tools and use those.

It's a great strategy for developers that want to ship. Otherwise one can easily be lured by the siren calls of new tech.

I've certainly fallen victim to this temptation, but I've found that as I let go of the new pretty things and focus more on using the old boring workhorses of the interwebs, I get a ton more done.

Plain vanilla seems boring - but it's bad-ass in web architecture. We forget that YouTube had plenty of competitors that were well ahead them before they dominated.

They kept things simple and solid and that allowed them to scale. It's certainly not the only reason they won, but I'd bet it's a huge part of it.

---

For more on YouTube's stack, see: http://highscalability.com/blog/2012/3/26/7-years-of-youtube...


It blows my mind sometimes, looking at a web page made of mostly simple text and a few images, to view the source and see page after page after page of CSS and javascript just to make something that looks only slightly better than

http://www.w3.org/History/19921103-hypertext/hypertext/WWW/T...


"Slightly better" is a subjective assertion. Especially in the webdev world where the pace of design and functionality improvements tend to move so fast. Granted, you may display the same/similar information in a text-only page, such as your example. But you won't be engaging users much or creating a site that people will want to see & return to, which is where the money that is spent on webdev work generally comes from.


Wow. Fantastic piece.

This is precisely how I see the ecosystem too. If I've learned anything:

1. Focus on something —Rails, Python, Javascript, WordPress, something 2. Learn to actually program — any language will do


Maybe this is a side effect of this current day and age being a specialist society? Everyone needs something to differentiate themselves from the crowd, and Javascript being such a recent growth in setting a "standard" with regards to frameworks and tools makes for a good incubator for specialists.


I'm far from an expert coder compared to most on here...but...what's the big deal? Once you've grokked server-side code and framework, is it really that hard to move from Rails to Sinatra or even to Django? Once you know databases, how hard is it to switch from SQLite to Postgres or to even Mongo? Same goes with Javascript frameworks.

Now, I'm referring to the scope of what a web-developer needs to know to interface with these technologies...obviously, a database engineer is expected to dive deep and know all the quirks/limitations of NoSQL vs SQL.

Is the complaint that "Oh shit, I don't know if I can learn new syntax?" Or is it more, "The hiring market is segmented by too many technologies for me to claim to be an expert at?"


It depends on your definition of "know".

I'm a .NET developer by day, and I've met numerous Java developers that have crawled into a .NET role, either as a contractor/freelancer or into a entry/mid-level role at a company, claiming that because they are fantastic Java developers they can pick up C# in no time at all.

Yes, if you have been programming for a number of years then the syntax will come quickly, and you'll find yourself able to use the language. Top that off with an existing code-base and it's fairly easy to get started and to write some usable code. However, in my experience, the kind of ego's we see on sites like Reddit and HN either churn out:

1) Decent code, but only after comparing their own code to what is already out there out of fear of writing something that people will laugh at, regardless of if it works or not.

2) Code that looks like a Java developer wrote it, either rewriting methods that are already a fundamental part of the .NET framework, not using LINQ/Lambdas or anything from C#2-4 and failing to use any of the built-in tools within Visual Studio to check code.

The better programmers fully immerse themselves in the differences between the languages and how they are used. They have chosen to use this new language/framework for a reason, and they enter that world knowing why they did so and what they need to know to become productive for that given task.

As I'm sure everyone on here understands, there is a huge difference between being able to write some code in a given language and working on a given project in that language with others.


This is generally solved with a 1 week onboarding processing into company culture/dev tools. Normally done by assigning an experienced engineer a week of priority time with the newcomer with the focus on showing company tools and techniques. This really shouldn't be an issue if managed even slightly.

LINQ or VS.net compiler features are not difficult to grasp.

So if your 'huge difference' translates into a week of onboarding time, then sure, you can call it a 'huge difference'.


Regardless of how good a developer is, there is simply no way that a single week will get a developer proficient in a different language to write sufficient code. Yes, any sane dev team will dedicate senior developer time towards getting a new member up to speed with the code base, but any transitioning developer working on a non-trivial project will not just pick up everything within a week. It might work like that in a beginning startup with a small code base, but it just doesn't work like that in your typical business., to truly understand how they work within .NET, and to conform to the current standard of how code is written within the company.

That doesn't even begin to scratch the surface of how long the transitioning developer has been an employee. It's very likely that this developer is brand new to the team, and even new lead developers or team managers take longer than a week to be proficient at a company.

Yes, LINQ, lambda expressions and many of the other constructs within C# are easy to understand. What takes time is learning where to use these things.

A transitioning developer needs a week of time with a senior dev and the code-base at minimum. They need at least a month to write code to the same speed and standard of another team member, and that is if they really try and adapt to their new tools and environment.


> "The hiring market is segmented by too many technologies for me to claim to be an expert at?"

I think that's a concern to many new programmers (myself included) when looking at the pace these tools and frameworks are coming out and then maturing.


some companies hire only for particular skills and experience with the technology they already use. these companies are looking for quick and dirty hires to do work on day 1.

other companies hire for the human himself/herself and will understand that a good hire will be able to learn new technology at a rapid pace and the important things have to do with learning ability, perspective, and drive.


As a computer science major this doesn't worry me at all. Learning the fundamentals, the theory, and the overall science leads me to believe we will be just fine on the market.

As an intern I use PHP on a day to day basis. At school classes have been fairly language agnostic, switching from C++, C#, Java, PHP, and others. I have classes that force you to do all your work in the terminal, and some that allow you to use powerful IDEs. Furthermore, I have classes that you rarely even touch a computer (Algorithms, which should be more aptly named Algorithms II since Algorithms & Data Structures is a pre-req).

In my experience, switching tools/languages/frameworks isn't as hindering as lacking core engineering skills.


Learn technologies that are popular, such as jQuery. The community will help make this easy. You will use jQuery on almost every project, so this will be time well spent.

Master components that are core, such as JavaScript. You will use JavaScript on every project. A true understanding will be essential to everything you choose to do with it. It amazes me how many developers do web development without ever trying to learn how to write effective JavaScript.

Lastly, do something just for fun. Programming is fun, enjoy it once in a while. Try a new language you will probably never use. Use a new framework or library. Look into something old. It is amazing how many old things are new again.

Do all this and the web won't be such a scary place.


Quite amusing and very true. Just had a little look at Handlebars - writing 3 to 4 times as much to generate very little.

Also reminds me of this tongue in cheek site : http://html9responsiveboilerstrapjs.com/



3 to 4 times as much as what?


I think its so great that we have so many new toys and such innovation going on in the world of the web. I remember when I was first starting out as a developer (when I was 10, it was 1996, I wasn't very good) all we had was HTML and CGI scripting. CSS was the new hotness that no one understood and PHP was just learning to crawl. Those two technologies were all there was and I don't remember other developers ever going nuts like an adoloscent girl at a Beatles concert over any of the stuff that was coming out then. It really is nuts how we push all this latest and greatest stuff only to abandon it next week. I remember just about a year or two ago the HN community was in absolute love (like 'The Notebook' style, forever and ever, everlasting love) with Rails - even more so than now. There were endless debates over its merits and its pitfalls and I watched as the people who took those debates the most personally agonized over every small bit of the development process while those who didn't really care as much just built stuff.

It really is great that these new toys are coming out but what I see as the real problem is that we lose sight over one particular piece of the bigger picture. We forget to ask ourselves "Does this solve my or my users' problem(s)"? Even when we do ask that question we then get caught up over minutia like the elegance of code and performing between two competing tools.

That stuff doesn't matter yet! What matters is that you grasp the concepts the tool promotes and can use it effectively. Beyond that there's usually not much difference in the "elegance" or performance of your code between two tools and it usually comes down to subjective views and how you work. Even if you do choose the "optimal" tools you're most likely fucking up some other part of your codebase anyway. None of us write perfect code. That's why refactoring is a thing.

Are you stuck when it comes time to choose handlebars or mustache? Can't decide between Ember and Backbone? Is Rails or Sinatra better? CodeIgniter or Laravel? Thinking of using Django over... uh... whatever the competitor to Django is? Then you've got your head stuck way too far up your ass and focusing on the wrong thing. I don't mean to offend with that crack - I too have had my head up my developer ass many times before and all it got me was a 'Hello World' page in a project that was stalled before it even started.

So my point is that using the new hotness is fun and challenging and it can do you a lot of good but the moment you stop developing and start chasing the new hotness you've become kind of a tech groupie rather than a developer.


The analysis paralysis on which tools to use really comes from lack of focus on which problems you wish to work on. Many people are either told what problem to work on (employees), or have an unclear focus (I just want a job, any job!).

Therefore, they feel they need to learn and use every tool so that they can be prepared for "choosing the right tool for the job".

The solution is to focus on projects of your choosing. When it's clear that your problem is a nail, you can tackle it with any tool that can pound with force: hammer, mallet or shoe heel will all work; frozen cucumber will not. In other words, there are clear wrong choices - get rid of those and pick one of the right ones. The paralysis melts away once you have a problem around which to frame your analysis.

Another beautiful thing about web development: you can learn to use a hammer (let's say, Rails) and you can use that hammer to pound a million nails.

It's a fallacy to think that you have to learn everything, every methodology, so you can be prepared for some ambiguous future project, in hopes of solving some unforeseen problem.

This approach has another great side effect: you won't be easily side tracked by the new shiny thing that promises async evented dilly every few months. If it doesn’t solve YOUR problem, move on.


Most of the 'mess' I see is the current state of Javascript frameworks, which are in the Cambrian explosion phase of things.

I'd just use Rails as a default for most things I do these days, and if it's not a good fit, evaluate other technology.


I was just about to post "Cambrian explosion" as an metaphor for the state of javascript libraries.

There are good reasons to get the HTML formatting off the server and into the client, so the new style JS is all going in the right direction. So another metaphor:

All these frameworks are trying to solve the right problem in the right direction - which one will win out eventually - who knows, but even if you hitch a ride on one that stops half way, you are half way closer to the right destination than if you wait.


What will be funny is when we move everything back to server-side once we don't have network latency/bandwidth issues.


Really? transmitting just the data and letting the client handle the display and interaction seems a much more natural split.

It alos makes my server software conceptually simpler - which is always nice


I agree. Separation of concerns is a very good design pattern. MVC server frameworks (like Rails and Django) have already separated out the concern of displaying data to the user with their template systems. its a very reasonable next step to just migrate the entire template system off the server and let the client do it.

This has gigantic performance increases for servers under heavy load, and it puts the display logic in a domain that is more naturally suited to dealing with it (JavaScript and the DOM instead of treating HTML as just a string).

The pattern also promotes the use of RESTful APIs for data access from the server, which has the wonderful bonus of allowing you to make your data publicly accessible for free if you want to.


Templates... ok - that's fairly convincing. I'm less convinced about keeping the model and controller client side, because they end up replicating stuff that still has to live on the server anyway, to some degree. That just seems to make things harrier than they were to begin with.


I think if you are trying to replicate the same functions you are right. But if I have, say, a User model then it is merely a conveniently name for two groupings of functions.

My client side user should know nothing about Dbase lookups or persona verification - just as server model should not care about displaying addresses. Overall I think getting the crap out of the server makes it much much easier to reason and architect


In the absence of a way to transmit information faster than light, we will always have network latency issues.


> I'd just use Rails as a default for most things I do these days, and if it's not a good fit, evaluate other technology.

But ZOMG RAILS IS INSECURE, quick, switch to something else! [/sarcasm]. Evaluating other technology is the opening of the rabbithole.


+1 for ZOMG


Given the constant flood of Ruby and Rails security problems of late, it would seem better to start new projects with something a bit better engineered.


I understand where you're coming from. But don't you feel that the security fixes are coming out in a timely fashion and once they're shut, they're gone for good? (At least that particular exploit)

Slowly but surely Rails will become robust because of this.



Yes, this

The amount of 'meetoo.js' is amazing(ly bad)

Because of course everybody has to have "MVC responsive html5 cascading containers with chocolate covering"

Not to mention most of these are underdocumented, bug-ridden, too specific, etc

Need a js library? JQuery. period (and don't get me started with mootools, I need to ship, not swim around their docs figuring out how to do what in jquery is easy )

And focus on the backend, a competent backend development will eat your whatever.js "specialist" except for the most specific cases


> Need a js library? JQuery. period

Sure, if you love writing the same boiler plate code over and over again to make sure your dom is updated and your data is synced. JS frameworks are solving a problem, whether or not people like that there are so many out there. We are in the early days, and of course there's going to be a lot of competition. A few will rise to the top and become standards. You know, there were quite a few competing JS libraries before JQuery became so popular..


What I mean is "don't use a jQuery competitor (or jQuery 'sized' tool) in place of jQuery"

Sure, if you need something else/more use it, still I've been burned by those "wonderful js frameworks" and I'll make sure to not use them unless needed and thoroughly evaluated.


Well, at some point, there will emerge the "jquery of js frameworks."


> And focus on the backend, a competent backend development will eat your whatever.js "specialist" except for the most specific cases

These days backend is pretty straight forward, mature, and usually easy compared to client side.


True, for CRUD apps (which are most of them)

Still, the back end sees complexity the front-end doesn't. (it is mostly irrelevant for the Facebook frontend if they have hundreds or millions of servers - it certainly has an effect though)


mootools documentation is fine. It's just different and therefore "harder". Has nothing to do with your ability to "ship" it's you're lack of knowledge of the library that's the problem. Not the library.

If you can't work a saw it doesn't mean the saw sucks and scissors work better. It means you can't work a saw.

that was probably a bad analogy but I can't think of any better one atm.


'mootools documentation is fine. It's just different and therefore "harder"'

I think I know what you mean, the docs are mostly a reference documentation from what it seems.

But the learning curve is steeper, especially with lack of documentation focused on the beginner.

I know, Django docs are similar (but less worse in this aspect). Still, when you finish the tutorial you don't know where to head.

That's where jQuery shines, it takes you through every step, not to mention it's easier to understand. Hence, more plugins and more users.

"It means you can't work a saw". At this day and age, "saw manufacturers" have to be concerned about the easy of use of the saw.

Of course this is an analogy, because js tools are "free", but it's still a nice idea to go for the better cost x benefit in terms of capabilities/community/libraries etc.


This piece first appeared as a comment on this page in ENGLISH in July 2012: http://www.zemanta.com/blog/i-bet-you-over-engineered-your-s...

while the author claimed to have it translated from Chinese back to English, surprisingly almost exactly the same as the original English version. I guess English-Chinese-English translation has reached an amazing stage!


OP here. I've updated my blog to credit eranation (author of the original English post) and relevant links. I was not aware of the existence of the original English post and thought that I should share it as lots of us suffers the same frustration.

I guess English-Chinese-English translation has reached an amazing stage!

I would take it as a compliment as my 'unofficial English version' isn't too far off.


Yes, it is a compliment :) btw, if it is possible can you also show the link to the Chinese version?


> I guess English-Chinese-English translation has reached an amazing stage!

It's a misunderstanding and/or an illusion.

Most of the technological terms, e.g. jquery, node, ember.js etc, were merely copied from English to Chinese without translation. And BTW the retro-translation reads as if it was translated with Google translate service, which explains the low quality of translation.


Call me a masochist, but I love the huge amount of selection, I love how passionate people are about their own solutions meaning they rapidly improve, and I love getting my hands dirty with pretty much anything I can get my hands on.

It's great having too many tools in your toolbox.


That last sentence conjured an image of a person trying to drag a giant toolbox with him everywhere for some reason :) I do tend to disagree with the sentiment though.

The initial time investment per tool is steep.

Also, the tools' values deteriorate rather rapidly. Languages/Frameworks will become less used over time as something new replaces them (generally), and even your specific skills with a language will get worse over time if you aren't using it.


Web Development is fine, it's the Javascript, and especially the frontend world that's the problem.

Why do we bother with a language that's inconcise, lacks so many common, useful functions (enumerals, strings, etc), and general doesn't do what we want it to do? In spite of fundamental problems, people try to address them with custom solutions. Those are inherently very PERSONAL solutions - because everyone wants to do it well and better - bound to raise discussion and competition at some point. That's what's happening. People are trying to fix something broken with their own, idealistic ideas.

There's nothing wrong with that, don't get me wrong, but I think we all know that we can do better on a more fundamental level.


I'm shocked nobody has pointed this out, but we "bother" with javascript because it runs in browsers, and browsers are ubiquitous. Why does everyone who has personal issues with Javascript or web development in general seem to forget that it has become popular because of the webs ubiquity and the promise of cross-platform development?


And that's exactly the problem. The promise has been there for _years_, it just never has been made up to. Sure, cross-platform development is cool, you can do that in Java. I can also do it in Ruby, Go, Rust, Clojure, Erlang or Haskell. And those solutions don't feel like a duct tape on a drainpipe.

It's still the same as it was 10 years ago, we can't wrap our head around a solution that works for all browsers, hence, we can't just make the language concise, let alone change it fundamentally to solve the more actual problems of front end development. And then, if frameworks don't have to fix a language in their own way, we can get something real going. In any case, I just can't wrap my head around the discrepancy as to why-the-fuck-still.


I'm not sure I'm understanding. I develop web applications that run well on all major platforms and it's not nearly as hard to do as people make it out to be. And the difference between Javascript and Java, Ruby, Go, Rust, etc. is that it runs in an environment that literally everybody already has installed when they buy a computer - the web browser. No mucking around with installing the JVM, or downloading an application to install and keep up to date, etc... you just point your browser to say, Facebook.com or news.ycombinator.com and boom, you are served a nice, cross-platform application that never needs updating. Thus, the popularity of javascript and web technologies.


Ubiquitous does not imply concise across. Which is not the case.


Day to day I work in C++. I've also used many much more elegant languages, Python, Haskell, etc. Right now I'm doing web development in my spare time, and I don't see where this hate for JavaScript is coming from. Sure, it might not be the prettiest language in the world, but who cares? It's what's available to us, and I'm actually quite satisfied it's JavaScript and not something worse. I don't seem to care half as much about languages as the average hacker news reader, I'm not sure why. I care about what I'm trying to create.


i guess you never had to build large applications with javascript. Imagine you need to write a js app by the size of your C++ programs ? that's what webdev are asked to do today, but without a built-in module system , without strict typing , without built-in class system ( you need to roll your own , which may not be compatible with the one used in the library you might use ) , without the insurance that the API you use works across all browsers , ... JS doesnt help you to build applications it comes with no battery included.


Is it very hard to fork Firefox or Chromium and replace the JS engine by luaJIT, pypy or even llvm ?


As with all technology choices, you've got to draw the line somewhere - new and risky, or old and proven, or somewhere in between.

What matters these days is probably how well you and your team already know the technology, how good the documentation is, community size/takeup, how quick the devs are to respond to issues, and how mature and stable the API is from release to release. How popular/old the technology is also counts for more if you're looking to hire people with experience in it.

MVC on the client is becoming more and more important, once you start slapping a lot of js on a page it can quickly become un-maintainable. We went with Backbone as Ember was changing too quickly in backwards-incompatible ways.

MVC on the server (Django/Rails/Express/whatever) still has a place - you want something serving restful data / html skeletons and mapping urls to responses. In my day job that's Spring MVC because that's what people here know and it ain't broke.

Frontend language choice: Learning JS seems to be the natural choice here. Things that compile to JS e.g. CoffeeScript or DART might also work for you; I don't have experience with them but I'd imagine debugging problems in the resulting js would be a pain until browsers support them natively.


I used to develop with JavaScript, and JavaScript with Backbone before we switched to ClojureScript.

Backbone helped me to better structured my code but I found it also brings its own problems. There is a quite a lot of boilerplate code and views composed of other views were for me hard to manage.

I also wrote some macros to use Backbone from Clojure but the mismatch between object/mutable and functional/immutable is too high.

Finally the approach from http://clojurescriptone.com/ seems promising. It uses a simple yet flexible event dispatcher. Add that a templating engine and you are done.

Debugging ClojureScript within the browser is harder than normal JavaScript but it's easy nonetheless to find what generated JS functions corresponds to your ClojureScript code. If you compile in debug mode you can set a breakpoint as usual. Compiling ClojureScript adds a bit of overhead to the workflow but I compiled it continuously in the background via Emacs and forget about it, it just popups when an error occurs.

In general I found ClojureScript much cleaner than JavaScript and it's easier for me to write cleaner code with it when the data manipulation or the logic is not trivial.


Yeah, we had to write our own view nesting logic and allow this to be used within our dustjs templates.

Marionette (https://github.com/marionettejs/backbone.marionette) lets you do all of that stuff out of the box; I've not used it though so can't comment.


I like many of the state of the art frameworks, especially backbone.js and I'm really thankful for how much impact they had on making complexity in web apps manageable. That said I absolutely agree with you regarding the fragmentation problem which seems more like a stack problem to me.

For me personally it looks like what the web desperately needs is a common ground for how widgets work and behave. Web Components look like what we will get and I really can't wait to see that happen: https://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/...

Here are some examples from Dart Web UI (web component polyfills for Dart) http://www.dartlang.org/articles/dart-web-components/

Also here is a great article about the web stack fragmentation that you might be interested in: http://zef.me/4835/dart-web-fragmentation-vs-web-development...

Exciting times, Thomas


This has been my experience, too. But I think it's wrong to jump to the conclusion that because going too far and having to learn too much is a bad use of time that you should just stick to one or two things. This is black-and-white thinking and I think in this case, your response should be in the context of the problems you face and the career you are building.

We do need to move along with technologies if we want to stay relevant. But you need to know what's a fashion and what's worth adding to your skillset. After leaving University I mainly knew Java but I learnt PHP and JavaScript because I wanted a web development job; later on I felt that none of the cool startups were using PHP and all of its warts had become very apparent to me so I picked up Python which seemed a lot more elegant. (However this was more a case of fashion that gave me access to higher-impact and higher-salary jobs. My actual needs to code in a general-purpose language with nice libraries isn't a worthy goal in itself.)

Currently I am working entirely in Node.JS and I don't consider myself to be drinking the Kool Aid because it made more sense to stick to one programming language and I needed long-running processes. I do have to be careful to not add too many libraries, however. There is so much activity in the JavaScript world currently.

I say you should focus on your career and wherever you see that leading you. To a certain extent programming languages and libraries will come and go (they will coalesce on principles so this is worth paying attention to), but architecture remains the same, social structures and positions remain the same, and sales remains the same. Apply yourself where you can see the maximum potential for personal growth and personal growth that doesn't slip (as it will when you have spent 20 years programming using the library X and everybody else switches to Y.)


I don't agree with this rant. Just becuase 50 libraries exist doesn't mean you have to be an expert in all of them or even use all of them.

I think it's great that so many frameworks are sprouting up, and once you've been around long enough, it shouldn't take more than a weekend to try one, see the benefits, and use it or learn from it and move on.

Since when is having more choice bad?

I've been out of web development for a number of years, and it is delightful to have all these options now. I am loving working with knockout.js and looking forward to trying ember next.



I agree and can see where OP is coming from. As a Chinese, I notice the difference in how we approach problems. Let me make an analogy:

Chinese and western dude learns guitar. The Chinese player will worry about the scales, the hammer on/off drills, chord drills, picking drills, and maybe practice a song and focus on technicalities; western dude would pick a guitar, learn a few chords to play a song, realise that to play more songs he/she must practice hammer ons, etc, but everything is so that he can play more songs. They have never had to worry about drills. It's a means to an end.

Web frameworks are just drills to choose from. Pick the one you need and move on. With experience, you'll be able to tell what is good and what is not.

Why worry about which framework is "best"? It doesn't matter. If WP template and jquery solves the problem then why is he even talking about Haskell?


I think you are generalizing the issue too much. also take a look at the comment of the original author of the post. he is not Chinese: http://news.ycombinator.com/item?id=5206578


OP here. Thanks for the tip. I've updated my blog to credit eranation (author of the original English post) and relevant links.


You're right but I think this is a bit strong and perhaps a little generalist.

Anyway, IMHO it DOES matter which is best for you because if you choose the wrong one, and you're project is big and complicated enough, you'll spend a long time dicking about trying to fix the 'deficiencies' of your poor technology choice later. So in some sense the OP is right too.

IMHO, as with many things, a little moderation in both is the key. Do just enough analysis to meet your requirements, and future proof your choices, and then leave the crazy web world where you found it.


I has nothing to do with being Chinese or not. I'm a "western dude" and I feel like it's my job to evaluate all of those things because picking the right tool IS my job. If I don't then I am doing a disservice to myself and clients.

I wouldn't want to get surgery by a doctor who said "well, I can do the operation in 5 minutes instead of 5 hours if I knew how to use Hyper Awesome Super Laser but sorry, I don't know how to use that technology".


Agree~


1. Go to Home Depot.

2. Pick the tools you like. Get a good hammer, saw, adjustable square.

3. Leave Home Depot and go get good with them.

4. If something breaks or doesn't perform a task you need, go back to Home Depot to supplement your toolbox.


You forgot the laser-guided dado cutter, and the telescoping illuminated wet-dry vac with AM/FM radio.


Who can spend time in the shop without a nice ball game on the AM radio!


What if your job is to build model aircraft?

(Kidding, its a nice analogy but I think its also good to do some research on the tools you might need first or you might waste a lot of time. I once wasted a month of development time because I picked the wrong toolbox for the job).


Sure. But the point of this thread is, don't run over to Home Depot as soon as the shiny new hammers arrive.


alternative step 4: If something breaks, hammer it until it looks like a nail.


only for PHP developers


Did you make this account to talk about how you think Django is awesome?


its a new account. today there was a discussion about django, and i like django. surely i'll discuss other things on other days. why do you care anyway?


I figured you created a new account in order to berate PHP and praise Django without giving away your regular HN identity.


I almost thought nobody would make a PHP sucks blah blah comment. Almost...

Maybe someday I'll read a thread without one.


The "tool" analogy breaks down somewhat in that what we're really talking about are building standards and frameworks. If you build your home as an insulated concrete form to European green standards, you can't simply start building the rest as a stick and plaster home if you find that your needs change or your understanding of ICF wasn't complete. If you did you would end up with a mishmashed hodgepodge that ends up being the worst of both.


Marco Arment gave a great talk at Webstock about how he uses PHP and MySQL because they're battle-tested and he knows them inside-out. I think many of us could use a dose of Marco's pragmatism. It's worked out really well for him.


I sincerely hope nobody reads this anecdote and decides to use PHP and MySQL based on it.


The original post shows definitely one thing: decision making is an important skill.

Obviously every framework has its pros and cons. But always focussing on the cons and restlessy looking for even hotter solutions makes you more worry about technology choice than about your code. It makes you worry more about whether you did a sane technology choice than it makes you solve actual problems.

At the end of the day it is better to focus on one chosen technology and get the most out of it. If its cons matter, one will see soon enough and learn how to circumvent. This gives deeper understanding of the technologies and give tools to solve problems.


Maybe part of the problem is that "design" has been forced to merge with "engineering."

That and everyone seems to want to discover a language or framework like it's an Indy band. "I was using _____ before it became popular." That credential and $5 gets your coffee at Starbucks.

Let's face it. If the high-paying gig comes along and, god-forbid, demands .net or PHP, you're not going to argue, you're going to quickly adapt and get it done right? That's because all these things solve basically the same problem and it's a problem that you're used to solving.


Maybe this post is the original one: http://tilomitra.com/the-crazy-world-of-code/


OP here. Added this link to my blog post. Thanks for the tip.


I hope that there aren't any actual web developers who think like that on a daily basis and that it's meant as humor. You don't need to use technology invented yesterday to write good software. Infact, most of the "blue chip" technology out there: Java, Python, Ruby, PHP, and the relevant frameworks used in those languaes (Spring, Django, Symfony, Rails, etc...) is being updated all the time.

Another advantage of not using the latest, hottest, tech, is that there will be several gigs of mailing list archives out on the net of people's past problems (also, stack overflow will be filled to the brim) with answers, to your common pitfalls.

Go with X.js + HipsterDB and you're gonna have a bad time when you run into a problem, because it's just so new that you're likely one of the first to run into it.

The article ended with "I just used wordpress and copy pasted some jquery" -- I approve.

The bottom line is getting shit done, not being a hipster.


I like this because it demonstrates the complexity that can possibly be involved with some serious web development projects. Also, I think it is the skill/ability to make the decision between these tools and platforms and know that you only need some etc - is what separates the good educated developers from the rest.


Yeah, lots of technologies out there.

Personally I consider learning a technology as an investment. And with my investments I prefer them to be low risk. That's why I only choose technologies which are definitely going to last a while. Sometimes it's hard to decide if a particular technology will persist. I usually look for support and endorsement of big players in the industry and sufficient user adoption.

Right now I am contemplating using angular.js. I think it would be low risk to learn since it will probably last a while because of Google's involvement and already wide usage.

Other safe options include Twitter Bootstrap, Node.js, Android and jQuery and ?

I would like to read a blog post about what Hacker News considers to be safe options to learn. Anyone interested in writing one?


Adopting new technologies doesn't always mean you try to follow trends or be cool. There are plenty of reasons that new ways of doing things come up all the time(be more productive is one of them). You may start slowly, but with time it pays off. I mean teams that can evaluate new trends and see if they get any benefits or not...

I personally think "just ship the damn thing" is BS, I'm pro delivering often, but good quality of product/service starts in back-end, again I'm not saying it should be perfect, but it MUST be open for new changes and be ready to scale... no one wants to wake up and be impotent with number of users they have, if you don't expect to scale, why are you doing this in 1st place?


As you can see, he hadn't heard of Python.


Which version of Python ? Django or Flask ? Django ORM or SQLAlchemy ?


There are only two practical choices right now, both for Python 2:

1) Django 2) Flask + SQLAlchemy

Not that much choice, is there?


With Django 1.5 (final just about to be released, hopefully within a week) supporting Python 3, you're not tied to Python 2.

There are other good options, too. Here's one, also conveniently Python 3 compatible:

(3) Pyramid with (a) SQLAlchemy; (b) ZODB; (c) something else—whatever you want!

I'm actually working on a Pyramid + traversal + ZODB project just at present. It's very instructive when once you have become used to URL routing and pattern matching (I've worked with Django hitherto).


I like web2py's DAL


I've been wanting to use one of the new JavaScript frameworks on a new project, after dabbling with backbone and getting lost very quickly trying to clean up zombie views/events. My latest project is a front end site to a JSON API, so I thought it was the perfect opportunity, but after discussing it with my client we both decided not to.

Because I know what I'm doing best in PHP. So the site is going to do REST queries, but on the backend. We still have the ability to use the API in other clients, and we could in the future use shinyFrameworkOf2013.js, but for now we're building something we know will work.


Thats the reason why its more important to learn the fundamental ideas behind the frameworks and not just the syntactic sugar . A deep understanding of any one will help in easily picking up any of the newer ones.


any human (or even nature) domain knowledge is enormously detailed rich, with countless sub-domains, methodologies and references beyond the scope of a single person. And thanks god for that.


I think this is evidence that we’re in a golden age of web development. It’s the opposite of monoculture, and it’s awesome.


http://zef.me/4235/pick-your-battles

Pick technologies which are most suitable for the job, not the most "hyped" ones. Also don't forget that sometimes the latest technologies comes with innovation tax, you may be the first to solve some issues, because of the small ecosystem.


Architecture is not as important if you're building an app that will scale slowly. But if you're betting on scalability to make money, then the story is very different.

Relevant: http://www.youtube.com/watch?v=rV_GIGzXrvA


To quote Jamie Zawinski: "At the end of the day, ship the fucking thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products."


Yeah, I bet he'd say the same thing to his car service technician, just fix the f*king thing, use duck tape if needed...



Recently redid a WP site a neighbor had for his small business. Single page flat html using bootstrap. What fun that was! So refreshingly simple.


Not only can you waste time over-analyzing the number of choices, you can waste time discussing the choices. Like this thread. Back to work!


I tend to pick the environment/framework/library that has the functionality already written that I happen to need at the time.


I would try explaining those concerns to a client to see just how silly and nonsensical they are.


He left out Basic. Bill Gates is still using that one according to his Reddit AMA yesterday.


Just choose the right tool for the job. Beside that, variety is a good thing, isn't it?


No, variety also means:

1) scattering of effort (each framework gets less total attention by fewer people),

2) duplication of effort (besides what is unique in each, tons of effort is spend in implementing mostly the same things),

3) Many half-finished frameworks

4) Worse documentation and less books/manuals/video tutorials (see 1, 2)

5) Less chances of getting an answer to a framework problem in forums/irc/SO (again: scattering of resources).

6) Less vibrant ecosystems around the framework (if each of 10 frameworks has 10% of the market, it's not as good a business to invest in making plugins as something that has 30-40%). Same for hosting offerings, support, etc.

So you want variety but not too much. 2-3 big players would be mighty fine. 10 players of equal size, not so much.


Agree. The current war of numerous Javascript MVC frameworks reminds me of the situation of Python Web Framework a few years ago, the community was confused by so many choices to select from. In the end, nobody wins, even the ultimate winner Django lost the opportunity to become mainstream. In that sense, the merging of Rails and Merb seemed to be a wise and successful strategic move in hindsight.


Django is pretty mainstream. Its not as popular as Rails but its hardly a maverick.

I think the reason why Python never went all in on a single web framework is just because the Python community itself is much larger and more diverse than the Ruby community. Consequently there were alot more opinions and alot more people willing to develop those opinions into separate projects.

Maybe you're right that there are advantages to converging on a single framework, but I'm not so sure. Rails is omakase, so if there's some part of it you don't like its not really easy or a good idea to change it, and you don't have any other options in Ruby. Django is also omakase but if there's some part of Django that you really disagree with you can just move to web.py or flask or pyramid. these are all built on the common core of Python's wsgi module so these are just different opinions on how to accomplish the same task.


With Django in specific you can swap out a component. For example, if (like many people) you don't like the HTML template syntax, just swap it out for Jinja2 or Mako. In Django it is also usually easy to customize something minor by use of overrides (OOP).


This is also true of Rails. That's what the Gemfile is--a list of optional packages that you can swap out. (Almost) all of your configuration happens in that one file where you tell Rails what packages (gems) you want to use with your application.


this is very true for some of django's components. the template engine is probably the most opinionated part of django and is also one of the easiest parts to swap out. other parts of django are not so easily disposed of. for example, the ORM is very tightly integrated. its possible to swap it out for SQLAlchemy or something but this is really a huge headache and not worth doing.


I think part of the problem is that there is no clear "right tool for the job" for many jobs. There are many that will work just fine. Every author and podcaster who wants to project a veneer of pragmatism will sprinkle "the right tool for the job" truisms and call it good, but IMO that's just a hand-wavy placeholder for whatever they happen to be into at the moment. Which is fine, but to me it somewhat disingenuously dismisses the fact that it's still largely a subjective choice in many situations.


qooxdoo solved all the problems of web development long ago in a single simple uniform complete way.

As long as you arent forced to use apologetic strap-on technologies, I see no reason to look elsewhere.


W in Wordpress stands for web scale.


Living in a bubble.


fvckin A+ on this.


how about copy a line?


[deleted]


Tshinghua University is in Beijing. "BBS" and "forum" are approximately synonyms.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: