Most Useful Programming Languages
Afegeix-te a LibraryThing per participar.
Aquest tema està marcat com "inactiu": L'últim missatge és de fa més de 90 dies. Podeu revifar-lo enviant una resposta.
Oh yeah... And does anyone think DOS could still possibly be useful?
I specialize in the Dead Languages, and I either need to learn new languages or find another line of work. So, when you respond to runrocker, please also include what sort of applications and/or platforms they are good for.
To a great extent it does depend on what you want to do. C++ and Visual Basic are not very well suited for doing web applications (you can do them but I wouldn't say they were the ideal match for the problem domain).
I am interested that your colleague didn't mention C#. I think it is shading out VB now in the Microsoft world.
Also most good programmers have to move from one language to another during their career. I know I have a number of times. So just learning one and sticking with it is probably not a long term option.
As for DOS - I would say forget it unless you have an app that requires it. There are far better command line interfaces available - if you are using Windows look at Cygwin (which offers a Unix shell and tools for Windows). That way you are building knowledge which will be of use on Linux and the Mac as well.
I wouldn't recommend PERL for the same reason that I wouldn't recommend PHP. They are both hacky languages that let (and sometimes encourage) "bad" programming practices. I've used both of these languages (understatement) so I feel pretty comfortable with that statement. That's not to say that every program written in PHP or Perl has bad programming, just that they make it easy to do so. In the end it's up to the programmer.
C is a good starting point. From there you can learn C++, Java, or Objective-C (my personal favorite language for ease of use and elegance) quite easily. I'm not knowledgeable enough about VBasic to comment.
But it does come down to what you want to do. If you primarily interested in web programming then concentrate on Python, PHP, Perl, and Ruby. Pick one. Python is probably the most structured (from my perspective anyway) and best to start with. PHP or Perl are probably the easiest to learn. Ruby is the sexiest right now but that could be slipping.
C is a good starting point and you can add C# to that list of other related languages.
I wouldn't recommend VB (or VB.NET) for that matter. C# is quite simply a nicer language which lets you do the same sort of stuff with the same tools.
Ruby is sexy for all the wrong reasons. People have picked up on Ruby because of Rails. However its real sexiness (at least to me) is at a much lower level - however unless you are an experienced programmer you are unlikely to appreciate those features.
Most of the other languages (apart from the dinosaurs) have lesser take-up in the commercial field however they do have their niches.
(I'll spare everyone language design opinions of the languages already mentioned, since that gets us off track.)
Fair enough but I also wouldn't fall into the trap of snobism—believe, for example, that because LISP is such a great idea, it's also a great language in the real world. Reddit wrote themselves in Lisp because the Paul-Graham set pushed that view. They ended up rewriting it in Python because there were no libraries.
As far as "hacky" and "bad" programming, I'd defend both practices, provisionally. Programmers like to talk about tools, and think their job is writing programs. Unless you're some jerk in the bowels of a big software company, your job isn't to write programs but to create good things. Again and again I've seen a programmer get distracted by tool-sharpening or the gorgeous logic of their code, and create a piece of shite because they weren't thinking on the level of the thing.
Notably, IMHO, Chris is not one of those programmers. Somewhere along the line he learned how to think on that higher level—I suspect being a graphic designer helped. So maybe someone like him would benefit from being removed from hacky temptations. But I'm not sure your average programmer needs to focus on the tools all the time. The world is full of bad web applications. Programming is very seldom the problem with them.
In much the same way, sometimes it's not about the paint or the technique. You can be a great technical painter, and be a bad painter even so.
Becoming good requires a certain amount of brain training. Things like LISP are a good workout for your mind, even if they're not that practical or suitable for the kind of code most programmers end up writing all day.
But you want a straight answer, and probably don't want to start with brain bending. I would say Python, given no idea what you want to code. You can be pretty effective with only a beginner's knowledge. It generally stays out of your way and gives you good tools for whatever you're trying to do. And all the high-level stuff in LISP and Ruby is there for when you're ready to step up your game. Finally, given the huge investment Google has made in Python with AppSpot, the rise of the Django framework, and work at Sun and Microsoft on making Python run on top of Java and .NET, you might even be employable.
I would have thought you'd think they lead you into bad habits for themselves too, no?
Perhaps it would be productive to break "useful" down into specific characteristics, such as rapid development, large term support, long term maintainability, efficiency, layered (DSL) abstraction, continuous operation (with patching), interoperability, etc.
Assembly language IS getting to know the guts of programming but, in my opinion, is a bit overkill for most mainstream programmers. If you're going to be doing board-level work like graphics pipeline programming then it makes a little sense. Web apps, not so much. There's a middle ground which is basic data structures, application flow, design patterns, (MVC for instance, whether you agree or not...it's good to be able to argue about why you don't agree with it and/or at least know what people are talking about when they are discussing it).
But then again, a lot of my discussion hinges around writing code that others can understand and use. Programmers tend to work in teams so that kind of standardization and base of knowledge is important, even if just for communication among the team.
That's why it's critically important that you conform to your co-workers' bracketing style.
I would add Java to those mainstream web application languages - mainly for larger systems.
Also it makes sense to know languages from more than one paradigm. If you know java or c# (or even python/ruby) it can be advantageous in learning a functional language like Haskell or Ocaml. Even if you don't use it on and ongoing basis it will make a difference to how you think about solving a problem and hopefully make a difference to your understanding and implementation of certain concepts in your main language. This was the reason the pragmatic programmers promoted a "language of the year" clearing house where programmers were encouraged to learn a new language every year.
19: Said coworkers should attempt to use the industry standard bracketing style and there would be no conforming necessary. Perfect example. :)
Not really relevant, but an amusing story for this group nonetheless:
Recently California's Governator decided that, to cut costs, all state employees would be paid minimum wage until the legislature passed a budget, and all part-time employees would be (temporarily) laid off.
However, the state's payroll system is still in COBOL. Among those laid-off part-timers? The only state employees left who know COBOL. Good luck hiring anyone else who knows the language and is willing to work for minimum wage....
As the (near) inventor of social cataloging, I decide what's "industry standard." :)
Example: In the olden days, COBOL was GREAT for writing business applications because it was plain English, and you could read it like a novel. I've worked with 4 revisions to the standards, and it just kept getting easier to write and implement, mostly because the standards were tightened and demanded a more 'structured' approach. Functionality it ~didn't~ have was direct manipulation on the bit level, but you could always call a subroutine that was written in FORTRAN or C or TAL or Pascal or whatever assembler-like language you had available. On the systems I've worked on (almost exclusively, for the past 28 years), the screen interface was written in a language called SCOBOL -- '74 standards, basically COBOL optimized for this one purpose. The major limitation is that it doesn't do disk I/O, and you can't do web pages with it, ad nausea. (Think DOS screens only without the elegance.)
In short, COBOL was good for getting an application written quickly; FORTRAN was good for number crunching (the entire NYSE/AMEX stock/bonds applications were once all-FORTRAN); TAL (my primary language for many years) was a fantastic language for transactional processes (ATMs, POS processing) and quite versatile for bit-flipping and data manipulation. C and Pascal are/were variations of TAL (should probably flip that around -- C and Pascal were probably created first; not sure...).
Now, I may be a dinosaur, and know only dead languages, but I ~do~ have opposable thumbs. At the last place I worked as an employee, they had a 'trainer' come in and give us a 3-day 'class' in the .net (environment?, style?, what?) -- object-oriented coding, generally. The training was supposed to have been specifically for people who coded in COBOL, but should begin working on web-based applications. The problem was, the trainer didn't know ANYTHING about COBOL, and couldn't relate a single thing he showed us to it. He couldn't explain the structure of the code he generated, how the I/O interface was used... Two years later, none of us had been given an opportunity to work in a web-based environment. Perfect set-up for a layoff -- "Hey, we trained you for the new platforms, but you haven't done anything with it. Bye-bye!"
(Sorry for the rant. I feel much better now.)
So, back to the (my, really, in #3) original question -- other than "company standards" (or lack thereof), what are the pros and cons (maybe features is a better term?) of the various web-based programming languages? And which ones are the most marketable? And which ones are already out-of-favor, but might still be worth being proficient in?
There seems to be some indecision between listing languages and what they are good for and clarifying the goals so that an appropriate set of languages can be given.
C# (which is part of .NET so might have been what your trainer was trying to train) and Java are pretty similar. Both have a very similar heritage and design philosophy. The usual web frameworks for Java tend to emphasise separation of concerns more than ASP.NET (the standard C# web framework) does. Both are squiggly bracket languages - like C. Both have removed raw access to the more tricky things like pointers although they still exist.
Perl (actually 21 years old) was first written as an alternative to shell script, sed, awk and friends. It was originally to help with processing reports. It has been improved and expanded over the years. Syntax is pretty obscure if you aren't from a strong Unix shell background. OO was added later and wasn't part of the original language design. Generally programmers need to have discipline to produce good apps with PHP.
PHP (13 years old) original designed for dynamic web applications. OO added later and wasn't part of the original design. Code can be heavily fragmented and mixed with html. Generally programmers need to have discipline to produce good apps with PHP.
Ruby (again around 13 years old) was designed as an OO language from the start. From a raw language pov it offers far more than the others in that it supports features such as mixins, metaprogramming, closures and more. The Rails web framework has loads of supporters and it certainly seems to make easy things easy. Whether it makes hard things more difficult (the usual tradeoff) I don't know. Syntax is a little cryptic.
Python (16 years old) also has some strong web frameworks. Syntax is far more readable. However structure is determined by white-space rather than squiggly brackets or BEGIN/END statements.
Perl, Python, PHP and Ruby are generally what are known as scripting languages. They are all dynamically typed.
BTW - that trainer must have been rubbish. You obviously need to build bridges between languages and IMO 3 days is no where near long enough. I would have started by getting you to write a simple web application in COBOL (I know people who have down quite sophisticated stuff in COBOL) just to take the mystique away. Then started on the .NET stuff.
A few task-oriented opinions:
Learning to program: Scheme.
Windows desktop application / MS-Office add-on: C#.
MCU: C or assembly language.
Hard-core logistics / optimization over terabytes of data at thousands TPS: Common LISP.
Embedded scripting language: Lua.
One-off integration tasks: Perl. (NB: It is best to destroy the program after running it. Otherwise, you may end up trying to maintain it, which is impossible. Also, should you find yourself inheriting someone else's Perl script, you may need to consider another line of work.)
And, mostly for completeness,
Core business apps: ABAP. (Or PL/SQL, or even COBOL or RPG; it's never a technical decision)
BTW, Tandem's TAL came after Pascal and C. I thought there was still some demand for TAL programmers?
I have recently finished University where I studied Computer Sciences. I learned C, C++, Java and Python. before that I learned Pascal at college.
I graduated last year and I am now employed writing and editing programs in TAL, COBOL, SCOBOL and TACL, with the occasional bit of C thrown in
Also not mentioned above, but to create iOS-native apps (iPhone, iPad) you'll want to learn Objective-C, which is the bastard child of C and LISP. I happen to like it a lot but I know a lot of people can't stand the square bracket and very verbose method syntax. It helps that I've been using it for years.
If you want to do native Android development then Java is your tool. I'm not a fan. I've never been taken with Java but I'm especially put off by the Android toolset and design style (from an app structure standpoint, not necessarily the visual style).
And there's been a lot of work on mobile-apps-that-look-native, namely with Sencha Touch. But mobile web continues to be a headache since there's still a lot of limitations on what you can do with it (storage space, cpu, capabilities, etc.)
I wouldn't recommend Flash Builder. Adobe has more or less declared that people should really be looking at html5/js (at least in the long term). For example Sencha Touch is a html5/js mobile toolkit - there are many others.
ETA: And note I talked about ST in my post you referenced. I'm creating some projects in it, but html5/mobile has some severe limitations.
Here's the tangent: for most of this time (the last decade), I've come to believe the important notion is:
"Your _third_ language should be a Programming Language"
And, in this context, the answer to "which" should be:
"Any one you can frequently practice"
To which I'd add "Excel Functions" as a useful "language". I like MMcM's taxonomy, too.