> I don't like to yell, but here it is plainly: YES.
Really? I must have went to the wrong college then or you're interviewing the wrong people. Yes, there is a reason UML is used. Its used because its a standard. Its used because its unambiguous if you know it. Its used to identify relationships, areas of repeated code, state of objects in your code, and it can easily be used to generate code, if it is learned and used properly. I have yet to see any software development book or methodology that doesn't use some form of UML knowledge. Unless you code with no design.
> Your school projects do not in any meaningful way approximate a real software project in the real world. Your design docs are held to a completely different standard than real design docs, and the process by which they are synthesized, iterated upon, and approved is also either completely absent in academia or heavily bastardized.
Likewise, programming exercises you see your typical CS or engineering program are incredibly simplistic compared to what you would run into the real-world once you're hacking on production systems at-scale. This is why open source experience is valuable, but class projects are not.
Here is what I've done as part of my CS degree: - Wrote linked lists, binary search trees, graphs, stacks/queues, and most of the well know sorting and searching algorithms used everyday by programmers FROM SCRATCH. - Wrote my own linux shell, complete with scripting interpretation, variable substitution, I/O redirection, and most of the features you find a normal bash shell. - Wrote several built-in linux commands and other commands (i.e. tail, ps, pstree, etc.) from scratch using only the linux kernel and system calls. - Designed a new calendar system for my university using the agile development methodology with all documentation produced (i.e. SRS, UML documents, requirements etc.) - Wrote a lexer and compiler, with a partner, for a made up language. - Experience implementing RDMS in mySQL and constructed tables and views for it. - Wrote a SMS text messaging system using uC/OS-II using a motorola HCS12 microcontroller complete with ring tone, memory management, clock, and serial communication. - Designed and implemented a solar charging station with COTS parts and arduinos to measure charge voltage and current (meter essentially) - Designed and implemented an RC tank, controlled via Wifi with a webcam and some small autonomous functionality - In the process of designing, implementing, and documenting a airborne particle counting network that uses rs-485 as a backbone and a control program written in C#
If this isn't enough experience, then I must be living in a fantasy land. By the way, I've done no open source, but many of these projects (ones with arduino and linux) could qualify.
> They can talk a lot of shop about algorithms, but to get them to implement their own algorithms (and do it well) is nigh impossible. Code quality is on the whole probably worse than fresh undergrads.
Go figure, they know a lot about algorithms that the programmers probably just use API calls to do. Also, implementing complex algorithms in an interview isn't exactly easy or time conducive.
All I know is, I've seen some crap code from programmers (with no CS degrees) that were commercially certified in the language they were running in. I mean I'm talking extreme no-no's (i.e. magic numbers, lack of enum use, lack of comments, no early exiting loops, god objects etc.) stuff that I actually got marked down for in my college assignments.