Hi John,What skills will my students need to be successful in a college computer science program? What are the expectations on CS students at the college level versus the high school level?CollegeCSStudentPrepper
Dear CollegeCSStudentPrepper,
Excellent question! It is quite likely that a few of your students will indeed go on to study computer science at the college level, and it is certainly important to know what knowledge base and skill sets universities expect these students to have prior to committing to a higher learning CS environment.
I always tried to give my students enough of a knowledge and skills base so that they would find the first year or year-and-a-half of college CS to be fairly easy, and that fact has turned out to be true for just about every student throughout my career that has moved on into CS at the college level.
One former student, Adam, wrote a letter to my school board emphasizing the fact that because he took my CS1 course, he was miles ahead of his class at the Naval Academy, encouraging the board to continue supporting the growth of my program.
Another former student, Reagan, who went to Rice as a CS major, came back during spring break, begging for the Boolean Identities reference sheet I had tortured him with when I taught that unit in my CS class. He hated the topic at the time, but sure found out how valuable it was when it came up in his college class, and he was so thankful for that knowledge base.
My best answer, based on what I gave to my students throughout the years I taught CS at the high school level, is this. Students who go on to study CS at the college level need to:
- know the basics of inputting data (keyboard, GUI-based, and file sources)
- be able to produce quality, formatted output, console, GUI, or file based
- have a good understanding of the basic constructs of programming – sequential, conditional, and iterative processing (loops and recursion)
- know how to write void and return methods, either as stand-alone static methods, or as members of a class definition
- know about the characteristics and limitations of primitive data types
- know about parameter passing (actual vs formal, value vs reference)
- know about the distinction between local and global scope, as well as the advantages and disadvantages of the use of each
- have a strong foundation in OOP (object oriented programming), knowing about
- abstraction, encapsulation, inheritance, composition, and polymorphism, to the extent that they can design and implement a fairly sophisticated class structure, managing a significant data set in a program using a collection objects.
- know about various data structures and collections, how they are implemented, and the best time to use them, such as 1D and 2D arrays, linked lists, stacks, queues, trees, sets, maps and graphs
- know the characteristics of, and be able to implement (or at least recognize), to a certain extent, classic searching and sorting algorithms, such as linear and binary search, and various sorting routines, such as selection, insertion, bubble, merge, and quick
- know the theory behind binary tree processing, knowing inorder, preorder, postorder traversals, and know the basic concepts about trees, e.g., root, nodes, left and right children, leafs, parents, height, internal and external path length
- know the theory of how a binary search tree is implemented and managed
- know the theory of how a minimum heap works, using a binary tree to implement it
- know how to count in and convert among several computer related number bases, such as decimal, octal, binary, and hexadecimal
- know the basics of Boolean Algebra, including the theory behind the operators NOT, AND, XOR, and OR, using truth tables to evaluate simple to fairly complex expressions
- know some advanced Boolean Algebra theory, specifically how to use the various identities (DeMorgan’s law, Absorption law, etc) to simplify boolean expressions
I know what you’re thinking…probably something like, “Dang! This is a lot of stuff! There is now way I could get to all of this!” Well, for sure not in one, or even two years…three or four maybe. Bottom line – even if you don’t get to all of this, anything you give them will help. We at the high school level are the incubators for our computer science students as they learn, in a safe and less stressful environment, the foundational knowledge base and skills that will serve them well when they join the fast lane of college computer science, where “sink or swim” is the name of the game.
Beyond all of this, the MOST important skill you can impart on your high school student is the ability to learn on their own! That is what college is all about. There is no spoon feeding there. If your graduating student knows how to stand alone and survive an assignment that requires a certain level of independence, you have done your job.
If you have more questions about this, or about other topics related to your job of teaching CS at the high school level, please send them to me, either as a comment to this blog posting, or to the email address listed here: weteachcs@austin.utexas.edu
Thanks for all you do to help prepare our students in this important field of computer science!
Together, WeTeach_CS!
John Owen
About Ask John
As he always emphasizes in his classes, courses, and workshops, there is no such thing as a stupid question, except for the one you do not ask. John Owen has taught high school Computer Science very successfully for many years, and has a team of CS colleagues who are ready and willing to lend their expertise, experience, and wisdom to help you become a better computer science teacher. This blog is for you! Ask your questions, and he will do his best to give you sound advice that will get you back on track with whatever issues you encounter, and for which you seek answers.
Have a Question?
CS Teachers are encouraged to submit their questions about teaching CS or other aspects of CS education. Send your question to weteachcs@austin.utexas.edu and we’ll be sure to let you know if your question is featured in the Ask John column of the WeTeach_CS Blog.