What are everyone's preferences and experiences on programming languages for practical engineering computing? (And as an aside for anyone still in school, even as a mechanical engineer without formal computer science background... IMO having some programming skills can be great for your career).
I'll start off. So far in my 6th year of industry, I've been a huge MATLAB fan. It's all I lived and breathed since I got out of college, and after so many years of "learning by doing" I've been pretty proficient with it.
MATLAB
Pro's
- Relatively easy to pick up, though I didn't think so in college! Partly due to the IDE, partly due to it being weakly (or really probably more dynamically) typed.
- Extensive toolboxes (libraries) for most if not all engineering computing tasks you can think of.
- Great for vector or matrix operations (hence the name.. matrix laboratory)
- Generally good for prototyping
- Everything is expensive! Can be a real drawback if you want to do stuff at home, or try the justify the cost of some new toolbox to management
- Version compatibility can bite you, especially with how often major releases come out.
- Not that fast compared to some other languages
- Once you get outside of the hardcore number crunching, some more general purposes operations are a bit of a pain
- While you can do object oriented programming, I find that most MATLAB programmers (myself included!) don't really get exposed to it.. and that it's more an imperative or script-based language. Again, maybe that's more a function of my not having formal CS background
- Generally more difficult for broad deployment of applications (in my experience)
C# .NET
Pro's
- Visual Studio as an IDE is awesome
- You can get VS Express for free!
- Fast. Having taken some stuff I was doing in MATLAB and re-coding it to a DLL in C# I've seen speed improvements of several orders of magnitude. Not even kidding. Still blows me away.
- .NET libraries are great for a lot of general purpose tasks
- Emphasis on object oriented programming has been eye-opening and made me go about things much smarter and more efficiently
- No native libraries for "real" engineering computing... that's a big one!! Might be some commercially available stuff, but at that point.. might as well pay for MATLAB
- Static typing. I'm sure there are pro's and con's to this in itself. Again not being a real CS guy and having the MATLAB background, it kinda sucked to have to start getting into the practice of declaring data types for all variables