No One Programs Any More
cs.uni.edu
cs.uni.edu
Why should scientists respect a comp sci intro class built on a language and a set of design patterns that reek of the cube farm, when all of their actual work is done using languages and systems that they will inevitably have to teach to themselves because nobody offers a formal course?
Surely the need to impress the math department is a great use case for an introductory course in Lisp or Scheme. Not that this is an original idea or anything.
Intro to comp sci is scheme, honors freshman comp sci is java, and I think down the road it branches off into assembly, C++ (which I know engineering students take alongside MatLab), and Lisp. I could be wrong, but I'm in engineering (switching into comp sci and cog psych).
My undergrad physics department taught a course in Fortran because the Comp Sci department refused to teach it. It's only been a few years but I think they are still teaching it. Fortran is nearly as fast as C and far easier to use than C, so there hasn't really been a drive to switch the huge amount of Fortran code out there to C. I think that if anything kills off Fortran it will be Python or something similarly easy to teach to undergrads.
C, C++ and Fortran have similar enough characteristics and capabilities for scientific work that once a researcher has learned one, there's not much benefit to learning either of the others. But scripting/glue languages make it possible to hack together something in an afternoon that's impressive enough to get another scientist's attention and perhaps consider that languages do matter.
I think Python will convince new scientists that C++ and Fortran deserve to be replaced, and another fast, easy-to-parallelize language will be the actual replacement.
I use Fortran every day, and I can't stand it. But it's quite common to find physicists, even young ones, who only know Fortran.
"I'm worried about the present state of programming. Programmers now are supposed to mostly just use libraries. Programmers aren't allowed to do their own thing from scratch anymore. They're supposed to assemble reusable code that somebody else has written. There's a bunch of things on the menu and you choose from these and put them together. Where's the fun in that? Where's the beauty in that? We have to figure out a way we can make programming interesting for the next generation of programmers."
I wanted to create a 3D data visualization app just for kicks a while back. Guess what, I didn't have to roll my own OpenGL graphics libs, nor my XML parser, but I still had a blast putting it all together, and being able to focus on UI (the main motivator for the project) instead of the nitty gritty behind the scenes.
I think it's valid to have some concern about coders becoming less capable at low-level code-from-scratch principles, but I don't think it's fair to say that the library-centric development today is less fun.
What he's actually trying to say was that, as a usefully large number of algorithms for everyday tasks have already been discovered (optimally, even!) and codified into "libraries", people are running out of (easy) things to invent, and so aren't getting that rush as often. What was needed, in his mind, was a replacement for the rush, as that was what he saw as the raison d'etre of programming; being a mathematician himself, it was probably the only reason he programmed at all!
Of course, we've gotten on just fine without the rush. "Programming" as solving problems has continued to flourish; Knuth's "programming"--really referring to the scientific method applied, as it should be, to Computer Science--has quieted. It used to be that every programmer was a practicing computer scientist by necessity, just as every astronaut is currently an astrophysicist by necessity. When "platforms of discovery" (computers being one, the vacuum of space being another) mature, the need (or ability) for their practitioners to be involved in the creation of the theory underlying the field diminishes. This doesn't mean the field "dies"--it merely segregates.
(My current position is to some extent an exception, though I'm finding that getting things done in Java with its various bloatware frameworks takes a LOT more time and effort than in most other languages/platforms, including .NET.)
but as a bonus, i now know http request better :D ... extending the cgi library, for example, uploading multiple files in one http request
library also has another use, for testing
for example, i got stuck char used as separator/ending in netstring, used in lighttpd's scgi
i looked at python scgi library source code, saw the output scgi variables etc, then readjust my porting code
but i strongly agree that building something from scratch is tremendously rewarding ... no matter how crappy it's - there's a beauty only u got the priviledge to enjoy ... FUN!
Why not Python or something where they can just crunch numbers and write programs instead of learning how to navigate the minefield that is the C preprocessor and the C++ STL?
I agree it sucks, and it's too bad they can't move away from it sooner rather than later. Probably a great niche for any number of programming languages - if you can ever get the big multi-nationals and military to adopt it.
I've been wondering about that one for a while now, because throughout my career as a software developer, some of the worst programmers I've encountered have been people with comp sci degrees.
There's also a need for glue code and other non-numerical scripting. For example, PyMol is a pretty popular program for molecule visualization, and as you can guess, Python is its scripting language.
It's clear to any of these researchers that a program just amplifies your own efforts. From a distance, it may appear that an academic rival is letting the computer do all the thinking. That just wouldn't be fair, would it? If the computer can't think, isn't it better to just publish great thoughts in raw form, and let some benighted industry worker do the calculations and data entry?
Obviously, no. Thinking programmatically is different, and allows a researcher to answer new problems -- in any field. Even psychologists and sociologists crunch statistics on population groups: collecting and encoding data is tedious and time-consuming. Traditionally, surveys are filled out and crunched by hand; but looking at the massive amount of data available on social networks, for example, just crawling and aggregating that data could yield much better information than manually roping in 130 undergrads at your own school. Or you could splash a task out on Mechanical Turk to analyze the Turkers themselves. This would be big, and it would upset a lot of academics who built their reputations on traditional methods, and perhaps blew off computational research as a fad a decade or two ago.
Programming well is a much harder skill to learn, but it's not something that you'd pick up from an introductory programming course anyway, and besides, good programming is overkill for most scientists anyway.
If there was ever any doubt about what programming can offer mathematics, ProjectEuler would dispel that. I say give the students an intro book on Python and point them at ProjectEuler.net. If they enjoy math, curiosity will do the rest. I agree that programming isn't necessary for every mathematician, but it offers so much potential for exploring numbers that any math students not introduced to programming is at a huge disadvantage.
Definitely Java is not the right way to go - for a mathematician I'd recommend something more like Python or Mathematica.
I think the four color theorem is an exception because mathematicians weren't impressed and excited to find that computers could prove theorems. Instead they were disappointed and considered it somehow "wrong". We should be pushing forward with automatic theorem provers, and we would be if more mathematicians could program.
Are you suggesting these as tools for mathematicians? Now what is supposed to happen? They have to find problems for these tools? It should be the other way around...
Not to mention that, even outside of experimental math, there are plenty of pain-in-the-ass calculations that computer algebra systems make so much easier.
If they are into numerical analysis then Mathematica, C and Java are still important and potentially necessary depending on what they are researching.
engineering courses i took focused on matlab, and C (for embedded microcontrollers)
I never use java as 'domain-specific-language' for those projects.
The intro to CS was java; however, i took C for engineering course for uni requirement (counted as intro to cs)
we had first assignment on generating 10000 random numbers
a guy fired up excel, generated rand in one cell, dragged to the bottom 10000, and gasp printed it
It was fun looking at flickering monitor, and humming laser printer - after a while, i felt sympathy for those devices
it took me less than 5 loc in matlab ... and being friendlier to trees as a bonus :D
and no, it's not a community college ... rather a top research engineering school ... but hey, things like this happen a lot