Academic integrity has always been the cornerstone of an ivy league education. Nothing gets you in trouble at my college like getting caught cheating. Yet it is rampant. For example, if you get in a fight with a cop on campus (PENN has real Philadelphia police officers patrolling the school) every week nothing will happen to you. You can get so drunk and piss in hotel lobbies of the fanciest hotels in Philly, and the school will take no action. But, if you are caught cheating during an exam, depending on the professor, you can fail the exam or be suspended for a year (I’ve seen both happen).
In my department, cheating was also monitored when turning in electronic assigments. This is common now for all coding assignments at most schools. Apparently there is some software developed at UC Berkeley that can analyze code turned in and flags submissions that are similar. Teaching assistants and professors ran this code automatically after the submission deadline had passed on all code turned in, and then reviewed the flagged submissions.
Considering the consequences for cheating were so severe, it is surprising how many students still cheated regularly. It is often harder to explain how a problem is solved than it is to show the solution (or simply the student was lazy and underprepared), so this led some students to emailing around completed assigments to each other (the kids today are probably IMing or texting them, but its the same concept). The smarter cheater (read: the ones that got away with it) would take the completed solution and view it, but would still write his/her own solution using the provided solution as a guide. This process of digesting another person’s code and transcribing it, with heavy modifications, became a skill. At the tail end of an all-nighter, the faster you could understand another person’s code and use it complete your task, the faster you could sleep.
Fast forward to my job today, writing commercial software. What I have found about writing application-level commercial software is that it is often a repeated 3-step process:
- Find software library to provide necessary functionality.
- Learn how to use this software library.
- Incorporate this software library into the product.
A software library is software written by others that provides functionality that can be incorporated into your product. Most software libraries are used as building blocks in producing a finished product. The documentation provided with a software library is the easiest way to learn it, and often times this documentation is littered with sample code on how to use the library. Just to clear, you usually don’t want to have the actual source code to the library because you are using it to provide some functionality for you – not to learn how they wrote it.
When learning how to use a new software library, I have realized that I am very good at digesting code from others and incorporating it into my work. It is a very natural process for me to look at sample code, or code from another place in our codebase and understand how I can use it. Often when developing a new product there is not adequate documentation for how parts of the product work. It is at these times that having the ability to digest code rapidly is truly beneficial.
The realization that the speed in which I can learn how to use code by looking at samples was surprising to me at first. But after some thought on it, I have simply added it to the list of accidentally invaluable skills college taught me that I didn’t realize until later in life.
Aside from code, we have to turn in all IB-assessed assignments in any subject through turnitin.com to flag plagarism. It gives a lot of false positives (any occurrence of the word “superpower” alone is flagged), but does aid teachers to some degree.
Aside from code, we have to turn in all IB-assessed assignments in any subject through turnitin.com to flag plagarism. It gives a lot of false positives (any occurrence of the word “superpower” alone is flagged), but does aid teachers to some degree.