Skip to content

Instantly share code, notes, and snippets.

@maueroats
Created June 13, 2023 15:38
Show Gist options
  • Save maueroats/b6e5cc4591352043e8004bd208dafa1b to your computer and use it in GitHub Desktop.
Save maueroats/b6e5cc4591352043e8004bd208dafa1b to your computer and use it in GitHub Desktop.
Feedback on CSA Framework Unit 1

AP CS A Draft Framework Feedback

This document contains the comments from one detailed read-through of Unit 1 of the AP CS A Framework Draft. If you would like help understanding it or carefully reading the rest of the document, please contact Andrew Mauer-Oats (maueroats@gmail.com). I am a computer science teacher at Whitney M. Young Magnet High School in Chicago. At this point my document is not carefully proofread, but I hope it conveys the important ideas.

  • 1.4.A.1 System.out.print: including output is a change from the past. Why not stick with function return values? That would be "testable" (e.g. JUnit).
  • 1.4.B. String is a data type. It should be in 1.3. Having two definitions to arrive at "string literal" seems a waste. How about none, the way it is for double? Escape sequences are ok to include.
  • 1.4.C. There should be an analog for String expressions, at least mentioning +. Possibly just refer to section 1.16.
  • 1.5.A. I think this should be revised heavily.
    • The term "expression" technically includes lvalues and "assignment expressions". So technically "... must be assigned a value before its value can be used in an expression" might be better. I suggest reordering the three sentences here: "A variable is initialized ..." then "must be assigned a value before it can be used".
    • Either delete the part about "assignment must be from a compatible data type" or give it its own sub-point.
    • 1.5.A EXCLUSION STATEMENT: the assignment in for(x=0; x<5; x++) is an assignment expression. You do not want to exclude that one.
  • 1.5.B. What does the exclusion mean?? Avoiding next() vs nextInt()?? I don't think this says what you want.
  • 1.6.A.4 I think it is a mistake to include rounding by casting instead of Math.round. Especially given the detail that negative numbers need to be treated differently. Either leave the topic off the exam or give the straightforward answer (int)Math.round(x). (Yes, it skirts what is allowed on the exam since the return type of Math.round for a double input is a long, but the alternative is worse.)
  • 1.6.B.2. Say 32 bits instead of 4 bytes so it is easier for students to connect to the max being almost $2^{31}$.
  • 1.6.C.1 Unclear and also I think this is wrong. The double data type has no problem representing the entire range of possible int values, so I do not see how roundoff is relevant. I am aware that this is an issue for larger integers, e.g. BigInteger, but that does not seem to be what is written here.
  • 1.7.A Exclusion Statement. Nobody wants exam questions about the value of x=5*x++. Please also find a way to exclude these. Possibly: "Values that depend on the order of evaluation of side effects are beyond the scope of the course."
  • 1.8 I am concerned about this entry on two levels.
    • Detail: The phrasing "a class found in the libraries contained in an API" seems awkward and possibly incorrect. How about "a class used in an API".
    • Big Picture: I am very concerned that the fundamental concept of a class is first defined in 1.8.A.1 instead of its own highlighted section. An appropriate place would be between 1.3 and 1.4 because this concept is central to the course. (Note that I did not read Unit 3.)
  • 1.10 The empty list is still a list. Therefore, a method without parameters does not need a special case definition.
  • 1.10 Your definition of signature apparently does not include the return type. Is that intentional? I suggest adding 1.10.A.3 to define method signature. This concept is also very important.
  • 1.10.B.5 (I actually recommend removing this point entirely.) "A method call interrupts the sequential execution of statements..." I suggest avoiding the word "interrupts". That word implies exceptional control flow. Instead, say "When a method is called, the body of the method is executed." I think there are way too many details here about how control actually flows through the method. This is supposed to be an "essential understanding" column, not a "details of everything" column. Also, point 1.10.B.5 is not actually part of 1.10.B in the sense that it does not "describe how to call methods" - it describes what happens when a method is called.
  • 1.11 This should be reworked to apply to all static variables and methods. Not just class methods. 1.11.A could then become "Develop code using class variables and methods."
  • 1.11.A.2 Reorder so the English parallels the Java: "... are typically called using the class name followed by the dot operator".
  • 1.11.A.2 Strike: "When the method call occurs in the definining class, the use of the class name is optional in the call." Wrong section for this statement; it applies to all methods, not just class methods.
  • 1.11.A.3 Add another point: class methods can also be invoked using an instance of the object.
  • 1.12.A.3 Remove the example; not approprate for a framework.
  • 1.13.B here is where you should put the information about the fact that even though references are copied "by value", the value copy allows a modification of the original object. Reference types should get their own 1.XX number because they apply to both arrays and objects.
  • 1.14.C.3 Remove the sentence about "call by value". That concept should be somewhere else. It is not specific to constructors.
  • 1.14.C.4. Remove this section. Constructor calls work the same as every other method call.
  • 1.15.A.2 Note that this is not specific to instance methods; it also applies to accessing instance variables. Make a section for reference types and explain this in that section instead.
  • 1.16.A I'm disappointed to see that overriding toString() is no longer in scope on the exam. If I were in charge I would leave this in. It was on past exams. It is useful for students to be able to see what their classes do.
  • 1.16.B.2 add (inclusive)" at the end
  • 1.16.B.2 Do you need to list what all of the methods actually do?? I suggest just listing them and teachers have to explain. Example: String substring(int from).
  • 1.16.B.3 This is detail not an essential understanding.Omit it.
  • 1.16.B I think the charAt() method should be mentioned as an exclusion. It is very easy to encounter while searching online.

Questions

These are based on my read of Unit 1 only.

  • Where are reference types defined? (1.3) They are mentioned in the definition of class, but never defined.
  • Is the vocabulary word "polymorphism" on the test? If so, get it into the framework.
  • Is "encapsulation" on the test? (yes, 3.3) If so, a good place to put it would be 1.8 with API's.
  • I think all of the "class"-related material should go in its own unit, or unit 3. Its presence in Unit 1 seems kind of a problem.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment