Having just finished University I was just wondering if people think that exams are the best way to train people to write computer programs or should it be taught in a strictly practical, hands-on way.
Examinations are a good test of fundamentals and nothing more. To become a good programmer however requires lots of hands-on practice. At the end of it, an examination would tell you how much you have learned though.
The best way to learn proramming is by doing it. Use the luxury of being a student to make lots of mistakes and learn from all of them.
Test taking is a completely separate skill from creating real world software.
Doing well on exams/tests is all about being able to remember a bunch of information and spit it back out on demand.
Creating robust usable software is a skill that's only gained through the experience of developing actual software.
Exams can be used to test basic knowledge about programming, but in my opinion the only way to learn programming is to write programs. This is difficult to do as part of an exam. Not only do you face time constraints, in programming their often is no single right answer. There are many wrong ways, but people can endlessly disagree about the best way to code almost anything.
The major problem with exams is that they teach you a completly bass-ackwards way of working. If you would use the skills that makes you a effective developer on a job on the exam you would end up being called a "cheater".
Exams are a fine way to measure how much stuff you can cram into your head in a short period or alternativly how well you can read the mind of your proffessor.
Any exams for programming should be open-book IMHO. It does help one producing a pgm listing without running it. Of course I am talking about programming itself - I hate exams on programming rules, terms or other such questions which require you to learn the textbooks by rote.
Yes examination preparation is a planned activity and we really can co-relate it with a single member programming. Focus, problem solving, Time Management etc are the qualities you acquire apart from the subject knowledge.
I sit firmly in the middle on this one. I do agree that programming is a very practical subject and that you should definately 'learn by doing'. Some of the best programmers I met at University ended up failing the course because they were so bad at exams - one guy in particular was ten times better than I am even now.
However I do believe that exams are a real test of character that is beneficial to any programmer. Those same guys that were great coders in the class were also prone to missing deadlines and being generally poor at scheduling their time. I feel that exams help build these equally important skills for anyone who wants to do the job professionally.
To be a good programmer you can't be afraid to fail, and then use that fialure to figure out a solution. You learn alot that way.
So the best test of a programmer is to see how they react when given a situation that requires them to think differently than what a book says. That way if they have an interesting idea that is not common, they would not be afraid to fail if it doesn't work, and try something else and fix it. If you get an answer that is straight from a textbook then you know they just know what they have been taught and can't think for themselves.
Remember it is all about SMART and GET THINGS DONE!!!
If you mean university exams (not MCSE etc.) then the point shouldn't be programming to begin with. Programming should just be the tool used to teach you the concepts that are actually important to the field. If you went to university just to learn how to program then you are probably over-educated for what you want to do.
Anyone coding in the real world is going to be allowed to Google, copy/paste, delete, have syntax highlighting and auto-complete, etc. A situation where these things are not available is so artificial, in my mind, to be useless.
I about flunked out of CSC101. I'm now employed full-time as a programmer, having majored in business instead of CS. I know plenty like me - philosophy majors, aviation majors, etc.
Its a bit like music. You can learn all the theory you like but the only way you will master an instrument is to practise till your fingers (literally) bleed. The only way to get good at programming is to write code.
This does not mean that commercial coding is always the best way to gain experience. In large comapnies its easy to get trapped into writing the same application in the same language over and over again. One way around this is coding katas.
Exams can play a valuable role in forcing you to learn the formal definitions that make up a language, API, specification etc... For example the Sun Certified Java Programmer exam deepens your knowledge of the language by requiring you to understand the reasons for common compiler errors and programming idioms.
Depends on how the tests for the classes are setup - most of the exams that I had for my computer programming and software engineering classes in college where either practical tests or were waived in favor of a final project.
In the case of the practical tests we were generally given a programming problem to work on over the weekend and that was graded as the final exam. The downside, of course, is the fact that these are easy for people to cheat on by getting information off of the internet. However, if someone took all of the code off of the internet then they were running the risk of it not looking like code they had written earlier in class (most students have a distinct style of coding) or not being able to answer the professors questions in regards to their implementation.
The project based classes are actually the ones that I enjoyed a bit more as you had most of the semester to work on the project, but it was something that was significant enough that generally you knew who know what they were doing or didn't know what they were doing.
The best programmers tend to be the ones who have more experience of programming. The only way to get experience is to get out there and do it.
For commercial programming, the best programmers are also the ones who are in touch with what their clients need from the software. Often developers (especially new ones) miss this point.
That being said, there's always going to be some benefit from having some formal training in the theory of computing to serve as foundations to build any experience on.
Exams are Not the best way to train programmers.
This is because they only show the performance of the programmer under a specific set of conditons
- Environment noisy/quiet
- Feeling of the day, are they well.
- Arbitary, Fixed Time Constraints.
- Lack of practicle information sources eg Internet, Textbooks, Previous Work
- Test type regurgitation of textbook/lecturer, application of knowledge, solving practicle problems.
- Time period of Exam, eg Evening -tiredness, Lunchtime hungryness, Length - fatigue.
- Topic Acessed eg Does the student need to read the lecture notes, or just do the assignments.
The best way I've found to learn programming is to solve practical problems(eg Send Serial Data over the network) or being given problems which can be explored/extended
(rotate a sprite in OpenGL and extented control it a runtime)