• About
  • Projects & Research
  • Publications
  • Archives
  • Categories
  • Archive for the ‘Class’ Category

    JUnit


    2010 - 02.03

    JUnit is a unit testing framework developed for Java programs. It’s not my favorite thing in the world. For starters, it only tests public methods. Which is a bit of a problem if from a development standpoint; many internal “heavy lifting” methods are not needed by outside classes and should be private. In addition, I cannot use Eclipse, my IDE, to debug as I do with other code.

    For my software engineering course, I am creating a very simple Roman to Arabic numeral converter. (If anyone knows what the unicode character for Roman numeral 5000, a V with a line over it, I would appreciate it for accuracy.) It isn’t the converter program that is important. The purpose is to demonstrate black box testing methodologies: testing without knowledge of the internals of a program.

    I developed a test plan and wrote the test cases in JUnit, as instructed, before proceeding on to writing the actual converter. I then ran my tests. A couple failed and a hand full had an error. I rewrote the code; the class is small enough to justify it, rather than worry about where my sometimes failing  bug was.

    Yet, I still had the same problems. So, I copied the short bits of code into a main() function to use the debugger. The debugger revealed no faults: my system produced the correct output. JUnit had produced a false negative. I didn’t know it could even do that. It did not occur across similar tests with identical assert statements, so I’m not sure what it could be.

    Spring Work


    2010 - 01.26

    So, this semester I’m going to have quite a workload. All my courses have a high reading amount. Two require homework and/or a programming assignment each week.

    In addition, I will be grading the first programming course, tutoring a foreign visually impaired student, and doing side research for the Director of Mentoring & Retention. I’m not even sure my workstudy is for this semester, but I’m guessing the Director wants to spend every dime (thereby making sure I get the full employment pay).

    In most semesters, I have done side projects which dabble into my interest. Yet, I’m not sure I will have the time this time. So, I have decided that I will continue watching how this semester goes and then decide whether I have the time.

    If it does work out, I think I would like to do some cell phone programming (probably Android, but maybe the iPhone‘s Objective C). I don’t know what I would want to program though. I would like to involve hardware, like the GPS or accelerometer. I think the best tools are tangible or ubiquitous.

    Compilers, Networks, and Software Engineering


    2010 - 01.21

    I have taken two embedded systems courses, and am now in compilers and networking. Despite having my passion in human-computer interactions (HCI), I have taken predominately systems courses for my capstone work (the exception being A.I.). I suppose that’s because I also like ubiquitous computing, the movement towards embedding technology into the world until it becomes invisible.

    Compilers seems useful, but we’re still reviewing context-free grammars, parse trees, etc. from the computing basics. We will be making a compiler for MiniJava. This basically takes a subset of the Java language and produces MIPS, an assembly language.

    Compilers are very involved productions. One needs to know what kind of hardware it is compiled on, what the specification is for the language, etc. I’m not taking it to spit out compilers (there’s compiler compilers for that). It’s better for enforcing appropriate testing and debugging. (I admit to doing a ludicrous all/several test cases after writing my programs. The appropriate method is to do unit/module testing throughout creation.)

    Networking focuses on how the Internet works: how data gets from one machine to another and protocols for different types of data. I’m taking it more for interest in mobile devices. I don’t know if I’ll get a full answer to these, but it is best to know why I’m doing something:

    • How do cellphones, laptops, etc. protect data when it is on a wireless network? (Someone else can grab the bits I send from out of the air.)
    • What types of machines make up the Internet? What is the ratio between embedded systems and standard computers?
    • With the imminent death of the Internet, what comes next? (We’re running out of IPv4 addresses, and IPv6 adoption has been quite unsuccessful. The only viable solution if this trend continues is the creation of “gated communities.”)

    And then there is software engineering. Many students, including myself, put off this course until their last semester. This is because of reports of how not useful the course is and that it is taught backwards from the actual process (testing is done first, while design and specification is taught last).

    My first assignment is read either a 30 or 50 page paper on software disasters  and report on it in 2-3 single spaced paper. More distressing is that the course is packed with students; this is not helping my anxiety.

    All three courses involve group work. So, that’s a definite shift from my previous coursework and I don’t know what to expect.

    … As an aside, for anyone that does a Powerpoint presentation, please don’t use a white background. It visibly color shifts and flashes on a projector. (It’s bad enough for my migraines to be around florescent lights; I don’t need the screen I’m reading to blink, too.)

    Presentation


    2009 - 12.03

    Today, I’m to present my embedded system project. Because of energy drain on the battery, I was unable to integrate a camera into it for gesture detection. (This also means I have until Tuesday to do an entire A.I. project from scratch and write another presentation.

    I don’t do well with presentations. And for those that are curious, I have never been allowed an alternative means of earning my grade.

    “Tough it out.”

    “You’ll get better with practice.”

    “It’s only [N] minutes! It’ll be over fast.”

    “You’re smart. Why can’t you do this?”

    I spend the time before presentations thinking about all the things that I could do wrong. I will sometimes get sentences backwards: “The ball threw the boy” and the like.

    Being the center of attention feels like being  on trial to me. It doesn’t matter all the correct, informative, and useful things I may say. One error proves that I’m not as good as I had seem. That I’m faking my knowledge. I’m more judge-mental of myself than others. I know this, but I don’t feel that it’s really true.

    … I don’t like powerpoint slides. Yet, it’s expected that I use them anymore. I’m calmer and speak more clearly when ad-libbing. The absence of slides has become indicative of being unprepared to many people, so I’m forced to use them.

    The more I think about presenting, the more anxious I’m getting. And the anxiety will make me screw up. It’s a vicious cycle.

    On more than one occasion, I have been in tears when presenting. These result in a lower grade for me, independent of doing more research than my peers. Being able to explain to others orally has become more important than the quality of the work. I must not know what I’m talking about if I have difficulty explaining it in a neurotypical fashion.

    I associate textures, animals, and a few adjectives rather than pictures to most of the things I think about. If I’m asked to describe what a person looks like, I’m more likely to refer to an animal than recall what color their hair is.

    If I don’t think the same, I fail to see why I am forced to explain in their terms rather than my own.

    I’m getting angry on purpose again. It’s very easy to dismiss anxious feelings when one gets angry. Becoming angry is easy when one realizes one’s suffering isn’t fair or acknowledged.

    Setting Bars


    2009 - 11.03

    [What follows is pretty free form, so sorry if it's hard to follow.]

    Yesterday, I went to a talk on science education in the twenty-first century. The main points from the talk were:

    • Traditional lecture-style teaching results in 10-20% retention of knowledge.
    • Working memory can last for at most 7 distinct topics.
    • Examples, analogies, and images decrease the working memory load.
    • Explain things as cohesive units rather than as disjoint parts.
    • Even if the choice is insignificant, the ability to have a choice increases motivation.
    • Most students leave classrooms with less “expert-like” thinking than when they entered.

    … So, if it isn’t really clear, I research a lot on education in STEM areas. And, the longer I am in college, the more I am convinced that many professors have no idea where the bar should be set on how students should preform. A particular favorite is a professor who explained his curving scheme thusly:

    Of course there will be a curve! I list everyone by their uncurved score and then [moving his hands in a window/gap creating fashion up and down] go ‘hmm there.’ And divide the grades that way [with partitions].

    In all honesty, this seems to be the primary methodology for curving computer science courses, including ones where exams are already curved. And it seems detrimental to students learning. This arbitrary curving indicates that one did better than some percent of students, while giving no evidence of what material was actually learned.

    I am currently grading the second programming course in the curriculum. And I feel like banging my head against a wall while doing so. Students make mistakes on material covered in the prerequisite course. Repeatedly. After I dock points and write a comment on what error occurred.

    The professor for this course disproves of  me grading students harshly. This includes docking points for having unnecessary looping and requiring that all of their variables be more meaningful than ‘x.’

    The professor I am working under is also the professor for one of my courses. My project is notably more difficult than others (many have settled on game A.I. while I’m doing computer vision and machine learning). On more than one occasion, he has indicated that he feels it is too complex for me. I’m not sure if this is cultural or because he feels I can’t succeed or that it shows an example of higher difficulty that others should be able to do.

    From elementary through high school, in gifted education and accelerated learning courses. College is the first setting where I am always in classes that are designed for the middle. College is also, interestingly, the first time that I have tested notably worse than my peers and been told that I can’t do something.

    I find myself questioning why I am compared to everyone rather than judged on my own qualities. I have had professors grade me more harshly for being clever, and I don’t agree to this. But, if I’m choosing to do work at a different level, why should I be discouraged? And, to be fair, I think students working at a lower than mean level have a right to work at that level.

    Professors need to work on showing students why subjects are important and how to learn them. Professors are typically passionate about their subjects, they should share this passion.