Firms Struggle to Find Programmers Who Can Write Parallel Processing Applications
wallstreetandtech.com
wallstreetandtech.com
You'll have trouble finding good software people as long as you make them work deathmarch hours and treat them like glorified typists while acting like hypermacho traders are gods.
They will have problems as long as they view technology as a depressing cost instead of an asset.
What is the best language to learn to take advantage of this market demand? Criteria: 1) manages complexity involving multiple processors 2) has utility libraries (or easy adapters can be written for existing C libraries 3) either has existing mindshare in the industry or at least is not too esoteric and can be sold there.
Any other criteria? What languages can we select?
And, of course, C# can use any C++ library you throw at it w/ P/Invoke & a lot of marshalling.
Here's a primer video
Of course, you can also use things like LINQ and asynchronous workflows in C# to gain a lot of the benefits... but I'm really coming to like functional programming. I wish I'd known about it when I was building parallel applictions, it would have made the software I was developing much easier to write.
I also wish that I could be doing that again, rather than doing mainly maintenance work... even though I was recruited to develop parallel applications.
Personally i think that languages like Scala, F# and Erlang will be good to learn, depending on what platform you prefer. And Clojure also seems very cool. I know it's blasphemy around here, but Clojure is the only Lisp like language that i would like to learn.
Clojure is cool, and definitely worth a look if you fancy using STM. However, it's still early days, and although single-threaded performance is reasonably close to Java's (recently, very fast numeric vector operations were added) I haven't heard much about performance of concurrent applications. I suspect it might be a while before the STM implementation comes close to the optimal case, but I think it's pointing in the right direction, promoting pure functional programming and lazy evaluation with the built-in immutable data structures. Plus you get easy access to all Java libraries.
Finally, the Clojure implementation itself is pretty hackable and the mailing list is active and helpful. (I've made some minor contributions to the code myself)
I've done parallel programming in C, C++, and Fortran, using OpenMP, Pthreads/Win32 threads, and even using lock-free techniques, but it's always been an incredible hassle. It'll be interesting to see if Clojure manages to gain any significant traction. Long-term though it will need to gain some kind of support for massive parallelism. Something better than MPI.
Realistically (ie, if you're asking what to learn to get a job at one of these places), C++, Java, and C# because (outside of handful of places like Jane St) it seems like that is what everybody in these parts uses. (It's 'industry standard', after all [sigh])
Realistically (ie, if you're asking what to learn to get a job at one of these places), C++, Java, and C# because (outside of handful of places like Jane St) it seems like that is what everybody in these parts uses. (It's 'industry standard', after all [sigh])
Realistically (ie, if you're asking what to learn to get a job at one of these places), C++, Java, and C# because (outside of handful of places like Jane St) it seems like that is what everybody in these parts uses. (It's 'industry standard', after all [sigh])
Realistically (ie, if you're asking what to learn to get a job at one of these places), C++, Java, and C# because (outside of handful of places like Jane St) it seems like that is what everybody in these parts uses. (It's 'industry standard', after all [sigh])
We gauge the students by how much they accomplish in how much/little time and how elegant their solution is. And at towards the end of the internship, we invariably ask the best students to add some form of multi-threading or parallel-processing to the application they're working on (in C++, C#, or Java mostly) and even our best students have trouble with getting proper parallel-processing code working (and these guys had done brilliantly elsewhere).
I personally learned it the hard way, scouring the 'net for all the different methods until I built my own "templates" that work great for me.
We are going to see the situation change when there is a shift towards a more abstract/simplified approach to parallelism, where the minutia of parallelism is handled under the hood. I.e a return to the foundations of PRAM theory of the 70s. Otherwise, I don't see it getting much easier to find that kind of talent.
Edit: To provide some more context, they work on tools and extensions for C++. Things like race detection tools and new language keywords that make it easier to parallelize algorithms. Based on this work at MIT: http://supertech.csail.mit.edu/cilk/
(plug: we also offer Erlang training http://blags.genges.com/itsgenetic/Bay_Area_Erlang_Training )
Er, no pun intended. Thanks for the links!
multicore programming blog: http://www.cilk.com/multicore-blog/
I suspect the latter.
Or, perhaps, they won't see the problem, and startups willing to use languages with a different concurrency model will come to dominate those markets.