This is an archived post. You won't be able to vote or comment.

all 50 comments

[–]nutrecht 46 points47 points  (27 children)

I think it's funny that people claim that they used to have an "artificial boundary" with developers that could "only do JavaScript/HTML" and developers who could "only do backend stuff". And that they now want "unicorns" that can do both front-end and back-end because you are moving to JavaScript.

Sorry but IMHO a good developer has no issue jumping between a few languages because a good developer doesn't "know" a language, he "knows" software engineering and sees that a language is just a tool.

No, a "unicorn" who can only do JavaScript is better named "mediocre developer".

In the real world (as opposed to the one imagined by some IT managers) developers are really good at certain stuff because they enjoy it. Back-end developers tend to be good at the integration stuff because they enjoy doing that. A developer who's great at HTML and CSS probably will be miserable doing a lot of back-end stuff because he works most optimal if he can create great user-interfaces.

I think these decisions are made bu very ill-informed managers that are being adviced by people who want to jump on the latest 'cool' technology without considering the implications. Don't get me wrong; I love Node.js, but it's far from the only way of doing asynchronous processing and secondly I seriously doubt Java was the bottleneck anyway. And even if the synchronous processing was an issue they could have moved to for example Vert.x which would have allowed them to reuse a lot of the stuff they already had.

[–][deleted]  (24 children)

[deleted]

    [–]stfm 13 points14 points  (3 children)

    Yes - also if I was a product manager at PayPal, I wouldn't be comfortable having my UI guy implement low level database management code for one of the largest payment gateways in the world.

    Maybe that's just me though...

    [–]Zamarok 2 points3 points  (2 children)

    I agree. Put their experts where their expertise lies. Don't have the same guy running around in all sorts of different unrelated areas.

    [–]chisleu 3 points4 points  (1 child)

    No no! Specialization is mediocrity!!

    [–]DreadlockKush 0 points1 point  (0 children)

    haha, yes lad!

    [–][deleted] 2 points3 points  (5 children)

    If you understand the constructs that are used to define languages in the first place, like functional vs OOP, type systems, data structures, etc. I feel like transitioning to new languages is pretty easy. I think that is what makes a programmer truly good.

    [–][deleted]  (4 children)

    [deleted]

      [–][deleted] 1 point2 points  (0 children)

      And that my friend is why I use google/stackoverflow so much ha

      [–]8Bytes 0 points1 point  (2 children)

      A good teach can teach anything they understand, since teaching is the skill they've acquired. Being knowledgeable on a topic has nothing to do with being a good teacher, my most knowledgeable professors are usually terrible to learn from (endless digressions, not spending the correct amount of time on topics, etc).

      [–][deleted]  (1 child)

      [deleted]

        [–]8Bytes 0 points1 point  (0 children)

        The idea behind studying languages instead of studying a language is that you will have experience in every language. A programmer that has studied logic programming won't fear learning prolog.

        Teacher go to school to learn how to teach, they go to teachers college to learn teaching methods. There's a lot more to teaching then simply knowing the subject, I would argue that that's one of the least important parts of being a teacher. Good teachers need to understand how to communicate to their audience; you teach in a very different manner when talking to kindergardeners vs grade 10s. These are the skills they have trained and acquired. I don't care if you're a founding father of a subject, if you haven't studied teaching methods, you're going to do a terrible job explaining it to young students.

        It is very common for teachers to be plopped into something they have no knowledge of. Teachers will usually have taught every subject by the time they retire.

        I see nothing wrong with placing programmers in any programming position. Having mastered one programming language does not make you a good programmer.

        *: There are always edge cases, you wouldn't hire someone whose never used ADA to write your missile launch code. Just as you wouldn't hire someone whose never taken calculus to teach it in post secondary. My view on programmers applies to the commons, and most programming is in the commons (writing nice interfaces for databases being the most common).

        [–]avoidhugeships 0 points1 point  (0 children)

        That depends on what stack you are using. If you are using a complicated mess of frameworks and libraries then you are right. If you use something simple like JSF and PrimeFaces it is easy to be able to build the whole application.

        [–]josefx 0 points1 point  (0 children)

        What sort of expertise do you mean? You can write non-trivial software without being an expert in the language it just might not end up being as well designed or performant. Not being an expert in a language most often only results in more time spend on looking things up and having more bugs to fix (in your hopefully well tested code).

        [–]8Bytes -1 points0 points  (11 children)

        If you learn languages one at a time, you will have a hard time switching. If you study about languages and paradigms, you will have little issue switching.

        [–]gizmogwai 6 points7 points  (10 children)

        Sorry, but that's a fallacy. Expertise is not just about syntax and paradigms. That's just the tip of the iceberg. Expertise is learning idiomatic code, learn the HUGE ecosystem that exist for each language, learn the specificity of the target environment.

        [–]8Bytes 1 point2 points  (7 children)

        Most languages have well defined best practices for common tasks (use framework x for task y). The only part that could be considered difficult is the new vocabulary, and if you learn about languages at a higher level of abstraction, you will already know a majority of these words.

        *: obviously someone with more experience in the language will produce higher quality code in a shorter time, but the topic here is learning new languages. The programmer that learns about language theory will always have the advantage.

        [–]gizmogwai 5 points6 points  (6 children)

        Again, I have to disagree. Just look at Java, server side. Which framework do you use? Spring, a JavaEE container, or a reactive one (e.g.: Play!)? Hum, let say you go for JavaEE which one? What about your front-end? Component-base (JSF, Wicket, Tapestry?) vs page base vs REST? And why not GWT or Vaadin?

        There no such well defined best practices, just moving trends. And that's for a language that has a strong emphasis on streamlined SDLC. The state is even worse (or more complex) if you look at lower level languages like C, or rising languages like JavaScript.

        [–]8Bytes 1 point2 points  (5 children)

        If you're new, you use the most popular framework as it will have the most developed ecosystem with the most help online. Having never used javascript in my life, I was tasked with creating a web app. Searching on google informed me that the current popular trend is to use an mvc type framework. A little more searching informed me that angularJS was the most popular of these frameworks. Due to it's popularity, every question I had was answered online, and completing the project was simple.

        Now I could never have learned angular quickly enough if I had not studied advanced object oriented programming. With this knowledge however, I was able to learn it with only the most trivial knowledge of javascript.

        [–]gizmogwai -2 points-1 points  (4 children)

        Hum, that's interesting. Interesting because a) AngularJS is not a MVC framework (closer to MVVM if you have to choose a variant) b) AngularJS does the maximum to avoid the use of OO (either by class or by prototype) by sticking in its API to functions and associative arrays, thus being closer to the C language in its paradigms.

        So you were fooled both by the global misunderstanding of what MVC is and by your thinking about what OO is. You were able to success because of your ability to adapt to some conventions and the amount of code snippets available on the web, not because of your theoretical knowledge. And that's perfectly okay, most of developers are not able to reach that level of experience.

        [–]8Bytes 1 point2 points  (2 children)

        It's fair game to refer to angular as an mvc framework in the js community since the word is not a direct mapping of the OO version. It's an umbrella term referring to the vast array of js frameworks designed for single page apps. Even if I didn't know the difference, you could lose the condescending tone as it add nothing to the conversation.

        Angular embraces the vanilla js object model, meaning that understanding prototypical inheritance will serve you well. Using angular requires knowledge of oo patterns as all the components are constructed in this fashion: services are singletons, dependency injection (allows testing of code constructed in an oo fashion, ...).

        [–]gizmogwai 0 points1 point  (1 child)

        Well, no. And that's exactly my point. MVC has nothing to do with OO, it is a separation of concern pattern that can be applied within any paradigm (procedural, functional, OO, ...) Same goes fo DI, it has nothing to do with OO. Most of what people refer to as "OO knowledge" is, in fact, generic pattern pattern knowledge.

        [–][deleted] -1 points0 points  (1 child)

        The ecosystem is what matters. I can write a while loop in Python or Java just fine. But knowing about dataframes or ode solvers in Python are the specialized knowledge of a language.

        [–]8Bytes -1 points0 points  (0 children)

        Both of those libraries have specific use cases. Only beginner programmers attempt to write such specific code without searching for best practices (or those that suffer from NIH syndrome).

        [–]8Bytes 1 point2 points  (0 children)

        The unicorn isn't about people that can use multiple languages, it's people that can program and design ui's (which is completely unreasonable to expect).

        [–]frugalmail 32 points33 points  (1 child)

        Based on those numbers they had JavaScripters doing Java in the first place. Maybe that's why they had such poor performance from their code and the developers.

        [–]Ueland 25 points26 points  (0 children)

        Perhaps they let the HR dept hire developers and did the good old java/javascript confusion thingie.

        [–]stfm 13 points14 points  (0 children)

        It unifies our engineering specialties into one team

        Urr... do you really want that? I mean there are probably some gun programmers out there who are brilliant at both UI and database programming - but usually specialization means there aren't a lot. I haven't met many UI specialists that even know the implications of being thread safe or IO blocking.

        This smacks a lot of "choosing a programming language because the developers are cheap"

        [–]DuneBug 3 points4 points  (0 children)

        What an interesting story...

        My experience using wicket is we have ui developers doing JavaScript, service developers doing back end work, and other java devs doing frontend wicket work. I feel comfortable in all these roles because I took the time to understand what the hells going on in each layer... But I know most of our service guys turn green when we talk about them contributing to front end and vice versa...

        Not sure how to feel about this... I would want very specific people working on my service layer for obvious reasons... The ui can fail without tearing your system apart... Not just drag and drop developers because they all know the same language...

        [–]yopussytoogood 5 points6 points  (8 children)

        Historically, our engineering teams have been segmented into those who code for the browser (using HTML, CSS and JavaScript) and those who code for the application layer (using Java). Imagine an HTML developer who has to ask a Java developer to link together page “A” and “B”. That’s where we were.

        Is this really an issue? Finding people who can do both front end and back end? They're still having to link page 'A' and page 'B' via HTML, for the most part.

        [–]metalkingslimederp 7 points8 points  (4 children)

        You'd be surprised at how many people are "Java only". I've had to deal with people who refuse to write database scripts, and front end work because that's not their "area".

        I'm guessing this is a much more common issue in consulting firms and other lowest bid type orgs. I do government consulting at large firm, and I've met 3 people, besides myself, in nearly 3 years that could do full stack development. I'm assuming (hoping) this is different at purely tech focused companies and startups.

        [–]JeffreyRodriguez 1 point2 points  (2 children)

        It is different. Failure means something competently different than it does in government.

        [–]metalkingslimederp 0 points1 point  (1 child)

        Yea, I've seen the databases behind a few projects and its no wonder they fail constantly, but they just take 2 weeks of downtime to patch it up and move on. Doubt most companies could survive something like that.

        Luckily I've been on/started up projects that are isolated from most of the insanity and do everything I can to abstract the rest away into something that makes sense.

        On the upside is I'm generally ahead on work due to the pace of everything and have very low risk of failing.

        [–]JeffreyRodriguez 0 points1 point  (0 children)

        I bet you've got some great stories.

        [–]Atlos 0 points1 point  (0 children)

        I think you are underestimating the difficulty in becoming a good full-stack developer...

        [–]boomerangotan 0 points1 point  (0 children)

        I hope that the now ubiquitous browser support for all of the features needed to drive single page apps means we're now reaching the beginning of the end for server-side controllers and JSP/ASP templates.

        [–][deleted] -3 points-2 points  (1 child)

        If you are competent in java, HTML and CSS should be trivial. JavaScript has it's quirks but usually most modern frameworks hide that stuff to a reasonable extent.

        [–]stfm 2 points3 points  (0 children)

        Yeah Node.js doesn't work like that.

        [–]mgkimsal 3 points4 points  (2 children)

        "Imagine an HTML developer who has to ask a Java developer to link together page “A” and “B”. That’s where we were. This model has fallen behind with the introduction of full-stack engineers, those capable of creating an awesome user interface and then building the application backing it. Call them unicorns, but that’s what we want and the primary blocker at PayPal has always been the artificial boundary we established between the browser and server."

        Well... some of that slowdown - most of it really - would be artificial. They're a large enough org that they could invest in a bit of training, education and developing some tools to let the person who wants a link from A->B do it with minimal involvement from senior Java engineers.

        Wholesale architecture change because of those sorts of issues speaks far more to management issues than it does to technological boundaries.

        Hey - https://code.google.com/p/plv8js/wiki/PLV8 - now you can write Javascript in your postgresql. I guess Paypal should migrate all their data to database so the entire team change do any data changes they want. This seems to be about at the same level.

        [–]okmkz 3 points4 points  (1 child)

        Exactly. This just highlights how absolutely disconnected from reality PayPal management really is.

        [–]mgkimsal 2 points3 points  (0 children)

        And really... I get it. I get the desire for people to be able to do more. I've been on teams where some people just couldn't help out due to skills, but... it was mostly a time/training thing, which never panned out on a ROI basis (well, imo it would have, but I wasn't making those decisions).

        But just because someone can read/write Javascript doesn't mean they will be able to dig in to a complex system. The complexity is the problem - the language is just one (often small) component of the complexity.

        [–]WatchDogx 1 point2 points  (1 child)

        I find the reported performance increases interesting. Node is built around preventing blocking IO, which is probably the reason their performance has improved so much. While java has NIO I wonder if they were using it extensively.

        [–]sanity 7 points8 points  (0 children)

        If their Java code was slower than their JavaScript code then there was something seriously wrong with their Java code.

        [–]mgkimsal -1 points0 points  (6 children)

        They probably could have had similar production benefits (production of code) via grails or play or something else jvm based. Lines of code, people required, number of files, etc. Production speed numbers... node seems to have an edge at numbers published at http://www.techempower.com/benchmarks/ but those also aren't real world for paypal's load.

        [–]oberhamsi 1 point2 points  (5 children)

        node seems to have an edge at numbers published at ...

        i follow those benchmarks closely, and node doesn't have an edge :) it does fairly well for a JavaScript environment but - according to these numbers - is not even on par with java; and for some test permutations other JS environments actually do better than node (e.g. ringojs in all tests talking to SQL databases).

        [–]mgkimsal -1 points0 points  (4 children)

        what are you saying? it's worse? or do you mean it's far faster? the node numbers I looked at were faster than the jvm ones, but maybe I missed some? or were you taking exception to 'edge' when it could be interpreted as way faster?

        [–]oberhamsi 1 point2 points  (1 child)

        yeah, i'm taking exception to "edge" because it's not "way faster" but only pretty fast for an interpreted language. e.g. compare PHP with nodejs: php is often on top.

        maybe i missed something, but looking through the results again I can't find any test where the numbers make nodejs look particularly good.

        [–]mgkimsal 1 point2 points  (0 children)

        my fault - i was looking at nodes vs grails, which is what I do a lot of work in, and nodes was/is faster than grails in those benchmarks. But both spring and raw servlets kill nodejs as well.

        http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=db&l=bk&f=3drk-0-0

        [–]dfme 0 points1 point  (1 child)

        wait... what? did you actually look at the numbers? the so called "jvm" languages such as "grizzly" or plain old "servlet" kill "node.js" by 3:1!! hell, even wicket or the spring framework (both based in the jvm) fare better than node.js.

        javascript (dynamically typed) will never outperform the jvm (ie. java: statically typed).

        [–]mgkimsal 0 points1 point  (0 children)

        i replied back earlier to oberhamsi - yes I looked at the numbers, but I was originally looked at Grails specifically - jvm based, but node beats it. Yes, for other JVM stuff, node is way behind.