I've been taking some software design courses in the past few semesters, and while I see the benefit in a lot of the formalism, I feel like it doesn't tell me anything about the program itself:
- You can't tell how the program is going to operate from the Use Case spec, even though it discusses what the program can do.
- You can't tell anything about the user experience from the requirements document, even though it can include quality requirements.
- Sequence diagrams are a good description of how the software works as the call stack, but are very limited, and give a highly partial view of the overall system.
- Class diagrams are great for describing how the system is built, but are utterly useless in helping you figure out what the software needs to be.
Where in all this formalism is the bottom line: how the program looks, operates, and what experience it gives? Doesn't it make more sense to design off of that? Isn't it better to figure out how the program should work via a prototype and strive to implement it for real?
I know that I'm probably suffering from being taught engineering by theoreticians, but I need to ask, do they do this in the industry? How do people figure out what the program actually is, not what it should conform to? Do people prototype a lot, or do they mostly use the formal tools like UML and I just didn't get the hang of using them yet?