In Can We “Cheat” in the Creation of and Marking of Academic Assessment Material By Getting a Machine to Do It? I had the quickest and naivest of plays with with the new ChatGPT research preview [announcement].
Only slightly less crappy in my attempt to prompt a more interesting assessment activity, here’s another 30s of not really putting any much more thought or effort in to refining the initial prompt:
Create an activity appropriate for a first year undergraduate that assesses their understanding of the similarities and differences between lists and dictionaries in the Python programming language. Then provide an example marking guide.
Me to ChatGPT
Activity: Write a short paragraph (no more than 200 words) explaining the similarities and differences between lists and dictionaries in Python. Write a short program (no more than 10 lines) that creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. Marking Guide: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (2 points) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (3 points) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (1 point) Total: 6 points
Provide an example answer by a weak student marked according to the marking guide.
Me to ChatGPT
Example Answer: Paragraph: Lists and dictionaries are both data structures in Python. They are both used to store data, but they are different. Lists are ordered, so the elements in a list have a specific order. Dictionaries are unordered, so the elements in a dictionary do not have a specific order. Program:
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.append(4)
# add an element to the dictionary
my_dict["key3"] = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict["key1"])
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict["key2"] = "new value"
Marking: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (2 points) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (3 points) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (0 points) Total: 5 points
Provide example feedback to the weak student.
Me to ChatGPT
Example Feedback: Great work on explaining the similarities and differences between lists and dictionaries in Python. Your program correctly creates and manipulates both data structures, but there are a few areas for improvement. First, make sure to use proper indentation and naming conventions in your code to make it easier to read and understand. Additionally, consider adding comments to explain what each part of your code is doing. This will help others (including yourself) understand your code more easily. Keep up the good work!
What would an example answer by a failing student look like?
Me to ChatGPT
An example answer by a failing student might include the following: Paragraph: Lists and dictionaries are both data structures in Python. They are both used to store information. Lists are like arrays, and dictionaries are like objects in JavaScript. Program:
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.push(4)
# add an element to the dictionary
my_dict.key3 = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict.key1)
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict.key2 = "new value"
Marking: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (0 points) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (1 point) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (0 points) Total: 1 point
Provide a marked example answer from an excellent student.
Me to ChatGPT
Example Answer: Paragraph: Lists and dictionaries are two common data structures in Python. Lists are ordered collections of elements, which means that the elements in a list have a specific order. Dictionaries are unordered collections of key-value pairs, where each key is associated with a specific value. One key difference between lists and dictionaries is that lists are accessed using indices, while dictionaries are accessed using their keys. Additionally, lists are mutable, meaning that the elements in a list can be modified, while dictionaries are immutable, meaning that their keys and values cannot be changed. Program
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.append(4)
# add an element to the dictionary
my_dict["key3"] = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict["key1"])
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict["key2"] = "new value"
Marking: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (2 points) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (3 points) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (1 point) Total: 6 points
Provide an example answer by a student who would prefer to write functional code
Me to ChatGPT
Example Answer: Paragraph: Lists and dictionaries are two fundamental data structures in Python. Lists are ordered collections of elements, and dictionaries are unordered collections of key-value pairs. One key difference between the two is that lists are accessed using indices, while dictionaries are accessed using their keys. Another difference is that lists are mutable, meaning that their elements can be modified, while dictionaries are immutable, meaning that their keys and values cannot be changed. Program:
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list = my_list + [4]
# add an element to the dictionary
my_dict = {**my_dict, "key3": "value3"}
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict["key1"])
# modify an element in the list
my_list = my_list[:1] + [5] + my_list[2:]
# modify an element in the dictionary
my_dict = {**my_dict, "key2": "new value"}
Marking: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (2 points) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (3 points) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (1 point) Total: 6 points
Provide a sample solution that demonstrates poorly written code that includes at least one programming error. Identify that error.
Me to ChatGPT
Example Answer: Paragraph: Lists and dictionaries are two data structures in Python. Lists are ordered, and dictionaries are unordered. You can add things to lists and dictionaries, and you can access and modify the elements in them. Program:
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.append(4)
# add an element to the dictionary
my_dict.key3 = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict.key1)
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict.key2 = "new value"
Marking: The paragraph correctly explains the similarities and differences between lists and dictionaries in Python (e.g., lists are ordered collections of elements, dictionaries are unordered collections of key-value pairs). (1 point) The program correctly creates a list and a dictionary, and demonstrates how to add, access, and modify elements in each data structure. (1 point) The program is well-written, easy to read, and follows best practices for Python programming (e.g., indentation, naming conventions, comments). (0 points) Total: 2 points Error: In the program, the dictionary is accessed using the dot notation (e.g., my_dict.key1), which is not correct in Python. Dictionaries should be accessed using square brackets and the key (e.g., my_dict["key1"]).
What are the differences between the program code given in the example answer for the failing student and the weak student?
Me to ChatGPT
The main difference between the two programs is how the dictionary is accessed and modified. In the code for the failing student, the dictionary is accessed and modified using the dot notation (e.g., my_dict.key1), which is not correct in Python. Dictionaries should be accessed and modified using square brackets and the key (e.g., my_dict["key1"]). The code for the weak student uses the correct syntax for accessing and modifying dictionaries in Python.
What are the differences between the program code given in the example answer for the excellent student and the weak student?
Me to ChatGPT
The programs are identical, as both correctly create and manipulate lists and dictionaries in Python.
UPDATE: although I’d intended to just offer the transcript without comment, I realise I didn’t ask why the weak student scored 0 for the code and the excellent student received 1 for exactly the same code. I am happy to award different marks for the exact same content, particularly where assessment tends to formative assessment, but in this case I would perhaps have give the weak student the full mark for the code, and the excellent student a half mark for the same code becuase it was could have been better presented code.
Why do you expect the weak student to create code that is as good as the code created by the excellent student?
Me to ChatGPT
I cannot predict what code a student will create, and I cannot make assumptions about a student's abilities based on their performance on a single assignment. The example code for the weak student and the excellent student are provided for illustrative purposes only. In general, students' abilities and performance can vary greatly, and it is not appropriate to make assumptions about a student's ability based on a single assignment.
What would the code look like if it were poorly commented?
Me to ChatGPT
# create a list my_list = [1, 2, 3] # create a dictionary my_dict = {"key1": "value1", "key2": "value2"} # add an element to the list my_list.append(4) # add an element to the dictionary my_dict["key3"] = "value3" # access an element in the list print(my_list[0]) # access an element in the dictionary print(my_dict["key1"]) # modify an element in the list my_list[1] = 5 # modify an element in the dictionary my_dict["key2"] = "new value"
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.append(4)
# add an element to the dictionary
my_dict["key3"] = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict["key1"])
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict["key2"] = "new value"
The code is poorly commented because it only has one comment, which is not enough to adequately explain what the code is doing. Good comments should provide additional context and explain the purpose of each line of code.
What would the code look like if it was well commented?
Me to ChatGPT
Here is an example of well-commented code:
# create a list with some initial elements
my_list = [1, 2, 3]
# create a dictionary with some initial key-value pairs
my_dict = {"key1": "value1", "key2": "value2"}
# append a new element to the end of the list
my_list.append(4)
# add a new key-value pair to the dictionary
my_dict["key3"] = "value3"
# access the first element in the list
print(my_list[0])
# access the value associated with the "key1" key in the dictionary
print(my_dict["key1"])
# modify the second element in the list
my_list[1] = 5
# modify the value associated with the "key2" key in the dictionary
my_dict["key2"] = "new value"
The code is well-commented because it has clear and concise comments that explain the purpose of each line of code. Good comments help make the code easier to understand and maintain.
How do the comments in the excellent student’s code compare to the comments in the poirly commented code and the well-commented code?
Me to ChatGPT
The code for the excellent student does not include any comments. Here is the code:
# create a list
my_list = [1, 2, 3]
# create a dictionary
my_dict = {"key1": "value1", "key2": "value2"}
# add an element to the list
my_list.append(4)
# add an element to the dictionary
my_dict["key3"] = "value3"
# access an element in the list
print(my_list[0])
# access an element in the dictionary
print(my_dict["key1"])
# modify an element in the list
my_list[1] = 5
# modify an element in the dictionary
my_dict["key2"] = "new value"
The code for the excellent student does not include any comments, unlike the poorly commented code and the well-commented code. The poorly commented code has only one comment, which is not enough to adequately explain the code. The well-commented code has clear and concise comments that explain the purpose of each line of code.
Explain the functional aspects in the code produced as an example of code produced by someone who prefers the functional style.
Me to ChatGPT
The code produced by the student who prefers the functional style uses functional programming concepts such as immutability and pure functions. For example, instead of modifying a list in place using the append() method, the code creates a new list by concatenating the original list with a new element. This is a functional approach because it avoids mutating the original list, which can lead to unpredictable behavior. Similarly, the code creates a new dictionary by combining the original dictionary with a new key-value pair, instead of modifying the original dictionary in place. This approach is also functional because it avoids mutating the original dictionary.
PS I can’t get access to ChatGPT any more right now — it claims it’s too busy but maybe I have had my turn. One thing I didn’t play with was its ability to apply marking criteria appropriately. I should really have tried creating my own marking criteria list (with some obviously ridiculous components) and asking it to rate sample answers according to my criteria…