I am currently working as an automation test engineer (writing functional scripts for software products). I have experience working with watir, watin and webaii. Also i have an intermediate level knowledge of C# and progrmming concepts. Right now i am very much interested and eager to learn a new technology on my own which is in demand and will add value to me. I am a quick learner and i am sure will grasp it quick. I needed advise on what would be the best choice for me to pick up and proceed with and which will be in demand in the market for a while. Looking forward for your suggestions.
On top of all the .NET concepts &c you already have, dynamic languages such as IronPython or IronRuby are a good investment, will be in growing demand, and broaden your horizons while leveraging strengths you already have.
hmm.... According to my attitude your question is depending on you :-) ... That means the value of the thing you learn is only depends on the use you are getting from that.
Use = Advantage you are getting in performing your career, new career opportunities, Personal interests etc.
So I suggest you to first identify the nature of the language you need to learn, then select the options and then perform a comparison between them :)
In otherwords you have a potential/Interest/Oppotunity towards scripting then you can select pearl and python (Just an example), then analyze and pros and cons, compatibility with your needs then go into the decision.
If you'd like languages that will still be valuable for years ahead I would recommend C or Java - as they were the most popular languages for new projects in 2008.
They also both have large, mature communities with great documentation. All important for self-learning.
There are already plenty of Python, Ruby, Java, .NET etc. popular high-level language specialists. If you want to be one among others then go ahead, but if you're looking for something more challenging, I think there's shortage of low-level specialists. How about learning C or even assembly? Learn how bits work and what actually happens inside a microprosessor. Most people, calling themselves programmers, have no slightest idea of this! Program embedded devices. Someone has to do it, and it can't be done with popular high-level languages.
Here are a couple of pointers to start with:
A popular platform is AVR Studio.
Java or .Net would be your best bets - they'll be around for longer and although Python and Ruby are popular languages, there's little investment in the industry (at least here in the UK). That said, PHP is also a safe investment.
From a programmer's point of view I highly recommend Python as it's very fun to learn, write and discuss.
First of all, if you don't already use it, get confortable with SQL! Many systems depend on database backends and being able to get your hands on the data directly will always be valuable. You don't need to become an expert, just get the basics down solid so you can get the information you want from a data source.
In terms of programming, a scripting language would be useful for the times when all you need is a quick hack and C# is too heavy.
Python would be a good option because it is popular and IronPython will allow you to continue using .NET, with which you are already familiar, but also easily expand to cross-platform libraries (wxWidgets, Qt), the web (Django, etc.).
Also, on the side, I have had a surprisingly good time using Tcl/Tk for some simple projects. The command-like syntax of Tcl (Tool Control Language, heh) makes it fun to use interactively as a shell that you can complement with custom functionality and Tk is a good way of quickly creating (simple) GUIs. I suggest you spend a couple of days playing with it so you just know that it exists and what it can do, it might come in handy sometimes.
Working as an automation engineer, would you not be pretty good off learning some embedded systems programming, such as C or even an assembler flavor? (Or am I completely off to what your degree means?)
I started like this:
- VBA
- VB6
- VB .Net
- C#
- C++
- ASM
- PHP and web
I don't recommend using .Net, as the form designer generates code for you, so it's that much easier to be lazy and ignorant. PHP is forgiving, and powerful, and has loads of string manipulation functions so it would be a good starting point.
As an automation engineer with some experience in programming, C++ would be a good start for you, as it is perfectly low level for engineering tasks, while being high level enough to be usable.
It's best to pick a language which would bolster your current experience.
As someone who has moved over to C# after ten years of VC++ I can attest to the difficulty of getting a position where you have less experience in a specific language than everyone else, even if you have more practical programming experience.
There are more positions for C#, VB and Java but conversely there is more competition.
Ideally you need to select a language that you could use at the moment. From what you've said building on C# or Ruby may be the way to go.
You could always look at using some of their new technologies e.g. WPF and WCF in C#.
It's politically risky to say so, but most programmers would benefit more from polishing their English skills than from studying any particular programming language. But if it's a programming language you must have, then you'll benefit more from learning something in a different paradigm from your usual work. For most people, that means playing with a functional programming language like Lisp or Haskell.
I would suggest changing your perspective slightly. Languages can be viewed as belonging to families: most professional programmers I know can turn their hand to many languages. Most mainstream languages now follow few lineages. What is important is not the language, most of which are similar, but the API. If you are looking at test automation, lets say, look at libraries for test automation in any language you can find and compare their benefits. You will probably find they are pretty similar. For a tester I would say there are a few avenues to build up knowledge:
- Automation languages/tools: these are domain specific languages (or gui tools) that will allow the user to emulate input. These might include tools that allow input to be captured and replayed. This might not just be GUI and the web but perhaps network traffic (eg X11 traffic).
- Traditional Language Tools: there is an increased amount of automated testing performed by developers. They will often use frameworks to do this (like JUNIT, NUNIT, QUNIT).
- Techniques: with some tools there are particular techniques that are useful to know. These range from how to get more tests written by developers, to structuring systems so that they are more easily tested.
I have found as a developer that sitting down with a book, or manual on a language, and learning the language features to be a waste once you know a language or two. More often than not you should concentrate on what you are trying to achieve with an idea of what is possible.
If you want to become a programmer this carries to, knowing what top-level concepts like reflection are is more important than knowing how to code it: especially with the internet as a source of information on howto.