• 0

Which way to go?


Question

I have some loose time since I am coming off a contract and looking for my next gig. Some background- I'm an older guy (60) who got into IT over 30 years ago. I've spent my career in IBM midrange- mainly AS/400 RPG, though I did have about a year with C++. At the time, AS/400 was so hot that where I lived, there was no change to get elsewhere if you knew AS/400. By the time that fizzled, my other skilled atrophied to the point of uselessness. Funny thing is- I have wanted out of AS/400 for a very long time.

 

So I am looking at what I can learn relatively quickly and easily that has a future. I have the tools to learn whatever I want to- C#, PHP, Java, SQL Server, Turbo Pascal (LOL) etc. I just don't know which is the best choice for me. I'm not concerned about whether it is the best tech, or other such stuff. I am looking to remain productive, hirable, and useful over the next decade.

 

Thus, I am wondering what the folks here think would be a good direction to take to remain employable. I was going to head in the direction of SQL Server, then thought maybe PHP, and am back to looking at C# again.

 

Remember- the criteria are that a guy who has been procedurally coding for over thirty years can pick it up fairly easily and that it will last me for a while. 

 

Many thanks!!!

Link to comment
Share on other sites

25 answers to this question

Recommended Posts

  • 0

I guess, it depends what you're looking to do. I mean, C++, C#, PHP, and Java all have a future for at least the next 10 years, so I don't think there's any problem with any of those languages.

SQL Server is a decent choice, but I'd recommend learning it in parallel with another language such as VB.NET or C#, as knowledge of SQL itself is going to point you more towards DBA jobs than programming jobs.

I guess, since you're a contractor, that you're looking more at business programming (e.g. Database systems)? If so, you can't really go wrong with any of the languages you listed (except maybe Pascal). If you're looking more at system's programming, you might be more comfortable learning C or C++, given your past history, but I'd probably look and see how much C/C++ demand there is in your area first, since .NET, Java and PHP jobs are probably easier to come by. If you've been working in C++ previously, all the languages I've mentioned (bar SQL) will look vaguely familiar, since they're all roughly based on the same syntax.

Hope this helps, but do bear in mind that this is simply my experience in the industry, and I'm many years behind you in experience :).

  • Like 2
Link to comment
Share on other sites

  • 0

I think good technology attracts good programmers and vice-versa. Choosing a good technology stack can get you employed with like-minded people. I've always felt like .NET was well-designed and now I work with a very talented team who share this passion for good design. I wouldn't want to work with people doing PHP for instance - if you think your time isn't valuable enough to learn better technology, or worse, if you don't realize how terrible PHP is, then I'll find some other associates who do.

 

That said, if your goal is to make yourself employable ASAP then Javascript is probably the language in highest demand. It's quite terrible although nowhere on the level of PHP, but it's the only viable choice for a lot of use cases these days so there are some very competent and pragmatic people using it (amidst the sea of amateurs). As MajesticMerc said, it depends what you want to be doing. There are lots of other good choices. Look at job offers on sites like careers.stackoverflow.com and you'll get an idea of what employers want.

 

Whatever you choose, become a master at it and employers will come flocking to you.

Link to comment
Share on other sites

  • 0

Take a look at the most popular programming languages and you won't be far off:

8V6l9Mw.jpg

C, Java, and Python are my preference. Although I quite like Go and Vala too.

  • Like 3
Link to comment
Share on other sites

  • 0

Wow! I would never have thought Python or Ruby was so big. I know very little about both.

 

As to what I want to do, I simply want something where I can have fun again. I won't have the background for being a DBA, so I can knock SQL Server (from THAT perspective) off and leave it as a tool to interface with. So far, it seems within the grand scheme, C# remains ahead. It's been over 20 years since I touched C++ but the style has remained familiar.

 

I work as a contractor because those are the jobs I find, not my preferred mode. Indeed, that it is nearly impossible to find permanent positions in the field I'm in is one reason I want to change.

 

I'll look at Python and Ruby and see if they work for me.

 

Thanks!

Link to comment
Share on other sites

  • 0

Wow! I would never have thought Python or Ruby was so big. I know very little about both.

Python and Ruby have been big for sometime. Ruby on Rails and other frameworks are very popular. That being said, no graph can give precise metrics. It's only an estimation.

 

I won't have the background for being a DBA, so I can knock SQL Server (from THAT perspective) off and leave it as a tool to interface with.

As a programmer, the important thing is to know standard SQL. It's unimportant what the backend is. Whether it's Sqlite or PostgreSQL, as long as you know the basics, it's easy to switch between them.

 

So far, it seems within the grand scheme, C# remains ahead. It's been over 20 years since I touched C++ but the style has remained familiar.

I don't think you can go wrong learning languages like Java and C#. They're actually very similar syntactically. C# was obviously designed to be like Java from the get-go. Their libraries differ considerably though, and that's what's time consuming to learn. If you know C/C++, the language basics are very easy to pick up.

It must be said though that Java has better official cross-platform support, and is the native development language of the world's most pervasive mobile platform - Android. So if you ever intend on doing mobile, cross-platform, or server work, it might be better to go for a less Windows-centric language than C#.

Link to comment
Share on other sites

  • 0

Take that chart with a grain of salt. The suggestion that Python is 6 times more popular than Javascript is ridiculous. A quick search on http://careers.stackoverflow.com/ returns nearly twice as many results for Javascript than Python. 

 

Of course if you're going on the web development side then you'll probably end up learning some server-side language as well, where Python and Ruby are indeed quite big.

Link to comment
Share on other sites

  • 0

Java and C# are the big two. I would simply look to see which one has a higher demand for your area and focus on that one.

 

Since you're coming from a procedural programming background, I would say learning the concepts of object-oriented programming, its best practices, and popular patterns is way more important then learning a particular language. Those skills transfer to every language equally well.

 

Learning a language is easy. Learning how to use it effectively in order to create efficient, maintainable code is the hard part.

Link to comment
Share on other sites

  • 0

It must be said though that Java has better official cross-platform support, and is the native development language of the world's most pervasive mobile platform - Android. So if you ever intend on doing mobile, cross-platform, or server work, it might be better to go for a less Windows-centric language than C#.

Where's the "official" support for Java on iOS or Windows Phone?  The JVM is actually banned on iOS and Java programs can only run by using workarounds. What Java package is equivalent to Xamarin Forms allowing true cross-platform UI development on mobile using only native widgets? What about the fact that Unity supports C# but not Java? I think it's very misleading to say Java has a better cross-platform story. There's nothing "Windows-centric" about C# or the CLI apart from the fact that they were initially developed by Microsoft for Windows. Today they are open standards, largely and increasingly open-sourced, running on all platforms with superior tooling and libraries.

Link to comment
Share on other sites

  • 0

Where's the "official" support for Java on iOS or Windows Phone?  The JVM is actually banned on iOS and Java programs can only run by using workarounds. What Java package is equivalent to Xamarin Forms allowing true cross-platform UI development on mobile using only native widgets? What about the fact that Unity supports C# but not Java? I think it's very misleading to say Java has a better cross-platform story. There's nothing "Windows-centric" about C# or the CLI apart from the fact that they were initially developed by Microsoft for Windows. Today they are open standards, largely and increasingly open-sourced, running on all platforms with superior tooling and libraries.

I agree. And now that .NET is truly open-source, (and ASP.NET! yay!) and Microsoft is making a concerted effort working with the Mono team, C# could become ubiquitous very quickly.

  • Like 2
Link to comment
Share on other sites

  • 0

Take that chart with a grain of salt. The suggestion that Python is 6 times more popular than Javascript is ridiculous. A quick search on http://careers.stackoverflow.com/ returns nearly twice as many results for Javascript than Python. 

 

Of course if you're going on the web development side then you'll probably end up learning some server-side language as well, where Python and Ruby are indeed quite big.

In web development, Python has really come back into fashion over the past couple of years. In fact, since 2012 I've used it exclusively (using Django) for work.

I actually thought I was behind the times using Python, until I actually had a look around :o

Link to comment
Share on other sites

  • 0

In web development, Python has really come back into fashion over the past couple of years. In fact, since 2012 I've used it exclusively (using Django) for work.

I actually thought I was behind the times using Python, until I actually had a look around :o

Out of curiosity, are you using Python 2 or 3?

Link to comment
Share on other sites

  • 0

Where's the "official" support for Java on iOS or Windows Phone? What Java package is equivalent to Xamarin Forms allowing true cross-platform UI development on mobile using only native widgets?

https://blogs.oracle.com/mobile/entry/oracle_brings_java_to_ios

As for Windows Phone, 3% doesn't even register. iOS and Android are the main platforms. Neither of which have native support for C# or dotNet. Nor does Microsoft officially support them.

I think it's very misleading to say Java has a better cross-platform story.

It's a fact. Where's the official Microsoft .net implementation on Linux, OS X, Android, or iOS? There isn't one. If you want to rely on third party companies charging a fortune for something that's free in other languages, that's your choice. Java has official wide cross-platform support and has done for years. It's a fact. The amount of cross-platform support tools and programs for Java far outstrips anything a single third party company like Xamarin can provide. Like I said, if what you're writing is Windows-centric, then both are probably equally as good. But please don't pretend that Microsoft supports other platforms with its tools because it doesn't. You won't see Visual Studio any time soon on Linux.

There's nothing "Windows-centric" about C# or the CLI apart from the fact that they were initially developed by Microsoft for Windows.

The fact that the official implementation only exists for Windows means it's Windows-centric. Not to mention all the associated tools. I certainly wouldn't rely on it for production code.

Today they are open standards

It's not an open standard when Microsoft controls it. An open standard is one where multiple independent parties can have a say in how it develops. OpenDocument is an open standard. dotNet isn't.

largely and increasingly open-sourced, running on all platforms with superior tooling and libraries.

Considering Microsoft's current and past behaviour regarding patents and attitude towards Free and Open Source Software, I'll pass thanks. As for superior tooling, where is this on GNU/Linux precisely?
Link to comment
Share on other sites

  • 0

Can I ask where the OP is based?  This may have an impact.

 

I would stick to the enterprise-type languages - Java and C# for maximum employability (although not necessarily the most enjoyment).

Link to comment
Share on other sites

  • 0

As for Windows Phone, 3% doesn't even register. iOS and Android are the main platforms. Neither of which have native support for C# or dotNet. Nor does Microsoft officially support them.

It's a fact. Where's the official Microsoft .net implementation on Linux, OS X, Android, or iOS? There isn't one. (...)The fact that the official implementation only exists for Windows means it's Windows-centric. 

It's not much of a point to say Mono is not "official". The way it works is that Microsoft has created .NET as a platform-independent framework and implemented it for their platforms, and Xamarin has implemented it for Mac, Linux and other mobile platforms. Microsoft recognizes Xamarin as a partner and there would be no sense for them to provide implementation and tooling where Xamarin already does well. What Microsoft does is support and work with Xamarin to help in their porting efforts. Among these has been, in recent years, the open-sourcing of key components of the .NET Framework, and Microsoft intends to have open-sourced all .NET Core by BUILD 2015 (http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx), which means Mono and .NET will share essentially the same JIT, GC, Type system and all key components.

 

So, no, unlike Java, .NET is not built for all platforms by a single company; it's built for all platforms by two companies in partnership. That's basically all there is to it.

 

The amount of cross-platform support tools and programs for Java far outstrips anything a single third party company like Xamarin can provide. 

 

As I said, Unity is C# and so is Xamarin Forms which has no equivalent on Java. So if I was to develop either a cross-platform game or cross-platform UI application I'd definitely be looking at using .NET more than Java. 

 

As for superior tooling, where is this on GNU/Linux precisely? 

 

I thought 3% didn't register, what about 1%? ;) Visual Studio is the best IDE on Windows and Xamarin Studio is at least first-class on Mac. If you're developing on Linux and MonoDevelop isn't up to the task (I don't know, I don't develop on Linux) then perhaps Java is your only choice, but on the platforms where most people develop I don't think it's the best choice and in particular not for cross-platform application development.

 

Considering Microsoft's current and past behaviour regarding patents and attitude towards Free and Open Source Software, I'll pass thanks. 

 

That would be illogical, Microsoft's attitude towards open-source in the past years has been to open-source everything by default unless they have a good reason not to, and since .NET has existed (about 14 years now) they've only supported efforts to port it to other platforms. This support has only grown since then .NET Core is under a patent promise and its source code under MIT license.

Link to comment
Share on other sites

  • 0

You can't go wrong with C#. I have little experience with Java but from what I've seen C# had better language features. There has also been a lot of negative stories regarding the security of Java. I'm to understand most (or all) of those stem from the Java for Web thingy but I still feel it's left a sour taste in a great number of mouths.

 

You also could do well to learn Python.

 

I'd try to stay away from the "web" languages like PHP and JavaScript, although I believe both have a high-ish level of employ-ability, there also seems to be a greater number of amateurs in that area for what I can only assume is based on the high employ-ability and rather simplistic bar of entry. I won't even get started on the languages themselves.

  • Like 2
Link to comment
Share on other sites

  • 0

The JVM and .NET are the safe, middle of the road bets. C# is a nicer language than Java.

 

Both are big in the enterprise. However, Internet companies built on a Unix stack have obviously favoured the JVM over .NET.

Link to comment
Share on other sites

  • 0

I'd try to stay away from the "web" languages like PHP and JavaScript, although I believe both have a high-ish level of employ-ability, there also seems to be a greater number of amateurs in that area for what I can only assume is based on the high employ-ability and rather simplistic bar of entry. I won't even get started on the languages themselves.

 

I'd like to echo this. I started my career as a web developer doing PHP on the backend. I kind of just fell into it. I built a web based forum using PHP in my final year in university, and responded to a job ad for a PHP developer when I was about to graduate. They liked the forum and gave me the job. Several years later I decided that PHP/JavaScript wasn't really where I wanted to be at. PHP's strength is also its weakness: the low barrier to entry. There's a lot of bad PHP code out there.

 

While I've kept myself up to date with frontend web development as well, I've decided that it's not worth my time. The constant churn of JS frameworks is annoying, and the Angular JS 2.0 debacle just confirms my thoughts. Frontend web development just feels like a giant hack. While the frameworks change all the time, the underlying tech moves very slowly. Having been bitten pretty badly by the browser wars, the community have rallied around standard compliance. Standards, of course move at a glacial pace. The development experience improves very very slowly in that space. Meanwhile, mobile apps have become a reality, and the development experience there is already miles ahead of HTML5.

 

Circling back to the OP's quest, I would personally suggest getting into Android development (with Java). iOS and Android are hot right now but Android is currently the more stable target. If you go iOS, you'd have to learn both Objective-C and Swift to maximize your employability. I personally don't enjoy writing Java much, but it's ubiquitous, and again, that maximizes your employability. Android provides a nice, self-contained, vendor-maintained and vendor-documented framework (like .NET by Microsoft, or Apple's Cocoa / Cocoa Touch). There are tons of books and courses teaching the framework. It's easy to get started with - no fiddling around with a web server for server-side programming. No need for virtual machines. Just get a cheap Nexus 5, download Android Studio, and off you go. You can do Android development on a Mac, on Windows, or on Linux.

Link to comment
Share on other sites

  • 0

Scala is probably a nicer choice than Java for Android development - it's a JVM language so it's 100% compatible and it has nice things like case classes (what it calls sum types), first-class tuples, local type inference, built-in equality and hashcode for types, etc., leading to a much less verbose and more productive language. Your biggest impediment might be that most material teaching Scala assumes prior experience with Java but since you already know a programming language it might not be a big deal. http://learnxinyminutes.com/docs/scala/ is a nice little introduction.

 

Scala is nowhere near as popular as Java however if you do land a Scala job it'll likely be a great one with great programmers. Learning Java after Scala is almost trivial - it's Scala with less features and more syntactic noise.

Link to comment
Share on other sites

  • 0

Scala is probably a nicer choice than Java for Android development - it's a JVM language so it's 100% compatible and it has nice things like case classes (what it calls sum types), first-class tuples, some type inference, built-in equality and hashcode for types, etc., leading to a much less verbose and more productive language. Your biggest impediment might be that most material teaching Scala assumes prior experience with Java but since you already know a programming language it might not be a big deal. http://learnxinyminutes.com/docs/scala/ is a nice little introduction.

 

I wouldn't recommend that the OP learn Scala though. We're looking for the path of least resistance here. Let's not casually throw in functional programming too!

 

Scala is a nicer language than Java for sure, but in practice we might bump against the number of methods limit in Android. Scala also allocates a lot of small objects, and that apparently is pretty hard on Android's garbage collection. I haven't had the chance to start a project with Scala on Android yet, so I will reserve judgement until then.

Link to comment
Share on other sites

  • 0

I'm going to write about a little experience I've had myself. I web develop, so I'll be speaking from that point of view. I "grew" with PHP. PHP was super easy to learn, and was super easy and cheap to deploy at first. Has awesome support and you'll find that CMS (Content Management System) will help you through your mainly tasks with ease. 

 

Then, this July I started learning ASP.NET MVC 5 (C# in Web). And then I started to realize why people hated PHP so bad. Since I grew with PHP I can't say it is bad, but what I can say is that other programming languages are superior. 

 

Now, down to the point. Nowadays I recommend you to learn something web-oriented. It can be anything, actually: Java, C#, Ruby, PHP. Then look for something that has great IDE and frameworks to help you developing. People hate PHP due to the lack of a proper IDE, long debugging times, and lack of being a proper object-oriented language (I didn't understand those at first) In my case, Visual Studio, which is the main IDE for developing ASP.NET MVC applications, it's a God Bless.

 

It has intellisense, which is an autocomplete feature which helps you a lot through programming, built-in unit testing, implementation of the mvc pattern, repository, inversion of control, and many other terms which I didn't know of their existence. There's also coming the ASP.NET vNext (5), which will evolve the platform per-se into more up-to-date paradigms. 

 

Ruby on Rails is also awesome. I tried some code and I really enjoyed it. It has been setting the web standards since its release. Microsoft has been playing catch up with it. 

 

Whichever route you go, never forget to learn HTML, and JavaScript. The other mentioned above are Server-Side languages. 

 

And one more thing: Look for updated stuff. Programming languages change constantly. There is a high possibility that there's a new implementation that will boost your application performance tenfold. 

Link to comment
Share on other sites

  • 0

I wouldn't recommend that the OP learn Scala though. We're looking for the path of least resistance here. Let's not casually throw in functional programming too!

 

Scala is a nicer language than Java for sure, but in practice we might bump against the number of methods limit in Android. Scala also allocates a lot of small objects, and that apparently is pretty hard on Android's garbage collection. I haven't had the chance to start a project with Scala on Android yet, so I will reserve judgement until then.

There's functional programming in Java too, it supports function values after all. Many standard OOP patterns like Observer, Strategy or Visitor are just extremely ceremonious ways of passing functions or closures around (and are IMO a lot harder to understand than just directly passing a function by value). Scala just makes this stuff easier. You can write the same imperative code you do in Java if object allocation is a concern, but you still benefit from type inference and a much terser syntax.

 

Anyway, I don't have more experience with you doing Scala on Android but certainly knowing Scala is a big plus on a resume today and it makes programming more pleasant than Java. That said, perhaps it's more difficult getting started with the development tools and what not, I agree that Java is the path of least resistance - at least initially.

Link to comment
Share on other sites

  • 0

There's functional programming in Java too, it supports function values after all. Many standard OOP patterns like Observer, Strategy or Visitor are just extremely ceremonious ways of passing functions or closures around (and are IMO a lot harder to understand than just directly passing a function by value). Scala just makes this stuff easier. You can write the same imperative code you do in Java if object allocation is a concern, but you still benefit from type inference and a much terser syntax.

 

Anyway, I don't have more experience with you doing Scala on Android but certainly knowing Scala is a big plus on a resume today and it makes programming more pleasant than Java.

 

Oh, I like Scala. You don't have to convince me about its merits :) My main beef with Java is exactly the ceremony and verbosity that is required/encouraged. I use RxJava, and on Android (stuck with Java 7 - no lambdas there) that results in an explosion of anonymous inner classes.

 

I was just pointing out that Java on Android probably serves the OP best as a starting point. What he needs right now is the best bang for his time input. The journey doesn't have to end there of course, and Scala can be a nice ramp up from there, just like F# is to C# on the .NET stack. The sort of Scala jobs that I'm seeing are server-side, distributed systems with Akka. That's a tougher proposition than client-side Android apps.

Link to comment
Share on other sites

  • 0

As mentioned before JavaScript - it is probably the best to get into, it is the most common programming language used out of all the programming languages.

 

It is the programming language of the internet and that isnt going to go away anytime soon.

Link to comment
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.