Results of the JavaScript Survey 2012 - JavaScript
Transcription
Results of the JavaScript Survey 2012 - JavaScript
Düsseldorf, 15.+ 16. October 2012 www.javascript-conference.com Results of the JavaScript Survey 2012 We asked the visitors of our JavaScript conference website about their experiences and evaluations on JavaScript . 299 joined our survey. Here is our resumé. 1. In order to sum up the state of knowledge of the participants of our survey we asked: "How experienced are you with JavaScript?" 23.94 % are very experienced with more than 5 years of programming of extensive usage. 48.59 % have moderate experience with JavaScript..... mainly by programming of web interfaces. 23.94 % indicated that they are less experienced in JavaScript..... they merely wrote few scripts. 3.52 % of the people questioned have no experience at all. very experienced moderate experienced less experienced 2. We wanted to know more about the people questioned and asked "What is the main focus of your development work" Multiple answers were possible 85 % are writing web applications in JavaScript 38 % write mobile applications..... 24 % use JavaScript for desktop applications..... and 31 % use it for enterprise applications. 10 % of the persons questioned use JavaScript for other applications than the above mentioned. 90 80 70 60 50 40 30 20 10 0 web applications mobile applications desktop applications enterprise applications other Little happens in the web without JavaScript; hardly any website goes without. But for all that almost 40 % of the persons questioned work in the field of mobile applications. 3. We wanted to know: " Which language are you using as your 'first' language?" 26 % JavaScript 27 % Java 1 % another JVM language 17 % PHP 11 % C# 18 % other JavaScript Java another JVM language PHP C# other JavaScript levels with Java ... followed with some distance by PHP as the "first language". However, for many developer JavaScript is the most important language to work with. 4. Our question "Are you already using the new HTML5 / Css3 features extensively?" divided the participants into: a group of 71% who do use the new features whereas 29 % - one third - prefer working with the older versions. yes no Obviously the new features of HTML and Css are an improvement therefore they are already extensively used. 5. We thought it is interesting to know whether JavaScript is used for server-side programming and asked: "Are you using JavaScript for server-side programming - yes or no?" 27 % said: I use JavaScript for server-side programming whereas 73 % don't use it for this specific tasks. server-side programming: YES server-side programming: NO Many developers still use JavaScript solely as a frontend language. But maybe one should rather state: Already 27 % of the persons questioned use JavaScript for server-side programming. Wouldn't that have been unthinkable some years ago? 6. Now we came to the large subject: Tools & Methods. We asked: "Which JavaScript IDE are you using?" WebStorm 7 % Eclipse with plugin 21 % Cloud9 3 % Aptana 6 % other IDE 29 % no special IDE 34 % 40 35 30 25 20 15 10 5 0 Webstorm Eclipse with plugin Cloud9 Aptana other IDE not special IDE IDEs are not yet common amongst the JavaScript developer; if at all the Eclipse plug-in is used. But careful: with question # 9 we found out what's beyond the biggest column of 34 % saying "no special IDE". 7. "What JavaScript frameworks/technologies/tools are you using?" Multiple answers were possible JQuery 77 % Prototype 11 % JSON 65 % Jasmine 10 % GWT 15 % CoffeeScript 10 % WebSockets 22 % Sencha 9 % node.js 26 % Titanium 4 % Enyo 4 % qooxdoo 3 % other 31 % none 8 % 90 80 70 60 50 40 30 20 10 0 jQuery rules! More than 75 % use this API ...the comparable prototype would lag far behind. The JSON protocoll is essential for 65 % and thus gained quasi-standard. Curious the naming of the "newcomer" WebSockets and node.js, who actually cover different fields in the IT development altogether. Each with a quarter of the people questioned work with WebSockets and node.js. 8. "Are you using a JavaScript MVC Framework? If yes..... which one?" Multiple answers were possible The biggest group are the developers who don't use a JavaScript MVC Framework with 66 % Backbone 13 % Spine 1 % Knockout 6 % Ember 2 % Angular 3 % other 9 % 70 60 50 40 30 20 10 0 none Backbone Spine Knockout Ember Angular other Two-third of the persons questioned use no special MVC framework with JavaScript. If at all Backbone seems to be used. MVC frameworks do not have the prominence with JS (yet) like with Java. 9. We expected a bit that our list of tools/frameworks... in the question above was probably incomplete..... that's why we asked the participants of the survey: "What other JavaScript tools/frameworks/gizmos are you using that we did not mention?" The answers were freetext and we just itemize the input we got: QUnit..... PhantomJS..... "js-signals crossroads.js Hasher.js"..... underscore.js..... Phonegap..... "Brunch with coffee"..... ECO-Templates..... three.js..... Modernizr..... Respond.js..... Enfocus Switch..... "- http://valums.com/ajax-upload/ - EJSChart (for historical reasaons)- Google Closure Compiler - YUI Compressor"..... ext js Charts!..... jqueryui..... jquerypp..... qunit..... uidoc "momentjs underscorejs bootstrap mustache select2 highcharts requirejs"..... OpenLayers..... ExtJs..... MooTools..... require.js Mustache..... APF..... cloud9..... nodejs..... clojure script..... treehugger.js..... http://raphaeljs.com/..... Lawnchair..... V8 directly and an own runtime with gl bindings..... lycheeJS game engine..... JQueryMobile..... express.js..... "popcorn.js mootools"..... eval..... "express.js mocha dnode"..... "express.js Railway.js Mongoose"..... "ejCharts Dhtmlx"..... CouchDB..... "meteor.js express.js jade mustache handlebars mongoose testicular qunit"..... AJAX..... Mootools.....Netbeans..... Yahoo UI / Alloy UI RequireJS..... Underscore..... rhino We use it to script our application -> integrated proprietary framework Just plain JS with the least possible overhead. Atmosphere Framework SignalR rightjs..... mustache Dojo Toolkit Javascript closures are awesome but they can not be serialized in a proper way. Dojo..... AMD couchapp..... couchdb "requires impactJS" JsUnit unit test framework "JQuery Mobile JQuery UI dojo soopfw translation Modernizr Mocha YUI "Framework JavascriptMVC Sencha Ext JS 3 / 4 JSHint/JSLint Grunt QUnit" raphael.js \o/ undercore.js D3 "MooTools LabJS Firebug Chrome-Debugger" backbone..... node..... Qunit..... jasmine..... jstestdriver..... ExtJS 2.0.2 "require.js some backbone plugins Bootstrap underscore.js ..." Vaadin..... expressjs..... mootools ExtJS..... DeftJS..... Crafty..... Hook.io ext.js require.js..... "jQuery UI jQuery Mobile" d3 Dojotoolkit..... JsTree..... webrtc..... mustache Socket.io..... Mustache..... qwery..... bonzo..... Sinon.js..... JsTestDriver and some other micro libraries requirejs and modernizr..... "Microsoft ASP 3.0 with JavaScript Dojo Naradana Platform" PyCharm as IDE DHTMLX..... webgl ecma scripting vows.js; pdf.js; require.js; handlebar.js..... vertx.io FireBug for debugging serialport for node.js VS 2010..... Jquery..... phonegap/cordova..... dojo toolkit..... YUI3..... QUnit..... CrmRestKit.js Ja testrunner..... "JSTree JQM"..... Testacular test runner..... yeoman.io..... cucumber.js "jQuery Mobile Jasmine UI JsTestDriver Testacular" Mootools..... Raphael.js / Processing.js..... require.js..... jQuery plugins: datatables..... dygraph..... jstree The huge diversity is obvious and possibly a strengths of working with JavaScript since the developer feels the utmost freedom with the tools of his or her fancy. Question 10: “What are the main strengths of JavaScript?” Coding: Simplicity and that Functions are first-class objects and high order functions at the same time it enables expressive functional programming. JavaScript is LISP in the browser with a C-like syntax. Hence it's (nearly) as powerful as LISP, and still gives you lots of freedom. "I like: - Everything is an object / hashtable - Closures - no strict data types - pass various arguments to functions - calling functions in different contexts - Building GUIs with DOM It is simple to write event based programs and it is easy to build in a modular structure. It’s good to have fast operations on huge, sparse arrays. It's asynchronous, functional, light-weighted and there are a lot of libraries and tools to speed up development while maintaining quality. compact (if you can JS :)), powerful because have some functional elements (closures), prototyping concept is great and allow multiple inheritance. Some event-driven frameworks. I use JavaScript for many types of frontend development. Like (pre-) form validation, UI things... None compiling, very flexible debugging inside the browser , function are first class parameters mighty language with first class functions. In conjunction with coffeescript an awesome syntax/readability Functional programming with extremely loose typing. Rich Client Development, AJAX Requests JavaScript and PHP -> AJAX I like its support to program in multiple paradigms (functional in particular) and that, as many scripting languages, you usually write less code than in traditional languages if you are using appropriate tools like jQuery. Fast java-like scripting When it comes to event-driven procedural flow, JS is simply as good as it gets." Event driven architecture: sometimes good, sometimes bad. The asynchronous approach with its callbacks is great I like the functional programming part of JavaScript. It helps writing asynchronous, event driven programs. Visible results Easy to use, simple and fast in development! It’s so simple and it works fine I am currently using JavaScript for an enterprise application for a (relatively conservative) insurance company. The company's domain experts and case workers are very happy with it. One more reason to like JavaScript. Fast develop and deploy cycle. Dynamic typing. Latter can also become a problem... Work by client JavaScript is EVERYWHERE and provides a unique solution to a number of problems that are becoming more prevalent today. When used as a server side language it's event driven nature lends itself very well to creating APIs and termination points for client connections as well as sending and receiving large amounts of JSON data Browser & HTML & CSS I use it mainly because it's the only way to program stuff in a Browser. Also I like node.js for some specific problems. Possible use for server-, app- and webapp programming. Client side code running in the browser. User actions can be processed at runtime. JavaScript is highly flexible and my first choice when programming for a browser. It is present on every browser without the need to install another plug-in and you can achieve everything you like (unlike any other language). I haven't seen anything I cannot implement with JS (server and client side). And despite the lack of a good type checking and the lack of classes it is now one of my favorite languages. And I started working in C. Client-side programming and dynamic WebPages and having lots of resources and a wide user-base. Best client-side script language around "Good: executed on client side (less performance loss on server side) Cross-platform, client side scripting w/o third party plug-in I use it to enhance Client side Logic of PLM system Dynamic client server interaction Spread, it's in every browser. Code reuse since it runs on any platform (either web or embedded via "invisible" web browser) including mobile I don't "like" JS, but it is the assembler for the browser. Any browser related issue has to be solved in JS. Not other language has the same coverage on the world. Also due to the nature of portability you can use it in a huge number of platforms I use the browser rendering as device. Interactivity on Websites, changing HTML without reloading, modern layouts in non- HTML5/CSS3 browsers Webpage actions on client side. Direct webpage manipulation, Ajax, websockets, i love jquery You can turn it off and so many web sites are simply reduced to their content. It is flexible and for websites and -applications it is the standard way. With modern browsers it makes fun. Nice for effects Nice for fallbacks (HTML5/CSS3) for old browsers" It's great for mobile/web apps with HTML(5) and CSS." Editing the DOM without calling the server again Easy and fast way of client side interactions and DOM manipulations End to end applications, building interactive web applications that behave like desktop apps Mobile apps for multiple platforms JavaScript is ubiquitous, if you do web development you have to learn the language properly. Writing web applications with a Client-Server-architecture (JS-based client with the Browser being the runtime and Java-based server as data backend) feels a lot more natural than the old Web MVC approach. I work faster and more efficient with web applications, when Javascript supports me with Ajax. It would be a bit annoying, if the whole document reloads for each little option I've changed. Learning & handling & support: Easy to Learn" a great and big community widespread through browser and easy to learn. Easy, cross-platform, fast, closures, embedded functions, extending, object orientated, everything:) Good html integration Very flexible, can hack together quite a lot of coding paradigms. Probably not better but different. I like the event oriented approach. Small language with powerful features. It' easy. It's everywhere. It's fine for quick hacks and for larger applications. Inheritance, not strongly typed is a plus and minus (sometimes), but can be avoided by using "use strict" or by compiling. JS is easy to learn, but hard to understand the insides. Everything is an Object. That is a miracle! it’s easy to use, and its fast Easy to lean fast learning success; easy to test Flexibility, speed Fast, Simple Syntax, Easy, Easy to use. Wide spread It's on the web, it's free, and it has an awesome community. "Prototype-based Programming, clean Code" No threading / synchronizing issues. Higher productivity, although it requires more discipline regarding testing and coding styles (e.g. using JsLint) Easy to learn, hard to master; DOM-manipulation, Animations The syntax is easy and great It's very easy to code because you don't have to take care of types or type casting. Cross Platform support Only a few key concepts -> easy to learn; event driven; clientside a must. Close in the view "- fast to implement, test, alterate. Wide user base. Diversity, Flexibility JavaScript is ubiquitous. Runs everywhere. Code reuse in both client and server. Promotes model driven development Main strengths are ubiquity and a high level of dynamism. "Multi-Platform” flexibility, interpreted language (late binding), widely supported on many platforms runs natively and fast in nearly every modern browser , works good works html, fast and simple productive results, very big community, lots of frameworks and widgets for reuse "Simplistic in nature, flexible in structure” "When used correctly, JavaScript is extremely versatile and concise. So many libraries and frameworks are already showing (today) that JavaScript is powerful and enterprise-ready. Many Engines (Rhino, V8)" Easily extensible. In comparison with other programming languages It has an extremely powerful concept of using objects, that’s something no other language I use has. Problems getting solved where there is no other language able to. - more universal than flash/silverlight * Closures, Callbacks, Functions are first class. In comparison with Java, this is often an advantage. * Developing is more dynamic." It's more flexible and faster than PHP and can do the same stuff. functional programming - passing a function as a parameter where java would require to a) create a new class / interface and b) provide a separate function to use, by name and c) instantiate the class. “Better for Holistic Programming than class based OO languages." We commented this data insofar that we accentuated it with bold characters. By keeping the repetitions we want to give you an impression of the importance of the single statement. We trust that the reader of this survey can make their own judgments. Question 11: “What are the main weaknesses of JavaScript?” General - prototype based object orientation (there should be a way to do it like in other mainstream languages: Java, C++, ...) application structure scope, lack of multiline strings, wtfjs Language history, like === vs == etc. Too loosely typed. not type safe, cannot distribute compiled code missing typing, crude object syntax Weak typing No strict type checking, variables without types may cause runtime errors. Missing static variables and objects. Poor inheritance. Poor debugging possibilites. Too many brackets ;) people loving semicolons It's not type safe. The overloaded keyword "function" the poor inheritance is still a problem with JavaScript, but there a good workarounds using prototype or MooTools class model Calculating in JavaScript is a mess. For example: 70*0.02 = 1.4000000000000001 The (slightly) different implementations (in conjunction with the DOM) in different web-browsers. === vs. == is quite confusing sometimes syntax checking, type checking The class-less object oriented programming is crap ... (sorry, but I'm a C#/C++ coder :D) - typos in object attribute's names break the scripts - exceptions don't contain a text that I can serialize to a meaningful error message (using JSON.stringify) - a single forgotten try{}catch(){} is able to shut down the web server global variables jquery event bindings on DOM elements doubled listeners, mixed events different object oriented concept is baffling for users Crappy language design Lack of a standard module system, no syntax-level support for classes OO model (prototype) different from that one of normal OO-Languages like Java. untyped. different api implementation and limits. eg. webkit web audio api and mozilla audio data api IDE problems (not well supported), differences in browsers, typeless language the known JS fails: - no block scope - arguments object implementation differs in browser (not a js problem in fact) Sometimes to verbose syntax and the scope sucks. no inheritance, difficulty to write classical oo adapt the layout to mobile and a lot of new number of devices and test the code Too forgiving when introducing bugs or syntax errors. Stupid Number type (.1+.2!==.3) Type checking, creating members on demand if they didn't exist (mostly in arrays). And most of all the scope and the 'this' variable, which is one of the hardest problems to learn about in javascript. not statically typed, therefore no refactoring. bad tools.. javascript is ok for animating buttons or minimal effects.. For real programming it is a nightmare array handling oop .. implemented, is not the oop it used to be. while easy to start with, but the more you are involved, the more complicated the code coming from a c# world, it is not easy to replace inheritance with prototypes. Also, i have some problems with chained callbacks. Object Oriented it is much to complicate, C# is so much easier OOP and other similiar technics will never be the strength of JavaScript because of fundamental restrictions e.g. in the "typesystem". Same for any other language that is needing a "==="operator to compare. Cache and old browser Sometimes the syntax puzzles me. Understanding the "OO" way of javascript and the scope issues To use JavaScript, you need strict rules and reviews. With JavaScript, people need more time to understand the code and you cannot just find good JavaScript developers on the market. IDE-support JavaScript does not help one to produce high quality and maintainable code. OO-Architecture, "type" system. IDE support. It’s a scripting language. It's cool, if you stay below 5000 LoC. After that it starts to suck. So it's not for big stuff but great for small stuff. - setTimeout is nice, but it is too much freedom sometimes.. In large projects it is easy to get lost, since IDEs aren't that as they are use to be for Java in terms of code completion etc. It happens that you are going to write the same lines of code twice because you simply couldn’t found the other ones. a lot of pitfalls some strange traps security, stability, .. Learning curve JavaScript itself harbors a lot of incidental complexity. Apart from that, the most difficult part so far has been integrating different parts of the stack (test frameworks and runners, MVC and widget frameworks, etc). Very high accidental complexity - Performance (DOM operations, depends, of course...) async and timing problems, at moment i discover promises :-) Caching in IE (AJAX-Requests), missing functionalities in older IEs, actually, the main problem is IE ;) asynchron processing Performance, Memory, Mobile Devices Account for many different browser environments, device capabilities, input methods, etc. All of this is solvable but can be a PITA. * performance issues based on different engines (in browsers, from IE6 to latest Chrome V8), "reflows" * bigger applications requires a strong architecture pattern (because it is so dynamic/flexible, there is more (bad) stuff possible than in Java). I'd love to work with multithreaded and hardware-supported JavaScript. WebGL is a great step forward for developing bigger and performance stressful scripts. Javascript has a lot of quirks and some bad design decisions that went into it . Once these are understood it becomes much easier to work with but varying implementations or lack support different functionality, especially in regard to the newer HTML 5 libraries, which makes it sometimes difficult to develop for multiple browsers and versions Compatibility Browser incompabillities, some wtf moments using API Cross Browser Compatibility is not given, Internet Explorer always does things different... bad browser... differences in browsers, best practises, mixed logic in html and js Browser Incompatibilites. INTERNET EXPLORER!!!! Referencing JS in other projects in visual studio * browsers' engines incompatibilities Bad IDE support in Visual Studio working with c# AND js AND HTML incompatibilities in different platforms Browser differences are a bit frustrating, too. Libraries like jQuery help a lot, but it would be easier, if there weren't those tedious gaps. Different browser results (for example error messages in Internet Explorer) Lack of information / documentation / best practices Programmers that are experienced in other language and try to use patterns that don’t work in js I'm a JS noob and it's really hard to get into event oriented programming on node, most books available are very basic and don't help for more advanced issues . I have to grab a lot of stuff on various resources in the web and try to figure out which of them is crap. There is only little documentation about the QA in JS (TDD / BDD with one of the countless frameworks/tools), there are only a few good books and it's not easy to tell good from bad applicants for a JS job apart. Mostly it's about documentation when it comes to certain frameworks or so. Better support for writing big programs: modules, packages, profiling. Lots of libraries available but not much guidance. Being on the browser, of course the way it is acts differently on every browser it's one of the biggest challenges. Also HTML5 spec is still on the go and sometimes some issues raise from that. Repeating certain structures of code takes more lines than in other languages, some meta-programming tools are missing (but only until Harmony) It is a leaky language in general. "JavaScript is terrible and should be avoided at all costs. Enterprise development is all about 24/7 and predictable outcomes and JavaScript with no strong typing and all the browser compatibility problems is more a problem than a solution.” Don't feel comfortable with server side JS. Testing & Debugging debugging on mobile devices is a bit complicated testing ist not so good.. Debugging it is hard. Especially for browser incompatibility problems. Debugging JS on mobile browsers (with PhoneGap for example). sometimes hard to debug callback hell, no compile time checking. The Bad Parts; event-driven programming is error-prone. Requires discipline, especially from coworkers ;) Server-side debugging is with callbacks (async) very confusing and problematic . JS is hardly to debug, i.e. bugs are sometimes hard to find. debug Debugging can be hard if your developing for the web. Also debugging is a hard thing but with Chrome Dev tools we get a pretty good tool at hand! debugging can be more tedious than in java; differences between browsers It is not so easy to understand why some code works, sometimes it is magic... the more the project grows, the more difficult is maintaining the code. . Tedious debugging. Unit-Testing, UI-Testing Debugging sometimes difficult difficult debugging, not that easy to test automatically, debugging is yet relatively hard dislike: pain to debug We commented this data insofar that we accentuated it with bold characters. By keeping the repetitions we want to give you an impression of the importance of the single statement. We trust that the reader of this survey can make their own judgments. Our last question was: 12. "Will JavaScript become more important in the near future?" 47 % said: "DEFINETELY yes." 38 % of the persons questioned think "PROBABLY yes." 15 % do not think that JavaScript will become more important in the near future. DEFINETELY yes PROBABLY yes no 85 % of the persons questioned think that JavaScript will gain importance in the near future. Most probably this is depending on the further development of Html and browser technologies and their use in the mobile field. One might be curious, too, what will happen concerning server-side programming in the future. We thank all participants of the survey and all blogger, media partner, twitter enthusiasts ... for supporting us by advertising our survey! ©2012 infaktum Veranstaltungen ( http://www.infaktum.de)