Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Are Written Computer Science Exams a Fair Measure? 728

me! asks: "I seem to have this inability to write substantial chunks of code (500+) in exam conditions (for uni). I have been writing code for years for open source and commercial applications, so I know a thing or two. There is just something about exams and code that does not work for me. I find that I need to be sitting in front of a computer to get a problem out, to get in the 'vibe', have you will. I have done exams on computers (closed environment) that involve coding, and it work so much better for me. So what I am asking is...how do people tackle exams that involve solving problems on the fly, on paper, in exams?" I have this exact same problem, and I've never thought written tests were a fair way to measure someone's knowledge of coding. It's fine when you are asking questions about design and structure, but when you need to write code it falls way short. How do you feel about it?
This discussion has been archived. No new comments can be posted.

Are Written Computer Science Exams a Fair Measure?

Comments Filter:
  • Re:simple (Score:4, Interesting)

    by The Kow ( 184414 ) <{putnamp} {at} {gmail.com}> on Friday June 14, 2002 @07:35PM (#3704768)
    Yeah, that works really well in the current job market. I dare you to try to find a job right now with what you had on your resume when you first got into the industry.
  • Agreed (Score:2, Interesting)

    by the_mystic_on_slack ( 553010 ) on Friday June 14, 2002 @07:35PM (#3704769)
    I cannot say that I have this problem so much, though every time I have taken an exam which forced me to write code, we were allowed to cite a previously written function or whatever. In the cases where a completely new solution is needed though, I agree, the paper thing does not work. I feel much more comfortable on a computer than writing frantically. Giving exams on computers provide significant challenges for honesty though too. My two cents worth.
  • AP Computer Science (Score:2, Interesting)

    by jeeryg_flashaccess ( 456261 ) on Friday June 14, 2002 @07:35PM (#3704772) Homepage Journal
    When I took the AP computer science test in high school we had to code on paper! I'm just like you...I get my vibe when I am in front of the computer coding, not with a pencil and paper.

    My highschool had 2 computer labs that would work perfect for such tests. I'm glad you brought this up, it always irritated me.
  • Hate it! (Score:5, Interesting)

    by Tadrith ( 557354 ) on Friday June 14, 2002 @07:37PM (#3704789) Homepage
    I personally hate it when they require programmers to write code on an exam. Every programmer knows that part of programming is debugging, and it's very difficult for many people to get chunks of code correct the first time. I can see, perhaps, requiring a small snippet of code, but large chunks are difficult to deal with in writing.

    Due to complexity, programs simply cannot be written 100% perfect the first time around. Not only that, programming is very individual and specific to the programmer. Just because one person writes something one way, and the other writes it another way, doesn't mean either of them are wrong or right.

    Written exams should be limited to syntax and concepts, to see how well you know the language. If you want to test a programmer's skills as a programmer, you should at least allow them to excercise their debugging skills...
  • by CodeMonky ( 10675 ) on Friday June 14, 2002 @07:39PM (#3704807) Homepage
    Hopefully the instructor will realize that everyone drops a ; occasioanlly (however forgetting ; altogether is something else), or misspells a variable. I think that as far as written tests go they should be more based on making sure you understand how the concept works and not so much on not forgetting a ;. Questions like are better suited for questions like "What is wrong with these 4 lines of code" imo.

  • stravinsky (Score:2, Interesting)

    by splorf ( 569185 ) on Friday June 14, 2002 @07:39PM (#3704808)
    Stravinsky wrote in his autobiography about his composing habits. As a student, he'd sit in front of his piano picking out melodies, playing them different ways and changing them til he got them the way he wanted, and then he'd write them down. He envied composers like Mozart, who'd compose entirely in their head and then write the composition directly on paper, and he thought maybe he wasn't doing something right. So he asked his composition professor about the problem.

    The professor replied basically "there are two kinds of composers: those who use an instrument when composing and those that don't. You're one of the ones that does. Don't worry about it". Stravinsky stopped worrying and did fine.

    Sounds like it's the same way with programming.

  • by cperciva ( 102828 ) on Friday June 14, 2002 @07:40PM (#3704811) Homepage
    Written exams are fine for computer science; Coding exams are dumb.

    Remember, computer science is about methods and algorithms, not about learning syntax. If you forget a semicolon when you're writing a program, you'll remember about it as soon as you try to compile it; if you code a bubblesort where a quicksort would be more appropriate, you're going to be stuck with a slow program until someone more clued fixes it.
  • Exams (Score:3, Interesting)

    by lrichardson ( 220639 ) on Friday June 14, 2002 @07:42PM (#3704836) Homepage
    The exam SHOULD be testing your grasp of concepts, not the ability to write large programs on papaer.

    That said, I remember one of my worst exams ... Pascal. Got the paper back with a mark around 30% ... which, after talking to the Prof, jumped to a 90 ... since the damn markers didn't actually know what routines were on the system, and my code used them extensively.

    Like an english paper, marks should be given primarily for content, with spelling (and grammar) subtracting from that slightly.

    The best advice is to do a question in three steps:

    1/Shetch out the flow of what you want to do.

    2/ Write the code, and

    3/ At the end of the exam (assuming you have the time), go back over each answer checking the spelling

  • by jcoy42 ( 412359 ) on Friday June 14, 2002 @07:44PM (#3704856) Homepage Journal
    They would look at the code as more of a structured psuedo-code, rather than something they thought would compile.

    I had a fortran instructor sort-of like that. But then his code wouldn't compile. The final was a 2 page listing and the question "Tell me what this code does". I told him it would error durring compile at line 30.

    He gave me an A for that. It would have been much easier if I could have used a compiler to find the result though..
  • Re:simple (Score:1, Interesting)

    by Anonymous Coward on Friday June 14, 2002 @07:47PM (#3704891)
    i agree with you.. but what really ticked me off about college.. were the core requirements.. i mean.. please.. i hated sociology.. it was a waste of my time and a waste of a seat in that class.. someone else should've taken it.. but i was stuck unfortunately.. that was my last semester.. then i dropped out.. one professor in particular (my intro to cs professor) was a really cool guy actually.. we still keep in touch, sort of.. but in any case.. the environments great.. the core requirements suck..
  • by Anonymous Coward on Friday June 14, 2002 @07:56PM (#3704953)
    I had a teacher for AP computer science who felt that because most of the class answered essays better he would go back on his word about being straight out code for the final, and decided that we would write programs on paper with no references allowed, who he then had students of his who didn't take computer science copy off of the paper to the computer and then he would compile them. Because no one compleated the task, including me, except for one person, and because he decided to curve the grades in a fassion that made no sense to anyone, I lost my various computer oriented scholarships because of my low grade on my final. Being in that little group of people who are basically too poor to afford college, and not poor enough to be able to get aid, and because my fathers employeer finally worked out a contract with the union and my father got several thousand dollars in back pay which was heavily taxed and most definaly made me not in a "Need" situation. I did not go to college. yea, there are alot of contributing factors, but the main one was that one teacher thinks that code on paper is just as good and efficiant and everything as acctually putting it into the computer, I work for my former school district as the interdistrict mail man. Untill I can get enough money together to attend the cheapest local collge. I thought about suicide after all of this went down, to think that the level this went to was acctual that drastic.
  • Back in my day.... (Score:2, Interesting)

    by newerbob ( 577746 ) on Friday June 14, 2002 @07:58PM (#3704965) Homepage
    I've been writing code nearly every day professionally for the past 25 years, and have a graduate degree in Computer Science and an undergrad degree in math. I've also taught computer science, on and off, for a local community college evening program.

    Back in my day, we programmed on punch cards. If you didn't get it right the first time, you had to re-submit your deck. They only ran the compiler twice a day--once in the morning and once in the afternoon, so you had two chances/day to get your program correct.

    You don't debug with a compiler, not in the days of punchcards, and not now. You debug by looking at your code and finding the bugs.

    I think a written test is fair--what's the alternative. But most rigorous "Computer Science" programs don't spoon-feed programming language courses to students. Classes are on more abstract subjects. You are (or should be) expected to learn the syntax of a particular language on your own.

    I hand people a white board marker and expect them to write code on the white board during job interviews. This really separates the men from the boys. You'd be surprised how many complete frauds are out there with "C++ expert" on their resumes! I have to reject outright about 80% of the people whose resumes have passed muster by our HR dep't. If I didn't give that written test, I may have made a bad mistake and hired an incompotent programmer who can talk and wear a suit well.

  • Written Exams (Score:2, Interesting)

    by edthemonkey ( 136946 ) <dave@nosPAM.eightface.com> on Friday June 14, 2002 @08:10PM (#3705066) Homepage
    All the exams I've taken at the University level have been written. I found that beyond some of the initial pop quizzes where they're teaching you a language, it becomes more concept oriented. My final exam for a data structures course allowed us to use Java (or C++, etc), pseudo-code or witten english, as long as got your algorithm concept accross.

    On the other hand, for my functional programming course (Haskell and Prolog, especially the Haskell) if you had things slightly off, it could totally change the way the program works.

    I find the professors also tend to come up with creative weighting for the courses. Between exams, tests and assignments, I have a lot of leeway with my marks. I can fail (or skip) two midterms and make my final exam worth 90 instead of 50 and so on. If you do better on the exam, it can be weighted higher.

    I think the main reason they use the written exams for the highest percentage of the mark is the ability to control cheating. It's much easier to cheat electonically. At some point, computer science departments will gain faith in their security systems and ability to prevent cheating.
  • Get over it! (Score:2, Interesting)

    by SoupaFly ( 558227 ) on Friday June 14, 2002 @08:11PM (#3705071)
    What did real programmers do before interactivity? They sat down, figured out their program step by step, checked and rechecked for possible errors and then used the punch card machine to write it out and ran it. If it failed, they had to wait a day before they could get their program through the batch again.

    Having to hand write code is probably a better way to test one's knowledge than having them use a computer for it. The reason being that you're in a different frame of mind. It's all part of being able to visualize things in different ways.

    The way I did it was to think through the logical functions the programs had to perform (sometimes writing out a psuedo code version) and then converted it into actual code a section at a time.

    College isn't always fun, but I found that I learned the most from the things I least wanted to do.
  • by ginsu ( 37651 ) <slashdot@serialized.net> on Friday June 14, 2002 @08:24PM (#3705145) Homepage
    Really, it is very very rare that a professor or grader could care less if you have correct syntax or even correct function names. As anyone who's tried writing code in a editor which doesn't balance parentheses (after being used to one which does) knows, today's editors (vim/emacs/IDEs) make it easy to lose simple syntax skills. That's not what they are testing you for.

    What you are being tested on is your ability to pull, from your own head Algorithms, Data Structures skills, etc. (Can you sort without cutting and pasting code from somewhere else? Can you create a good linked list in 10 minutes on paper?) You are also being tested on your ability to do a design (in this case, a VERY SIMPLE design most likely) and execute it. If you, as the poster mentioned, feel the need to erase "large blocks" of code, you probably didn't think the program out well enough ahead of time.

    Can you create new ideas/code? Or are you a 'clay pusher' -- one who can make any 1 block of code do any other thing, but has a hard time creating it from scratch.

    As previously mentioned, these skills are, more importantly than on exams, used during job interviews. I've yet to have an interview where I didn't at least write some code. And you think it's hard to do it in a lecture hall where you have 2 hours to finish the whole test? Try doing it in an interview with the interviewer sitting across the table from you watching you think, and you have a 5 minute time limit :)

    There are a few tactics which make this a lot less painful.
    (1) Whip out a design before you start writing code. This could be anything from a flowchart to a picture of the memory buffer you'll be modifying.

    (2) Remember the old 'Basic' trick of line numbering? (Start by numbering things 10, 20, 30, 40 ... -- then if you have to edit code later, instead of re-entering the whole program just add a 'line 11, 12 and 13.') Apply that to paper. Space things reasonably widely, write small. You can also write blocks of code and 'insert it' into the correct place with arrows. As long as its readable, graders usually could care less.

    (3) When you write your own code, try to practice coding it without refering to any other code. Pull what you can out of your own head without referring to that marvelous brain-extension, the internet (Hard discipline to keep if typing 'google.com' is as natural for you as it is for me!) or referring back to already-written code.

    My biggest problem with handwritten tests is irrespective of having to write code or not . . . after all these years on a keyboard, my handwriting SUCKS. :)
  • by scode ( 22551 ) on Friday June 14, 2002 @08:30PM (#3705181) Homepage
    Of course they have - a pretty good idea. You don't write the entire program line-by-line mentally first (at least, I've never heard of anyone doing that).

    Part of programming is creating abstractions and factoring code. You don't keep the source code and state of the entire program in your head at one time. You deal with the relevant parts. For example, suppose I were to write a method that answers the absolute age difference between two people.

    First, I'd worry about the method at hand:

    absoluteAgeDifference: aPerson
    ^self (ageDifference: aPerson) abs.

    This implementation is completely independent of the implementation of Person>>ageDifference. After writing that method, I would implement #ageDifference - unless it already existed:

    ageDifference: aPerson
    ^self age - aPerson age.

    This is my normal way of doing things. If I had to do this on paper, I would have to think through dependency methods first in order to calculate what will fit where.

    But to get back to the issue of braces. Suppose I needed to write code that answers the most wealthy relative of a person. First, I'd probably write:

    mostWealhtyRealtive
    "Answers the most wealthy relative of the receiver, or nil if the receiver has no relatives."

    self hasRelatives ifTrue: [
    ] else: [
    ^nil.
    ].

    After having written this, I would fill in the code block. The implementation may be extremely simple, or mit may be relatively complex, depending on the methods already available to me and to which extent I want to factor the implementation for usability (i.e. divide into more methods).

    It may sound simple; but when doing this on paper, the whole process of writing code just becomes different. Suddently you need to concentrate on pety details of syntax instead of the problem. It wastes time, and is annoying.

    All IMHO of course...
  • Definitely not fair! (Score:3, Interesting)

    by BlindSpot ( 512363 ) on Friday June 14, 2002 @08:33PM (#3705197)
    Yes! I'm glad somebody finally brought this up.

    Paper is just plainly the wrong medium for CS exams that involve programming. That became plainly obvious in my first CS exam and only got worse.

    CS students should be tested on computers in at least a simulated development environment. (Controls would of course be needed to prevent cheating). Reference manuals should also be allowed as using them is a vital part of being a programmer. Forcing students to remember the parameters to fopen() or whatever is just pathetic.

    If athletes were tested like computer programmers, the teams would be made up of those who could write the best description of how to play the sport, not of those who could actually play it the best. The worst part is that the intersection of those two groups is probably not very large, especially in CS, so I think some truly good programmers are being punished.

    In first year CS our prof once asked us how to make the course better and I suggested the exams be held on computer. She was actually quite receptive to the idea, but as we both knew it was impractical. Computers cost $$$ and take up extra space, and testing 400 or more students on computers is just too ugly.

    However, we are getting to the point where it's starting to become a lot more feasible, so I dearly hope educational institutions will start to upgrade their evaluation methods.

    In the meantime, I hope instructors treat handwritten code more like a sketch than a masterpiece. We were lucky that the profs here didn't worry too much about syntax in handwritten code and instead looked for understanding of what we were doing. If we were a bit off on the syntax that was okay as long as we had the concepts down well. But we still did have to memorize a lot of stuff that was quite unnecessary and that's just Wrong.
  • by Kashif Shaikh ( 575991 ) on Friday June 14, 2002 @08:56PM (#3705289)
    I've already finished my CS degree and one thing I like is writing code on an exam makes me happy. I mean of all the other exams I have to write with various degrees of memorization, writing code is *thinking*. So it means for me, less memorization bullshit.

    Also another thing I would like to say: many would like online exams almost exclusively. But they are missing one crucial point: TAs and Profs mark such tests in "black & white", meaning if it compiles and passes the test cases you get most of your marks.

    But if your program doesn't even compile, your mark starts at 0. And depending on the mercy of the marker, they *may* go back and look at your code and give you a mark here and there.

    In such tense situations, I've seen people literally cry 'cause a) the program was too hard and b) they can't get it to compile. Where you literally get in a hack-peck/compile frenzy to get your program to spit out some correct output before the test is over.

    In such tests we usually have 9 questions and gotta do about 6 of them. And the worst thing: they issue such online tests during the first year, where many are having their first crack at programming. Thank god, I was able to do the questions, but alas some individuals who struggled couldn't.

    At least if the test was written you could get the core logic of the program done and you'll get most of the marks anyway.

    But, I did enjoy online tests they were fun. The positive of such tests: if it compiles and spits out the correct output you've got 90% of your mark if not 100%.

    Oh boy....talked too much...

  • Re:simple (Score:1, Interesting)

    by Anonymous Coward on Friday June 14, 2002 @09:47PM (#3705550)
    If you go into some king of engineering, the core requirements will tend to be less annoying and more technical. They will make you learn calculus and stuff, but at least they don't usually require foreign language courses in High School as prerequisites to get a degree, unlike many liberal arts & sciences degrees.
  • by CaseyB ( 1105 ) on Friday June 14, 2002 @10:25PM (#3705692)
    The problem and the object model created to define it will provide the solution. That's the ONLY way to code it.

    You think that programming is a completely deterministic process? That there is only one way to model a given problem? You're the moron.

    Write code so the machine will NEVER do ANYTHING it doesn't need to.

    That means NEVER EVER use ANYTHING but hand written assembly language, that uses every shortcut in the book. It is assumed that maintainability has ZERO priority.

    Cache every execution result that you will need again. RAM is cheap.

    It is assumed that you have an infinite amount of RAM. Google should optimize by storing both the page cache and the HTML output of every single query ever executed in RAM, in case the exact query is repeated twice.

    But RAM is not so cheap that you need to waste money and time filling it unnecessarily. Only cache what you absolutely need again.

    Wait, what I just said, do the exact opposite.

    I loathe moron who keep saying that software development is an individual's preference.

    It's not all individual preference. But your attitude that there is only one way to solve any given problem, and that optimization is always the only priority, is equal bullshit. And your posturing and ranting bespeaks a religious zeal that kills development teams in their tracks. You'd be off any team of mine in a matter of days.

  • This is Bullshit (Score:2, Interesting)

    by The Living Fractal ( 162153 ) <banantarrNO@SPAMhotmail.com> on Friday June 14, 2002 @10:39PM (#3705755) Homepage
    An exam is an exam, everyone takes the same fucking one, or something which is basically the same, which teachers do to deter cheating -- you, however, are whining. Just like I whined about Trig in High School, yet everyone had to do the same exact thing, so I was an idiot.

    But at least I learned, and moved on. I mean come on man, you're just grabbing for sentiment. Go take the fucking test, you either know how to write code, on a napkin, on paper, in a computer, on your girlfriends back as you rail her from behind, or your boyfriends, from the looks of it, but it doesn't fucking matter any way you look at it: it's you who writes it.

    This test is a measurement of nothing more than your ability to take this test. Why do people think it was ever anything more?

    Want some cheese or what?
  • It's fair. (Score:2, Interesting)

    by Anonymous Coward on Friday June 14, 2002 @11:10PM (#3705870)
    Maybe you're missing the fact that there are those of us who can handle such tests. I'm sorry if this is out of your grasp but keep on trying and maybe one day you will be able to do the same thing. I've tutored plenty of students in many programming languages and there really is just a few who understand things well enough to do exams on paper. They also turn out to be awesome programmers in the end. If you can't handle writing code on paper then stop filling up an industry that used to be populated by intellectuals. Stop causing the standards to be lowered in the universities. Anybody who has been within the academia environment for the past 20 years knows what I'm talking about. The students have gotten dumber, probably because the job pay has gone up.
  • by jellomizer ( 103300 ) on Friday June 14, 2002 @11:13PM (#3705888)
    Is there any type of CS Testing that is fair. Me personally will do better on the coding questions then on True False statements because I personally over read the answer and I miss enterprit the queston and put the wrong answer. But the trick for coding questions is to read the question. Make Psuto Code then convert it to the language that the class is teaching with. The problem I find with a lot of CS Students they enter the degree with the mind set that sience they can program and make advanced programs they assume that they are good at it. While they may be able to make it work it may not be the best algorithem. I get this from the parent post because 500+ lines for a test is way to much. I would think it may be 60 lines or so. And you havent studied the algorithm that they wanted to teach you.
  • by gers0667 ( 459800 ) on Friday June 14, 2002 @11:14PM (#3705894) Homepage
    I'm a CS student at Kettering, and I've never had something more than a 5 page exam. We have labs where we are graded on technique, and then tests based on theory. Example... I had to write parser code in Java, but for the exam, I had to draw the Parse Tree, no code at all.
  • by Equinox ( 26682 ) on Friday June 14, 2002 @11:26PM (#3705979)
    There is one thing my AP CS teacher in High School did that I like. After we all bitched and moaned about handwriting code, he would, from then on, disconnect all machines in the room from the network, image them, then let us go. Here's the caveat: the compiler would only run 5 times, print the code, then delete itself. It didn't matter how long it took us (one guy took three days to complete the test,) but you only got 5 compiles. Incidently, under that pressure, I usually only needed 2 or 3. :)
  • by eples ( 239989 ) on Friday June 14, 2002 @11:30PM (#3705999)

    The best professor I ever had could do everything in his head, hundreds of lines of code. He knew exactly how the compiler would react to anything.

    He didn't just teach us the syntax and the languages, he taught us how to do *that*, and *that*, to me, is a f-ing awesome skill.
    Dr. Caviness. We used to joke about him being the "human compiler". He ruled.

  • by geisler ( 240432 ) on Saturday June 15, 2002 @12:42AM (#3706267) Homepage
    I'm shocked to see how many people are complaining about this issue. To me, the real test of your coding skills should be done with homework assignments and projects. They show that you understand the problem and how to solve it using the paradigm given.

    As others have said, the role of exams is to test the CS concepts being taught: algorithms, methodologies and problem solving skills. It's important to be able to demonstrate you know what a linked list is and when it should be used instead of an array, but that doesn't require a significant amount of coding in the test.
  • Re:Learn this skill (Score:3, Interesting)

    by e40 ( 448424 ) on Saturday June 15, 2002 @03:24PM (#3708517) Journal
    I've worked for almost 20 years under tight deadlines. Stress is the enemy of getting a good job done, not the friend. The smart programmer will learn how to work in a fast paced environment while not being stressed.

    If you have, in fact, experienced this type of environment and lived with the stress, I feel sorry for you. You've missed the entire point.

The use of money is all the advantage there is to having money. -- B. Franklin

Working...