Scott Hanselman

If you had to start over, what technologies would you learn in 2014?

February 10, '14 Comments [79] Posted in Musings
Sponsored By

I got an email recently from a long-time programmer who had to step out of the game for a little while. They basically had a hiatus from programming due to situations out of their control, but now are looking at getting back in.

They asked, quoting from the email:

If you had to “start over,” what are the technologies, languages, paradigms and platforms I need to be up-to-date and mastering in my new world of 2014?

It’s daunting if not downright scary.  I can *learn* anything, and do - quickly.  I feel like I’ve been sooooo out of the loop, it’s not even funny.

Programming Books used under Wikimedia CommonsI think we can all relate to feeling like this. I've talked about this before in my post "I'm a phony" about imposter syndrome. Technology is changing so fast it's hard to be a "professional" at anything. Ultimately, we're all amateurs.

To the root question, though, what technologies would I learn?

This question comes up a lot. I tell people this. Learn one language you can build large systems with AND also learn JavaScript. For me, that's C# and JavaScript. For someone else, the "systems" language might be Erlang, or Groovy, or Ruby, or Java, or Scala. That language matters less to me. Your goal is to be able to write applications for the web, as well as write other systems.

Pick a language that feels right

Learn a language that has a community behind it and that has been a part of building successful systems. Learn a language that lets you create the kinds of systems you want to create. For me, I picked C# because I can write web apps, Windows apps, Mac apps, iPhone apps, Windows Phone apps, SmartWatch apps, and tiny embedded apps, but above all because I enjoy writing C#.

There are many other languages that have a wonderfully rich breadth of power and expressiveness. Python is one, Java is another, and JavaScript and node can even control robots. Pick a language with personality and breadth, and learn that language the hard way, by doing. Read lots of code and lots of books. Pick a language that fits your brain and helps you learn how to think, and when you do think, think about abstractions'.

Write while you learn your new language. Write about what you discover, what works, what doesn't. Write even though no one may be reading; you may find that they are reading. Join your new language's community and go to its user groups. Remember not to have ego, you are not your code.

Bet on the Web

There's lots of talk about App Stores these days. Everyone has them and they are clearly where the money is made. But today's (2014's) App Stores are still broken. Updates are a hassle, even when they are automatic. Apps (on all platforms) get stuck in broken updating states and have to be reinstalled, updates are often huge and rarely use smart patching and deltas. App Stores can become weed-filled gardens if they aren't attended to.

The web persists, though. We have issues like net neutrality to work out, and walled gardens like Facebook, our standards orgs are stuck in committee, and we get a new identity subsystem every few years, but the web is winning. The web will persist and the web will win. That's why I suggest you learn JavaScript. (Learn HTML5 and CSS3 also and learn to create and consume JSON services.) JavaScript is the virtual machine that we all have installed and JavaScript is the language of the web. (For some, JavaScript is Assembly Language.) It's not going anywhere, so that why you should learn it.

Aim to be able to create web sites, web apps, and rich connected apps and systems. Also aim to know a language that lets you write applications that you can put in the App Store for any of a billion connected devices.

That's my advice to someone starting over in 2014.


Sponsor: Big Thanks to Aspose for sponsoring the blog this week! Aspose.Total for .NET has all the APIs you need to create, manipulate and convert Microsoft Office documents and a host of other file formats in your applications. Curious? Start a free trial today.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web
Monday, February 10, 2014 10:28:54 AM UTC
One should learn what feels comfortable and above all gives you the freedom you are comfortable with. I think a JVM based language like Scala or Clojure or even Java gives one that freedom as it runs on more platforms including mobile phones (Android). It gives that freedom because it's not tied to a vendor like C# is to Microsoft: With C#/.NET Microsoft still has to prove that .NET as a full framework has a healthy future, considering they put a lot of money on WinRT. With a JVM based language you don't have that, or at least to a lesser extend.
Monday, February 10, 2014 11:05:30 AM UTC
With that question child was born in me :)
Math^2 + Probability + Statistics + neural networks + low level C/C++ = AI
Just because it looks like robots are going to take out our planet :)
I want to be better and to beat them all
Daniel Blažanović
Monday, February 10, 2014 11:42:00 AM UTC
I love C#, I programmed in it for over a decade, and Visual Studio is still one of the best development IDEs if not the best.

That being said, MS platform lock in prevents me from working in that language.

If it were 2001 and I were making these decisions - I did in fact, back then, coming from Perl and Javascript [FWIW in 2001] - I would not believe that in 2014 I'd be primarily programming in languages (Scala and Clojure) on the JVM. In 2001 I started over and picked C# and it was good.

Now in 2014, having recently - over the past 4 years - started over and picking Scala, I'd probably pick Clojure (and, of course, the excellent ClojureScript) for all the reasons Frans mentioned above.
Monday, February 10, 2014 11:43:24 AM UTC
> the web is winning

xaxaxa ... that's what they were telling us for a little more than 10 years now. and yet still everyone I know who is in the software business makes more money with old fashioned desktop software than with "SAAS" web app style products (which are often making losses). But I'm not in the valley and thus not captured in a VC fueled bubble.

The web will win where it won already: as an information medium to replace newspapers, tv stationes and the like. But as a software platform it is a lost cause.
franz kafka 3001
Monday, February 10, 2014 11:49:01 AM UTC
Any tips on how to "Pick a language that fits your brain"?
Ferry
Monday, February 10, 2014 11:51:18 AM UTC
@Scott: maybe it's time for you to try SharePoint ;)
Gabon
Monday, February 10, 2014 11:53:25 AM UTC
Hi Scott,
I'd be inclined to agree with you with one addition - SQL for the database end.

I cannot see this going away any time soon, and due to the various standards behind it it's going to be relatively stable (hell, I chucked out a training manual from SQL Server 4.2 the other week, and most of that was still relevant) and applicable across many vendors whether T-SQL or not. At least a basic grounding in creating tables, crud and Sp's would be enough for a novice to get a tick in the box to get a job interview - the majority of jobs I see have SQL in there somewhere...

Having said all that as a long time MS devotee I'm now learning the MEAN stack as well, using MongoDB, so what do I know...? There's always so much to learn...

Andy
Monday, February 10, 2014 12:42:46 PM UTC
If I had to do it again, I'd double down on C/C++.

I used it in university a decade ago but didn't fully appreciate it. Now that I'm wiser I can see that it is still fast and still powerful.
Monday, February 10, 2014 12:48:25 PM UTC
Everything said I agree with.

I think app stores will fade away in future. Browser based applications are the future. There will be no need to install anything or any updates. Just enter the url and go. From a developer perspective you have only to support one platform. There are also no restrictions from the app store owners.

For me the browser is the OS of the future. More and more features are baked into it. So learning Javascript+Html+CSS is essential. There will be something better then Javascript but it's still 2014. Googles Dart maybe? I don't like it yet.

When thinking about using javascript one should also consider using typescript. For me it's like using c# in the browser (not really today but language and tools become better over time).

Of course also tools and workflows matter. Not only the language. AngularJS e.g. is a nice MVC framework.
Monday, February 10, 2014 1:12:31 PM UTC
Being careful enough, you can kick JavaScript off. By using Script#, JSIL or TypeScript
Victor Milovanov
Monday, February 10, 2014 1:23:51 PM UTC
JavaScript should have been emphasized even more, imo.

For anyone who disagrees, checkout AngularJS or any of the other rapidly advancing JS MV* frameworks.

Monday, February 10, 2014 1:54:38 PM UTC
C# and Java. More freelance projects. Cobol, very high rates. Think I'll learn Cobol...
Alexander
Monday, February 10, 2014 1:58:10 PM UTC
This is exactly my situation. I'll be 60 in May. I am basically starting over, having been out of it for almost 20 years. I loved Smalltalk, but it was commercially useless.

I used to be all about VB but C# eventually got me. So much more documentation.

I've tried a little JavaScript, but it's so easy to go down the rabbit hole without strong typing.

And SO much of what is out there is just terrible. Frankly I don't know how 90% of the web even works.

When I look at JS code in a lot of places it's just nasty.

I know. Its here to stay.

bill
Monday, February 10, 2014 2:05:24 PM UTC
COBOL. I actually had the v1.0 of the Microsoft Cobol compiler. Bought it at Computerland. I think it was a few hundred dollars.

on the inside cover it said, "a Data General like Cobol".

I'll say. We took our DG application and just loaded it and it compiled with zero errors. Even the syntax logging the terminal number (which would make no sense in a single user operating system).

Heh. Choose a language? Then it assembler, Fortran or Cobol. No SQL yet.

later it was Rexx.

whew.
bill
Monday, February 10, 2014 2:35:25 PM UTC
The Functional Reactive Programming paradigm is going to hit hard. It makes parallel programming extremely easy, which is a huge bonus for multithreading (a great way to harness multiprocessors) and for loading web pages asynchronously.

Libraries for this programming style are being created for almost any popular platform, and knowledge is spreading quickly. I recommend following some tutorial or online course on the subject.
dialmove
Monday, February 10, 2014 2:36:02 PM UTC
The web and mobile are where things are now and where everyone is moving. Neither are the home of Microsoft or its products including software. I would not even consider C# or anything .NET related with that in mind.
Rob
Monday, February 10, 2014 3:18:32 PM UTC
Depends on the goal. Do you want a stable job where you work for a big company? Microsoft. Do you want something exciting? Go with something free and sexy. Want $$$ and have the brainpower? Stats in any form, such as R. Want consulting gigs? Pick something a little off the beaten path.

Software is fashion, friends. You can watch the waves come in and pick your set (Bodie).

Monday, February 10, 2014 3:36:28 PM UTC
There are two situations you might be when "starting over." If you want to pick a language to have fun, everything in the article applies. If you want to pick a language to get a job and feed your family, then it depends on several factors.

For me, living in Mexico and without any desire to move, the choices are drastically reduced. We mainly work for companies such as Intel, IBM and Oracle, at least the decent paying jobs are there, which pretty much reduces your options to either .Net, Java or embedded C. Yes, we do have some (very few) options to work on Ruby or Python and we have a lot of options to work on PHP... but the pay is usually a fraction of a low paying Java job.

So, the advise I always give to students is to learn whatever language they enjoy... and also learn Java... and also learn JavaScript (there are A LOT more jobs for Java over here.) If they are lucky, they will end up working full time in the language they enjoy, otherwise, they will be proficient to work with another language, and have fun on the side with their language of choice.
Marcelo
Monday, February 10, 2014 4:01:29 PM UTC
Software development is one of the fields where I believe we all have to be life-long learners. C++ is the language I love but I spend most of my time with SQL, Java and C#. If I could do it all over again I would have kept on JavaScript when I first learned it in undergrad as it feels sooooo different now that I am relearning it to be more of a full stack developer and not just a back-end/server side guy.
john washington
Monday, February 10, 2014 5:04:15 PM UTC
Well, if i was really starting again, it would likely be more practical, but otherwise i'd list all the techs I dream of playing with, of putting the time into learning etc but don't have priority in my real professional and personal lives.

However i disagree that app stores is where the money is made. The average or median app store app would take something like 50 years to recover its labor cost, most are made by developers out of their own passion. Even with the financially successful, most are gambles, however some are just very well made and positioned. Many that make a lot of money through an acquisition however aren't really just them mobile app but the service behind.

Most of the money isn't made in mobile apps, but rather in consumer services, and business and enterprise software.
Monday, February 10, 2014 5:25:38 PM UTC
i think browser base application and install software really comes to answer two different area needs, and also web base application need more time to people find out these are just efficient and trust able as installed application.
sadtaf
Monday, February 10, 2014 5:31:58 PM UTC
Another advocate for adding SQL to that list. ORMs only get you so far, and once you know SQL properly you can build so many more powerful and much faster applications than you could doing your data logic in C# (or whatever).

Databases are an undervalued skill, but so important for so much of what we do. Learn their predominant language.
Greg Webb
Monday, February 10, 2014 5:47:06 PM UTC
Currently on Windows / MS SQL Server / C#

If I was starting now I would go to Linux / PostgreSQL / Scala.

Actually I started transition already, partly for the reasons mentioned by Frans.



Anil Mujagic
Monday, February 10, 2014 5:48:46 PM UTC
And yes... JavaScript with AngularJS of course applies in both paths.
Anil Mujagic
Monday, February 10, 2014 8:17:25 PM UTC
I have learned a little bit of F# and it's data providers, and it's amazing what kind of new web crawling posibilities they bring. I read about a comparison between F# and C# and the number of lines of code, are less in F#, the null checks are reduced drastically and in average, the code it's more compact.
Monday, February 10, 2014 8:21:00 PM UTC
C# Microsoft platform lock-in? Seriously? With all the Xamarin tools for building iOS, OSX and Android apps in C# (using Visual Studio or MonoDevelop), Unity3D and MonoGame using it for building cross-platform games, and of course it's still an excellent choice for building desktop and server applications for the most widely used OS in the world by a considerable margin. Oh, and it's a great language with some amazing features, and you can even drop into F# in the same solution if you need to get your functional funk on.

Yeah, C#, terrible choice. Much better to learn some JVM language. After all, Java runs on 3 billion devices, and only 1 billion of them even support the Ask toolbar.
Monday, February 10, 2014 9:16:54 PM UTC
I agree with @Mark, you can't call C# locked in in 2014.

It's just not true.
Fabrizio Cioni
Monday, February 10, 2014 9:21:05 PM UTC
No one should stay with only one technology/language. The cool part about our "job" is that we are able to move into new areas, and always learn. Start over? @Scott I just think you should change the title to "Which technologies are you going to learn in 2014..."
It's always healthy to know more than ONEWAY to do stuff, and you will always stay sharp to adapt into a new environment in this way.

So stay open and pick your technology for 2014. Myself I'm moving into the mainstream wonders of JS/AngularJS, with a pragmatic focus. Find a problem, solve it with the new technology and you will learn way more than if you read a book.

Best regards
Monday, February 10, 2014 10:23:21 PM UTC
I agree with those vouching for polyglotism. There is SO much really cool, ground breaking stuff happening that if you stick to learning just one language you're left behind. (Says me - 10 years on .Net now trying to catch up.)

Having said that there's a difference between learning for love and learning for profit. Most jobs are in Java or C# and require some SQL.
Craig D
Monday, February 10, 2014 10:30:15 PM UTC
@Mark, it's not the language, you can learn C# in a day. The thing that matters is the platform you program against. Xamarin might bring you C# to the mobile world but it doesn't give you the freedom of picking whatever platform to run your web app on if it would have been written in another language, which (if I may add ;)) already brings that mobile world at your finger tips as well. It's not that C# is _that_ limiting (you can still create great software in it, we both pay our bills by doing so, eh ;)), it's that there are alternatives which are less limiting. If one starts over, why pick the one which limits you more?

I'm not against C#, I like the language a lot, it's just that it is tied to a platform for non-mobile apps which has a bit of an unclear future. Let's hope that is cleared up soon at \\build.
Monday, February 10, 2014 11:26:36 PM UTC
Technology is changing so fast mostly due to Microsoft continuously dumping technologies as soon as they've became mainstream.

Take a look at that bookcase for example (and our own), and you'll see that almost all end of life technologies are those created by Microsoft. The non-MS books are just for an older version of a maturing tech, still relevant.

The same can be said about my resume'. All the irrelevant technologies are by MS - the rest are still applicable today.

So yes, I am starting over - again. But this time I'm moving away from Microsoft because I'm sick of starting from the bottom every 5 years. I've installed Linux Mint and for the first time in a while I've actually enjoyed starting over.

hamster wheel
Tuesday, February 11, 2014 1:03:23 AM UTC
I think that being able to send data to JSON enables developers to write code for multiple systems. Today it is all about sharing data between applications. Great Post Scott
Tuesday, February 11, 2014 1:09:29 AM UTC
Discrete math, Relational algebra, SQL, C#, HTTP, HTML, CSS, Javascript, ASP.NET Web API. In that order.

One semester of a general discrete mathematics would make for much better programmers --- one week of relational algebra or relational calculus would make for much better databases and SQL queries.

No matter what you'd start over with, understand it deeply. Abstractions may reduce how much you have to learn to start, but you'll fall apart when it comes time to debug if you're too abstracted from how the tools you're using were built.
Tuesday, February 11, 2014 5:03:39 AM UTC
Not silverlight.
Tuesday, February 11, 2014 6:04:37 AM UTC
People are talking the languages. What about the tools. Visual Studio etc. These days the tools are becoming more important then the langauge.
Yusuf
Tuesday, February 11, 2014 6:37:16 AM UTC
Not a technology per se, but anyone who is 'new' should be told about Stack Overflow...
Benjol
Tuesday, February 11, 2014 7:14:53 AM UTC
well, I am seeing programming/tech stuff all over the famous web & I can see the waves going forward with,
- JavaScript
- html5
- CSS3
- Node.js
- Cloud ( MS azure/google cloud ) - for CI/Scale/Host

I am starting over with these stuff.

Though tools/frameworks/IDE are fine to me, I'll go to it to get things done for many reasons, one of them would be platform specific challenges.
Palak Bhansali
Tuesday, February 11, 2014 7:59:16 AM UTC
Uhm... blacksmithing... i think i'd pick that.
Claudio Valerio
Tuesday, February 11, 2014 8:39:09 AM UTC
ECO - Model Driven Framework for .Net
Multi Layered Applications, UML, OCL, DDD, Persistence mapping, …
Maintain business classes and relationships as UML diagrams, automatic creation and modification of your database schema, UML state diagram execution, undo/redo support, prototyping, etc, etc, ...
http://www.new.capableobjects.com/
ECO for ASP.NET MVC
http://www.new.capableobjects.com/category/microsoft-things-we-use/mvc/
Pena
Tuesday, February 11, 2014 8:46:52 AM UTC
Not Microsoft.

I'm tired of lock-ins, ridicule, ignorance, arrogance, licensing, and artificial technology life span.
underpants
Tuesday, February 11, 2014 9:29:43 AM UTC
mobile app,mobile app,mobile app
why everyone care about mobile app ?

mobile app is good for what they used to but not everything work with mobile app
does ERP software (CRM,Inventory,Accounting) work on mobile app?maybe with little data entry and some little query.


C#+Asp.net MVC+SQL server+Html+Javascript+CSS+Javascript framework or library is what i need for at least 5 years from now
sinan
Tuesday, February 11, 2014 9:41:00 AM UTC
Javascript should never have happened.
Goonce
Tuesday, February 11, 2014 9:59:40 AM UTC
Without a doubt it would be

C# + XAML + DirectX (via SharpDX) ...

No other technologies give me the abilities to express myself as smoothly as these 3 technologies (thanks to great tooling and support from the community)...

I consider myself a pretty good Web Developer YET I can say 100% I would stand by my decision of C#/XAML/SharpDX..

....
Tuesday, February 11, 2014 10:26:26 AM UTC

xaxaxa ... that's what they were telling us for a little more than 10 years now. and yet still everyone I know who is in the software business makes more money with old fashioned desktop software than with "SAAS" web app style products (which are often making losses). But I'm not in the valley and thus not captured in a VC fueled bubble.

The web will win where it won already: as an information medium to replace newspapers, tv stationes and the like. But as a software platform it is a lost cause.


e-commerce: SAAS solutions, web based, way more business and money on the web than in mobile apps, and nothing for the desktop. That's the field I work in, and our projects aren't making losses. And no external funding to artificially fuel the thing.
Around that there is a whole ecosystem: payment, logistics, analytics, tax handling, etc, which is doing fine on the web too.
On another subject, one can mention business software running on intranet interfaces. Those are very common, and even if it's not 'the web', it's definitely developed with web technology: web client/web services (though sometimes it has a desktop makeup with some desktop interface hosting a web view).
Nowadays, which large enterprise 'desktop' software doesn't speak http for REST/SOAP services consumption ?

In my opinion, Scott is 100% correct, if not 'the web', at least web technology has won, so to be current as a software developer, one general purpose language + javascript and knowledge of web tech is the way to go.
Damien
Tuesday, February 11, 2014 11:01:53 AM UTC
None, I would get an MBA
Phil Murray
Tuesday, February 11, 2014 1:45:37 PM UTC
I end up starting over every time I get a new job. First it was a crash course in COBOL and Unix, then Perl, then Cold Fusion and PHP. I "learned" C and Pascal in college (that definitely carbon-dates me lol). Now I'm laid off and on Disability, and I learned that coding is a lot more fun without someone else to please. I still code, though. I'm one of the few lunatics who installed Windows 8.1 and actually enjoys it. As for languages, right now Go is my favorite, followed by C#. Java 8 is my next target. One of the beauties of Go is I don't need Apache or IIS to test my web code. I ditched SQL a long time ago in favor of Couchbase, MongoDB, Tiedot, etc. I know no "suit" is going to have the imagination to use my stack... their loss. I only use JavaScript when I really have to; I used it as jQuery a couple of times. Couchbase uses JavaScript as its query language, so I use it then. Json really comes in handy doing things my way. Maybe someday I'll drink the koolaid, re-join the mainstream and look for a job. After all, selling your soul and brain for the highest dollar is the American Way!
Ross Albertson
Tuesday, February 11, 2014 2:01:09 PM UTC
Sounds familiar. After graduating in the late 90s I had only programmed in C++ and no 'real' programming experience.

The first 5 years of my career I did some programming in VB5 and later VB6 on database driven software. The past 10 years the only 'language' I have touched is VBA and I abused that beyond all intended use.

Last year I decided that programming with a current language/framework would be a good skill to pick up.

I decided on the web and started with html and javascript. It wasn't that successful for me though.

Knowing what I know now I've re-restarted with the following goals (in order):
1. Start with C# to get familiar with a modern language.
2. Get comfortable with Entity Framework, reacquaint with SQL and learn LINQ.
3. Move on to building web APIs using C# and EF
4. Basic html+js+css (including jQuery)
5. Familiarize with AngularJS.

Currently at step 2. Step 1. brought me to this blog :)
EC
Tuesday, February 11, 2014 2:19:05 PM UTC
Although the web is the future, learning HTML + CSS + JavaScript is entirely optional and I don't think it will displace native apps or app stores any time soon.

The primary reason is that CSS is broken and always was. No one seems to talk about this and it comes as an enormous surprise to anyone that comes from a programming background into web development when they learn that the entire fabric of the web is a series of hacks upon hacks.

There is still no layout system for CSS, you still cannot reliably center an element, let alone complex layouts that are trivial to XAML or other GUI frameworks.

New, emerging standards are built upon the old CSS flawed system, so they are always compromised. Then even that new standard has bugs and flaws across all the browser versions and vendors; it will take a decade before layout isn't a terrible pain.

Almost everything in CSS is broken or bugged or inconsistent in some way. Its a disaster that no one is discussing.

Imagine building Facebook Paper in HTML! No wonder Facebook tried HTML5 and withdrew. It's in dire need of a new industry approach and as long as people are in denial, it ain't gonna get any better.

Although you need a general idea of how it works, I'd leave front-end web development to those specialists with the stomach for it.

Luke
Tuesday, February 11, 2014 3:16:20 PM UTC
Sadly I think that a larger point was missed, which is that when we set out to learn a new language, we shouldn't be trying to learn the language, but learn the concepts under the language, and why they are the way they are.

Working to learn the fundamentals, and ideas behind a language, or even framework, translates across technologies, and lets you move more seamlessly between languages. You may be able to fairly quickly understand the syntax of a language, and be able to write code and be productive in that language.

Using C# as an example, when working with LINQ, are you understanding only the syntax, or are you trying to understand what LINQ actually represents? Not only from the ability to have an abstraction of a single "query language" that can operate on multiple data sources, but the deeper levels of how it relates to the history of functional languages and the functions map/reduce/filter/etc from all the way back in the early LISP days, and how it promotes more declarative style of coding, data transformations, and immutability.

JavaScript is one of the well renowned languages where people often don't bother to actually learn the language. There are a number of people who come into it thinking that they pretty much already know what it is about, since they have done C/C++/Java/C# and one curly brace language is like another. They wind up using all of The Bad PartsTM and saying how the language is all bad, when they never got into truly understanding the good parts, not to mention the background, influences, and constraints of the language when it was designed.

Unfortunately, we are, as an industry of software development, too concerned with the now, and specific instead of focused on knowing our history and underlying principles. We tend to care about which specific tool or framework we know, instead of understanding what that tool or framework sets out to address, and where the strengths and limitations of it are.

Working to understand those principles and concepts, helps you be able to pick up knew technologies, languages, tools, frameworks, etc, much more quickly since the principles don't change as often as the toolset. This puts you in a much better position, since when The New ShinyTM comes out, you already know what The New ShinyTM is trying to solve, and the learning curve becomes that much smaller as you have seen it before, just in a different incarnation.
Tuesday, February 11, 2014 5:48:44 PM UTC
If I had to do it all over again, I wouldn't change a thing. I know several programming languages from 6502 assembler to C#. They all have their strengths and weaknesses. The merits of each language has little to do with the syntax and more to do with its programming model. The only real criteria for judging a programming language is productivity, performance and maintainability.

JavaScript is terrible in all three fronts. A good JavaScript programmer can have an amazing amount of productivity, but it can be quickly compromised by the lack of type-safety and it's LSD-like syntax. For the same reasons, it's very difficult to maintain an application larger than say a simple TODO app. The language has never been popular until the advent of JQuery and the dizzying number of Frameworks designed to cover-up its pain points. The predicated use of browser plugins, Flash and SilverLight also gave it a big boost. Sadly, Microsoft could have dominated the web front end market if it only supported SilverLight.

On the other hand, C# and the .NET Framework wins hands down based on the same criteria. The language has strong type safety, reasonable performance and can be highly maintainable following coding conventions and best practices. It also has a flexible programming model with the introduction of LINQ. There's little not to like about it.
Tuesday, February 11, 2014 6:28:25 PM UTC
Apart from it not being completely open.
Sam Potter
Tuesday, February 11, 2014 6:46:41 PM UTC
Language choice is important, yes, but much more important are the design patterns, frameworks, and architectural shifts. THAT'S what keeps me up nights.

Not long ago we were talking about back-end web web development returning HTML, but now should we move to front-end web apps consuming JSON? ("Angle Brackets vs. Curly Braces") I love T-SQL, but kids these days are getting away with a lot less relational data structure - and doing amazing things. Is MVC the design pattern of choice, or should I focus on RESTful Web APIs? Do I even need a back-end programming language, or will node.js and JavaScript own the entire world? Is there even a future in desktop browsers, or is everything going to become a mobile app?

It's both exciting and exhausting.
Neil Laslett
Tuesday, February 11, 2014 8:29:54 PM UTC
Its important to have an idea of whether you prefer fiddly front-end work or business logic, or solving data problems. Also relevant is the kinds of company you wish to work for and your salary expectations.

Java and .NET are popular in the enterprise with .NET becoming more popular and in some reports overtaking Java in Fortune 500 companies. Windows is also very popular, with iOS coming-in for mobile working.

However, in the valley and in start-ups, open source and new JVM languages are popular. Linux is also a no-brainer since it has no licensing overhead. Java is seen as boring, so maybe Java is in its twilight years.

If you're a mathematical person, you may get your rocks off to F# and build financial applications or parallel programming. If you're a web hipster, you may find Scala on Linux or node.js totally floats your boat.

For me, I tend to agree with Joe above. I think the sun shines out of .NET's back side most of the time, even if the frameworks come and go and XAML's templates give me a migraine.

Let's not forget that the CLR is an open specification, Microsoft just didn't make any effort to build a runtime for other platforms and other people didn't either, because Windows runs on 90% of computers.

Times have changed, and MS appear to be moving their eggs out of the Windows basket and becoming interested in helping the Xamarin project. I really hope they do even more to extend the reach of .NET.

Personally, I'm not sure how important open-source is. I'm frequently told it is and feel I must agree without really ever understanding why its a good thing. I like paying for things and I like to know my money improves the product and pays other programmers mortgages.

My experience is that controlling companies with a small team of talented and committed people tend to produce better, more cohesive products and that paying for something means you have support and some risk mitigation, control over your destiny - which is important if you're building say, a national stock exchange.

My biggest regret in learning C# and .NET is how spoiled I have become. I cannot abide Objective-C or CSS/JavaScript, which probably would have better rewarded me as an entrepreneur, but I have earned well from coding for finance houses and I so enjoy the 'beauty' of my chosen tools.

I do feel let down by MS missing the boat on the personal computing future.

Luke
Tuesday, February 11, 2014 9:02:14 PM UTC
My biggest regret in learning C# and .NET is how spoiled I have become. I cannot abide Objective-C or CSS/JavaScript, which probably would have better rewarded me as an entrepreneur, but I have earned well from coding for finance houses and I so enjoy the 'beauty' of my chosen tools.


This is me too. I have done well with C#/.NET but now as I look around for new opportunities I'm finding that by having focused on C#/.NET I have eliminated many options that I might otherwise find interesting and challenging.

Interestingly, in the comments above there's not a lot of love for PHP. I've always avoided PHP but as I check out the local job market, I'd guess that over 50% of the postings indicate that PHP is either required or an asset. I'm starting to think I need to take another look at it and maybe spend some time becoming proficient. I don't expect I'll love it, but a man's gotta feed his family.
Doug Wilson
Tuesday, February 11, 2014 9:33:11 PM UTC
I think a good precursor to answering this question would be - What kind of lifestyle do you want in the world of programming?. Are you willing to relocate for a job? How much income do you need? What type of people do you want to work with? etc

I left the world of programming for 5 years and when I returned things had changed a lot. It was not my first choice for technologies (not even close), but I ended up earning most of my income using PHP. I chose to be an entrepreneur and work remotely from home. Those two choices decided my technology stack. When I got back into programming I tried pretty hard to steer clear of PHP and focused more on Python & C#, but the work kept coming in PHP (LAMP + HTML/CSS/JS).

Joey
Tuesday, February 11, 2014 9:36:12 PM UTC
CLR is an open specification


In theory.. but there are certain doubts over patents that could be used against Mono (see Microsoft's Empty Promise - fsf.org).

My (non-work) project uses c#+mono+nginx with asp.net mvc, developed on Linux Mint with MonoDevelop - a nice slap in the face for Microsoft, you might say. However, there is the possibility that they are allowing mono to become an integral part of Linux systems, and then pull the rug from us.
Sam Potter
Wednesday, February 12, 2014 5:42:24 AM UTC
bill wrote: "This is exactly my situation. I'll be 60 in May. I am basically starting over, having been out of it for almost 20 years. I loved Smalltalk, but it was commercially useless."

You could try Objective-C, which is a Smalltalk-influenced approach to doing object oriented programming with a C basis. (As opposed to the approach taken by C++.)

If Smalltalk would create a Rectangle object with

Rectangle width: 100 height: 200

In Objective-C (and sorta following the Apple conventions that favor verbose method names) you might call a class method like so:

[Rectangle rectangleWithWidth:100 height:200];


Objective-C is effectively limited to being useful for Mac and iOS development, but that's a pretty healthy, if crowded, market.
Jon Hendry
Wednesday, February 12, 2014 6:52:01 AM UTC
Jesus, the comment section is a mess! Everyone's pushing their favorite languages, heh.
l33tsp34k
Wednesday, February 12, 2014 8:48:28 AM UTC
Anyone who invested in learning XAML, whether Silverlight or WPF, would understand the power behind the paradigm. It was a sad day when Microsoft announced the death of Silverlight for a change in direction.

Yesterday I found this project implementing XAML using Javascript rendering it on the HTML5 canvas control. I know, at first I was, WTF... but then I downloaded the project (it is open source) and started experimenting - it is not complete and require more community involvement - but man! my mind was blown. I tested a simple XAML login and tile page I created using copy/paste XAML from my Silverlight app with a new Typescript code behind (similar to C#), using browserstack... WOW!!!

To have XAML running in almost 100% of the environments, including IPhone, Android, Mac was just mind blowing.

So go there and see for yourself... http://fayde.wsick.com/home.aspx
Kaps
Wednesday, February 12, 2014 9:08:45 PM UTC
What Joe Beazelman said:



.Net is never a bad investment. JS programmers always use the latest fashionable OS framework from another funky vendor. I've been there. Lead dev gone, other newer framework. Also competion can peek at your source anytime which is not an advantage I can say.

Lot of people here think that web is easy for developers because browsers are the future etc etc. (Developer perspective) Scott your wrong here too. Its not. Internet is here to stay but the web is going to be clogged with add ware or wrap ware or google and bing adds nobody wants. The future is apps, controlable apps for a few buck or free. Jobs was right here. I go to news sites less and less. I use there apps because they work better and faster (user perspective). There is also way more and way easier money there. You just need a good idea and some good .Net skills.




Edward
Wednesday, February 12, 2014 9:10:36 PM UTC
@me
Blockquote went nuts, sorry joe.
Edward
Thursday, February 13, 2014 12:02:53 AM UTC
> Also competion can peek at your source anytime which is not an advantage I can say.

That might have been the case 10 years ago, with uglifyjs and similar tools it is impossible to see the source in any meaningful manner.

While I get it that Scott wants to promote C# (which would be a decent language if it finally got rid of the curly braces) the choices for most would probably be angular.js and coffeescript, together with one of the many mobile backends as a service. This is what will replace VB for enterprise apps in the near future.
Martin Wawrusch
Thursday, February 13, 2014 9:21:32 AM UTC
No love for Ojective-C ?

I actually did start-over last year and after the initial hump I have to say I'm enjoying it tremendously. I really got tired of Microsoft pushing new stuff down every few years. is it MFC ? .NET ? Silverlight ? XAML ? what's the flavor of the year ? What will it be a few years from now ? C# is all good but I was spending too much time learning the new APIs & hooks and frameworks to do the same basic things over and over again.

With Objective-C and Cocoa at least it is the only choice for iOS and OSX for the foreseeable future, and its maturing nicely. The new SpriteKit for example is an absolute joy to use if you already know Objective-C & Cocoa.
Thursday, February 13, 2014 9:27:12 AM UTC
On the Apps vs Web debate, I think techies tend to like the purity of the web rather than walled gardens of App stores but look at it from the user point of view.

In my (admittedly anecdotal) experience all my non-techie friends (my Dad for instance) prefer Apps to the web. It helps them to feel in control of the experience when they always know where to go and what to touch to achieve something. I gave up trying to set bookmarks for my father on his iPad and simply downloaded apps for the major things he might like (BBC, Yahoo weather, etc) In my experience he finds it far more convenient than going into the browser and wrestling multiple tabs and bookmarks.

The App Store model is successful for a reason. It's not a coincidence that it came after the web and overtook it in popular usage. It is successful because the average user likes it.
Thursday, February 13, 2014 7:59:26 PM UTC
Sorry for the self-ad, but I was thinking about the same question 2 months back with this conclusion (not technologies, but languages only).
About "Microsoft continuously dumping technologies" - it is simply not true. Main reason MS is good for enterprise is their backward compatibility and support. Silverlight is the only notable exception, but honestly: that technology was in the "experimental" state and 0 strategic future until it's death. What about Python that has two incompatible versions out there? Or Scala that's famous about breaking backward-compatibility and the best recommended Scala books of 2011 are avoidable today because of all the changes in the Scala world. Or Objective-C (somebody mentioned above as stable) that in 2006 introduced "modern garbage collection" then in 2012 they basically removed it?
In IT one needs to constantly learn whatever technologies you choose.
Friday, February 14, 2014 4:39:03 PM UTC
I'm gaming and therefore using C++ and OpenGL. I'm already into C# and it feels good!
Philip Debrah
Friday, February 14, 2014 9:24:12 PM UTC
@PeterFoldi
Remember Flash? Thats why.
SL is not dead either. Its in the 'freezer' now. Who knows in the future, its just .net in the browser or out-of-browser over the internet (pretty cool).
Edward
Saturday, February 15, 2014 1:57:00 AM UTC
@Edward

I didn't say that SL was bad. I actually LOVED what it became when it stepped out of the browser. The problem was that MS couldn't decide in 4 versions what SL was and what it was for. By the last version they did but by that time the Windows team killed it (at least that's how it looks like for the outsider). Sad story of a great idea. I don't believe in resurrection.
Saturday, February 15, 2014 10:20:33 AM UTC


In my new world of 2014, if I had to “start over”, I learn Visual Basic 6.0 and the assembly language !

Monica
Saturday, February 15, 2014 10:21:48 AM UTC

Me too, VB6 and ASM !

Trogon
Saturday, February 15, 2014 10:26:06 AM UTC



First shelf, the 16th book from top to bottom :) this is what I'd learn !



Guru
Saturday, February 15, 2014 11:44:50 AM UTC
VB6 and JavaScript (plus SQL) does everything I need.

Vote for VB6
JTF
Wednesday, February 19, 2014 10:50:03 AM UTC
I learn ethical hacking in 2014.
Friday, February 21, 2014 6:54:14 AM UTC
Here are my list of wishlists

C#
Javascript
Python
Node.Js
Sunday, February 23, 2014 8:08:53 PM UTC
C# and Ruby.
George
Monday, February 24, 2014 3:36:27 PM UTC
I would have to say Python and a lot more c#.
Monday, March 03, 2014 5:03:46 PM UTC
C# + JavaScript => :-)
Sunday, March 09, 2014 3:30:47 AM UTC
I've been in this spot 3 times in my career and the most recent was November 2012 when my contract was cancelled. There were so many technologies out there and only a limited amount of financial resources to pick something that I can pick up quickly and be able to stay ahead of the curve so to speak.

I ended up going back to C# and expanding my knowledge to cover MVC which forces me to do more javascript and/or jquery. In addition, I have also decided to learn/do mobile development and am taking a java class in preparation.
cit154lsk
Wednesday, March 12, 2014 3:49:38 AM UTC
Nice answers/comments here!

I think it is important to learn the webstuff first because I think this will stay for a very long period because it is running everywhere without problems. Every system/platform has a browser. With web interfaces you can do the most. You can run it on the web, you can run it inside an executable (webview/embedded browser), in the cloud without need to learn all the extended features of a vendor specific language.

The problem with vendor/platform specific languages like (Android) Java, C#, XCode etc is that when the platform become unpopular you can throw your code away. To give you some example: Windows Mobile (actually most of the old tech of MS).

Learn:
- HTML5 (by following standards like W3C)
- CSS3 and responsive techniques (one design adapts different screensizes at once) This is very difficult to do in any other language but with CSS you can do amazing things!
- Javascript
- JQuery and Ajax
- Principles of Touch interfaces
- Tricks about security

Some people say that a WebView is slower than native code. They are right but in most situations you don't need so much power for your app. Besides, phones and other devices become faster these days. It is not bad, I made also some games with it. Also you can build Javascript interface to interact with the native executable. An example is PhoneGap and many others but you can also do it yourself (like I did, it's fun!).

Also with Ajax (Javascript) you can easily connect to a server. About servers, learn PHP or NodeJS. When choosing NodeJS it allot easier knowing Javascript.

With all this stuff you can do amazing things, and.... there is a standard that is not vendor specific.

Success!
Erwinus
Name
E-mail (will show your gravatar icon)
Home page
 
Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, li, ol, pre, strike, strong, sub, super, u, ul) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.
Live Comment Preview

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.