- Jun 22, 2014 at 7:05 PM
- Shawn Wildermuth
- 24 Comments
Do Languages Matter?
I started with database ‘languages’ twenty-eight years ago. My experience in those days was that when you got a new package or solution, you were going to learn a new language. A language was part of the experience, not a separate piece of the puzzle. If you look back at how Paradox, dBase and others worked. The language was simply ‘in the box’.
Of course this wasn’t true of the lower level languages like C and C++. They were all over the place and pretty ubiquitous. The difference then was that there was a steep divide between the productivity gap between something like C++ and Delphi. Enterprise developers especially seemed to use high-level systems knowing that they were trading productivity for a performance hit.
In the recent past, the world started to get divided into large silos of languages that are bound to their vendors. The C#/VB/.NET stack against Java/JVM was the story for ten years in many circles. The introduction of new combinations (e.g. Ruby/RoR) from the open source world didn’t seem to change this much. Even the recent Obj-C/Swift/iOS stack is a continuation of this trend.
What I find so interesting is that it seems that developers are becoming more entrenched to their respective vendors (and usually languages too). Many people self-identify as Java Developers, .NET Developers or Ruby people. Even though the language is our first experience with an ecosystem, the underlying plumbing affects how we create software much more than the language in my opinion. Especially since many of these languages have more in common than they have differences.
Finally, when I embraced Node.js, it informed the way that I wrote my ASP.NET code. Thinking in the light of asynchrony was no longer limited to Windows Services or other terse server code. I found the usefulness of being asynchronous by default in ASP.NET MVC and Web API. Sure, IIS can be tamed by throwing hardware at it, but why should it need to?
Do you agree with me?
To be honest, I'd happily work just in JS now, drop every other language unless there's a specific reason for it.
We can cover Web (browsers), Client (node-webkit), Backend (nodejs), devops (nodejs), win 8 (metro) & generic mobile (phonegap). This is a pretty compelling platform.
When using things like node, we can bring in binary modules or use asm.js or edge.js if we need something specific to run fast. Targeted use of other languages would allow them to play to their strengths.
The tooling is adequate and will only get better. Things like jshint can save us from the worst of ourselves.
And, if we follow the "Good Bits" principle and avoid using patterns and practices that make life hard for us, we can get a very long way indeed.
What's more, we can use this stack on any platform we're comfortable with. I can dev using my linux machine, you can use your windows machine and she can use her shiny mac. It's not an impediment to our collaboration. Whilst this is a feature shared with ruby and python, neither has had microsoft tuning their engines to work on windows as a first class citizen (as nodejs has).
Do you have anything to share?
Angular sense to be the killer feature to me, with its delightful pattern/structure and all.
I have unhitched from the Microsoft bandwagon in order to keep my career going, Microsoft are the new IBM!
Great for its original purpose ie: adding snippets of functionality to a website so your don't have to make a trip to the server for basic things like validation.
Would be good if you put something together.
I do and I do not agree with you. Why I do not agree with you? What makes you a better programmer is a good understanding of the machine. Therefore you require knowledge of C (as it is really close to what you actually have, but supplies enough abstraction for solving problems efficiently). There are many C# programmers (and especially JS) programmers, who do not understand C well enough to be considered good programmers. That statement is generally not restricted to the two languages mentioned.
However, getting to know other programming languages, seeing other concepts and playing around with the machine will definitely help you figuring out stuff that you couldn't handle before.
I think that is a pretty bad attitude. I don't think knowing C is how you become a good developer. Too bad you have decided to throw developers under the bus for not knowing C specifically.
Shawn, besides your own pluralsight courses, are there any others you can recommend?
In response to the article:
That may have been the case 10-20 years ago, but times have changed. In most modern industries (save for video games and critical embedded systems) the best programmers are those who are productive, and are able to deal in abstractions without worrying about machine code. That's what a compiler/interpreter is for - to provide that abstraction. And the zeitgeist now is a strong push towards functional programming, which originates in mathematics, even further removed from bytecode.
Thank you for taking the time to put this article together!
The number of wrong words in this article is astonishing - better switch off your "spelling checker" ...
I strongly agree to the following from the article/blogpost
1) One should stress on learning logic not the language. Language is yet another to approach a problem statement.
2) Languages should be treated as a means of learning approaches.
4) Learning is a continuous process and one should not stop post learning one language. Keep trying out and experimenting with languages (may be not professionally)
I jumped into JS using the excellent Intel XDK to do cross platform dev. Later I "graduated" back to VS... yes primarily for the code-completion, native Cordova integration and other interface helpers. I am keeping a close eye on Webstorm...
Like so many of us... I also started on the MS stack.. SQL Server, VB, C#. I am proficient in JS now and I love it. I can concur with the influence of JS on using other languages. I am now neck deep into SWIFT (yes.. wtf?), and even here JS helped immensely with my understanding of the async and block(closures) concepts.
If I wish knew JS at the time of c# lambda's launch :)