Web Development: A Crazy World
rubiken.com
rubiken.com
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.
@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...
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.
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).
As for Oracle, not much can redeem them. Flash had it's day, but I wish Adobe would let it die already.
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.
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.
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...
http://www.w3.org/History/19921103-hypertext/hypertext/WWW/T...
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
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?"
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.
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'.
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.
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.
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.
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.
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.
Also reminds me of this tongue in cheek site : http://html9responsiveboilerstrapjs.com/
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.
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.
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.
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.
It alos makes my server software conceptually simpler - which is always nice
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.
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
But ZOMG RAILS IS INSECURE, quick, switch to something else! [/sarcasm]. Evaluating other technology is the opening of the rabbithole.
Slowly but surely Rails will become robust because of 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
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..
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.
These days backend is pretty straight forward, mature, and usually easy compared to client side.
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)
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.
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.
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!
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.
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.
It's great having too many tools in your toolbox.
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.
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.
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.
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.
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.
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.
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
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 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.
http://www.ted.com/talks/barry_schwartz_on_the_paradox_of_ch...
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?
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 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".
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.
(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).
Maybe someday I'll read a thread without one.
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.
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.
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.
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?
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?
1) Django 2) Flask + SQLAlchemy
Not that much choice, is there?
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).
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.
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.
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.
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.
As long as you arent forced to use apologetic strap-on technologies, I see no reason to look elsewhere.
Deleted comment