11 ms·
Computer science is not software engineering
- deleted 6y ago[deleted]
- fennecfoxen 6y ago“Software engineering” in practice is 90% about keeping your stuff organized well enough that you and others can comprehend it, make sure it does what it intends, and use and and extend it. That extends to making project plans to begin with, and any documentation. That’s hard to teach as a separate thing.
- ThePadawan 6y agoI took a course in Software Engineering as part of my CS degree. As part of that course, we simulated spec work by having Team A write the specifications for a project and having Team B trying to interpret that as loosely as possible while still being compliant. (Team C would then do that with Team B's spec and so on, so there would be no 'revenge'). That wasn't perfect, but it did teach us a lot about writing down implicit and non-functional requirements, as well as the use of precise language.
- to11mtm 6y agoWhen I did CS (my alma mater didn't have Software engineering at the time,) many courses did similar but with a different spin; The work based on the exercise was pre-divided into modules that were fairly similar in size. And at the end you had to code your module and everything had to 'work together'. As a blunt observation, the courses where writing a specification was part of the project everything seemed to click together more easily. The ones where a specification wasn't written were the ones where people were scrambling on due date.
- Ultimatt 6y agoThat's the 10%. 90% is working out what to even do, and managing all the humanity in the system before you arrived to build software.
- whatever1 6y agoAs a non-CS engineer who writes software for a living, I can definitely say that there are times that I wish I had formal training in algorithms, parallel data structures, compilers, operating systems and hardware. There are many times that I need to rewrite my code because of non-adequate design. Other times I reach corner cases that take me too long to debug, only to realize much later that there was a lower-level explanation for the unexpected behavior.
- mannykannot 6y agoCongratulations! By not dismissing these temporary setbacks as being just the way things are, you have the right attitude to become even more successful at what you do. There seems to be lots of information, of the sort you are interested in, available on the internet (I won't recommend anything specific as there is too much!) One can learn a lot simply by digging deeper into the specific issues that one has encountered, especially as you begin to see the links between them.
- mistersquid 6y ago> There seems to be lots of information, of the sort you are interested in, available on the internet (I won't recommend anything specific as there is too much!) As a non-CS developer, I find this us not an easy problem to overcome: the wide availability of resources of varying quality. I work more than full time (US exempt employee), and I have enough knowledge that intermediate depth and quality resources do not provide enough and, not having a solid grasp of fundamentals, MIT's SICP course is a bit beyond my current grasp, I would love recommendations for a series of courses, a series of syllabuses, or even a part-time degree program where I could meaningfully progress while working full time. I'm not afraid of advanced math, I'm ignorant but willing to learn about data structures. I'm highly educable but I'm time-poor. What targeted resources would be a good investment of my limited time?
- AnHonestComment 6y agoMy “one weird trick” is take the time to understand type theory. How are types implemented? What are the native types on your computer? How do types and whiteboard diagrams relate? If you can answer those questions, you’ll start to get an intuitive sense of how to make a program out of types (eg, domain driven design) and of how the computer will interpret those types.
- chrismeller 6y agoThat’s funny. I completely agree, but at work lately I’ve come up against a religious fanaticism level of DRY and “we created an algorithm to match all these things”. Great, you spent two weeks saving two percent of compute time and now only two people will ever be able to change this code. WTF?
- dj_mc_merlin 6y agoThat is a perspective one acquires after a while. Another huge part is having the knowledge required to not blunder. The questions a beginner SE might ask are along the lines of "what are pipes? how do you package something to release it? how do I revert a git commit? how do i exit vim?". I know many people who are completing degrees in CS and related fields that do not know the answer to these questions. That said, I think the best way to learn these kind of things is on the job, if you find a company kind enough to let you practice the basics.
- x86ARMsRace 6y agoI'd say it's less to do with kindness and more along the lines of a VC who invests in a hand full of startups. If you train a certain amount of beginners, you'll likely turn out a few high value engineers. A few really strong engineers could produce sufficient business value that they offset the 'loss' for the ones that don't really make the cut.
- imtringued 6y agoAbandoning businesses is fine, abandoning people can be cruel.
- bcrosby95 6y ago> If you have a choice between a comp sci and a software engineering career, go for comp sci. One prepares you for a wide swath of careers, the other gives you tools for today. This advice probably depends heavily upon the school. At mine, a Software Engineering degree required the same classes as Computer Science, but with extra engineering ones on top.
- deleted 6y ago[deleted]
- colesantiago 6y agoAnd there are some companies want both Compsci + Software Engineering when looking for candidates.
- notretarded 6y agoComputer Science is more a pure science, Software Engineering has more leanings to an art form.
- guitarbill 6y agoIs math science? Science is generally about testability, right? If math isn't science, it's still extremely useful, and a valid, rigorous field in itself. I don't think it's so easy though. If anything, it seems like in software engineering, you come up with a "model" of how it ought to be done, and then see if that actually works in the real world. Food for thought :D
- whatever1 6y agoWhy do you think Math is not testable? You can run numerical experiments to validate laws, theorems etc Heck we even have numerically supported proofs nowadays
- tchalla 6y agoScientific hypothesis need to be verifiable and falsifiable. Most hypothesis that follow them are sciences. Mathematics is one of them and so are many others.
- analog31 6y agoThe thing that really distinguishes science is an appeal to empirical evidence as a boundary condition for the development and acceptance of hypotheses. Science can get lost in the woods for a long time -- for one thing, theory is fun -- but eventually has to bump into some empirical data. For instance the trouble that plagues the search for a theory that reconciles gravity and quantum mechanics is that theories are a dime a dozen, but ones that can be empirically tested remain elusive. Theology was regarded as a science in the middle ages, but its appeal was to evidence found in scripture and tradition rather than empirical data. I honestly don't know if it's regarded in the same way today. With that said, scientific methodology can be useful in the exploration of math. I've used computation to guide me towards a proof. For instance if the problem is: "Find all numbers such that ...," and the first 10 of those numbers are powers of two, hmmmm... guess where you'll start looking for a proof. But the computation itself was not a proof. Computers can be studied from a pure math angle, e.g., computing the order of a sorting algorithm. But they can also be studied by treating a computer as an unknown whose properties are discovered by empirical testing of hypotheses. For instance, benchmarking is such a pursuit.
- sgt101 6y agoSoftware Engineering is badly named. Real engineers build artifacts that are designed to meet performance requirements as efficiently as possible. Software people can't even effectively specify the performance requirements of the artifacts that they produce.
- PaulDavisThe1st 6y agoThat's mostly because the performance requirements don't exist, certainly not in the same sense as they do for mechanical engineering. Imagine someone designing and constructing a bridge, and right after it was possible to walk gingerly across one part of it, the people in charge of the project said "hmm, could you put a parking area in the middle?". And then, right after you had done that, came back and said "great, but we'd like to make the whole thing a double decker so we can run a train line across the lower level?". Miraculously, you pull this off, and then they announce that they've realized that the bridge needs to open in the middle to allow large boats through. We (generally) do not allow engineering projects rooted in the physical world to have fluid specifications, because of the cost and complexity of doing so. Although there is a real cost and huge complexity to allowing software engineering to accomodate goal flexibility as much as we do, it is vastly less than would be the case for most mechanical and chemical engineering projects. And the reality is that human goals do change as exposure to a project takes place. There are probably many people involved in bridge specifications who wish they could have gone back and significantly altered some part of the design, based on things learned during construction and early use. But we don't allow that, and so we're left with an impression that only non-software engineers are good at handling performance specifications. It's not true.
- sys_64738 6y agoAgree. Real engineers are also personally liable when things go wrong.
- elteto 6y agoNope. This is incorrect and a common myth. Most engineering disciplines do not need professional accreditation.
- 29athrowaway 6y agoSometimes you can use technology without having to understand it. You can use put together a solution using HTTP without having to understand the entire protocol stack under it. You can create some small service using an scripting language without having to learn algorithms or data structures, memory management, multi-threading, etc. But when things do not work, and you are required to do retrospectives and post-mortems detailing why things break, and when you are required to mitigate risks from things breaking again... that's when you can no longer get away with simply seeing yourself as a someone abstracted from the low-level stuff. You will now have to understand things, and if you don't, your organization will find someone else that will.
- charlesu 6y agoYou’d think that’d be the case, but many of the post-mortems are pretty high level too. Most SEs don’t know HTTP from top to bottom. And they’re mostly fine.
- 29athrowaway 6y agoPost-mortems start being important when users rely on your stuff and stakeholders want an explanation for a problem. They also want to understand if you understand the problem, if you care about the problem, and how is it not going to happen again. If you say "we fixed the issue" 10 times in a row for the same issue, you lose credibility and the organization will look to replace you. If a problem in your product is affecting my ability to do business, you either give me a proper explanation or I will find a replacement product. The prototyping phase of a product is just an engineering honeymoon, it does not last forever.
- deleted 6y ago[deleted]
- thrower123 6y agoSoftware development is more like being a machinist. The bad ones just do what they're told, the good ones know what is possible, and the best ones know the principles as well as the practice. A pure computer scientist is like the engineer that designs with SolidWorks and has never actually run a Bridgeport, or had to pop the access panels and grease bearings day-to-day.
- luftbb 6y agoNah
- shimonabi 6y agoI attended the same school as the author in Slovenia. The amount of math and theory was too much for me. One graduate of the university is a prof. of AI at Harvard, another one teaches graph theory at Berkeley, another one who thought me math is a prof. of AI in Toronto and director at Nvidia. So I dropped out, went working for a few years, then enrolled at an another university, then went working again abroad. Now I'm preparing myself for my last exam and will write my Bachelor thesis in the first half of next year. I plan to graduate, even if it's the last thing I do in life.
- kinda_dijkstra 6y agoComputer Science has about as much to do with software engineering as astronomy does with telescopes.
- _russross 6y agoI think that overstates the difference. I think a better analogy is architects vs. construction workers. Any decent architect will have a pretty strong understanding of the realities of construction, and an experienced construction worker who has moved around through different trades could probably design a decent house. But you'd only trust a trained architect on bigger, more complex projects, and you'd want disciplined, experienced construction workers doing the work on anything that is meant to last.
- amelius 6y agoThis only makes the problem more difficult, as software architects also exist.
- carapace 6y agoThe version I heard is "Calling it 'computer science' is like calling surgery 'knife science'." (Good day for Dijkstra quips on HN today.)
- 908B64B197 6y agoMaybe in the 1800's. Today cutting edge astronomy isn't that removed from telescope design. Understanding how the instrument works and it's limitations is pretty much essential to understand the data it produces.
- burtonator 6y agoOne of the things that's interesting about modern languages like Java and Typescript is that they target software engineers that want things like generics, type safety, etc. A lot of data scientists DO NOT want this. They're heavy on the science and less so on the software engineering. I think this is one of the reasons Python took off. Having to learn generics, type safety, exception handling, etc turns out to be a real pain when you're also learning about neural networks, AIs, etc.
- chrismeller 6y agoThis is also why languages such as R, F#, and many others have emerged. I’m most familiar with F#, so I’ll use it as my example, but it is built on .Net just like C# and VB. That means you not only get access to all of the features they offer, but in a functional language that doesn’t enforce any of them on you. Microsoft was clearly going for a best of both worlds approach - .Net if you need it, just your data if you don’t. I find it a pain in the ass, but all the data guys at work love it because they can mix and match with our existing code and still do their own thing.
- fny 6y agoThe data scientists don't know they need it yet just like the JavaScript devs didn't think they n needed it. I've already started seeing organic adoption of assertions.
- mattgreenrocks 6y ago2012: “static types restrict my beautiful code” 2019: “static types are amazing!” I’m still salty about this shift. No one really goes back and admits, “maybe we were all wrong.” IMO, the best explanation is the high influx of new, young devs results in ideological conformity in lieu of developed aesthetics. This also explains the unnatural amount of sway by so-called “thought leaders.”
- nthj 6y agoMore complicated functionality has moved to integrations/APIs in the past 8 years. When you’re trying to ship an extensive application and building out features that few customers may ever use, types absolutely slow you down. When you’re integrating with a 3rd-party API, you have two differences: 1. relatively high confidence the API won’t change much, which makes implementing typed code lower risk and higher ROI 2. a slower feedback loop over the “reload the page” of rolling your own, so types catching issues earlier than heavy integration tests is much more valuable I use untyped Ruby/Rails code for all of the CRUD, and golang AWS lambdas for anything integrating with SDKs/APIs. Best of both worlds, in my experience.
- abdullahkhalids 6y agoAs a physics prof, who teaches quantum computing, I have the opposite problem. At my university, the computer science degree is just a software engineering degree. Students barely learn any computer science fundamentals beyond those required to get a SE job. There are very good at the SE, no doubt, but I really wish the uni just called a spade a spade, and a a software engineering degree a BS software engineering.
- chrismeller 6y agoIt’s nice to hear someone “on the inside” say that. I fully support offering degrees that train you for the practical aspects of software engineering without wasting time on things you’re unlikely to ever use in that field. At the same time, one of these things is not like the other, you can’t call them the same.
- Rebles 6y agoI wish I knew the difference when I started at university. In retrospect, It wouldn't have changed anything, because I love my time as an undergrad at my school. But, the perception of what a software engineer career looks like would have changed. At best, I would have advocated to my school of engineering to offer a software engineering degree. Though, I imagine it is difficult for universities. They're trying to be more theoretical and less practical than trade schools, despite the majority of undergrads do not continue to pursue more degrees. I imagine if universities shifted its focus to more applied sciences, it might be even harder to keep the number of applications for masters and phd programs up.
- abdullahkhalids 6y agoUniversities can offer a real computer science degree from the Science school, and a SE degree from the engineering department. Same way, Electrical Engineering degrees are not called BS Physics and Electromagnetism, and are separate from the Physics degree. I doubt there will be any impact on MS/Phd applicants. The people who are interested in the fundamentals are usually interested from the start.
- vmception 6y ago
- hungryhobo 6y agoI do like the author's point about understanding vs knowledge. Often I see the industry and their evangelists recycling old ideas as the new shiny thing with t-shirts and conferences, and it can feel daunting to keep up.
- hprotagonist 6y agoThe analogy I usually make is that theoretical physics has more or less nothing to do with mechanical engineering in much the same way that computer science has more or less nothing to do with writing software for a living. In both cases, it isn't done to trust the theoreticians with power tools: or hold the guys in the shop responsible for the deep magic, either.
- eternalban 6y agoThat duality is a few degree too far removed to map to CS->SE. Alogrithms, & data structures are one of the obvious fully shared concerns between CS and SE. Also, as a software practitioner, I can give you multiple examples of reaching into CS research and then directly appying it to code. A favorite ~recent example was discovering "Power of Two Choices" (for bins and balls) a few years ago, and then, that very day, doing a prototype of a cache using that approach. I seriously doubt a Mechanical Engineers would have the same experience with ~contemporary fundamental physics theoretical papers.
- hprotagonist 6y agothen punt the analogy back a century or so to a time when modern physics and it’s engineering equivalents were more in the same rough infancy that CS is in now. You’ll see a more equivalent cross-fertilization then, perhaps. I don’t mean that as an insult, at all, just a recognition that as a field, CS is maybe 75 years old.
- eternalban 6y agoWe're in agreement regarding the infancy of the field and how that manifests in practice. I wouldn't take it as an insult, if I were a CS worker, however. That just means that the Gausses, Euclids, etc. of this field have yet to appear. All the warts of this field aside, it does offer a chance for making a dent in history. Something the young workers in the field may want to keep in mind ..
- AnHonestComment 6y ago
- etimberg 6y agoI'm not entirely sure why there needs to be a hierarchy of degrees. There are many disciplines that can lead to careers in software, and IMO they all have different strengths and weaknesses. I come from a very traditional electrical engineering education(analog circuit design & electromagnetics) and those fundamentals have been invaluable in my software career.
- deleted 6y ago[deleted]
- deleted 6y ago[deleted]
- spicyramen 6y agoComing from CS background, I have realized that in terms of speed, my SE counterparts seems to do better. I need to think too much, long term works fine but depending on the requirements it can be a drawback. Example: new feature, customers ready to use it I'm thinking from performance, network, even support perspective and customer just waiting.
- spideymans 6y agoThis will vary a lot by institution. At my institution, the SE students are enrolled in all the CS courses, however they also have to take the core engineering courses as well. This leaves them with substantially less flexibility in electives, but a better understanding of the engineering and managerial aspects of SE.
- angry_octet 6y agoThe real mindfuck is that people with plain Comp Sci qualifications think they are ready to be competent at software engineering, whether that is software at scale, high confidence in correctness, operations (systems programmers / SREs / DevOps) etc. Can we recognize that your bachelor's degree is just a starting point, that leaves you fundamentally unqualified for many tasks, and you'll have learn (via painful experience, apprenticeship [if that is emotionally possible for Gen Y/Z], or self study) many things to become a journeyman software expert? Do you need to understand the basics of algorithmic complexity? Yes. Do you need to be able to write a compiler? No. (It's useful, but unless it is your major, no, and you can learn it later.) I would trade off compiler design for a software configuration management course. Should you understand some crypto basics? Yes. But I'd rather employ someone who understands TLS and PKI than someone who has written a toy project to implement a cipher.
- TheCoelacanth 6y agoI don't think I've ever heard anyone claim otherwise. Someone with a bachelor's and no experience is only qualified for entry-level jobs, where they will generally be working under close supervision.
- angry_octet 6y agoThe sentiment I get from some people is that traditional, pure CS educations are in some way uniquely qualifing, and software eng subjects (config mgmt, project mgmt, requirements/design/V&V) are trade skills and paperwork that don't have rigour, whereas in reality they are foundational skills for big/complex software projects. It is as reductionist as saying CS is just programming.
- eximius 6y ago> that leaves you fundamentally unqualified for many tasks, and you'll have learn (via painful experience, apprenticeship [if that is emotionally possible for Gen Y/Z], or self study) many things This is not a generational thing. I know at least as many entitled older folks as I do detached younger folks. Moreover, part of the drive for saving dying industries is because the folks in those industries don't want to pivot because that's hard. Some people just want life to be easier and give in to that. It is easy to sympathize with that because life is hard and it would be nice.
- fithisux 6y agoIt took people too long to realize. CS and SE are completely different. The only thing in common is computers. CS is much more than computers and software though. It explores mechanized models of how universe or prats of it works and proves properties or investigates the value of different models. Part of this universe is software.
- codenesium 6y agoI've always thought computer science should just be in the math department. Software engineering uses concepts from CS but in my experience it's far apart.
- sirmoveon 6y agoIt's an abstraction problem and it happens in all fields in academia. They are just not practical enough to cater to every use case in the job market. We need to rethink academia and I personally think reducing the length and objectivity is a better answer.
- Gokuldas027 6y agoMy university almost convinced me, there is no software engineering in computer science