Thanks for a truly thoughtful and comprehensive reply. On Thursday, July 12, 2012 1:14:10 PM UTC-4, Adam Bender wrote: > > First to establish my perspective with these technologies - I write Java > and Javascript professionally, I have used GWT off and on since its > inception and most recently have been full time on a GWT project for the > last 2.5 years. In addition I have been writing Angular apps since version > 0.9 something. So generally speaking I have used GWT a lot more, but then > again it has been around a lot longer. You asked for a comparison of when > to use each so here is a list of pros and cons that I see with each. > > GWT Pros: > > * Mature, well tested, highly engineered solution for producing pure > client side applications. > > * Lot of examples/documentation/support available > > * Highly efficient/performant, both in terms of app delivery size and > runtime performance (they now even benefit from the closure compiler) > > * Written using staticly-typed, well tooled language. In my case this is > important as our app is safety critical (people can die if it screws up) so > the idea that we have the compiler checking for a class of errors means one > less set of tests I have to write. > > * Great Development environment that makes you productive even though you > have a compile step in your build > > * The ability to use Google Guava library. Don't underestimate the power > of having robust utility libraries to do things like argument assertions, > collection traversal, exotic data structures etc. There really is nothing > better than Guava when it comes to this kind of stuff. Of course because > Guava is used by the GWT dev team it means that you dont have to worry > about it surviving the JRE emulation - it will just work! > > * The single greatest thing about GWT for me was the programming model of > Activities and Places - more commonly known as Model, View, Presenter > (MVP). This programming model is a perfect fit for web application in > particular where you may want to reuse logic to power different shaped > views (read phone, tablet, laptop etc.). GWT really embraced this pattern > to great effect > > > GWT Cons: > > * It's still Java. No matter how you slice it, and how ironic it is, Java > just isn't web-ui friendly. Java is not a good choice for anything > programming problem that involves a lot of click handlers, or one-off > listeners. Anonymous Inner Classes are just not the right way to do it! > > * Even with the speed ups you have to avoid compiling as much as possible. > On my laptop (late-model quad core mac book pro) compile times range into > the 2 - 3 minutes time frame. It is twice as slow on a dual core machine. > That really is a long time to wait between making changes and seeing a > result. Even though the GWT team have done a great job making compilation > less necessary during day-to-day development it's still manages to suck > time out of my dev cycle. Also, like taxes and my waist - compile times > only seem to grow with time. > > * Adapting 3rd party libraries is possible, but not fun and you end up > writing this weird mix of "javascript-in-java multi-line comments" which > never seems to format correctly in IDEs and is completely opaque to syntax > highlighting apparently. > > * GWT applications cant support dynamic module loading easily. Think of a > portal like iGoogle where you want to include many modules, perhaps only > determining which ones at run time. GWT will fight you every step of the > way because GWT, due to the extreme optimization it does, likes everything > in the world to be known at compile time. This means that you can't link > code up in the browser which means you lose out on what I think is one of > the greatest features of the web. > > * Related to that last point, GWT is not very modular in and of itself. > While there is the ability to do code splitting to improve load times, you > still end up sucking down a lot of GWT library stuff for even the simplest > hello world app. Now this may or may not matter to you, but if you have > mobile dev in mind, every byte counts! > > > Angular Pros: > > * Angular is "of the web" It embraces core web technologies and make it > easy to write your app using standards. > > * JavaScript is a great language for UIs. I find that the Functional/OO > duality of JavaScript makes it a great target UI development. > > * Angular - owing if I recall correctly to it's Flex influence - has a > fantastic programming model with binding, DI, promises, and Dumb views. > Some might call it a MVVM approach, but it still seems like MVP to me and > so just like I loved it with GWT I also love it with Angular. > > * The use of the MVP model also help mitigate the traditional problem with > JavaScript apps. Namely that they become impossible to manage at a certain > size. By keeping things contained in small controller/service/directive > buckets you have a clean way to manage your applications growth. > > * Integration with 3rd party libraries is a snap thanks to the public > exposure of $apply and $digest. You can actually improve other libraries by > extending binding capability directly to them using core Angular methods. > > * Angular is nice a modular framework and works to build small apps all > the way up to multi 10s of thousands lines apps - don't know about anything > bigger than that cause I havent worked with it but I think it should work. > > * Angular has a healthy and vibrant community where any question you have > can be answered pretty quickly. > > * Testability, testability, testability! If you are going to write code in > a dynamically typed language then you have to have a fantastic tests story > and Angular has created one. Both due to it's use of core test-enabling > patterns like DI but also through the development of the Scenario Tester > that lets me write Selenium style end-to-end tests using JavaScript as my > language of choice. > > > Angular Cons: > > * JavaScript is a notoriously difficult language to manage large teams and > projects in. Its great strength as a flexible, almost assembly code of the > web, is also the source of many problems when people do simple things like > rename a variable or use constructs like - obj[a ? "en" : "dis" + > "able"]() - As I mentioned before I think Angular can help a lot with the > marco organization problem and even some of the micro code issues, however > it is still JavaScript and it is possible to make a serious mess. Note that > tooling is getting better especially in Intellij/WebStorm so perhaps these > kinds of issues wont be a problem for long. > > * Angular is new in a crowded space. Although I believe it is the first > framework to truly get what is required to build "Application in the > Browser". It remains to be seen whether enough mind share can be > established to create a growing and sustainable community - one that shines > in the face of a fickle JavaScript development community. > > * Part of being a young project means the docs and examples out there > aren't quite polished down which can be quite annoying. However, this > problem is getting better by the day and as far as I am concerned Angular > has exceptional docs given it's limited exposure to public consumption. > > * Angular has been knocked for its dirty-checking for binding approach. > While I cant comment on the alternatives to much I think for the most part > this is a non-issue for most apps but you'd have to evaluate your > applications binding needs. > > > Bottom Line: > > If you have only Java developers - use GWT. If you would prefer to have a > compiler help catch some, but by no means all human errors - use GWT. If > you need to rely on extensive examples or documentation, for now GWT is > better but that will change. If it is going to be a very large, long lived > application - something static typing an the Java tooling ecosystem may > help with then GWT is your option. > > However, if you want to build apps from small to large and you are > comfortable with JavaScript as a programming language - not just a way to > make animated transitions - then Angular is the first framework to give you > the power to build a proper application. One where you stop thinking about > the incidental complexity and can therefore focus on the essential > complexity. With Angular you can be as big or small as you want, as dynamic > as you want and really use the web to its fullest potential. Don't forget > that the JavaScript tooling ecosystem is getting better every day- I can > even put my JS app in Sonar now, build it with maven, run JSHint in my IDE > and more. So the days of JavaScript being considered a toy language which > no real project can be done in are long gone. Using Angular you can really > put the lie to that line of argument. > > Personally, having discovered Angular I don't think I would ever recommend > GWT as a place to start for a web app. While GWT represents a truly amazing > engineering success, I think it is an idea whose time has come and gone. I > look forward to a future building AngularJS apps and solving problems for > customers in a way that not only makes them happy, but keeps me from > wanting to know my finger tips off! > > > > Sorry for the long post, but this is something I have had to argue both > ways with clients as well as internals teams so by writing it down here, I > can point them to this post and save my breath. > > Adam > > On Wednesday, July 11, 2012 6:14:50 AM UTC-6, Chris Oman wrote: >> >> Both of these technologies seem to fill the same space, but coming at it >> from different angles. Has anyone done a comparison between the two and >> developed a synopsis of when best to use each one? > >
-- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.
