The typical undergraduate program in computer science includes an introduction to hardware and operating systems, file processing and database organization, data communication and networking, and, of course, programming. But what does such a program teach the student about working in industry? This, paper, written from the point of view of a training analyst for a major corporation who has had over ten years of experience teaching and developing courses and curriculum for a small college, suggests that many computer science graduates lack the ability to integrate the concepts "learned" into a skill set and a pattern of approaching problems that would enable them to fit easily into a business organization and to succeed in such an environment. The paper outlines types of skills necessary in business/industry and makes suggestions for integrating the development of these skills into the computer science curriculum. Over fifty graduates from undergraduate programs throughout the southeast were interv iewed by the author. Approximately half of the graduates were already working in computer related positions; the others were in the process of interviewing for such positions.
The average graduate of a four-year program in computer science has spent approximately half of his time in computer related classes, learning about hardware, operating systems, networks, analysis and design of systems, and, of course, programming. Most graduates have a base of theoretical knowledge upon which practical skills can be built. They can write programs in two or three different languages, they know the difference between a CPU and disk drive; they can tell you the steps in analyzing and desi gning a system; and they can discuss the advantages and disadvantages of object oriented programming. But have they learned the skills that will help them to land a job and to survive in the workplace? What activities/requirements could be added to the courses already in place that would enhance their ability to succeed? The following is a discussion of the nontechnical, nontheoretical skills necessary to survive and advance in the work place. This discussion is not meant to be all inclusive, but me rely a starting place for incorporating such skills into computer courses.
ACTIVITIES: Assign varying numbers of projects. Some of the projects should have the same due date, some different due dates. The projects should have varying levels of difficulty throughout the course - assigning increasingly difficult projects as t he courses progresses gives a false impression of projects tackled in nonacademic situations. Within reason, "last minute" projects should occasionally be assigned.
ACTIVITIES: As often as possible assign students to groups, making sure that each student has the chance to be a leader and a chance to be a "follower". Groups should vary in size, allowing the individual groups to work out sub groups, if necessary , as well as individual roles. Evaluation procedures should be developed to evaluate the group as a whole and the individuals within the group. Discussion of the group experience is a necessary follow-up activity . If individuals in a group are worki ng well together adding a "ringer" who will not do his assigned tasks or who disrupts the groups is a valuable short term method for helping the groups learn to solve problems among its members.
ACTIVITIES: After ensuring that the necessary resources are available, have the student modify a program written in a language he has not used yet. After a student has learn to use a specific operating system well, assign him projects to complete on other operating systems so that he will have to learn how systems are similar and different.
ACTIVITIES: Discussions and role playing are effective methods for helping students deal with stress. The discussions should include how to separate work and personal time, how to deal with last-minute demands, how to deal with difficult people in order to create a win-win situation, how to take mini-breaks, and when to walk away from a situation.
ACTIVITIES: Include frequent mini papers to allow the students to practice written communication in their field (papers in freshman English classes are not the same concept). Hold both impromptu and planned discussions and debates in classes covering topics of interest to the field. Have student do frequent informal and formal presentations in front of small and large groups. The more practice students have with communication skills, the more comfortable the students will be with communicating effec tively.
ACTIVITIES: From the first course, students should be asked to present their solutions to small and large groups, justifying their approach to the problem and suggesting alternative methods of solution. Debates, both formal and informal, on relevant issues in computer science are effective tools for crystallizing ideas and concepts.
ACTIVITIES: Before taking any programming course, students should be introduced to the design solutions to problems using words, diagrams, and a combination of both. A traditional example is to have a team of students explain how to tie a shoe, giving the procedure to a second team to actually follow. Additional problems, such as designing a queuing system at the local fast food place, or setting up the schedule for a softball league, bring practical situations into very discreet steps. This introduces the concepts of logical design, walkthrus, and modification before any programming language is used.
ACTIVITIES: From the very first course, only complete, correct, and error-free programs and assignments should be accepted from students. Using the term "error" instead of "bug" to refer to mistakes in software emphasizes the fact software problems are unacceptable. Thus, from the very first project, students should perform walkthrus on their code and on the code of other students. When testing a program, students should develop test data to cover all possible situations. Documentation of the systematic testing of the programs should be kept. Incomplete programs and incompletely tested programs should not be accepted - there is no partial credit in the real world!
ACTIVITIES: Introduce student early to the concept of building their own libraries by using modules they have coded and thoroughly tested as the basis of their library. Using modules from classmates (after proper permission is obtained and proper cred it to the original author is included in the module) and from other sources, saves time when the modules have been well-documented and thoroughly tested.
ACTIVITIES Hand out a programming assignment with a specified due date. On the date due, have the students make "last minute" changes to the program before turning it in. Allowing time in class helps students adjust to the stress of such a change without rewarding those who wait for the last minute to code their projects. Gradually increase the difficulty of the projects and the complexity of the modifications.
ACTIVITIES: Limiting students to a set amount of computer time or lab time on a particular project helps make them aware of the type of planning that should take place before sitting down to code at a machine. Using a manageable project, have students fill out a "timesheet" that includes spaces for designing the program, writing the algorithm, writing the code, coding the project, correcting syntax errors, correcting logic errors. Done over a series of projects, such a timesheet should assist students in observing the negative correlation between the time spent designing and writing the algorithm and the time spent debugging logic errors.
In conclusion, although students need to learn a specific body of knowledge to be considered computer scientists, simply teaching them theories and information will not allow them to succeed in the field. They must learn how to effectively apply the knowledge in the real world. They must also be able to communicate ideas effectively, work with a variety of people, and expand their knowledge and skills as the field changes.
Return to the Table of
Contents