6 ms·
People in academia simply don't care about the quality of one particular implementation of their ideas. There's no value judgement here, it's just not their job
by j2kun 13y ago
People in academia simply don't care about the quality of one particular implementation of their ideas. There's no value judgement here, it's just not their job to write and maintain good software. Just as it's not a mathematician's job to maintain a cryptographic protocol or a physicist's job to keep a satellite in orbit. The people who went to schools with strong research programs are trained by people in that mindset.
It's a simple question of motivation. If they're brilliant and they have motivation, then of course they could write great software. They just don't.
Make no mistake, people from schools like Cal Poly SLO (a state school, and my alma mater) who excelled in their CS programs can software engineer circles around most. Why? Because Cal Poly has no research program, three quarters of their faculty come from industry, and their faculty have no job requirements outside of teaching. They literally had us managing five to ten thousand line software projects with teams of students in year two.
- onedev 13y agoThat last bit sounds amazing and highly valuable. I go to a well regarded top CS school and I regret that we don't have something like that in our curriculum that forces people to write multi-thousand-lines of code with a team and maintain it. Our EE program has something like that where you choose a team and build something with them over the course of a semester while having an "advisor". At the end you make a report and present it to the advisor and the rest of the committee. It's a requirement for graduation. I think that's awesome and CS definitely needs something akin to that.
- jeremysmyth 13y agoScience != engineering. Engineers take what scientists discover and create and design solutions based on that. Computer science is not about engineering a large software solution. Rather it's about discovering and creating algorithms and techniques that engineers can use to design solutions. Much of the comments to this article seem to be happy to mix the roles of "technician", "engineer", and "scientist" when they are in fact very, very different.
- LinaLauneBaer 13y agoThere are certain aspects of engineering which are definitely science. Science really is just the production of new knowledge with hard facts.
- walshemj 13y agoEngineers are Scientists with thumbs was what I was told when I worked for a RnD organization on CIT's campus. The corollary to that is "but the technician is the one who really understands it :-) "
- c23 13y agoYour definition of engineering may have been appropriate around the time of the industrial revolution when an engineer was literally one who built steam engines, but modern engineering in the academic sense under discussion here is absolutely a science.
- collyw 13y agoMy job as a software engineer involves a mix of all these things. Not a lot of heavy algorithm development, but definitely some.
- mcginleyr1 13y agoEngineering utilizes science. But not many engineers need to know as much as Knuth.
- onedev 13y agoHm that's a fair point.
- tjr 13y agoWikipedia describes "computer science" as an umbrella term covering everything pertaining to software development and algorithmic thought. Academic computer science programs generally offer courses in both the theoretical and the applied. Even the very term itself has often been described as a misnomer, not necessarily having anything to do with "computers" or with "science". I think the reason people mix such things around so much is because what "computer science" is has been ambiguously defined all along.
- brandoncarl 13y agoWhile I'm following you ideologically, I'm not sure that this idea bears fruit in evidence. The computer science community still uses large numbers of algorithms (via libraries) that were written by academics, in peer-reviewed journals, in Fortran, in the 1970s. Even currently, a tremendous amount of the cutting-edge work in optimization and others is done at the university level: METIS for graph partitioning, and convex optimization work being done by Stephen Boyd et al. They care deeply about the implementation because quality and speed of solution are of utmost importance. A number (like Geoffrey Hinton and Sebastian Thrun) have moved into the private sector, but after contributing a lot via academia.
- seanmcdirmid 13y agoHave you ever seen Hinton's code before? It's all Matlab :) And when you are designing/prototyping algorithms, that is quite good enough.
- 14113 13y agoI thing the problem here is you're comparing apples to oranges - the people writing code in the 70's are not the same type of people teaching students to code now. In the 70's it would have been physicists, mathematicians or engineers writing code to solve a problem for them and their colleagues. Their code needed to be maintainable so they could share it in their academic community, and get things done with it. Today, the people teaching computer science view code as the proof of concept. Much of the work is in the idea behind the code, and the code is just proof that it can be implemented in practice - and most importantly, isn't designed to be actually used. The idea that the code is just the proof of concept then carries over to the students, and the mindset becomes not, "let's build this thing to do X', but "can we build a thing, in way Y to do X".
- collyw 13y agoDepends on the course. I studied a bachelors in molecular biology, took a few years out (realised I didn't like the subject much) and studied a one years masters in IT a few years later. It was taught by the Computer Science department (Glasgow University in Scotland), but the focus was on writing good quality software - readable, maintainable, usable code. There was an optional data structures and algorithms course which I assume is more geared towards traditional comp science. I took it, but in ten years of work, I rarely use this stuff (though its good to have a background so you know which library is a better choice). One thing they didn't teach us was networkinq, which I am completely self taught. I can get stuff working, but I think having a formal education in things (like I do in OOP) can teach you where to focus to get things done in a professional manner.