5 ms·
"But people in the fields of computer vision, artificial intelligence, machine learning, concurrent data-structures and others – very smart, very forward thinki
by plinkplonk 13y ago
"But people in the fields of computer vision, artificial intelligence, machine learning, concurrent data-structures and others – very smart, very forward thinking people – would pick Java or C/C++ nine times out of ten, and not only because these languages are better suited to their task performance-wise, but because they have other, more important things to think about. If your challenge is not translating a business model into code, but solving a real algorithmic or technical problem, then the programming language really doesn't matter, and you're better off sticking with the one(s) you know best."
This is so true. They often use something like MATLAB or R, but that doesn't affect your essential point, which is a great one and worth thinking about. How much of what you encode is original/cutting edge thought vs routine (CRUD apps) say.
That said, that particular blade cuts both ways. There is nothing (other than inertia) stopping the "one(language) you know best" being something reasonably advanced, with decent, if not ubiquitous libraries and tooling, like Scala or Clojure or OCaml, or even Common Lisp. Why would you want to use an 'inferior' language if you know a better one? So in the end this argument may just devolve to "Most engineers in charge of implementing systems are more comfortable with Java/C++ than Clojure/OCaml".
Something of medium complexity, between the basic CRUD web app and pioneering projects like Watson, like the (Twitter)Storm library for e.g ,is much easier to do in Clojure than in Java, though it uses many java libraries (e.g: Apache Zookeeper) under the hood.
So we have $baselang for basic webapps, $coollang for medium complexity efforts, and back to $baselang for truly cutting edge work, where thinking effort outweighs coding effort. An odd dynamic, if true.
" IBM's Watson would not have come about sooner if its engineers had chosen Haskell over Java."
This is a strong claim :-)
Even IBM Watson might be easier in Haskell,(it actually uses Java, with "significant chunks" in C++ and Prolog [1]) but someone actually needs to build something like this first. FP proponents should probably focus on building existence proofs of cool systems than resort to argument (imho).
[1] http://blog.reddit.com/2011/02/ibm-watson-research-team-answers-your.html http://blog.reddit.com/2011/02/ibm-watson-research-team-answ...
- pron 13y agoI consider MATLAB the thinking, or drawing board stage, to be followed by final implementation in Java or C++.
- plinkplonk 13y agoTrue, but the complication is that people building the final production system /choosing the implementation language, OS etc (engineers) are not usually the people who use MATLAB or R.(Computer Vision Researchers, say). There might be a few (rare) people who can do cutting edge research and do production grade engineering, but I'd be surprised if this were the default for the average team member, even for a system like Watson.
- RogerL 13y agoThat fits my interviewing experience for computer vision. Tons of people that work in MATLAB or OpenCV, throwing it over the wall to 'production'. That's not terribly appealing when you are already limiting what you can do because your CPU/GPU is running at 100%. Not too many that can actually engineer a working, performant solution.
- jevinskie 13y agoYou're fooling yourself if you think it gets that far! The grant runs out and you end up putting the MATLAB version in front-line action, complete with entire pages of code commented out: FIXME.
- deleted 13y ago[deleted]
- chacham15 13y ago> Why would you want to use an 'inferior' language if you know a better one? I really hate this idea because it implies that one language is completely inferior to another in every way. For example, I have heard: "Why use C when you can use C++?" The two languages often serve different purposes. There are few languages that give you as much control over performance and memory management as C. C is lightweight enough to go onto basic 8-bit microcontrollers with 64kb of memory. That is not to say that C is the ultimate language or anything, but that different languages have different strengths/weaknesses. Another simple example would be C# which is great if you have no need to deploy to anything other than windows. In conclusion the answer to your question is that someone had a particular need which was best suited to one language and thus are more comfortable in it which is why they want to use it for their next project.
- Perseids 13y ago"Inferior" is probably really bad wording. Let's say "more advanced". If you know C++ you will have no problem accommodating with C if it better fits your need. If you know Scala you can still program in Java if your stuck with it for whatever reason.
- chacham15 13y ago> If you know C++ you will have no problem accommodating with C if it better fits your need. While I understand what you mean, the two are completely different. The lack of OOP in C means that you have to have a different set of programming methodologies to accomplish what you would have done with classes. So, while knowing C++ helps, it isnt the same as if your 'main' language were C. Furthermore, one of C's strengths is it predictability. The way that is accomplished in C is different than C++.
- Figs 13y agoI write both C and C++ on a regular basis. The set of idioms used in C is radically different from what you'd find in C++ (even though a lot of C code is valid C++). When I first started working on C projects written professionally (after quite a bit of experience with C++), I was seriously thrown off by things like reinterpreting structs to treat the first element as a parent structure (essentially emulating inheritance in pure C code).