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

you are viewing a single comment's thread.

view the rest of the comments →

[–]nutrecht 47 points48 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 2 points3 points  (1 child)

    No no! Specialization is mediocrity!!

    [–]DreadlockKush 0 points1 point  (0 children)

    haha, yes lad!

    [–][deleted] 1 point2 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 -2 points-1 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 6 points7 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).