Right Time to Learn a New Programming Language?

I consider myself pretty well-versed in Java, JavaScript and jQuery, and C and C++. I've been thinking about learning another language or two this year, maybe something like PHP. I guess my question is when do you decide it's time to learn a new language, and why? I've always figured that when I know the ins and outs of one language, I start to learn something else to make myself more well-rounded. What about you? Also, do you have suggestions on what I should tackle next?

I notice you don't have any 'mainframe' languages. Banks still use COBOL and IBM's RPG/400/IV/ILE. So do auto company back-offices and any number of distributor and logistics outfits.<br>
<br>
The US government is known to use Ada. Actually, it has a hodge-podge of languages lurking in its systems and gear. Including various kinds of Assembler. Vendors were intent on creating lock-in, and project managers either didn't realize the danger or just didn't care.<br>
<br>
There are academic applications still extant that were coded in FORTAN and PL/1. PL/1 can be found in some niche business applications where large-number floating-point precision was desired.<br>
<br>
Or maybe you'd like to stack graphical stuff on your C++ with some Qt...

Since you are well versed, I would suggest SharePoint (if you are not in it
- I would say the market is good for at least next 5 years + ) if you
master it. If you are not exposed yourself to Databases, then I would
suggest SQL Server to be on the list.

Regarding another programming language, I would suggest R - As the future
is going to be more on Big Data, BI etc.,

On When you should decide to learn a new one -

When you have time to do it and serious about it.
When you think, your skills are abundant in the market and the rate/hour
drops outside.
When in your company, every body is using what you know and your company
goes down the hill. If you can spot that, it is better to use
the time you have and do it.
When you want to prove to the company that you are worth more than then the
programmers they have...

It is not just programming skills, You can pick up database, other recent
hyped areas, project management, etc. - If you have time, do not sit down
and waste it...skills will always help..

Learning more languages is ideal for a developer as the world is constantly changing. Solutions also are applied based on language capabilities and richness. Mastering a single language limits ones to think out of the box. So learning a new language has no time scale you just have to start now as you are missing a lot as it stands.

I think c/c++ is sufficient as it can do anything. Why you want to learn new language, new language is only a tool which helps in quick development. If you want to learn try to develop compiler. Even Linux OS is develop of c only

Hmmm a 'rounded' programmer will have various types of language under his/her belt - OOP/Functional/Imperative etc.
You want experience with both interpreters and compilers. Assembler is the ultimate for learning what goes on under the hood.
You might want to try standalone assemblers and debuggers, inline assembler. You might also want to try your hand at scripting languages. Using internal APIs is kind of like extending a language. Some languages are not what popular opinion might think - e.g. a proper implementation of Logo is a lot more powerful than "It's a kids language/turtle graphics language" would imply.
Some languages are useful, even if just to learn something about programming from them - e.g. COBOL/Lisp/Smalltalk/PASCAL/Modula2/ADA/Ruby/Forth /C/C++/C#/Java/Prolog and so on.
For example, Lisp will help you master the heavy use of brackets. Logo and PASCAL are great for learning recursive programming.
Lisp and Logo and VB.Net are great for list handling. Forth and C are great for low-level stuff. COBOL is very strict and precise. Prolog/Lisp and Logo are useful for AI work. Ruby, python, JavaScipt, VBScript, HTML are good for web stuff. It all depends on what you want to do and how easily. It can be fun writing one language in/with another. Writing a BASIC interpreter in LOGO - or vice versa, etc.
Allan

I encourage you to add more programming languages to your skill set -- it will help you understand how and why programming languages differ, where each language's strengths and weaknesses are, and how to decide which language is more appropriate to the difference applications that you are called on to develop or support.

It's also a good way to introduce yourself to larger concepts that surround the act of programming -- Object-Oriented design, database processing, parallel processing and optimization, the benefits and constraints of frameworks, privacy and security issues.

You may already know by now how the choice of a language can have a ripple effect on other choices, capabilities, limitations and costs -- ultimately, the "best" language for an application may be rejected for reasons that have nothing to do with the language and everything to do with the total cost of that choice. So, having a well-rounded experience with different languages will prepare you to make, and support, the choice of the most appropriate language(s) for a project -- that's a valuable skill.

You should be guided by what you want to do in your future -- you're a programmer today. Do you want to be a programmer forever? Or do you want to be a software architect, or a system designer, or a CTO, or a CIO? Expanding your exposure to other forms of computing will expand the possible directions your career can take.

My personal work history started with assembler, FORTRAN and COBOL (which I mastered), then programming concepts (modular, structured), database and networks -- all in the mainframe world. From there, I stepped into microcoding (firmware) and block-structured languages (like Algol and Pascal) and more pre-SQL database. The next leap was C and COBOL in a Microsoft DOS world, with an introduction to relational databases (Rbase) and more networking. Then I developed an expertise in SQL, database design and performance and massively parallel processing systems, including decision support and data warehousing. Next came Powerbuilder, C++, object-oriented design. About 10 years later, it was Perl and Unix shell scripting. Then a short stint learning (and teaching) Java. In the last 2 years, I tried (and abandoned) PHP and Python, but settled in with Ruby on Rails, along with Javascript/jQuery and HTML/CSS, for my first-ever Web-centric application. All of this was "for-pay&quo
t; work (except Java).

And, just for grins, I played with Prolog, toyed with Lisp, and wrote a machine-language simulator in COBOL.

That's over a 40+ year career. Make yourself an expert at what you already know, but then branch out. There's a lot out there now, and much more to come.

And of course one language can be more than just a little helpful when coupled to another. For example, I once wrote a database for a government agency in dBase IV. The database was ok except that the internal sort was too slow. So we (me and a COBOL programmer) wrote an external sort routine in COBOL that ran much faster than just being noticeably quicker than dBASE's sort - it was like comparing a family run-around with a supercar sports car. It was a lot easier to write the database in dBASE IV than in COBOL and dBase IV has the advantage of being an interactive interpreter, but for sorting speed, COBOL leaves dBASE IV for dead.
Many a time, I've written some routines in machine code for use with other high-language languages - that way you get the benefits of the high-level language but the speed and power of low level machine code where computational power and speed is sometimes important/critical.
Allan

My advice would be to learn a new language as soon as it interests you. If you read about a new development platform, programming language, or method you think is interesting, learn about it. You will only improve yourself by doing so.

Done exactly the same, Allan, but in our case we dropped into Turbo Pascal to do some of the DB IV data manipulation. As you say, went like a Bugatti. Similarly, I wrote a routine to replace B-Trieve functionality, originally using Pascal libraries, in ASM.

In the end, it's horse-for-courses for which language to use, but from the OP's point of view, there are a whole host to choose from. Perhaps he needs to define the areas that he can currently address - real time C/C++, web-based server side - PHP, ASP, .NET, web-based client side - JS, VBS, HTML, CSS, general apps - .NET, C#, Java, etc. etc. etc. and then either see which areas he's missing or which areas he'd like to expand.

Of course, there's knowledge of the language and then there's the applicability of that language to a particular task. Android development has been mentioned which is just an implementation of Java but C can be used. QT has been mentioned which is simply a GUI front-end (and therefore again an implementation) for C/C++.

Learning a language is the easy part (sic)! Writing something usually requires the user to have an application in mind to make the best use of that language and to have a better understanding of its foilbles.

Whatever the choice, it'll be right in someone's eyes and wrong in another's. All we can say is, whichever he chooses, use of these forums will help him to have that better understanding.

I would go for C# /PHP (Object Oriented approach)/Java since all the
languages have a more or less common way of thinking/designing.
C# is fine for a number of apps and OS (Windows/Linux), PHP is cross-OS
also and is used as a back-end for web services and more, as about Java,
well.

align='left' style=' font-family: Trebuchet MS; '>Bryan and Martin have asked the right questions by stepping beyond Just Another Programming Language space.

As can be seen by all the responses, there's a plethora of languages, both legacy and soon-to-be. I prefer 'legacy' ones because they're fully-debugged and results are predictable. Less of that Java library version angst.

Qt builds on what you already know, and C and Assembler can be used for mobile platforms. Horses for courses as Martin said. But as Bryan asked, are you going to be 'only' a programmer for the rest of your career?

When you begin using Just For Men on those sparse gray hairs, don't you want to be already doing the 'higher-level' and conceptual stuff?

If I can add one more piece of career guidance: there are many, many kinds of problems to be solved in modern business programming. Web applications are very different from database applications, real-time applications, batch applications, and vendor-supplied package applications. Data warehousing raises lots of issues in real-time, batch, queuing, bulk, time-variant, ad-hoc, on-demand, data quality (and repair), security / privacy / confidentiality aspects of program design, development and support.

Each of these variants may require a different way of thinking about the problem and lead to a different tool set or language.

Not every problem is a nail, even if the only tool on your belt is a hammer. So be on the lookout for a problem that suggests -- or demands -- a different language, and use that problem as the impetus to expand your language repertoire and add another tool to your tool belt. [It's always better to get paid while learning something new!]

My current status as a semi-retired database developer/DBA has not stopped
me learning new stuff. Currently I am much infatuated with the newly
released Alpha Anywhere, from Alpha Software. Alpha Five was pretty
awesome, but Alpha Anywhere is a significant step forward: it really does
deliver write-once, run anywhere technology. You can deploy to any browser,
or to any tablet, or to any smart phone.

Full disclosure: I was on the beta team and so have a few months experience
with it. I've almost completed my first serious app, whose previous
versions were all done in Access with a SQL Server back end. I have
forgotten now who said it (Knuth maybe, or Codd or maybe even Chris Date or
Fabian Pascal? Hell, I've read them all and the lines blur when you're 65),
but I distinctly remember the comment: "Any serious program needs to be
written twice -- once to understand the problem, and once to solve it
correctly." That's how I feel about the app I'm writing in Alpha Anywhere.
This particular app will profit splendidly from deployment to a tablet.
It's an app for safety-engineers, which profession involves visiting
factories and taking measurements on workstations to ensure that they
comply with regulations (which in Canada are local to each province and
each province has its own regs and forms to supply to the government). I
digress. The point I was trying to make is that my client had first to
teach me what was involved in safety-engineering, and I wrote the first
several versions in Access. Each time he expanded his business into a new
province, more stuff had to be written. Having long been a believer in
data-driven programming, I made the decision in Round One that everything
should be driven essentially by the postal code of the factory in question,
which is to say that if the address is in Ontario, use this set of forms;
if the address is in Saskatchewan, then use that set of forms. And so on.

Back to the point about every program needs to be written twice. The
versions I wrote in Access I collect into Version One. I'm writing what I
consider Version Two in Alpha Anywhere, and it is unfair to compare the
development times, because V1 led me to comprehend the problem, so I went
into V2 with a pretty thorough understanding of the problem. But even
granting that, I have to say that I am in love with Alpha Anywhere. I can't
think of anything that even comes close.

I have had learned several programming languages but I think I must be master of these all languages. Their syntax is different. You have to choose one language to have specialty in it from PHP, Java, Visual Basic, Dot Net, etc.