4 ms·
I work on a large web application that sits currently at 50k lines of CoffeeScript and spans 10+ feature branches at all time. No, it does not scale. Especiall
by lightblade 13y ago
I work on a large web application that sits currently at 50k lines of CoffeeScript and spans 10+ feature branches at all time.
No, it does not scale. Especially true when the project also spans that many branches. Everyone merging up and down the branches. You get to have backend people merging frontend codes without much problem because it's all dynamic. Then you found out it was a bad merge in production because CoffeeScript doesn't care.
The fact that CoffeeScript makes braces optional causes a lot of problem because when it fails, it fails silently. Bad merge happens, but you'll want it to fail loudly when it does happens.
Out of Dart, TypeScript and CoffeeScript, I recommend TypeScript for large scale projects. Dart is good if you have a lot of man power to build in house components, but it has a very closed ecosystem that does not play well with other JavaScript libraries.
- dragonwriter 13y ago> Dart is good if you have a lot of man power to build in house components, but it has a very closed ecosystem that does not play well with other JavaScript libraries. You mean "JavaScript libraries", not "other JavaScript libraries". Dart is a language one of whose implementations is a compiler-to-JS, but it most assuredly is not, and does not pretend to be, a JavaScript library.
- lowboy 13y agoIt sounds like you've got an organizational problem if merging and the lack of a staging server are the main source of issues for you. How does a bad merge get onto production? Why are "backend people" working on frontend code? Do you have a testing framework? Do you use a module system like CommonJS or AMD? Is your team trying to treat JS/CS like a strongly-typed OOP language? TypeScript seems good if you come from an enterprise/Java background and are used to OOP with static typing.
- lightblade 13y agoBad merge get into production all the time :) I think the best example is the recent Apple SSL issue. Backend people don't work on the frontend code, but they do perform catch up merge from master branch. These merges may conflicts and can result in bad merge. Testing only helps to a certain point, not everything is testable. I don't see how module system can make merging issue go away, but I do think static-typing will make these things fail faster and louder. I do have a bit of Java background. I moved from strictly typed Java world to less strictly typed ActionScript world to now even less strictly typed JavaScript world. I dabbled a bit of Haskell while working with JavaScript. Coming from Java to JavaScript, the dynamic type system of JavaScript is a breath of fresh air. But it is Haskell that made me starting to truly appreciate static type system.