An article was recently published that looks at evaluating First Programming Languages (FPL) the language to use for an introductory course of programming.
An existing issue is that formally assessing a programming language isn't really defined, with a lot of evidence being anecdotal. The proposed evaluation framework looks at technical and environmental feature sets. "The technical feature set covers the language theoretical aspects, whereas, the environmental feature set helps evaluating the external factors." These feature sets are covered in table 2 of the article (link to PDF) and consist of the following:
The article explains each of these points in details, and gives each of the languages being evaluated a rating based on this explanation, followed by a detailed explanation of how the scores of each rating can be compared this includes allowing an evaluator to weigh certain criteria they deem important against the others. As this is for choosing a language to teach someone to program with, different places will have different reasons and goals, so would want to weight things differently.
As the default weight settings do not conform to the original popularity index of the languages, so there should be a different weighting criterion. However, it is very hard to come up with a generic and correct weighting criterion. Therefore, the scoring function should be customizable and the user should be able to tune the weight of each feature based on her preferences. As an example, consider the fact that Ada holds 3rd position in overall scoring, but is not being considered among highly used FPLs as of now.
I'm OK with turning people off programming. Far too many people are in CS who don't belong there.
You're apparently assuming that everyone who learns to program is in CS. They're not. I'm a neuroscientist and my major was also neuroscience. So in college I learned biology-related stuff and pretty much nothing else. Now that I'm a researcher I produce large volumes of fairly complicated data and the only way to analyze it is to program. A lot of people in fields such as mine had to learn to program and a lot of us have chosen MATLAB or Python, since these are high-level enough to make the stuff we need to do easy. Now I'm dabbling in C++ because I'm building hardware with microcontrollers. "Scaring away" people like me from programming has negative implications for a range of research topics. Conversely encouraging people like me to do a little programming college would make people's early research careers easier. In particular, it would be valuable to have courses that teach good coding practices early on. As it stands, a lot of us have to learn optimization techniques and best practices the hard way. This is a big waste of everyone's time.
I realise that biologists who've learned to code have a bad reputation in certain circles, but some of us are better than others and we're willing to learn. Furthermore we need to learn. In some labs I've seen the data and interpretation carried out by the biologist and the coding and analysis done by CS people. The result is usually not pretty. The CS people don't understand the biology and waste lots of time doing unnecessarily complicated stuff that isn't relevant to the issue at hand. The biologist, if he doesn't code, doesn't realise that the CS people are barking up the wrong tree. He also doesn't understand what they're doing (partly because it's over-complicated in the first place). The CS people think that "biology is easy" and don't put in enough time to learn what the experiment really is. The end result is a Frankenstein's monster. In some labs a biology/CS partnership can work if each side puts in effort to learn about the other.
I think you'd do a lot better with IT than CS.
To do CS I had to sit thru automata theory classes and the whole proof of 3SAT being NP complete and all kinds of computer science stuff that important to the science of computing machines but irrelevant to making most code for most things. Sounds like you need IT classes, like an intermediate Python class or C++ class, or maybe a systems analyst class, or a modern DB class. If you're in one of my CS classes where you hear all about lambda calculus and the y-combinator (not the VCs, the real thing) then you're probably in the wrong classes.
So yeah, there's a lot of people gaining an intimate knowledge of red/black trees and converting NFAs to DFAs who really belong in a code slinging class not CS. I agree with GP post, there's a lot of people in CS who totally don't belong there.
And there's nothing wrong with code slinging, just like there's nothing wrong with sitting thru yet another proof of yet another obscure NP complete problem. But there is something wrong with the IT folks or most neuroscientists taking CS classes when they need IT classes. Just like if a bunch of chemists invaded your field, because, hey, neurotransmitters are just chemicals, so its all good right?
Sounds like your lab needs IT guys who know a lot of neuro. I agree, you really don't want CS guys there other than interesting philosophical discussions and internet debate sessions.
I've made a lot of money for a long time by being a guy who knows EE, especially telecoms, and especially EE telecoms RF, inside and out, and also can sling at least some code and admin some machines when I have to. So I think I know exactly how you feel, other than you being a neuro-bio guy. My CS degree was a pure hobby after I already had 20 years experience in the industry doing this stuff, and it is of course completely useless on the job, although it was huge fun. So I'd strongly advise finding IT type classes which you can actually use and not doing the CS stuff at all other than as a hobby when you've got time.
Yes, I see what you mean. I wasn't suggesting people like me need CS classes but that they need basic programming classes before being launched into research. I suppose our needs are closer to what may be taught in an IT degree than to a CS degree, but really all we need to know is how to do some fairly simple computational stats using a programming language. So stuff like PCA, clustering (k-means, hierarchical, etc), classification (linear discriminant analysis, support vector machines, etc), linear models, bootstrapping, cross-validation, etc. Stuff like that.
If you're dealing with large amounts of data I'd actually recommend you extend your dabbling with C++ to work, too - or at least to some other lowish level language, because reliance on the likes of Matlab and Python are going to be killing your runtimes. Dedicated C and C++ methods are easy to call from Python (give http://www.swig.org/Doc1.3/Python.html [swig.org] a look), which gives you the best of both worlds -- Python to set a problem up, and native code to get the performance boost. (Fortran works well with massive datasets since ultimately they're just big arrays and that's still one of Fortran's major strengths, but it's a bit of a pain to call from other languages, though you could run through C interfaces to get there which wouldn't be too shabby, so long as you were careful to invert your matrices along the way which itself comes with a penalty cost; depending on the situation you may well find yourself better sticking with C-like languages.)
I'm was at least half joking. For scientific computing types, python with NumPy/SciPy etc. is GREAT!