10 ms·
We do teach these things, they are just not core CS topics, but rather in other areas, relegated to electives like a software engineering course. At CMU we have
by titzer 3y ago
We do teach these things, they are just not core CS topics, but rather in other areas, relegated to electives like a software engineering course. At CMU we have entire Master's program for software engineering and an entire PhD program (in my department). We teach exactly the kinds of things the blog post is about, and more. Software Engineering is a whole field, a whole discipline.
I get that this is a blog post and needfully short, but yes, there are courses that teach these skills. There's a big disconnect between CS and SE in general, but it's not as bad as "no one teaches how to build quality software". We do work on this.
- nerdyadventurer 3y agoAny plan to make it available to public, MOOC, lecture series etc?
- __loam 3y agoI took one of these kinds of classes in my masters program this year. They were totally obsessed with UML. It would be nice if these classes could move beyond dogma that is decades old.
- crysin 3y agoGot my MS in SE at DePaul University in Chicago. Wrote more UMLs for those classes than I’ve done in 10 years of actual software development.
- mrweasel 3y agoWhile I'm not suggesting that UML is necessarily the solution, I hope it's not, but the observation that so few developers touch anything that just looks like UML is a good indication that a lot of software is in fact NOT designed, it's just sort of hobbled together from a few sketches on a whiteboard.
- rvdginste 3y agoI hope that people say they hate UML and then just make UML (class, database, activity, ..) diagrams according to their own conventions, but I am afraid you are right and that a lot of software is just "hobbled together"...
- titzer 3y agoCMU constantly reevaluates its MSE program with input from many different angles. I've participated here and I think we're trying hard to balance important foundational knowledge with practical skills of the day. I don't think we over-emphasize UML or any one particular silver bullet in our program.
- ska 3y agoTo a first approximation, software developers don't have masters degrees. If you are thinking about changing how an industry does its work, focusing on graduate courses seems counterproductive.
- HeyLaughingBoy 3y agoI disagree. I have a Master's in Software Engineering and the way to change things is for those with the formal education to try and spread good practices as much as possible in the workplace. Sometimes the main benefit is just knowing that good practices exist so you can seek them out. The biggest impact I've had at the places I've worked have been about procedures and methodology, not how to use UML or draw a dataflow diagram. - Have a process around software releases. Doesn't matter what as much as it has to be repeatable. - Review your designs, review your code, don't do things in isolation. - Have a known location for documents and project information. - Be consistent, don't do every project completely differently. - Get data before you try to fix the problem. - Learn from your mistakes and adjust your processes to that learning. - And many more things that sound like common sense (and they are) but you'd be amazed at how even in 2023 many companies are developing software in complete chaos, with no discernible process.
- ska 3y agoWhat I'm saying is that if your goal is to introduce more engineering rigor and your plan is for for the tiny percentage of graduate school graduates to percolate these ideas through the industry, it's probably a bad plan and likely to fail. This was a thread about why software developers don't do engineering like other disciplines. One partial answer is that those other disciplines take it much more seriously at the undergraduate level, at least on average. Probably the more compelling answer is that the industry doesn't' really want them to for the most part. > but you'd be amazed at how even in 2023 I really wouldn't.
- hinkley 3y agoWait. This year? I haven’t touched UML for ten years.
- petsfed 3y agoWhat would be better? Change tools every 3-5 years like the industry does, so by the time any given instructor actually has a grasp on a particular tool or paradigm, its already obsolete (or at least fallen out of fashion) too? I'm no fan of UML, but the exercise is to teach students how to plan, how to express that plan, and how to reason about other people's plans. The students will certainly draw a lot of flow diagrams in their careers, and will almost certainly deal with fussy micromanagers who demand their flow diagrams adhere to some arbitrary schema that has only limited impact on the actual quality of their work or documentation. UML is complete, at least.
- failbuffer 3y agoA whiteboard is complete. Every other way of diagramming software is deficient. Change my mind. ;-)
- master-lincoln 3y agoA whiteboard is just a medium to draw. Uml is a standard that says how to express certain ideas as symbols that can be drawn. It's not clear to me what your argument is. Is it using whiteboards to draw uml instead of special uml software? If so, be prepared to take much longer to draw the diagram. Or do you mean uml is deficient compared to free drawing of symbols on a whiteboard without a standard? If so, be prepared that nobody will completely understand your diagram without explanation
- OnlyMortal 3y agoUML is just the common parlance so that we all understand what’s represented. No need for a specific tool - unless you’re doing PowerPoint slides. Visio is good enough in that case if you have Windows.
- petsfed 3y agoGreat! So, do you bring your whiteboard to lecture to turn in, or take a picture of it, or just schedule time with your professor to whiteboard in front of them? All I'm arguing for here is that UML serves the same purpose as those online homework apps. Correctly formatting your calculus homework to be accepted by that interface is as unrelated to calculus as UML mastery is to effective software design, but it resolves some of the same logistical challenges, while introducing others.
- speedgoose 3y agoYes, I learned these things as a computer science student in an engineering school. It wasn’t perfect but a good introduction.
- bakul 3y agoDo SE classes teach debugging skills? I hope they do. So many times I have seen people try random things rather than follow a systematic approach.
- hinkley 3y agoI worked with programmers around my junior year and some of them were in classes I was in. I thought they were all playing one-upsmanship when I heard how little time they were spending on homework. 90 minutes, sometimes an hour. I was a lot faster than my roommate, and after I turned in my homework I’d help him debug (not solve) his. Then I was helping other people. They really did not get debugging. Definitely felt like a missing class. But it helped me out with mentoring later on. When giving people the answer can get you expelled, you have to get pretty good at asking leading questions. Then I got a real job, and within a semester I was down below 2 hours. We just needed more practice, and lots of it.
- SamuelAdams 3y agoThis is why internships and real world experience is so important. A course is 3 in class hours a week over 12-14 weeks typically. After homework and assignments it is ultimately maybe 40-80 hours of content. Which means you learn more in one month of being on a normal, 40 hour workweek job than you have in an entire semester of one course.
- astura 3y ago>A course is 3 in class hours a week over 12-14 weeks typically. After homework and assignments it is ultimately maybe 40-80 hours of content. Huh? I was spending 20+ hours a week on assignments alone in upper level software engineering classes. Also, internships were required.
- hinkley 3y agoWere you the sort of person who responsibly worked a little bit on the assignments over the course of the week/two weeks, or did you carve out an evening to try to get the whole thing done in one or two sittings? My group did the latter. I think based on what we know now about interruptions, we were likely getting more done per minute than the responsible kids. Including reading, we might have been doing 15 hours a week sustained, across 2-3 core classes. But these were the sort of people who got their homework done so they could go back to the ACM office to work on their computer game, or work out how to squeeze a program we all wanted to use into our meager disk space quota. Anything more than a B was chasing academia over practical knowledge. B- to C+ was optimal.
- sam0x17 3y agoWorth mentioning that SE isn't even a thing for the most part at non STEM-specific schools and/or outside very large colleges/universities
- AnimalMuppet 3y agoHere's the thing, though: Of a CS graduating class, 90% of them will work as software engineers, not as computer scientists. (All numbers made up, but I think they're about right.) We don't need these things to be electives. We don't need them to be a master's program. We need an undergraduate software engineering program, and we need 90% of the people in CS to switch to that program instead.
- titzer 3y agoI agree with you! It's hard to change curricula because there are so many competing interests. CS is an evolving field and things like machine learning have burst onto the stage, clamoring for attention. There is also an age-old debate about whether CS departments are trade schools, math departments, or science. Personally I think software engineering skills are paramount for 90% of graduates. How do we fit this into a full curriculum? What gets the axe? Unclear.
- BoiledCabbage 3y ago> There is also an age-old debate about whether CS departments are trade schools, math departments, or science. Personally I think software engineering skills are paramount for 90% of graduates. The question as well is: are Chemical Engineering, Mechanical Engineering, Materials Engineering trade schools? I think it's a key call out as CS touches on so many things. There are arguments for it being math, science, engineering, a trade school or a combination of the above. And then if you separate them out completely you end up with people doing CS being out of touch with what happens in the real world and vice versa. I think in the end you probably need to have a single overall degree with a specialization in (Programming as Engineering, Programming as Math and Programming as Computer Science,) with lots of overlap in the core. And then you still can have a both a bootcamp style trade school. Now all of that said, that still doesn't solve the CS equivalent of "Math for business majors". Or the equivalent of "Programming for Scientists", or the like which is already a really important case to offer. Where you major in Bio/Chem/Other but being able to apply programming to your day job is important. Although that probably sits closer to the Applied Software category that you might find in business school like using spreadsheets, basic command lines, intro to databases or python. But to your point, how rarely software engineering is being taught is a huge problem. Even if only 30% of degree holders took classes in it, it would be huge in helping spread best practices.
- hardwaregeek 3y agoThere's a massive gap between taught at CMU and taught at most universities. And even if it is taught, it's usually outdated or focused on very literal stuff like how to write web applications. I'd have killed for a class that actually focuses on implementation, on teamwork, on building complicated systems.
- sasaf5 3y ago+1 for teamwork... I wished there was an established field of study for teamwork in software. If you are impressed with 10x devs, imagine 10x teams!
- habnds 3y agoI don't believe this personally, but I bet that many people with MBA's would tell you that this was what their MBA was about.
- cqqxo4zV46cp 3y agoYeah. A fair bit of this is just “people working in teams” stuff, that people that buy into ‘developer exceptionalism’ will tell you is sacred software developer knowledge. It isn’t. Software engineering isn’t just about teamwork, and not all software development-related teamwork skill is generalisable to other industries, but it’s far from uncommon for there to be some trendy blog post laying out the sorts of things that, yes, an MBA program will teach someone. Which is fine, if not for the fact that these same people will scoff at “clueless MBAs”.
- eastbound 3y agoIn software engineering schools in France, both in my personal experience and other Bac+5 people I’ve hired, the entire Bac+4 year was dedicated to group projects. When you have 8 group projects in parallel at any time, it does teach team work, management, quality control, all the good stuff. After the first failed project, everyone agrees that they need a boss without assigned duties. Then in 5th year, we’d have one or two class-wide projects (20-30 people). This, along with joining event-organizing charities on the campus, where you’d work 3-5hrs a week to build a hundred-thousand-to-a-million dollars event (NGOs on campus, or concerts, or a sports meeting, to each their preferences, but it was the culture). And it wasn’t always a good time together, it’s not flowers all the way down. I’m only surprised some school might consider engineering without group effort. On the other hand, I deeply deeply regret spending this much time in charities and not enough dating, as I have never been recognized for charity service, and family was important to me.
- hinkley 3y agoIf my friends hadn’t had such vividly bad experiences with the compiler class, I might not have taken the distributed computing class that was one of the other options to fulfill that category. It’s not the most defining class of my undergrad years, but it was pretty damned close. The fact that most people designing systems don’t know this material inspires a mix of anger and existential dread.
- titzer 3y agoIf you're specifically referring to CMU's compilers course, feel free to follow up with me offline.
- hinkley 3y agoNo sorry, I was speaking in the general case not about CMU. This was ages ago and elsewhere. It was clear the prof got caught flat footed. It was practically an elective and these days I hope it’s required.
- ungamedplayer 3y agoWhy does this feel like the professor trying to either fix the problem or give detention.
- mikeyouse 3y agoLol this is who asked whether it was at CMU - https://s3d.cmu.edu/people/core-faculty/titzer-ben.html https://s3d.cmu.edu/people/core-faculty/titzer-ben.html HN is such a great community.
- deleted 3y ago[deleted]
- jaybrendansmith 3y agoAfter seeing the same mistakes made over and over again I can't help but agree. This is how one builds enterprise software now, and it is poorly understood by most developers, although that is starting to change. If I were designing a college curriculum, required courses would include all of the normal CS stuff but also software engineering, distributed computing, design patterns, web application fundamentals, compiler design, databases, DevOps/Cloud, testing fundamentals, UX design, security basics, data science, IT project/process management, essentials of SOA, product mgt and requirements. Of course, it's been so long since I went to college, none of these things existed back in the day, so perhaps modern curriculum has all of these now!
- 3abiton 3y agoWhat does research in this field look like?
- stephendause 3y agoSo I have not done research any software engineering field and have not read all that much either. One example that comes to mind from one of my courses that I took in software engineering is research around mutation-based testing. That form of testing is where you generate random variants of your test by doing things like deleting a statement, adding a statement, changing a less than sign to a greater than sign, etc. Then you check to see that at least one of your tests fails for each variant. If it does not, you either add a test or mark that variant as being effectively the same program. I forget what the term is for it. At any rate, I think there is still research being done on this topic, for example how to effectively generate programs that do not generate as many functionally identical programs. Software testing in general is a big part of software engineering, and I think there is still a fair amount of research that could be done about it. In my opinion, the intersection of cognitive psychology and software engineering is also ripe for a lot of research. I feel like we as software engineers have a lot of intuitions about how to be productive, but I would love to see various things that could indicate productivity measured in a controlled lab setting.
- PeterisP 3y agoIt looks like you're talking about fuzzing, which has applications in both reliability and security testing.
- stephendause 3y agoNo, mutation-based testing is different. Fuzzing varies the input to the program. Mutation testing varies the program itself as a means of testing the quality of the tests. https://en.m.wikipedia.org/wiki/Mutation_testing https://en.m.wikipedia.org/wiki/Mutation_testing
- titzer 3y agoTesting, fuzzing, and verification are all pretty hot SE topics now, at least in my department at CMU. All of those have some element of program analysis, both static and dynamic, so there's potentially deep PL stuff, which is core CS. There's aspects to SE that are not just that, of course, which are studying social processes, management styles and practices, software architectures, design patterns, API design, etc.
- fudged71 3y agoI chose software engineering. 3 years into the program the head of the department made a speech at an event to the effect of "Software hasn't changed in the last 10 years". It instantly devalued the entire program for me.
- anacrolix 3y agoI have news for you... He's not wrong. The porcelain is different, but the same methodologies and processes are in place. The biggest change recently is distributed (mostly ignored) version control, that's 20 years old, and continuous integration/development (probably also around 20 years old, but only catching on in the last 10-15 years). Computer science has changed more, there are lots of developments in the last 5-10 years.
- bombcar 3y agoThe biggest change I’ve seen in 20 years is that things like DVCS and actual good tool chains for languages people actually use are available and in use.
- _a_a_a_ 3y ago> there are lots of developments in the last 5-10 years So tell us what these are so I/we can learn from you
- Solvency 3y agoSo you're not a JS developer. Got it.
- nick__m 3y agoyour talking about the porcelain of software engineering, is talking about the core of the profession...
- PeterisP 3y agoIf you switch to a different framework that does the same things slightly differently and makes something more convenient, and do that three times over the years, that's still perfectly consistent with "Software hasn't changed in the last 10 years" - it's simply not a meaningful change, nor would be switching to a different programming language.
- maxFlow 3y agoThanks for sharing, I'm reviewing the curriculum for the program [0] and it looks great. Do you know if any of these courses has been opened sourced? It would be great to have access to part of the material. [0]: https://www.ece.cmu.edu/academics/ms-se/index.html https://www.ece.cmu.edu/academics/ms-se/index.html.
- zogrodea 3y agoNot the person you replied to, but I am aware that a functional programming course by CMU has had lectures (not exercises or content) freely available as YouTube recordings. https://brandonspark.github.io/150/ https://brandonspark.github.io/150/
- foobiekr 3y agoFor years a friend tried to get his department (where he worked as a lecturer) to add a software engineering course where the basic syllabus was to (1) receive a TOI from the last semester and the code base, (2) implement some new features in the code base, (3) deploy and operate the code for awhile, and (4) produce a TOI for the next semester. The code base was for a simple service that basically provided virus/malware scanning and included the malware scanner and signatures (this ensured there would never be an end to the work - there's always more signatures to add, more features, etc.) I thought this was a fantastic idea and its a pity he never convinced them. That was more than fifteen years ago, and in his plan it would have just run forever.
- maxwelljoslyn 3y agoThat sounds like an excellent way to do practice that directly mirrors real-world SWE, while still cutting it down to an appropriate size for a pedagogical environment. What a good idea.
- mwcremer 3y agoTOI?
- dmux 3y agoI’m guessing Transfer of Information.
- rjzzleep 3y agoThe thing is for academics quality software sometimes isn't actually quality software. My experience has been that people who's first jobs were in companies with quality software or who's job included reading through other people's quality software learn to write good software, the other ones learn whatever they saw in the environments they worked in.
- deleted 3y ago[deleted]
- 3y ago
- podviaznikov 3y ago100% this. My master program was for software engineering not CS. 15 years ago in Ukraine. We have that. Maybe not enough. But it's definitely not a new thing.
- bhk 3y agoHow many CS or CE grads from CMU are actually exposed to all of these topics? Surely, "it is taught", but to whom and how widely?
- tdeck 3y agoIt seems to vary a lot from school to school. At my university (2010-2014) we were writing unit tests from the first CS class. I can't say we got much instruction on how to structure more complex applications in order to make them testable, however. Things like dependency injection and non-trivial mocking have to be learned on the job, which is a real shame. Even within the industry skills and approaches to designing code for tests feel very heterogeneous.
- prendino 3y agoWe were taught these things at the Bachelor's program in CS I went to in Sweden. At my first job I then slipped on a banana peel into a de facto tech lead position within a year, and I don't think it was due to my inherent greatness but rather that I was taught software engineering and the other colleagues at my level had not. Ironically, the software engineering courses were the only ones I disliked while a student. An entire course in design patterns where strict adherence to UML was enforced felt a bit archaic. We had a course in software QA which mostly consisted of learning TDD and the standard tooling in the Java ecosystem, with some cursory walkthroughs of other types of QA like static analysis, fuzzing and performance testing. At the time it felt so boring, I liked to actually build stuff! A couple of years later I joined a team with very competent, CS-educated developers tasked to set up a workflow and all the tooling for testing software with high security requirements. They were dumbfounded when I knew what all the stuff they were tasked to do was!
- rockwotj 3y agoRose Hulman is an undergraduate teaching school that also has a distinction between a Software Engineering Degree and a Computer Science Degree. The Software Engineering degree takes a few less math courses and instead takes classes on QA/Testing, Project Management, and Formal Methods
- skeeter2020 3y agoSE is often taught out of the engineering school while CS the faculty of science, which in my experience makes a huge difference.
- rockwotj 3y agoIt’s all one department at Rose (my alma mater). The school is a teaching school (meaning research isn’t the faculty’s primary focus)
- valand 3y agoIt was a mandatory class too in the univ I attended. What was not taught about were the techniques of QA's, the variety of tests and design pattern enforcements that would reduce QA cost by tenfolds.