Let me start by talking about chemical engineering vs. chemistry. Chemistry is about atoms, and how they combine to form molecules. Chemists worry about where the electrons will be, and about the energetics of reactions. In most universities, it is part of the college of science.
Chemical engineers need to know chemistry, all right. But chemical engineering is about efficiently making desired chemicals in large volumes (without blowing up the factory). Chemical engineers worry about pipe bursting strength, and about the cost of raw materials. Chemical engineering is usually found in the college of engineering, not the college of science.
In the same way, conmputer science worries about algorithms, algorithmic efficiency, and languages. It belongs in the college of science.
Software engineering is about efficiently producing large-scale programs that work. It belongs in the college of engineering, not science. It needs to be a completely separate department from computer science, not just a course within it.
For such a course, though, I'd like to see some tools covered - source code control systems, bug databases, diff and merge tools, static analyzers, and profilers.
I'd like to see it talk about the importance of coding conventions - not the specifics of what is the right coding convention, but the idea that constraining how you write code can increase communication.
I'd like to see the students wrestle with a multi-hundred-thousand-line code base, where none of the people who wrote it are in the room to help them. I'd like to see them have to fix bugs and add features to such a code base. (I'd like to see them learn that a million-line code base is different from a ten-thousand-line code base, and not just because you have a hundred times as many problems. You have different problems. I'd also like them to see the importance of clean division into parts, of coding standards, and of naming conventions.)
1 comment
[ 3.9 ms ] story [ 11.8 ms ] threadChemical engineers need to know chemistry, all right. But chemical engineering is about efficiently making desired chemicals in large volumes (without blowing up the factory). Chemical engineers worry about pipe bursting strength, and about the cost of raw materials. Chemical engineering is usually found in the college of engineering, not the college of science.
In the same way, conmputer science worries about algorithms, algorithmic efficiency, and languages. It belongs in the college of science.
Software engineering is about efficiently producing large-scale programs that work. It belongs in the college of engineering, not science. It needs to be a completely separate department from computer science, not just a course within it.
For such a course, though, I'd like to see some tools covered - source code control systems, bug databases, diff and merge tools, static analyzers, and profilers.
I'd like to see it talk about the importance of coding conventions - not the specifics of what is the right coding convention, but the idea that constraining how you write code can increase communication.
I'd like to see the students wrestle with a multi-hundred-thousand-line code base, where none of the people who wrote it are in the room to help them. I'd like to see them have to fix bugs and add features to such a code base. (I'd like to see them learn that a million-line code base is different from a ten-thousand-line code base, and not just because you have a hundred times as many problems. You have different problems. I'd also like them to see the importance of clean division into parts, of coding standards, and of naming conventions.)