Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
Java Programming

Ask Slashdot: Making JavaScript Tolerable For a Dyed-in-the-Wool C/C++/Java Guy? 575

DocDyson writes "I'm a dyed-in-the-wool C/C++/Java developer with over 20 years of experience. I'm making a good living and having fun doing back-end Java work right now, but I strongly believe in being a generalist, so I'm finally trying to learn the HTML5/CSS3/JavaScript future of the Web. However, I find JavaScript's weak typing and dynamic nature difficult to adapt to because I'm so used to strongly-typed, compiled languages with lots of compile-time error-checking and help from the IDE. Does anyone out there who has made this transition have any tips in terms of the best tools and libraries to use to make JavaScript more palatable to us old-school developers?"
This discussion has been archived. No new comments can be posted.

Ask Slashdot: Making JavaScript Tolerable For a Dyed-in-the-Wool C/C++/Java Guy?

Comments Filter:
  • by wisnoskij ( 1206448 ) on Tuesday February 07, 2012 @09:15PM (#38961963) Homepage

    You could try a language that compiles to JS/etc.
    My friend uses HaXe for all of his server development (http://haxe.org/doc/why).

  • by mhh91 ( 1784516 ) on Tuesday February 07, 2012 @09:16PM (#38961979)

    I suggest reading this book, it's gotten a lot of good reviews, I've seen a lot of people recommend it to people starting out with JS.

    It explains a subset of Javascript that's simple to use, and also the most used in practice.

  • Dart? (Score:5, Informative)

    by supersat ( 639745 ) on Tuesday February 07, 2012 @09:17PM (#38961991)
    Have you tried Dart? It's like JavaScript but with optional typing, and it compiles down to JavaScript.
  • by TheCouchPotatoFamine ( 628797 ) on Tuesday February 07, 2012 @09:18PM (#38962001)

    let go, my man... breath the untyped air.

    Real tip: "use strict" at the top of your code and and write using assert() methods. A little more tedious, but your used to that, right? Being "dyed-in-the-wool" and all...

  • one word: JQuery (Score:5, Informative)

    by thatisscary ( 1297483 ) on Tuesday February 07, 2012 @09:19PM (#38962007)
    While it won't get you over the loosely typed nature of the language, it will make things a bit more manageable. You can write nice terse code which accomplishes oodles, as opposed to hand rolling everything. There is something nice to javascripting. I find it a nice respite. JQuery makes it beautiful.
  • by slimjim8094 ( 941042 ) on Tuesday February 07, 2012 @09:19PM (#38962011)

    I have no particular love of Javascript, but when I work in it, I write Javascript. When I use Python, I write Python, not Java. When I use C++, I write C++, not C.

    It's hard. It's annoying. But the idea is that you write the language like a "native". If you're really a generalist, it's not such a big deal. Read plenty of good Javascript to learn the idioms common to the language, and go from there.

    I could write for loops using counters and statements terminating with semicolons in Python. But I don't. I use iterators, list comprehensions, and so on. Because that's how Python code is written.

    The way I see it, the goal of learning a new language is the same whether it's a programming language or a spoken language - to be able to do useful things with it, and ideally come off as a native speaker. Look at it as a matter of pride.

  • by tomk ( 20364 ) on Tuesday February 07, 2012 @09:25PM (#38962085)

    Unfortunately this is a great way to have to learn two languages (HaXe and Javascript) instead of one. I believe browser support for "source-level" operations (debugging, profiling, etc) for compile-to-JS languages will come some day, but that day is not today.

  • by mihajul ( 1650525 ) on Tuesday February 07, 2012 @09:27PM (#38962097)

    On the topic of languages that complile to JS, GWT [google.com] is very nice, especially if you're using a Java back-end.

  • by RyuuzakiTetsuya ( 195424 ) <taiki@c o x .net> on Tuesday February 07, 2012 @09:32PM (#38962161)

    A serious answer is to not feel bad about using a framework like jQuery. It helps to know what jQuery's doing on the inside first and foremost.

  • GWT (Score:4, Informative)

    by alannon ( 54117 ) on Tuesday February 07, 2012 @09:33PM (#38962175)

    I think GWT is actually a reasonable tool for writing code that compiles to Javascript. This makes a lot of sense if you're writing your server code in Java, since your server and client code can all live within the same source tree and be edited with the same IDE in the same language. Significantly, this also allows you to debug your code using your Java debugger (read up on 'hosted mode' if you want to understand that witchcraft) while it's running in your browser. GWT also de-fangs the javascript event model that often leads to memory leaks. It might be of benefit to some people that by default (you can turn it off) the emitted JS code is heavily obfuscated. GWT is mature and well-supported, and integrates simply with vanilla JS code if you wish to.
    Available for GWT is GWTQuery, which is (you've probably guessed) a jQuery clone for GWT, including events, effects, etc...

  • Try the Dojo Toolkit (Score:4, Informative)

    by hilather ( 1079603 ) on Tuesday February 07, 2012 @09:33PM (#38962179)
    The Dojo Toolkit [dojotoolkit.org] definitely makes javascript feel a little more friendly.
  • by arthur5005 ( 608816 ) on Tuesday February 07, 2012 @09:37PM (#38962213)
    http://code.google.com/closure/compiler/ [google.com] It's exactly what you're looking for. It does type checking, it checks syntax and variable reference, it does file dependancy, and has a great inheritance system so you can get back to your Java/C++ ways. It's just awesome.
  • Firebug (Score:1, Informative)

    by bob0the0mighty ( 904854 ) on Tuesday February 07, 2012 @09:39PM (#38962219)
    Firebug is a great tool for working with JS in all situations.
  • by fean ( 212516 ) on Tuesday February 07, 2012 @09:42PM (#38962251) Homepage

    Take a look at Sencha / ExtJS... It's aimed squarely at enterprise-level developers/engineers, not the script-kiddies that rant and rave about the cool shit they can do because they've overwritten a 'built-in' type. It should work with Google Closure, as well...

    IDEs are in terrible shape. There's WebStorm and Aptana... neither of which hold a candle to what you're used to, but it's better than notepad/textmate. I'm an linux/eclipse guy, but can't get used to the ways that Aptana breaks shit, so I tend to jump back and forth between WebStorm and SublimeText (it looks nice, but it's not 'all there').

    There are some good books out there, JS: The Good Parts [amazon.com], Eloquent Javascript (free) [eloquentjavascript.net]... and I'm starting on Test-Driven Javascript Development [amazon.com], though I can't say if it's any good yet...

    I'd recommend doing a little bit on the side, get your feet wet, but don't commit yet. Thinks have changed a lot in the last year or two, and nearly everyone and their dog is becoming an HTML5/JS Dev. You're behind the curve already, and will have a hard time getting ahead, so I'd wait until the editors and browser compatibility is better before diving in.... don't ignore it, and if you can find someone who will pay you to torture yourself, do it... but don't be too anxious.

  • Re:GWT (Score:5, Informative)

    by JThaddeus ( 531998 ) on Tuesday February 07, 2012 @09:45PM (#38962279)
    I second this. I've been using the Google Web Toolkit (GWT, http://code.google.com/webtoolkit/ [google.com]) for about 5 years now with good results. Write in Java, compile to Javascript, and let GWT handle the browser differences. The source is all there if you want to see how their Javascript works, and you can insert you're own Javascript code when and where you want it. Finally, the user's group has been an excellent source of advice.
  • Re:one word: JQuery (Score:4, Informative)

    by coffeeyesplease ( 2338710 ) on Tuesday February 07, 2012 @09:46PM (#38962281)
    Completely agree. My advice to you is learn JavaScript on it's own merits. Stop comparing it to C/C++/Java or whatever. heck, you might even have to stop thinking in objects and all that comes with OOP because sometimes it just doesn't apply. In my experience and for what I see with most of my programmers, is that no one really bothers to learn JavaScript. They just keep on doing whatever they're we're doing in C/C++/Java and then complain about how crappy everything is. A good starting point is this book http://eloquentjavascript.net/ [eloquentjavascript.net] it's free and it's a also refresher on computer science in general, download chrome or firefox (with firebug) to help you debug (c'os that's a frustrating task, at times) As someone mentioned already it's a completely different mindset. I personally have a hard time programming anything that is not strongly typed. Mainly because I'll go into it already thinking that I don't like it.But for someone who's been programming applications (some web, some not) for 13 years, JavaScript can help you achieve wonders. I find practically unavoidable when it comes to web applications and it has helped me achieve some UI stuff that I thought impossible just last year. (and yes, JQuery is a must)
  • Re:Adapt or die (Score:2, Informative)

    by JoeMerchant ( 803320 ) on Tuesday February 07, 2012 @09:46PM (#38962289)

    Not only will you be a lot more productive, but you'll be a lot more marketable if you just succumb to the "dark side" that is today's trend in programming languages.

    I might disagree with the productive part, while agreeing with the marketable part. If you can talk the talk, "oh yeah, I did this project where we pasted Javascript between Ajax and Ruby modules for X and Y all accessing a common SQL server and it scaled up to 20 parallel servers before the funding ran out..." that's what gets you hired - pointy haired boss thinks he needs somebody who can "leverage the existing Ruby codebase and deliver an SQL backend for the new client," so, you said Ruby and SQL in there and sounded convincing while you said it, you're hired.

    As for productive, we had a little Python vs. C++ vs. Excel Macro code-off last year, Excel was the nominal winner because the existing data was in Excel and the destination of the processed data was also Excel, so it had a pretty strong homefield advantage, but the Macro code was really specifically purposed and very inflexible, to the point of pushing back on the requirements a little. C++ on Qt and Python on WxWidgets were more or less neck and neck for ease of coding and flexibility of product, Qt of course has access to more platforms and runs faster if you're doing something big, but in its place Python-Wx is just as good if you know how to use it.

    If the project requirements had grown to about 3x the complexity (this was a one day programming exercise), I'd say the Excel Macro would have imploded and started to be a serious maintenance problem, Python and C++ would have scaled better, and at maybe 10-20x the complexity, the Python would have gotten a little creaky too, not so much due to inherent flaws in the language but more because of how it is typically used. Of course, you can write horrible C++ code too, but it has been around long enough that most experienced C++ programmers recognize the bad stuff in C++ on sight and can regale you with tales of projects gone wrong because it was done that way.

    If your idea of productive is whipping off 3 or 4 relatively independent projects a week, leaning heavily on existing script libraries and not giving a damn if what you are doing is efficient or not, sure, JavaScript is fine, and it has the home field advantage in HTML5. If you're building bigger systems that evolve and need a maintenance lifetime of 5+ years, there are better tools for that.

  • Re:JS is not OO (Score:5, Informative)

    by BitterOak ( 537666 ) on Tuesday February 07, 2012 @09:52PM (#38962331)

    Javascript is not perfect but more importantly, it's not OOP.

    Actually, Javascript is object oriented. It's just that, unlike most object oriented languages, it is prototype based [wikipedia.org] rather than class based. [wikipedia.org] Both are legitimate forms of object oriented programming, although class-based is more popular now.

  • by Derek Pomery ( 2028 ) on Tuesday February 07, 2012 @09:55PM (#38962357)

    https://github.com/kripken/emscripten [github.com]

    w/ emscripten, if you can output llvm from your language, you can run it in javascript.
    Emscripten author claims 2-3x of optimised C.

  • by oldspicepuresport ( 1551767 ) on Tuesday February 07, 2012 @09:59PM (#38962379)
    This is book is worth every penny and more (~$18 on amazon).

    Like the submitter, I come from C/C++/Java background and always despised Javascript whenever I had to deal with it. I picked up this book a few months ago and can confidently say that this book completely changed my view of Javascript. Javascript is a quirky language, and has some really bad parts (the book has a chapter dedicated to the bad parts). This book clearly explains common misconceptions about the language, as well as all the things a programmer used to a more traditional language needs to look out for. The book explains how Javascript works under the hood in great detail (the prototype-chain, functional scope, type conversion and equality, first class objects/functions ,closures, etc.)

    This is a book for programmers, it's not a cookbook or how-to, and you need a good understanding of programming for it to be useful. That being said, for programmers coming from more traditional languages to Javascript, this book is exactly what you're looking for. I can honestly say that in a few short months Javascript has gone from one of my most hated languages to one of my favourites. The language is incredibly powerful and expressive once you get a good understanding of how it works and why.
  • by Anonymous Coward on Tuesday February 07, 2012 @10:07PM (#38962443)
    Could you software guys stop with the hyperbole? You're sitting at a desk pounding away at a keyboard. Some people have real jobs that hurt.
  • by Anonymous Coward on Tuesday February 07, 2012 @10:25PM (#38962581)

    Moving from assembly to Java is a big jump because you're gaining many abstractions that just don't exist in assembly, and giving up some some concreteness that just isn't as useful in Java.

    The exact opposite happens when you move from Java or C++ to JavaScript, and this is what the submitter is suffering from. JavaScript has inferior abstractions compared to what Java and C++ offer. The submitter feels pain because he's apparently an experienced programmer who knows that he's losing many valuable tools when using JavaScript, and getting nothing beneficial in return.

    Just look how stupidly difficult it is in JavaScript to implement even basic inheritance. There are many different ways, and they are all horrible. Java and C++ both make the definition of classes and inheritance hierarchies extremely simple and easy. It's far easier to imitate JavaScript's prototype-based OO approach in Java or C++ than it is to implement rudimentary class-based inheritance in JavaScript.

    JavaScript advocates usually toss out something about "lambda functions" or "closures" at this point. Well, it turns out that they can both be implemented very easily using the proper class support that both Java and C++ offer. Nevertheless, C++11 currently offers some syntactic sugar to make lambda functions easier to work with, and Java 8 will likely support an even easier lambda syntax, as well.

    This is all ignoring the other major problems the submitter highlighted, too. You don't have a compiler doing a lot of type checking automatically when you're using JavaScript. So you have to accept that these errors will be caught by the end user (and they always will be), even if you put in a lot of manual effort basically implementing type checking yourself within your JavaScript code. Then there are the lack of proper IDEs, good debuggers (Firebug pales compared to a real C++ or Java debugger), and the many other tools that a C++ or Java programmers expects to use.

    My advice to the submitter is for him to lower his standards significantly. It'll be painful, but that's the only way to stay sane when using JavaScript. Expect poor results from the language you're using. Expect poor results from the libraries you're using. Expect poor results from the runtimes (browsers) you're targeting. Expect lower-quality software. Expect more end-user complaints. Oh, and welcome to web development.

  • by Anonymous Coward on Tuesday February 07, 2012 @10:59PM (#38962779)

    ... And now excuse me, I have to set up my little QWidget 20-something lines of code with 20 typecasts strewn about just to get the bloody label to show a simple literal when I click a menu entry.

    You're doing it wrong
    http://stackoverflow.com/questions/1814189/how-to-change-string-into-qstring [slashdot.org]

  • by chooks ( 71012 ) on Tuesday February 07, 2012 @11:18PM (#38962889)

    If closures and lambda expressions were so easy to implement using basic inheritance, Java would already have it. Java 7 has no lambda structures or closures. Anonymous inner classes are a hacked on incomplete poor mans semi-closure that provides just enough to get you almost what you want, but not quite. Last I checked, JCP (or related) had this as a work in progress. And will it be a first class construct in Java or some kind of pre-compiler/interpreter/VM? I am not sure, but hopefully the former.

    Java makes many things easier, but functional programming constructs is not one of these. Once I (re)learned how to use the more functional approach (it has been a long time since my LISP days) I really started to (re)appreciate the power of it. Some may wax poetical about elegance, simplicity, etc.. but that is really what it felt like to me. It sure made it harder to swallow some of the limitations that Java has without these constructs.

    I am definitely not a javascript fanboi, and absolutely agree with you (and the 1E6 others) that hate the toolset for developing with it, but I do appreciate the programmatic constructs it allows. And these constructs are definitely not in Java yet (cause boy, could I have used some of them on my last project!)

  • by defcon-11 ( 2181232 ) on Tuesday February 07, 2012 @11:45PM (#38963051)
    "JavaScript has inferior abstractions compared to what Java and C++ offer" As someone who codes in both Java and JavaScript, I find Javascript much more flexible, and closer to a true OO language, as opposed to Java's sort-a-kind-a OO. Javascript has several well known design flaws, but so does Java. The flaws are generally well known, and experienced programmers form either language shouldn't have a problem avoiding them. Most people that I've worked with and who complain about Javascript haven't taken the time to learn how the language works, and instead just try to impose class based OO, which always fails miserably. When using a prototype OO language (Javascript, Python, Ruby), OO principles such as 'interface composition instead of inheritance' that Java developers praise suddenly become much easier to apply without resorting to design patterns aimed at getting around Java's lack of multiple inheritance, or other shortcomings. Java's type checking can be helpful at times, but after many years developing with dynamic languages, I will tell you that mismatched-typing issues are a tiny minority of bugs I've seen make it to production.
  • by ozmanjusri ( 601766 ) <aussie_bob@hoMOSCOWtmail.com minus city> on Tuesday February 07, 2012 @11:54PM (#38963119) Journal

    Lack of a good debugging and testing environment is the only reason Javascript is goddamn annoying.

    Eclipse/Aptana, Webstorm or Netbeans are all good IDEs that handle debugging either natively or with plugins.

  • by shutdown -p now ( 807394 ) on Wednesday February 08, 2012 @12:35AM (#38963347) Journal

    Javascript has closures and none of the other languages have them

    All mainstream languages except for Java have lambdas/closures (and Java is getting them in the upcoming release).

    For that matter, most languages that do have lambdas, provide syntax for them that is considerably less verbose than that of JS - which makes a lot of sense when you actually start using lambdas heavily. To give an example with fold used to sum a sequence (assuming fold is a member function in all cases, for the sake of uniformity, and ignoring the ability to treat operator itself as a binary function in languages that support it):

    // JS
    xs.fold(function(x, y) { return x + y; });
     
    // C#
    xs.fold((x, y) => x + y);
     
    ' VB
    xs.fold(Function(x, y) x + y)
     
    // Java 8
    xs.fold((x, y) -> x + y);
     
    // Scala
    xs.fold(_ + _)
     
    # Python
    xs.fold(lambda x, y: x + y)
     
    # Ruby
    xs.fold {|x| x + y }

  • by cshark ( 673578 ) on Wednesday February 08, 2012 @12:57AM (#38963443)

    My advice to the submitter is for him to lower his standards significantly. It'll be painful, but that's the only way to stay sane when using JavaScript. Expect poor results from the language you're using. Expect poor results from the libraries you're using. Expect poor results from the runtimes (browsers) you're targeting. Expect lower-quality software. Expect more end-user complaints. Oh, and welcome to web development.

    I'm really tired of hearing xenophobic morons complain about languages and tools they don't understand, and spouting off the same nonsense that hasn't been true for years. It doesn't bode well for your understanding of any language when you're readdressing grievances that were resolved a decade ago. Get your head out of your ass, and get with the times, please. Here's the deal: Just because you don't understand it, does not make it an infirior, low quality language. Just because you're incapable of writing code that performs well, does not means that the language is slow or sluggish. It simply means you're a closed minded idiot who refuses to learn the basic principles, ideas, and uses behind the thing.

    You can't compare Javascript to C++ or Java. Not only is it a totally different mindset, but it's a totally different use case. In Java and C++ you're writing libraries and interfaces. In Javascript, you're writing libraries and documents. Documents are fundamentally different than interfaces because the structures are different. Javascript is a means by which to manipulate a web page. In practical terms, nothing more. Javascript is out of place on server side, which is why server style Javascript has never caught on, and it doesn't really make a lot of sense as a general purpose programming language either.

    To date I've met a lot of C++ programmers that have tried Javascript. I've only known one who was any good at it, and none of them have been better at it than me (which is generally how I evaluate other programmers, generally). It's not a bad thing. It is what it is. C++ and Javascript are so different, that there's really no way to do an apples to apples comparison. And, it's probably easier to go from something like Javascript to C++ than it is to go the other way.

    If you're going to go from C++, just put the whole thing out of your mind, and pick up something hands on. If there's a Hard Way book on the subject, it would be a good place to start. Also, picking up other scripting languages like Dart, PHP, or Python might get your brain to soften up a little. After spending time in C++ world, where you have to have absolute control over every aspect of everything you develop, going to Javascript where you really only control the DOM can be jarring. The hardest thing to do is just accept that Javascript is nothing like C++, and the tools that you're used to in and for C++ don't work for a reason.

    As far as debugging tools. Don't bother with Chrome. It's nearly worthless for Javascript testing or debugging. Get yourself a copy of the latest Firefox stable, download Firebug, and the Web Developer Toolbar. Make sure you have at least a basic understanding of CSS 2 and its basic properties before attempting to do anything, and get yourself a copy of Netbeans. It has the best debugger, and the best reference material, in my opinion. It also has built in support for Subversion and CVS, which I find useful. Don't write anything in Javascript without version control. You'll thank me for that.

    When you're first getting started, don't try to become an expert in Jquery or YUI. Learn the real thing first, and write something challenging from scratch. Since you're a C++ programmer, there are any number of things, I'm sure, that you can think of that would be fun to write in Javascript. When I learn a new language, I like to write an e-commerce program start to finish in it. If I were just starting with Javascript, I would attempt to write something for mobile. Mobile has the extra challenge of writing something useful, that maintains a smaller footprint. It'll kill your C++ tendencies flat. Or, it'll frustrate the hell out of you.

    Either way.
    Take Care

  • by Anonymous Coward on Wednesday February 08, 2012 @02:19AM (#38963853)

    Heh... the idea that you would be using every part of C++ and that all of it was good... brought a smile to my place. First of all, C++ is so large a language that practically no one knows everything about it. Second, books like "Effective C++" are precisely about the specific way to use selected features of C++ in order not to get bogged down later on.

  • by velinion ( 582423 ) on Wednesday February 08, 2012 @03:58AM (#38964295) Homepage

    Wow. Lisp has closures, and it dates back to 1958. Not that I like Lisp a whole lot. I prefer to have syntax beyond parenthesis.

    When I need closures and a functional programming paradigm, I usually turn to OCaml myself. (Cue hated from the lisp crowd)

    Seriously, programming language preference is like editor preference. It has a lot to do with what you are most used to, and a lot to do with how your mind happens to be most comfortable thinking.

    I prefer the much shorted debugging period afforded by strongly typed statically typed languages, even though it forces me to jump through some hoops that a weakly typed dynamically typed language would save me form. Personally, I've coded in C, Java, C++, Perl, Python, OCaml, Lisp, Scheme, PHP, Prolog, Javascript (very little) and Basic. Among these, Perl, Ocaml, Lisp, and Scheme all make extensive use of closures. Others may as well. (I just haven't used closures in more than those 4)

  • by Anonymous Coward on Wednesday February 08, 2012 @04:08AM (#38964325)

    I guess C++ isn't a mainstream language anymore. Go figure.

    Actually, C++ has it since C++11... but with typed arguments of course:


    # C++
    xs.fold( [](int x, int y) { return x + y; } );

    Of course, both Javascript and C++ are still much less powerful than any variant of LISP.

  • by Requiem18th ( 742389 ) on Wednesday February 08, 2012 @06:31AM (#38964859)

    I agree, it was flammish to say JS has inferior abstractions. It DOES have LESS abstractions. But the few it has are actually more powerful and general than Java's. In other words JS is more orthogonal than Java, you do more with less, which is a good thing, and I say this as a harsh critic of JS!

    But typechecking is one of those things that, while dynamic programmers like me shrug, does make a lot more sense than I usually accept. If static type checking is for you, JS isn't. However it is possible to compile Java to JS, there are several implementations but the best one is Google's Google Web Toolkit which is exactly that. A Java environment that compiles to Javascript.

  • by narcc ( 412956 ) on Wednesday February 08, 2012 @06:46AM (#38964917) Journal

    Working with the DOM yourself is painless if you understand it. Most people don't (yet assume that they do) and haven't even made a legitimate effort to learn about it. If you read the standards, and spend some time playing with what you're reading about, you'll find that it's not difficult at all. You'll also find that managing cross-browser compatibility is almost as simple as merely avoiding a (vanishingly) small subset of things.

    As for cross-browser ajax, it's also really easy *if* you've taken the time to actually understand it. I wrote a small cross-browser php/js ajax library years ago (2006 or 2007) that works (it's in production) unmodified to this day. It took less time to write than it did to learn the equivalent bits of jQuery.

    jQuery, in my experience, leads to less-readable and less-maintainable code. The added bloat is just salt in the wound. Really, the people I see push hardest for jQuerey are the same people who don't seem to 'get' that JS is not Java/c#/c++ or people that don't really understand the DOM or CSS.

    Sure, if you were tasked with creating a set of standards for the web you'd never come up with a mess like HTML, CSS, JS -- it's not difficult to imagine a simpler set of standards. Of course, it's what we have. jQuery just makes an already big mess even bigger -- with no obvious net-benefit.

Neutrinos have bad breadth.

Working...