I have experience in T-SQL, VB (inc VB.net), ASP (inc ASP.net (VB)), HTML and CSS and am wondering if a new language would be of use to me. I have seen some references to other languages in answers on various forums such as Python, Perl, PowerShell, etc and wonder what would be most appropriate/useful to me.
I am a DBA/SQL Developer/App Developer (45%/45%,10%) working with SQL Server, IIS6+7 in a wholly Microsoft network.
The right answer will be one that I judge to be the most encouraging with some suggestions/recommendation as to best method of learning (note: residential courses are out, its my spare (home) time only) and examples of how it could be useful to me both in my career and in my day-job. I will then certainly try to learn and use it accordingly.
[Closing Edit] OK, its just over two weeks since I asked the question so I'm reviewing the answers and heading off to learn a new language. The most popular response is PowerShell (despite my hopefully installing Python as I thought that would be the recommendation!) I certainly dont disagree with the responses but I have taken a light view of PS previously and not really seen it as being of real potential benefit. However, I'm going to commit to it for at least 3 months, I'll also get a few books, spend a load of time and no doubt some more hairloss on it and see how we go.
Thanks to all the respondees
Definitely a good seeder. And as with so many questions here, the answer is It depends. Primarily on why you want to learn it.
If you are staying in a 100% MS environment and what you want is just system level scripting, then PowerShell is a good way to go. It is relatively easy to learn and write(I think Python is easier to read, more on that next paragraph), tightly integrates with the MS environment, including SMO and SQL Server. Also, there are tons of examples and completed usable scripts out there. There are many good articles on PowerShell on Simple-Talk, I personally am particularly fond of the ones Laerte has been writing recently.
If you want a general purpose programming language, I am a big fan and advocate of Python. It is very easy to learn for a general purpose language and very expressive and powerful. It is also particularly easy to read and maintain compared with most other languages in use today. It does tend to have lower overall performance than some languages like C, but it more than makes up for that with its ease of use and other good attributes. You can get everything you need for free, including the interpreter, libraries, IDE, and numerous good books. It integrates very well with SQL Server, and if you use the IronPython version you can use SMO. There is an article I wrote on precisely this at http://www.simple-talk.com/sql/database-administration/python-for-the-sql-server-dba/
If your goal is to become a better programmer more than to actually use the language, I would look at Lisp. I have not personally used Lisp, so take this with a grain of salt. But, many people I respect highly recommend learning Lisp both to use and to help you improve your programming overall. It is a different paradigm from most languages, and that will help you really grow and expand your knowledge base. It is the language I intend to learn next, when I have time to pick up a language for the sake of picking up a language.
Of course, C# is also a fine general option and plays well with SQL Server if writing CLR and there are also several other good options.
So, to summarize, my bottom line recommendation is Python, but that is caveated by your situation and your goals.
answered Feb 10, 2010 at 06:28 PM
Based on all the places it's being used these days, I'd say it's PowerShell that should be a big part of every DBA's toolbox. Along side every administrator of Exchange, CRM, SCOM, Sharepoint... It's just getting used everywhere. The fact that it's .NET means you've got a great deal of existing infrastructure, and based on your question, knowledge, to draw on.
answered Feb 10, 2010 at 07:10 PM
Grant Fritchey ♦♦
I would say pick up a PowerShell book and then dive into F#. I've been working with it for the past year and have to say I haven't been this excited about learning a new language in a long time. It forces you to think about problems in a different way, mainly functional instead of imperative. With VS2010 it is now a first-class citizen in the MS family and since you are a Windows shop and familiar with the .NET Framework you are half way there. Many parallel tasks are much simpler to implement than with C#. I feel this will become valuable in the next few years as we try to get the most out of multiple cpus/cores. You can map functions across sets of data much like SQL. It has made me a better C#/VB developer and recursion is now my friend!
answered Feb 10, 2010 at 10:24 PM
I'm going to go out on a limb here. There are some excellent answers, all of which I agree with, so I'm not going to repeat other people's wisdom. But what I will say, is learn Assembler. I'll give you a second to clean up the coffee that you've undoubtedly just spat all over your monitor...
No, it won't be very useful to you in terms of getting a job. No, you won't ever come to a problem (in a normal PC environment, at least) and think 'I know, I'll write that solution in assembler'.
But, what it will do is give you an invaluable peek into how computers work at the byte code level. What is actually going on, all the way down there at the CPU?
And I don't think you would want to learn about a lot of assembler, you won't get much benefit from learning about SSE extensions, etc etc. But a nice, small, understandable instruction set would give you a good grounding.
The idea of abstraction is that you don't have to care how something works, you just have to care that it works. In a perfect world, you would never have to know how something works. However - does an understanding of how a car works make you a better driver? For example, recently in the snow, did knowing that using a higher gear makes it less likely that you will slip help you out? I know it did for me.
The same can be said of computing. The release of the source code for the .NET framework is a case in point - that is certainly something that you should not need to care how it works. But they released the source code because they understood that having a good working knowledge of what is going on inside the black box you are using will make you a more effective user of that black box.
So, go on. Dip your toes into a bit of assembler, and then the next time you write a line of high level code, you'll have that much more understanding of what it is, actually, that you are asking the CPU to do.
answered Feb 11, 2010 at 06:56 AM
Matt Whitfield ♦♦
Are you familiar with LINQ? You don't mention it in your OP but that would be a valuable addition to your "toolbox".
answered Feb 11, 2010 at 06:17 AM