@agentdero
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.
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.
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 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).
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.
Craftsmen care about their tools, and great craftsmen ship. Shitty ones can ship too, but it won't be good.
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 ;).
"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...)
(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.
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.
:-)
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?
... 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.
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.
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!
Harder to see the harm in it when it's your culture that's becoming the monoculture. That's the "good one"!
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
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.
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.
What on earth would make you think that this leap "stands to reason"?
(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.
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.
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.
This haskell fizzbuzz is great: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html
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.
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 wish all the energy of these polarized discussions would go into learning of the ways to find a good balance.
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.
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.
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...
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.