4 ms·
My computer engineering degree included Chemistry, Physics, Mechanical Engineering (statics/dynamics) Multivariate Calculus, Differential Equations / Linear Alg
by yc-kraln 8y ago
My computer engineering degree included Chemistry, Physics, Mechanical Engineering (statics/dynamics) Multivariate Calculus, Differential Equations / Linear Algebra, as well as Humanities (writing, history, art) in addition to software, hardware, electronics... Am I not coming close to the "bar of engineering"?
You can boil engineering down (maybe a bit much, but bear with me) to: plan, execute, measure, adjust. The difference between software /programming/ and software /engineering/ is that programming often stops after execute, and hands measure to someone else maybe, whereas a software engineer is constantly measuring what they are doing and trying to understand why it may be deviating from plan, and how to make it better in the future.
To wit, you don't need software engineers to build you a web application, but you had better have them working on your file system.
- erikpukinskis 8y agoNone of the things you listed would seem to indicate anything about your ability to employ a rigorous approach to software development equivalent to what a credentialed civil engineer does with roads. A civil engineer is not credentialed because they took physics and DiffEq. They are that because their field has defined a body of knowledge and rigor that has been shown to adequately protect the public within a narrow band of services. I am not aware of any such effort anywhere in software, which is why many engineers consider the whole notion of “software engineering” to be a farce.
- zozbot123 8y ago> I am not aware of any such effort anywhere in software, which is why many engineers consider the whole notion of “software engineering” to be a farce. The Rust Evangelism Strikeforce is working hard to change that.
- logifail 8y ago>> ability to employ a rigorous approach to software development equivalent to what a credentialed civil engineer does with roads Q: Are there many software engineers who build poor-quality roads in their spare time?
- erikpukinskis 8y agoSure, yes. What relevance is that?
- ThenAsNow 8y ago> My computer engineering degree included Chemistry, Physics, Mechanical Engineering (statics/dynamics) Multivariate Calculus, Differential Equations / Linear Algebra, as well as Humanities (writing, history, art) in addition to software, hardware, electronics... Am I not coming close to the "bar of engineering"? I'm not making a point about degrees and coursework covered per se, more so about the practice of the profession. Of course, education prepares one for practice, so they are very linked. I think the practice of computer engineering straddles the line more between engineering and craftsmanship than does say typical software development which is largely (though as I noted before, not entirely) in the craftsmanship camp. For what it's worth, I have a Computer Engineering degree as well. > You can boil engineering down (maybe a bit much, but bear with me) to: plan, execute, measure, adjust. I get your gist, but it misses some essential elements. Engineering is about understanding your objectives/requirements/constraints well and ensuring that what you implement satisfies those while being correct/sound. Of course, there is almost inevitably a circular dependence between the understanding of objectives/requirements/constraints and correct implementation. If soundness is trumped by other considerations, e.g., "development velocity", developer availability, convenience of tooling, etc., I would say you are not practicing engineering. It's not that most software development sets out to implement bugs or design flaws, it's that there's an irreconcilable difference between the mindset that treats their elimination or preclusion as a first-order consideration and lets the development approach fall out accordingly, vs. choosing a development approach and then trying to weed out soundness issues after implementation. The heated arguments in favor of continuing to develop mass-deployed or high-stakes systems in languages like C or C++, or weakly-typed languages shows the strong bent of the software development world toward craftsmanship over engineering. It's one thing when those are the only tools available; it's another thing when there are viable options that force more correctness yet people can't get over how unencumbered they feel when they go the unsafe route. I recognize these statements probably offend, but my point is not to troll with a polemic. It's to say that software is a new technical vista compared to traditional engineering disciplines. It provides a kind of power and speed of system implementation radically unavailable in the physical realm. Our ability to construct software systems far outstrips the allotted time, and often until recently the ability, to reason about them. This is definitely changing, and the work going into enabling soundness-by-construction through tools accessible to any competent developer is worthy of innumerable plaudits. I think we are heading toward most software development as engineering, but we are far from it today. The daily news of "hacked" systems and the never-ending stream of "system security updates" is proof.