Are Written Computer Science Exams a Fair Measure?
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?
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.
Moo
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.
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.
Life is like pants... fit in or you don't fit in.
..I too used to suffer this - we used have to write chunks of code, and it was frankly painful. I found the best thing to do was use copious amounts of scrap paper, and develop the code like you normally would on a workstation...
ie, get your structure down, then start to flesh it out, a page for each method etc. That way you can 'grow' your code a syou normally would, and don't feel pressured to write it all top-bottom-with-no-mistakes.
Is the reason you don't do well on the tests because your hand gets tired writing so much code or because you don't know if you are doing things right because you can't compile and see where your errors are. For me it is easier to think of my code as communicating with other programmers my ideas. Writing in this style is easier on paper.
It really depends on how it's graded. I had some Prof's that would grade based more on the understanding of the problem. They would look at the code as more of a structured psuedo-code, rather than something they thought would compile.
I've also had profs that would take a point off for each syntax error...
I have no resect for any exam that involves writing actual code on paper. Asking about fundamental principles is fine; asking for pieces of code or specific API details is IMO rediculous.
Granted, you can never design a perfect test. But you can at least do away with the totally obvious imperfections like asking people to do things in ways they never do and never will do in the future (except on other tests).
The few times I was subjected to these tests, I sure felt primitive erasing entire chunks of code after having realized I needed to insert something in the beginning. And it's a hard thing to avoid; I don't think any reasonably experienced programmer writes code entirely from top to bottom. Just a simple thing as placing braces becomes a hurdle in writing unless you know the length of the code you need to put between them!
/ Peter Schuller
--
peter.schuller@infidyne.com
http://www.scode.org
Does doing things in a not-so-rigid manner help? I think so.
Students can focus on the problem, and not writing the syntax, complete with all the () {} etc.
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...
.. but you should know the language you are using well enough to be able to simulate what's going to happen in your head. Yes, it takes a lot longer, and you have to double and triple-check things, but it's a good skill to have.
"Avast! Prepare for the rodgering!" THWACK! "Arrr.. me nards.."
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.
--"Karma is justice without the satisfaction"
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.
This was my least favorite thing about CS at school...
I am much better at solving a programming problem in front of a computer.
Also, they are nothing like real world conditions... Do you know any programmers without reference books on their desks? That have the whole Java API memorized?
RateVegas.com - Vegas Reviews
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.
Tarsnap: Online backups for the truly paranoid
I find that the CS tests that I have encountered don't require me to write a large portion of code, just snippets and tiny routines. Usually, a test problem leads us down a long list of sub-problems that, at the end, proves to the professors that you can indeed reason about programming, even though you haven't written a large portion of code.
:)
Testing the ability to write large chunks of code is not reasonable on a written exam, and then, usually your grade is determined by your handwriting speed and neatness
... because you don't have a compiler to tell you when you make mistakes.
This is why it's an outstanding way to test people's knowledge. Anyone can make a program work given a compiler and sufficient time. If you can do it with just pen and paper, and remember the syntax without having other code in front of you, then you know your shit.
This is why it's a great test for interviews. You'd be amazed how many "senior C developers" we interviewed at my last company who couldn't write push() and pop() for a linked list.
I also had a similar problem. When I code, I keep reference materials and the web close at hand. Whenever I have a question about syntax, style, examples, whatever I quickly look it up. In a test environment you're expected to have everything memorized and at your instant recall for obscure things. I always hated that I was being judged outside of my normal working environment when I had to code on paper.
Travis
If you can't think through a solution before committing it to code then you clearly don't know your stuff as well as you should.
A written, computerless computer exam is like having somebody prove they're a chef by watching what they do in the bathroom. Even if you can meet some definition of success, it don't mean diddly.
b&
All but God can prove this sentence true.
This is a skill that you need to learn. When you go out on a job interview, you will most likely be given a marker and white board and told to code something. If you're going to freeze up without a monitor and keyboard in front of you, the employer will be very hesitant.
It seems that you've associated syntax and semantics with the visual cues of a computer. That's not the same part of the brain that answers exams. So you need to retrain yourself. Here are some things you can do to relearn programming:
A) Stop using IDEs. Use the plainest text editor that you can find to write your code. Turn off any syntax highlighting and code completion.
B) Design your code before you write it. Use UML, flowcharts or whatever, but design it first. Then when it comes time to code you will know where you are going.
C) Write code away from a computer. Use a pencil and paper. I didn't have a computer when I was in college (very few people did). So I coded by hand on paper, then went to the lab to type it in.
A Government Is a Body of People, Usually Notably Ungoverned
...at least not for me. I can code on paper, but I really don't like to. At least, I can code if what I'm supposed to be coding is short.
The deal is that I just don't code from line one to line 5000 sequentially. I define the overall structure and then fill things in - and that's at every level (class, method, loop, conditional).
When I was making exams for an assembly language class I taught once upon a time, I opted out of having them write much code. (A few lines is fine, I think.) If there was any serious amount of code involved, I was asking them to trace through it and give me the result, or I was giving it to them and asking them to incorporate something short in it, or the other way around. That's a better use for the static medium (paper), IMNSHO.
I got my Linux laptop at System76.
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
But, there are more than one way to test, sample code can be provided and you correct it or determine the potential problems. Or, give the results after execution.
It is important for the grader to keep in mind that it is on paper and that in the real world you are using a compiler that will warn you about some errors.
Fight Spammers!
It ought to be a fundamental theorem of programming that the program isn't done until it's tested.
This includes all subsets of the program. File, class, function, line, expression, term, token, character, syntax, etc., etc.
Your version of this process, like mine, includes getting the tested code to assist our understanding.
--Blair
A written test like this requires a more systematic approach than just coding with an editor (which is essentially design by coding). A written test has a purpose in the sense that it measures your ability to systematically plan how to solve a problem, design the code and then write it.
I don't think it is entirely a fair test of innate talent, though. The most gifted programmers I know can keep it all in their heads and keep enhancing the code incrementally as they go along. This results in a *much* faster development time and often the code is as good or better as a solution developed using a stricter process.
As all tests, these are also designed for the average programmer, not the brilliant one.
"I have opinions of my own, strong opinions, but I don't always agree with them." -- George H. W. Bush
DeVry gets a bad wrap around here so I hesitate to mention this.
But to their credit- the program I was involved in their did not have us coding on paper. We had lap tops that we bought as part of our tuition. They provided us w/the full software for whatever we would be working on- or we would go get it (legally - JBuilder for instance).
Exams consisted of sitting at that laptop and cranking out code. Nothing that huge- you would save it on a floppy and hand it in when you finished.
Could someone cheat? Sure. We weren't allowed to hook up to the network and the teacher was there but that was about all that was 'enforced'.
But on the other hand I don't code w/out books, the internet and colleagues now that I do it professionally.
Anyways- I just thought I'd mention it as it seems that if a school is equipped to properly teach you to code then they are properly equip to test you on computers vice paper.
.
It's hard to believe that's how Micronians are made. Why don't we see it right now by having you both kiss one another?
Here's why: name the last time some one came up to you and asked "Tell me the quadratic formula and use it to solve this quadratic equation. You've got 1 minute... GO!" Honestly, this example is absurd, but some tests come down to that. What you can write down in a mad dash is not the same as if you're working on a problem in a "real world" setting.
Tests in general are after regurgitation and quick thinking, not knowledge of a subject. CS tests, on the other hand, seem to always be about analyzing a problem and coming up with a successful algorithm. In my opinion, CS tests are by far the BEST of all tests given. Any computer can store data, but it takes a thoughtful human to come up with an efficient algorithm to use that data.
I honestly like CS tests that emphasize breaking down a problem into small steps and coming up with solutions in english (or portuguese, whatever). Then, another portion of the test would be implementing small portions of that solution algorithm.
Ah well, I'm almost done with school anyway, what do I care.
F-bacher
James Tiberius Kirk: "Spock, the women on your planet are logical. No other planet in the galaxy can make that claim."
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..
Never trust an atom. They make up everything.
The greatest thing about college for me was NOT the CS, Engineering, and math courses that eventually got me the job I now enjoy...
It was the total mind-opening academic scene that surrounded me 24/7 for 5 years, the chance to really go out and party my brains out to relieve the stress, the hour long conversations with professors who are true geinuses in every sence of the word.
You might get paid a lot of money, but if you see college as simply a means to that end, I strongly suggest you take a year off and attend full time. Because you certainly do not get the point.
And, through so many experiences, I learned that your final career and salary doesn't define you, your worth, or how much you can get out of life.
but congrats on your job, though. Pretty sweet deal.
I have run into this same problem in job interviews. Usually it comes down to the fact that, on the job, I have resources at my command; books, web sites, code examples, etc. So, rather than memorizing every API (or even every keyword), I become very facile in knowing where to look up what I want very quickly.
But when I am asked questions about the same thing away from a computer and my books I start drawing blanks even about things I know in detail. This is why, IMHO, computer programming exams and even job interviews should be 'Open Book'. Memorizing details doesn't make you a good programmer -- knowing how to use the tools does.
Jack William Bell
- -
Are you an SF Fan? Are you a Tru-Fan?
For the most part, I agree with you. I've had professors who ask me to write out my code on a page, and the environment just doesn't feel right.
I've had no problems "debugging" code on paper, designing a program on paper, plus your typical bogus multiple choice questions ("What's the difference between 'cout' and 'printf'", etc.). But when it comes to coding, my brain operates differently writing code pencil / paper style. You could probably equate it to baseball hitters who commonly have higher batting averages at their home field than on the road. When a job is done in the same kind of environment for so long, we become accustomed to that environment.
I'd be perfectly happy if the profs let us only use notepad to write out code if they're afraid that a program such as Borland / Visual C++ would give us too much leverage.
When you're on the job, you WILL have those kinds of time pressures. One of the things the interviewer wants to know is how well you can cope with it.
It's Friday at 5:00 and you're leaving on a weekend trip at 7:00. The software is handed off to SQA on monday. There's one more bug in the queue and it belongs to you. Question: A) Do you bail on your trip? B) Do you sneak out the back door? C) Do you go fix that bug in 57 minutes?
A Government Is a Body of People, Usually Notably Ungoverned
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.
--
Ask the Ya-Hoot Oracle Anything!
There is a difference between the SCIENCE of software and computing and writing programs. Kinda like the difference between Mechanical Engineering and being able to fix a car. Please don't confuse the two.
As far as the subject at hand is concerned, asking someone to write code without a convenient editor (like emacs) and a debugging environment is just plain stupid. You wouldn't write code in real life without those tools - why would you want to even test someones ability to do something with artificial constraints that will never be met in any realistic scenario?
I have a Bachelors and a Masters degree in Computer Science and I cannot remember a time when I had to write code in a written exam that was not pseudo. Consider taking a different class if that is not ok with your professor.
Mmmm.. Donuts
The explanation for this is a psychological principle called state-dependent memory. People are better at remembering (doing, etc.) things when their minds are in a state similar to the state they learned them in. Since you are used to writing code on a computer, coding on paper doesn't work because you can't get your mind in hack-mode. What I do is I drink huge amounts of beer while programming and do the same thing before I take a test. That adds enough similarity to the situations that the results are similar.
---
Never test for an error condition you don't know how to handle.
-- Steinbach
Please correct me if I got my facts wrong.
Would you have a written test for cooking? Art? Programming is similar in many ways.
Perhaps the grade should be assigned solely on projects.
And yes, some people could cheat, so what? They could get other people to draw for them in art class too.
Most professors find the whole testing process to be a pain and a waste of time. The whole paradigm is about 3000 years old. Maybe it's time to change. Universities should be in the business of educating people.
CS exams are a fair measure, but I never liked sections where I had to write more than 10 or so lines of code. Though it was rare to see, I did see it once in a while.
Some profs. are sadistic and like to do that sort of thing, but often they will still ignore small errors (such as syntax) as long as the "big picture" of what you do works as a feasable solution to the problem. Or at least that is the way it goes most of the time.
As far as everything else the written exam tests, such as theory and math, well, I really don't see a problem with it. Even if you are a great "coder" it doesn't mean you're a great "computer scientist," after all.
"You spoony bard!" -Tellah
At the University of Iowa, IT/CS people here were invited to go to Nigeria to help with computing infrastructure (designing and building campus-wide networks, etc.). The interviewer told us that in some cases, the Computer Science students at the Nigerian university rarely, if ever, executed or compiled their programs on an actual computer. The reason is that computers are scarce, as is even electricity.
So, with that in mind, writing some code as an answer to a test question doesn't seem that bad. At least with my homework I can still use a computer to test my ideas and to experiment.
And, I'm fairly confident that when I "need" a computer, I will:
(1) have a computer available for me to use
(2) have working electricity to use it
(3) have an Internet connection that works
(a) works at all
(b) doesn't take three minutes to bring up
the slashdot homepage.
(4) have documentation and literature to read
that isn't older than me.
I find it's not that I rely on the compiler to catch mistakes, it's that I don't write programs from the top line to the bottom line. I'll write the structure then fill it in, maybe even move stuff around as the idea solidifies. It is just very difficult to work this way on paper.
That makes all kinds of sense for a job interview situation. There, they want to know not just what you know, but how well you perform under pressure, and how fast you can perform.
The guy who knows the syntax and the APIs off the top of his head is, ultimately, going to produce faster than the guy who relies on multiple passes through the compiler to correct his syntax and using 'man' or equivalent to look up the API of every function -- just as the person who can add/subtract numbers in their head can check their change faster than someone who has to count on their fingers.
Somebody looking to actually pay money to somebody to write code for them (ie, to hire a programmer) is going to prefer the former rather than the latter, so why not give them such a test? (And it will instantly screen out the bozos who've lied on their resume and maybe just memorized enough to pass simple interview questions.)
-- Alastair
nearly all of my exams were pseudo code... that is the entire point of a 4 CS degree: theory!
if you understand the problem and solution, then you are an 'A' student.
now, if this was DeVRY or something, syntax is the important thing cause you are just going to be a code monkey your whole life.
MARIJUANA, SHROOMS, X: ONLINE?! - E
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.
One of the things that universities are supposed to do is give you a chance to express your knowledge in new contexts. It's relatively easy to apply things you've learned in familiar contexts, but how good are you at applying them in unfamiliar environments?
Making you work with pencil and paper forces you to plan ahead and architect your solution, not just jump in and start writing code.
When you write by hand, the logic and aesthetics of your code are especially important -- since you (and the reviewers) can't run the code to see whether it works or not, you need to make an extra effort to make it transparent and comprehensible.
I might take issue with an exam that was nothing but one big handwritten coding assignment, but I don't think this is at all out of place as a part of an exam or course. It's a little like essay questions in a soft-science class; they're unrealistic because in the "real" world you have access to reference materials and time to spell-check and so on... but at the same time they are a useful gauge of your ability to articulate a subset of your knowledge, to think on your feet, etc.
Also, in courses I've graded where such exercises where required, we usually didn't worry about things like minor syntax errors that didn't obscure the intent of the author. The goal was to look for an understanding of and ability to solve the problem, not to be human compilers.
"Biped! Good cranial development. Evidently considerable human ancestry."
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.
Questions like, here is a recursive function, write the code to turn it into a loop.
Write some code to rotate/scale an image.
Fine an element in this sorted list (of say 10000)
Give this xxx write a class model for it.
Now as long as they don't expect perfect code, eg. forgeting to +1 because of a rounding error, or a binary search can result in a high or low result(for a non-perfect match), these seem fair enough questions to me because:-
They all test your abilty to write good code, not just code that works.
I know loads or 'programmers' who don't know how to turn a recursive function into a loop.
Would use sin/cos to rotate each point on the image, instead of using an interger line drawing algo to scan accross the image to rotate it (or even floating point)
Would write a n order search instead of a binary search.
And would use a poor or unflexable design pattern.
So long as they mark your programming skills and not how perfect your code is, i don't see a problem.
Debugging is also a key skill, but is very hard to test in an exam, a good debugger uses a hell of a lot of past experiance and insperation to locate, fix and check that there are no simila bugs.
thank God the internet isn't a human right.
I used to teach a class to engineering freshman, and part of the course was writing code in Matlab. There are in fact a bunch of matlab questions that you can ask that aren't just writing code, but you really don't get complete coverage unless you have the student put some code on the page.
Additionally, there probably was some cheating going on with the homeworks (this was a large class taught to all freshman, with relatively small programming assignments. It would be difficult to prove someone was cheating.) We needed a controlled environment where this couldn't happen.
However, we all realized how crappy this was for the student, and we graded the assignment more like it was psuedocode. If the code had obvious typos, we ignored those. If they were close on syntax, but a little unclear on the API, we usually let it slide, too. (We understand when online you can look that stuff up with the online help.) The thing we stressed was the overall algorithm itself, as well as a demonstration that the student knew how to use matlab. (After all, as a TA, I'm taking programming courses myself; I have some idea of what's reasonable to expect and what's not)
If you do have a written CS test, and the prof does mark you off for syntax errors, I would probably go in and (politely) complain. Say, "I made a typo which would have been caught by the compiler, but I got the gist correct." If you demonstrate that you know what you're talking about, and you're not a jerk about it, and the professor's not a total jerk, I bet you'll get most of the points back. (We would do this all the time, especially if the student could clearly explain what they were trying to do.)
If the professor or TA is a jerk, all bets are off, though. But if they're a jerk, they aren't interested in being fair anyway, so you were screwed from the start. We've all been there. Sorry.
I half agree with this. Syntax doesn't matter. If they can't get the syntax right, who cares. That's like saying that people who can't spell can't think - those are unimportant details. The important thing is that the know HOW TO WRITE push and pop. Not that they be able to type it once and have it compile.
:-).
I can't write a java main() statement. Just can't remember how - don't do it very often. But my emacs expands when I type 'main', so it's not a problem
I couldn't write push and pop and get it to compile, either. But I know how. And I can communicate the design.
If you're talking about "can't design push and pop", then my sympathies. If you're talking about "can't get the {}'s right", then I don't want to work with you anyway.
So everybody gets to go to Harvard, and they all graduate with honors, eh? Doesn't work. Face it - the TA and prof usually have more knowledge than the students, and thus are good evaluators of said students.
Writing code in exams is hard to if you are used to typing all you assignments with the use of an IDE. As a current EE student who does a lot of CS subjects I have found that the best way is to write code with pen a paper first. This way of coding makes you think very carefully about what you are writing, you don't want to have to rewrite a page of code in pen (rather than just deleting it and retyping it). This way of coding also means you spend your time working on the algorithms and data structures that you believe will solve the problem with out being distracted by your complier not liking your code as you develop it. I am not against IDEs once you have written your code worked through the problem make sure it works in you head (The only complier that can find your logical errors) typing it with an IDE can speed up the time it take to find your typos.
If your are working in assembler pen and paper are just as good as a computer.
Most exams are after finding out how you would approach a problem. Writing the code demonstrates that you know how to use the language.
When I took a required test for C when I was an engineer, a very large chunk of the test consisted of writing code. One part required making the shell of an API, while another asked for a program that (if memory serves) did some sort of computation or sorting. I ended up getting a 99/100 on the test.. Why? Well, on the last problem of the last page on the last test of the year (the final), I neglected the final closing left brace " } ".. doh!
Anyhow, the code wasn't nearly perfect.. to the contrary. I had to erase several times, draw arrows (see below) to places, and other things.. but in end, what works, works. Here are some suggestions to help people write code during tests.
1) Think how you want to structure your solution. On the back of a piece of paper, write down each [method/function/procedure] and the variables involved.
2) Write down the [methods/functions/procedures]. Leave 2 'spaces' between the declaration and the start of your code in case you need to insert variables or code here.
3) Leave a little space between lines. If you find it necessary to 'insert' code somewhere, write it near the bottom of your page and draw an arrow to where you want to insert this code. Most TA's/Professors are very forgiving and understand that you won't erase 15 lines to insert 2 in the middle.
4) Do required editing.. that is, check your 'code', and if you need to insert lines, see #3. Those arrows work wonders.. really.
-Matt
1. yes, but what if you forget a semicolon, or accidentially misspell a variable name, or something like that? if you're losing x points for each minor syntax error that you'd have instantly found if in a real-life situation, is that fair?
2. most professors won't take english papers in pen - everyone requires typed papers now... and typing's far easier on the hands
3. it's useful, but most people should be able to code w/o it, so I'll agree with you there
Why would you study at a place that's so stupid about using computers that they don't realize that having to grade code written on paper costs so much more in terms of faculty time that they should have sat you at computers. I mean, they could go to Wal-mart and buy those Lindows machines for 10 cents each, right? And they use paper??
"with their freedom lost all virtue lose" - Milton
college? overrated? yeah...only if you're a geek who codes in a vi screen in his pitch-black dorm room all day...
I would suggest that the job "interview" gather information that's pertinent to the job being posted. Gathering performance data (like being able to code without reference material, a compiler, and an editor) that has nothing to do with the job is going to give you information of questionable usefulness.
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.
... of someone's knowledge of fluid mechanics?
Once again, Slashdot continues to perpetuate the (Computer Science == Programming) myth.
Programming IS NOT "computer science" any more than telescope design is Astronomy (with apologies to Dykstra).
Programming is a trade skill. Certainly, a challenging and rewarding one.. but it is not a science.
Being the first guy to figure out quicksort... thats science... thats research. Coding a quicksort in LISP is not.
I've ranted about this before, but it upsets me to see such a misleading headline.
I think *computer science* exams are quite fair... if you understand the data structures and algorithms associated with B-trees.... you shouldn't have any problem describing them on an exam. Likewise, if you understand the halting problem, reducing a simple contrived example should be doable on an exam.
On the other hand, I very much disagree with the "code this up in PL/I, using proper syntax" type of exam question. What an enormous waste of time...
The bottom line is that if you've been through a computer science program and understand the underlying principles, I should be able to give you a manual for 'trendy language x', a few examples, and 48 hours. After that, you should have no trouble coding in Jav^H^H^H 'trendy language x'. Will you screw up the syntax occasionally? You bet. Is it fair to dock points on a formal exam for being human and forgetting a semicolon? I sure don't think so; and I've *never* done that to my students.
But I stray from my point. Once more, for the record, since no matter how often I rant about it, no one seems to listen:
COMPUTER SCIENCE != PROGRAMMING.
Absurd. Where's why: if you do your job correctly and work for a responsible company, you will build confidence doing your job. When something goes wrong, you will be working with people you know doing a job you know.
In an interview situation, there very well might be a few people standing around watching you that you've never met.
The situations are very, very different.
I know a guy that was put on the spot to write code with 10 potential co-workers standing over his shoulder.
The times that I've had 10 co-workers standing over my shoulder were never tense situations, but always relaxed, fun times.
I find that I need to be sitting in front of a computer...
of course it's easier to write code on a computer. you have the compiler/interpreter to immediately alert you to your mistakes.
still, i dont see the point in these exams where you have to write a program on paper. its infinately more important to understand the concepts rather than to memorize the syntax of a particular language. thus, i believe that pseudocode should be the official language for written exams that involve programming in (at least higher-level) computer science classes.
Gyrate Dot Org - "Where high-tech meets low-life"
Are Written Computer Science Exams a Fair Measure?
Yes.
Eve Fairbanks says I drive a hybrid!LOL
the big problem that I have with coding in exams is the whole enviroment. When I code, I have 2 displays going, mp3's playing and a couple of ICQ chat windows open. For me, coding without these things makes me concentrate too much, and get hung up on little details that don't really affect my code...
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...
My guess is you write your essays in a linear manner as well. Try an outline.
Joseph Elwell.
There's insignificant cost to running the compiler twice as often
Unless, as several people commented in this story, management demands that you run antivirus software with the following policy: every time you run the compiler, you also run the virus scanner on the compiler binary, and the virus scanner takes twice as long as the compiler itself.
or looking something up in a manual or on the web.
Not if the CBDTPA passes, free software is declared illegal, and the operating system vendor makes its NDA'd developer manuals pay-per-read.
Will I retire or break 10K?
At UCSD Cognitive Science and Computer Science overlaps quite a bit, except that Cognitive Science requires little to no programming. Alot of my friends that couldn't hack the CS major switched to Cognitive Science. My apologies to Cognitive Science majors. I myself was very intrigued with CogSci and took many of the lower division classes and some of the upper division. I missed a minor by one quarter, but I chose graduation over the minor.
Joseph Elwell.
My first programs were written (yes, written) on paper and sent off to be put onto punched cards. You kids these days, you just don't know you're born.
1. Is it fair if you accidently write down 3-3=6 when you really meant 3+3=6? Typos in math are just as critical in Computer Science. But that's why you double/triple check your work.
2. Write it in pen, then type it up when you're done. And I think your doctor would disagree about typing being easier on your hands. I had never heard of carpal tunnel syndrome before I got a keyboard.
Maybe the whole "Change your major" is a little too strong. But the gist is, these tests are fair, and if you score poorly ask some of your peers how they did - I'm sure you'll find someone with a good score who earned it.
Joseph Elwell.
The coolest professor(this was a EE class) I ever had did it this way - he made the tests extremely hard, but allowed open book, open notes, and calculators. His philosophy was that on the job you would use these tools, so you might as well use them on the tests. You were competent in the subject if you made it out with a C, and perhaps 2 people in a class of 20 would get an A.
Actually, I think CS tests are pointless, period. They have very little to do with your skill as a programmer or knowledge of the subject. Its much better to give hard assignments that require lots of work before they are due(i.e. a two week assignment that is virtually impossible to finish the weekend before it is due). I can see concepts on tests, and perhaps a few functions to demonstrate knowledge of certain algorithms, but a 500 line program is ridiculous.
No, Thursday's out. How about never - is never good for you?
is the word you are looking for
"(Man) tries to live his own life as if he were telling a story. But you have to choose: live or tell." --Sartre
It seems that you've associated syntax and semantics with the visual cues of a computer.
Quick, in what order do the arguments come in the C standard library's fread()? What about qsort()? If you were in a real coding situation, you could pull it up in man or something within two seconds.
Stop using IDEs. Use the plainest text editor that you can find to write your code.
Is using Microsoft Notepad OK (that's what I use half the time anyway), or do I have to go back to ed (or edlin, its MS equivalent)?
Write code away from a computer. Use a pencil and paper.
I did this in high school when I had already finished all pending short-term course assignments. It worked. Paper and pencil really helps a fellow visualize the analytic geometry necessary to develop a 2.5-dimensional real-time graphics engine. (Yes, 2.5-D engines are still in use on handheld gaming platforms.)
Will I retire or break 10K?
If a professor just takes code from paper and then puts it into a compiler and just checks the output, then that surely is unfair.
But if a professor takes the handwritten code and merely reads it, he then gains a valuable insight into the skill level of the student.
If a student struggles with all sorts of compile errors but finally gets a piece of code to work, while another student generates the code very quickly, who has learned more? Who deserves the better grade? Who will be more productive in the real world?
Having a compiler is like having training wheels on a bicycle. After a certain point, one shouldn't need either.
int func(int a);
func((b += 3, b));
I feel the same way -- every written test I had to take, I was proficient on the underlying theory, and would be able to code it in front of a computer. Most of the time I miss the 100% grade due to an off-by-one error, or an `if' clause testing the exact opposite of what I intended to. These sort of errors are easily spotted if you have a computer to aid in debugging, and that's why I believe coding tests should be done on a computer, period. Especially with students unfamiliar with the mechanics of coding -- after a few years of daily coding, a person seldom commits these silly errors.
As a side note, having learned touch typing, it's really hard to write on paper. Thoughts flow much faster than handwriting, and you end up losing yourself sometimes. I'm positive that also affects other coders when doing written tests.
Join the NFSNET. Our prime goal is making little numbers out of big ones. http://www.nfsnet.org/
It's also worth noting that this kind of thing starts to be the cross over from hacking in to software engineering. You know there is a whole school of thought and practice (usually only for very important things) where the developers don't get to compile their code. You get a document that tells you to produce something, you code it up, you hand it over to an SCM person who compiles it and tells you if it compiles or not (they don't tell you why if it fails) if it fails you and your team start combing through everything looking for problems. Once it compiles it goes on to test and they react in a similar way. The idea is that you find and fix other problems when you don't know what the problem is. It works, there are aerospace applications and defense applications that have been produced that way and the correctness of the output is staggering, so is the cost of production but it costs a lot to make really really robust software.
As someone who has also done a fair share of BIOS and boot coding, there is something to be said for writing some code, reading it, seeing that it should be correct and then trying it. When it takes 15minutes to compile something, burn it in to an EEPROM or flash and then try it out you put a little more importance on proof reading the code regardless of what a compiler tells you. It's far more efficient to write something, debug it in your mind, rewrite it, then try it in those kinds of environments.
While I'm writing this, I'm reminded of Linus' dislike of kernel gdb code. You know what his thinking is? If you need to walk through it in the debugger to make it work, then you probably didn't understand everything that was going on in the first place. I really can't disagree with that, the problem with his product is that there are a lot of rules and conventions that aren't well documented so you can read them, step in and write a driver and understand all that is happening..
Personally, I start getting a little suspicious when someone can't code C++ or C without VC++ and intellisense or they need some wizbang Smalltalk IDE with drag and drop. Tools are great but they don't make the programmer. In the right hands they can make things more efficient and we all have our preferences but being unable to use other tools to do the same work isn't a limitation of the tool, the language, the platform or anything but the programmer. In the end, tools are just tools and all the tools in the world won't produce great products without great programmers using them.
If you can't produce programs away from a computer then I'd start working on it. It really says more about the kind of a programmer you are than the test. There will always be anxieties and things like that, those are often related to test taking skills, but if you simply cannot think through a program and start to produce something that looks like code without a computer then I think you should start practicing it a lot more. You may be a hell of a perl or C coder but you might not be much of a software engineer yet. (not to be personal, no ill feelings intended)
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.
I, too, find it easier to write code on a computer, but there are times when you need to be able to write something out longhand. If you have a lot of difficulty doing so, I suggest you practice it. It can be a very useful skill to have.
First, it's something that will come up during an interview, and you can look really bad if you can't do it. I have given more than one interview when an otherwise impressive candidate was turned down because they couldn't write a relatively simple algorithm. I've also been on the other side of the table, where it really gave me an opportunity to distinguish myself. (Btw, from an interviewer's perspective, what's more important there is the approach, not the end results. I wouldn't be surprised if many of your teachers feel the same way.)
Also, it's often necessary to be able to write out code when you're working in a team. It's not always enough to just describe your approach, especially if another programmer wants to go a different way. It's like any visual aid, it helps you get your point across.
Finally, it can be useful when working on your own. I sometimes find that it's helpful for writing complex programs if I sketch it out longhand first. It helps me guarantee I haven't left anything out, so I don't have to go back over my code as much.
So, is having students write code on an exam a good way to test their coding skills? I don't know. But maybe coding skills aren't all they're testing.
I think people often miss the point of tests like these: they aren't just about your programming ability.
A pressure test such as this also shows your approach to solving a problem, because the interviewer(s) can follow you as you work through it. It also demonstrates your level of communication skills; can you explain what you are doing clearly and correctly to your peers?
It does also indicate a certain level of competence. It's all very well saying "oh, the compiler would have warned me, so I didn't need to get it right", but the compiler won't warn you about poor style, an obvious inefficiency in your code, or the fact that you used the wrong variable name although it made perfect sense according to the grammar of the language.
A good guy doesn't make these mistakes in the first place. A less good guy makes them, but is sufficiently careful with heeding warnings and using diagnostic tools that he finds them and fixes them. A guy you don't want to hire makes them and then argues that it's OK because the compiler would have warned him if it had been real.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
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?
I do not respond to cowards. Especially anonymous ones.
No they are not fair, but they are probably the only way of assessing whether or not a student in a lower level course (sophomore or below) has really learned the material.
This goes back to a previously Slashdot article on getting help on your Computer Science programs. Someone in a beginning CS course can probably "get by" on their programs by getting help (honestly or cheating) and/or by using the internet/books for examples and hacking away at the code. The only way to really assess whether the student has learned anything themselves is to sit them down in a closed atmosphere and see if the student really knows something by giving them a test.
Now my experience has been that in upper level classes the amount of code writing done on tests is greatly reduced. This is because being able to "get by" on the more difficult assignments is harder and there is enough material of greater complexity to test the student on higher level concepts without requiring getting into detailed code. The student is still expected to write pseudocode however, but this is more to show that you can solve a particular problem (say creating an algorithm) than testing your ability to write C code.
The ability to write code/pseudocode outside the computer is not a useless skill. In my experience I have done alot of whiteboard coding in groups on different projects when brainstorming solutions to problems. I have also had to do it on interviews to show I knew my stuff.
Brian Ellenberger
How could he work things out on the paino if he was deaf?
"I don't know that atheists should be considered citizens, nor should they be considered patriots." - George Bush
If your school is making you write hundreds of lines of code, on an exam, and requiring that the code be ready to both compile and run flawlessly, I'd advise you to look for another school: first, the fact that the department seems to fixated on generating code in a particular language is a very bad sign. Computer science is not about coding, but about the theory and structure of programs and computation, none of which needs to be expressed in the kind of strict syntax required of real-world programming languages. Second, the fact that the department even thinks that anyone could write hundreds of lines of code in a couple hours and have any hope the code compiling correctly, much less working, is ridiculous and suggests that the department itself is less than top quality.
All of that said, when I was required to write real code on an exam, there was always some leeway for 'typos' (or whatever the equivalent is when you are writing with a pen, rather than typing at a keyboard). Most of the time, however, only psuedo-code was required. Even my computer architecture course, where we discussed scheduling of machine instructions, allowed the use of entirely hypothetical assembly languages on the exams.
Unlike fluid mechanics, where you can learn, and do research without knowing plumbing, you cannot be a good computer scientist without being very good at programming. Exams, which require you to write correct code, are usually done in introductory classes where the goal is to teach you programming in a specific language.
Learning the exact syntax and idioms of a particular language in an introductory class is necessary, as it teaches you how to learn a new language as much as it teaches you the basics of programming.
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.
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.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
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.
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.
I'm a 2000 man.
I'm going to skip reading most of the comments and post my $0.02, even though I'm sure it may be similiar to a lot of other people's thoughts.
It all boils down to the professor most of the time. For the most part, I agree that if exact (ie, correctly formatted and working) code is required, you HAVE to be sitting at a computer and have a chance to compile, find errors, and fix your code. However, I had a lot of professors that were more concerned about the form and function as described by pseudo-code.
Honestly, I have found that paper code makes you more prepared for the real business world. ie, If you are working as a programmer, and you are discussing specs with a client, there may be times where you need to think quickly about a problem from the programming perspective. This usually (for me at least) gives me a minute to jot down some code that pops into my head--without regard to whether or not it will actually work the first time. If you depend too heavily on using a computer to make sure that code works, you may not be able to trust in yourself. I kinda equate it to the argument that reliance on calculators makes you forget basic math when you're in a pinch. If you do a little on paper now and then, you keep it fresh in your mind--check it on your computer/calculator later.
Sometimes I doubt your commitment to Sparkle Motion.
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.
1. Generally, 3-3 or 3+3 is something you'll be allowed to check on your calculator. The final answer in a math equation is like the compiler - if you get a negative area, for example, you know you probably did something wrong along the way.
2. I get cramps in my hands within 30-45 minutes of writing. I can type away for 8 hours straight without major problems. That's not even the main issue - handwriting is. I've graded CS exams before and it's obnoxious - half the time you can't read it.
I'd want to know, because a hell of a lot of people graduate from CS degrees without knowing how to do this properly. You're not really looking for whether the interviewee can write the code with immaculate syntax, the main concern is whether or not they understand the basic concepts, and all of the subtle implementation issues
I know if I went into an interview and someone asked me for code like that, I'd tell them straight up that I'd look that up in a book or online, and that it'd be a waste of my time to write it.
That's like an elementary school student telling the teacher that they'd just use a calculator if someone asked them to add two numbers. Of course, one could do it like that, but the point is that the interviewer is interested in knowing whether or not you understand how to implement a linked list. There's a good reason for asking questions about a data structure that has been implemented millions of times-- it's something that everyone is expected to know how to do.
Maybe if you're hiring greenhorns straight out of school you might ask a dumb question like this just to make sure they aren't completely clueless, but for experienced programmers its frankly a poor test to find a good problem solver.
Even people who write programming books frequently make a complete mess out of linked list data structures. So I'd consider the question fair game, even for "experienced developers". By the way, I think you're greatly underrating the subtlety of this question. It's not trivial, there are a lot of interesting issues and tradeoffs that come up in designing such a class, and most books screw it up.
Why would a four year school (like uni) let you do a lab test when they don't even give you lab hours in the classes?
I was there (uni) and out of all of my classes I only received 2 hours a WEEK of lab time in class. Everything else was lecturing.
So if 95% of the class time is lecture then I would assume that 95% of the test will be theory. The other 5% would be lab time.
What's the point of telling a person how to code something (or how to perform any function for that matter) if you're not going to let them do it until next week?
Professor: "OK class, this part is very important! You have to do X and Y to get the result of Z. You will do this next week in lab with my TA's. That is all. Class dismissed."
"A plan fiendishly clever in its intricacies"- Homer Simpson
... you don't know it.
In the "olden" days, you wrote your program out, then put it in the computer, it failes, loose a letter, try again.
Now programmers are more try this, doesn;t work? try this? doesn't work, change this. I swear, if I hear "I don't know why this change worked, but it did" one more time, I'll scream.
I can't think of any other engineering where creating by "vibe" would be acceptable.
We sure as hell didn't create software to get someone on the moon by "vibe".
What else you want for your exam. use of a help system? you mommy to hold your hand? sheesh.
The Kruger Dunning explains most post on
so you feel its OK to pass students who would waste there employers time having to run a compiler over and over again because they where not trained to pay attention to what they are doing?
Why don't you just show them how to use the help system, then pass them? after all, they can look it up online.
The Kruger Dunning explains most post on
A lot of people seem to say that "As long as they mark your problem solving skills and not how perfect your code is, it's ok."
I agree, however, that's not the way it works. In my first year CS courses, we lost marks if we so much as forgot a bracket. That's rediculous. Small things like that happen when you ask someone to write code on paper under exam conditions.
What I think should be done, if writing midterms and finals on a computer is out of the question, is that assignments should be given the most weight on the final grade. Our CS assignments were handed out weekly, and due the following week. That allows you to take it home, code as many solutions as you can in a week, debug it, etc. I think this approach is a far more accurate description of one's skills as a programmer.
Another way about it would be to have a "final assingment", which combines all of the skills taught during the semester into one larger than average assignment. You'd have a week to complete this assignment, like the others, but it'd be weighted more.
Of course, an obvious problem with my suggestions would be cheating. And at the moment, all solutions to this problem I can think of don't seem like they'd be any good.
I'm open to suggestions.
Another approach is to change the way CS tests (midterms and finals) are designed. Drop as much of the coding as possible, and simply ask the student to apply the principles they've learned to a variety of problems. This would be a mostly written exam, which leaves it open to subjective grading. Maybe that's the way it should be. Computer Science is about problem solving, not coding. Anyone in CS should know that programming is a drop in the bucket of Computer Science. If you're designing a solution to a problem, you should know how to express your solution in words just as well as you can think of it.
-kidlinux.
so you feel its OK to pass students who would waste there employers time having to run a compiler over and over again because they where not trained to pay attention to what they are doing? Why don't you just show them how to use the help system, then pass them? after all, they can look it up online.
Don't be so obtuse; of course that's not what we did. Quick, without looking: what are the arguments passed into "strtok()"? Personally, I don't know for sure, and that doesn't matter, because "man strtok" gets me the answer on the rare occasion that I need to use it. But it doesn't tell me when I want to use the function, or how to use it in a tokenizer, and as it turns out, I do know that part. And that's the kind of thing that's more interesting to test for. Memorization monkies aren't good employees; good problem solvers are.
But perhaps you have a point; clearly, your grammar and spelling teachers weren't strict enough.
Might be "how it works" in your experience, but there's no reason why this is always "the way it works". In any case, your complaint is about the fact that in your experience exams were poorly graded. An obvious solution to this problem is to use a better grading scheme for exam papers (-;
That allows you to take it home, code as many solutions as you can in a week, debug it, etc. I think this approach is a far more accurate description of one's skills as a programmer.
Nope. A good programmer should be able to write simple programs correctly without having the computer to test it for them. If they can take it home, everyone should (and in practice, usually does) get it, but in an exam room, you're measuring how good the students are at catching mistakes (or not making them in the first place) without the computers help.
Of course, an obvious problem with my suggestions would be cheating.
Yep. That's why this solution isn't used in practice. It unfairly penalises honest students.
Another approach is to change the way CS tests (midterms and finals) are designed. Drop as much of the coding as possible, and simply ask the student to apply the principles they've learned to a variety of problems. This would be a mostly written exam, which leaves it open to subjective grading. Maybe that's the way it should be. Computer Science is about problem solving, not coding.
I mostly agree with this. First year courses do need a lot of coding, so that students acquire the basic skills to coherently express their ideas. I wouldn't put a lot of coding on an exam uness it was an open-notes test.
So, what you're telling me is that there is only one way to store data, and that personal preference has absolutely nothing to do with it?
Wow, I'd really like to know what kind of programming you've done lately. Perhaps in procedural programming there is a set place to put things, but as far as OOP goes, I'd say there's quite a few ways you could arrange things. People have different reasons for coding things differently, both syntactically and in organization. One person may find it more convenient to store something in a simply ASCII text file, someone may find a small but efficient database system better.
I agree, you shouldn't use more resources than you have to, but there are multiple ways of accomplishing things, each with their own benefits and drawbacks. If you can't see that, I'd really hate to see what happens when you have to work together with someone on something.
Naturally, I got zero marks for that exam, and went on to take a degree in something completely different, including a Philosophy minor. Immediately on graduating I got head-hunted by the systems engineering department, and within two year was on the academic staff of the Computing Department.
That's fifteen years ago, and I've been getting paid for writing (and teaching people to write) interesting software ever since. I still don't have any computing qualification. The moral of the story: you don't take a course in quill-cutting to learn how to write great literature. In the Computing Department, when I was a student, they were teaching us to write bar-graph generators in PASCAL on punch-cards to be fed into mainframes; in the Philosophy department they were teaching us to write theorem provers and inference engines in LISP and PROLOG (with a side order on the meta-mathematical basis for the designs of the language interpreters themselves) on micro-computers. Guess which turned out to be more relevent in the real world?
I'm old enough to remember when discussions on Slashdot were well informed.
1) Most universities determine the grade in the class by how well you do in relation to your classmates, not by a fixed percentage of correct answers. If you only get 30% right in a test, and you answered the most questions correctly, you get an A. (Unless the professor has a different policy and the tenure to enforce it.) If your classmates are pumping out functionally correct programs on paper, and you aren't, you should not get an A because you "tried" hard to learn the class material, or can regurgitate theory but cannot code for your life.
The tragic reality is that in many competitive majors, you end up being responsible for a ridiculous amount of knowlege in a class, some of which would be more appropriate in an advanced class. This is deliberate; to ensure the people who can regurgitate the most get A's, and the also-rans arbitrarily get B's, C's, etc. "Separate the pre-meds from the med-techs." You should always strive to absorb the most amount of knowlege, but if you can't outperform enough of your other classmates, it means you should be looking for another field of study (and thus career) where you can perform better in relation to your peers. Everyone was not meant to be a programmer or a computer specialist.
2) On a final exam, the professor should not be using as a program question something that would require 500 lines of code. But asking to implement a data structure in code, or a basic algorithm, like a heap sort, should be perfectly reasonable task to be completed in a set time. The professor takes off points in syntax, and your other classmates can code on paper with less errors than you, whallah, they have a greater mastery of the course material than you. They should get the higher grade. An aside: if you can't code in your head under pressure, you have no business picking a career in the computer industry.
3) If you were truly a bright and mature student worthy of a higher grade than your classmates, and you were aware that you have a deficiency with programming on paper, you would PREPARE for the challenge you know you will confront at exam time, not whine that it is unfair. This can easily be done by writing every programming assignment on paper before implementing it in an IDE. Yeah it takes inordinate amounts of time, and yeah, you won't have a reference book in the exam room, but practice makes perfect.
When I went to college, IDE's did not exist. The line editor we used to input code on the mainframe made edlin a pleasurable experience by comparison. It was faster to write programs on paper, and that's what many people did, including your professor. Did this generation wallow in self-pity and not participate in the computer revolution because we had to write our program exams on paper? (And before you get bent out of shape by the presentation of my context, please re-read (3).)
I could blather on forever about exceptional cases, post-primary education, etc. but it can be boiled down to the final clue:
4) Life is unfair, college is a subset of life, and a bachelors degree does not mean the possessor mastered an academic subject. Grow up, make the difficult decisions, do better, and please not let this diatribe be a waste of our time.
There is no America. There is no democracy. There is only IBM and AT&T and DuPont, Dow, General Electric, and Exxon
The finger counting example (base 6) is pitiful. Why? Because millions of people are taught an alternative method which allows you to reach 99, rather than the maximum of 35 your method allows. (FYI, right fingers:1, right thumb:5, left fingers:10, left thumb:50).
I can't decide whether your website is satirical, or seriously deluded. If the first, it isn't obvious. If the second, then I've got a revelation for you: whatever base we choose is arbitrary.
10 and 12 both offer real advantages over 16. And the rest of the world operates on 10 and 12, not 16. Get over it.
I've been arguing that physics exams, on the other hand, is a major problem for critical thinking. I even had an article in the journal "Physics World" about it.
Employee of Inrupt, Project Release Manager and Community Manager for Solid
I just completed Java and COBOL courses
Those are some odd bedfellows.
May we never see th
So you are saying that we should use 0x3C or 3Ch except for 60 and 0x1F4+ and 1F4h+ except for 500+ A real geek will find a way to display there value with the least amount of typing. I also find it funny that you couldnt even give us the Hex Value wich makes me suspect that you cannot convert 2 simple numbers to hex. So I 3 lines of advice and an example for you.
1. Get a life.
2. Use what is effecient for the task
3. and if you want to be really geeky use binary.
60 = 0000000000111100b
500 = 0000000111110100b
and I am leaving the leading 0s in a 16bit array to show that is is a positive number in 2s complement.
Using HEX is for the week at heart who is to stupid or lazy to convert a decimal number to binary they want someting that lines up easly.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
I doubt "Hexa Person" actually advocates the use of hexadecimal. Judging from the posting pattern, s/he simply wandered around the site linked by the "Physics in the Movies" post, discovered the Hexadecimal pages, and constructed a new Slashdot account devoted to insulting other posters. Fortunately, it looks like s/he got tired and went to bed after an hour and a half of this nonsense. Hopefully s/he'll forget about it in the morning.
The irony is that Hexa Person doesn't really understand hexadecimal, since there are comments of the form "$16.99 should be written 10h.99." 0x10.99 is only 16.59765625 decimal.
What do you mean they cut the power? How can they cut the power, man? They're animals!
Ok this is why it's a good question
given the following code
rteval f(x,.....){
f(x,......);
}
all calling f(x) inside f(x) does is allocate some space on the stack, this stack space can be preallocated as an array, so that a loop can be used instead of a recursive function call..
thank God the internet isn't a human right.
Well, that problem is not only related to coding, but writing in general, for me. Somehow it feels so much easier and faster to write with a keyboard than with the ordinary pencil and paper. I guess it has to do with computer text being easier to modify and rearrange than the handwritten stuff. Not to talk about the looks of the finished result. My handwriting isn't that easy to read, not that it's ugly, just hard to interpret. I just have to wonder how many points that has cost me at different exams?
--
"I'm surfin the dead zone
In the twilight, unknown"
a) What are you doing coding a single chunk of code that's 10K lines long anyways?
b) Any good compiler should be able to take you straight to the line where you forgot the semi-colon.
A Pirate and a Puritan look the same on a balance sheet.
Their 40 GigaBucks have little to do with how they treat their programmers.
A Pirate and a Puritan look the same on a balance sheet.
I had the same problem. They teach us to use the debuggers and trial and error to our advantage. Then they don't actually let us use it in the end. They teach us the process that we'll actually use in the industry, then they want to to resort to pen and paper for testing purposes. It just doesn't compute.
I programmed various things since 1986, and in all that time I have never seen a project being completed on time.
Contrary to the popular belief, there indeed is no God.
Here's my like
1[x 2] = 'aa....a'
2[1 3] = 'aa...b'
3[2 4] = 'aa...c'
4[3 5] = 'aa.....ba'
etc...
say eack node has a 10k string in it,
you may need to search all 10000 nodes,
you'r not looking for the data pointer that matches, you looking for the data,so a log2(n) search is not only possible, but probably faster.
thank God the internet isn't a human right.
Its very simple... what they should do.....
in the real world i have a computer and reference books , and caffine (ok last one not too revelent).... i don't have to write programs without those.... why should people be judged on a system that they will never see when they do get a job...
i have never seen anyone at my company writing software in a room with no computer...
Cruise TT
However, I don't care for your analogy. Discovering quicksort is original science. But not all science is original. Better to say that understanding all the theory relating to quicksort -- why it's faster than a pyramid sort, what kind of data impacts its performance in different ways -- is science. Implementing a quicksort routine is engineering. Writing a program that takes the routine and sorts data -- well, I want to call it coding, but that's not quite right.
There used to be people called mechanics. Nowadays that word basically means "repair person". But I think it used to be an honorable part of an important hierarchy. Scientists investigated basic principles. Engineers found practical implementation for those principles. And mechanics made these implementations work in day-to-day life. Nothing wrong with being a mechanic -- I consider myself one. But you shouldn't confuse it with more fundamental work.