For the 212 students who got 100% on PA 2 or the 37 additional students
who got above 90%, you probably don't need to read this long message.
You can simply delete and move on.  For the rest of the class, I think 
it is important.

One of my TAs came to me tonight after reading my response to the
following message from a student.

        Dr Patt,

        Having received my second programming assignment grade via email, I am
        concerned. Both programming assignments have been absolute disasters 
        for me, with simple errors riddling my programs. Should I be worried 
        about this? Its not as though I don't understand the concepts behind 
        the programs, because the programming logic is correct, I just haven't 
        been getting the syntax of the LC3 assembly language correct, or I've 
        been making a simple mistake with my numbers. Is syntax just as 
        important as the concepts behind it? Should I be worried, or should I 
        be content that I understand the concepts and have just made stupid 

He was very upset with me because he felt I was too subtle and gentle 
in my response.  And, he asked me to try again.  But his email message
was so clear that I thought I would just repeat his message here.  

He said:

"An important point to make is that true syntax errors are caught
by the assembler. Therefore, submitting a program that does not assemble
means also absolute zero testing, which is an awful practice. If the
errors are not truly syntactic, but on the use of the instructions, i.e.
wrong conditions for branches, wrong label references, etc... then usually
running just a few test cases on the Simulator would catch them.  From what 
I've seen, many problems come from students rushing at the last minute to 
get something done, which they submit without even a minimum amount of 
testing and without the chance of getting help from a TA, hoping that we 
would look at the code and say: Oh!, this guy was close, lets give him an 85 
even though the code does not assemble... I guess some of their high school 
teachers rewarded their efforts and made excuses for them not getting results. 
Like, "He really knew what he was doing, I should not penalize him for making 
simple mistakes."  So, they expect us to do the same.  Either that or they 
are just being careless about testing...

Some students are using the grading process as their testing and then they
complain that they made just a small mistake and deserve more than 0. We
were benevolent on PA 1 with the regrade. I think we should be less so from
now on.  Many TAs are getting complaints about PA 2 also... I've heard of a 
couple of cases where the student hacked some bits in the machine code in 
the simulator to make it work and then submitted the unhacked source code, 
which obviously does not work... Or they submitted the wrong file, which 
happened to have some extra character that screws up the program... Or they 
relied on some memory values that they initialized manually with "Set value" 
on the simulator and obviously we cannot guess without fully understanding 
their code...  BTW, the submission system allows them to see the content of 
the submitted file at any time before we close the script, so they can check 
exactly what they have."

It would be very hard for me to improve on what my TA has written.  ...and
this email is getting very long.  However, since it is important to me to
try to help everyone do the best he/she can in this class, I will make a
few more observations.  

First, in "harsher" words, my reaction to the following which I cut and 
pasted from the student's message: 

        Its not as though I don't understand the concepts behind
        the programs, because the programming logic is correct, I just haven't
        been getting the syntax of the LC3 assembly language correct, or 
        I've been making a simple mistake with my numbers. 

The Assembler catches ALL syntax errors.  So, if there is a simple syntax error,
the assembler will catch it, and will not assemble the program.  So, either 
the student did not try to assemble the program before submitting it, or he 
did not know how to fix the "simple errors riddling (his) program."  Should 
he get a zero for not trying to assemble the program or should he get a zero 
for not knowing how to fix the simple errors?  ...even though he says he
completely understands the concepts.  

The Simulator will catch all logic errors if he TESTS the program with enough
sample data.  Should the student get a zero because he turned in the program 
without fully testing it, or should he get a zero because even though he really 
understands the concepts, he could not figure out the simple numbers or logic 
he got wrong?

Finally, the last comment from my TA is very bothersome.  The purpose of 
the programming assignments is not to see if the student can hack the 
program he writes to make it look like it works.  Almost always, that 
technique will fail on our test cases.  Our objective is to get you to
understand, not to challenge you to work around your lack of understanding
and somehow magically get it to work on some piece of sample data.  If you 
do not understand, please see one of the TAs or me.  If you really do 
understand the concepts, demonstrate that by assembling and then testing 
your program before turning it in.  I assume that is what the 212 students 
who got 100% on PA 2 did.  And I would very much like to add you to that 
list on PA 3.

Good luck successfully completing EE 306.

Yale Patt