> Are we giving grades based on effort/attempt or based on knowledge acquired?
it's not really that simple. grades are just a way to measure how well students have met the course expectations. the expectations may or may not be reasonable in the first place. if there was no curving and year after year, 90% of students fail a course, the material would get adjusted. either fewer topics would be covered, or less difficult problems would be selected from each topic. the syllabus itself is an implicit curve, in a way. when someone designs a data structures course, they design it in a way that a target portion of the students will actually pass the class. they don't just say "well, arrays, linked lists, binary trees, rb-trees, BSPs, splay trees, octtrees, hashmaps, bloom filters, skiplists, and all the different types of heaps are essential topics and everyone who can't master every single one in 16 weeks fails". there's no objective standard for exactly what set of topics needs to be covered and learned in a particular course (or major), you just try to teach as much as is reasonable.