Union College CSC-10X: CS Core Skills

Skills Overview

Each course covers at least the following topics:

In-depth Skills List

What do we expect from students who pass one of the intro courses with a C- or better?

This document assigns levels of competency to each skill in our list of objectives for intro courses. We use the following levels of competency:

  1. Fundamental Programming Concepts
    1. Basic Syntax and Semantics
        • The student will know that programming languages have a strict syntax that distinguishes valid from invalid expressions and statements and a well-defined semantics. (They don't necessarily need to know the terms syntax and semantics.)
    2. Control flow and basic control structures
        • Students will be able to simulate the default control flow of the language they are learning.
        • Students know the syntax and semantics of if-statements and while/for loops.
        • Students will be able to simulate the control flow of a given if/while/for.
        • Students will be able to select appropriate classes of control primitives for specific problems (e.g., conditionals vs. loops).
    3. Functions and parameter passing
        • Students will be able to read documentation for instructor/system provided functions
        • Students will be able to use instructor/system defined functions in their own code
        • Students know what a function signature is and will be able to identify its various components (return type, function name, parameters)
        • Students will be able to write an original procedure (e.g. side-effect only, no return) given an algorithm specification. Note: the focus here is on knowing what function definitions look like, not the problem solving involved.
        • Students will be able to write an original function given an algorithm specification. Note: the focus here is on knowing what function definitions look like, not the problem solving involved.
    4. Simple I/O
        • Students will be able to print statements to the console
        • Students will be able to read data from files
    5. Structured decomposition
        • Given the description of a problem students will be able to identify sub-problems that would be implemented as functions.
        • Students will be able to perform one layer decomposition on their own and two layer decomposition when given the primitives.
    6. Variables, types, expressions, and assignment
        • Students will be able to write statements that (declare and) assign a value to a variable.
        • Given a programming language expression, students will be able to determine its type.
        • Given a piece of code, students will be able to identify the variables and trace them and their value through the program. In particular, they will be able to identify where the initial assignment happens and where the value may change because of a reassignment. They will be able to explain what appens to the value of a variable when it is passed as a parameter to a function that may change the value it assigns to that parameter name, and they will have an understanding of scope and be able to explain what happens if a different variable of the same name is declared/used elsewhere in the program.
        • Students will be able to identify the variables needed to specify an algorithm to solve a given problem.
  2. Algorithms and Problem-Solving
    1. Debugging strategies
        • Students will be able to recognize and use the error messages produced by the compiler/interpreter to correct syntax errors.
        • They will be able to implement the following debugging strategies to identify and correct logic and runtime errors: hand tracing using their algorithms, echo printing, use of comments to remove lines of code, modular testing and stepwise refinement.
        • Students will be able to design tests and define test data to determine if errors exist in control statements.
        • Given a program statement, and a program with known errors, they will be able to indentify the error and hypothesize as to the location of the error in the code.
        • Students will also be given a demonstration of using a debugger.
    2. The role of algorithms in the problem-solving process / The concept and properties of algorithms / Implementation strategies for algorithms / Problem-solving strategies
        • Students will be able to list the reason(s) for developing algorithms in the design process.
        • They will be able to translate their algorithms into a high level programming language.
        • They will write algorithms, in pseudo code, that include control structures and include an appropriate level of detail.
  3. Fundamental Data Structures
    1. Primitive Types
        • Students will be able to explain the difference between data types
        • Student will be able to choose the appropriate data type for a given problem.
    2. Arrays / Records
        • Students will be able to write code that accesses a specific element of a given array/record.
        • Students will be able to to identify when to use a collection data type (list, array) or a key-value pair based data type (record, association list).
        • Students will be able to write code that traverses an array.
        • Students will understand that arrays have a size, they will understand how the size and the index of the last element are related, and they will be able to predict what happens if their program tried to access an element beyond the size of the array.
    3. Data representation in memory
        • Students will be able to explain how the memory content changes when variables get declared/assigned/and reassigned using diagrams based on the metaphor of variables as names for containers.
  4. Fundamental computing algorithms
    1. Fundamental search algorithms
        • Given a list and an element, students will be able to explain (in English, no code required) how to search for the element using sequential search
        • Students will be able to implement sequential search.
        • Given a list and an element, students will be able to explain (in English, no code required) how to search for the element using binary search
        • Students will be able read and explain a given implementation of binary search.
  5. Introduction to language translation
    1. Comparison of interpreters and compilers
        • Students will be able to explain the functionality of interpreters and compilers and the difference between them.
  6. Abstraction mechanisms
    1. Modules in programming languages
        • Students will be able to use built-in libraries.
        • Students will be able to explain the advantages of modularization.
        • Students will have seen programs consisting of multiple modules/files.
  7. Digital logic and digital systems
    1. Overview of computer architecture
        • Students will be able to explain the function of CPU, memory, and secondary storage and the interaction between them.
  8. Machine level representation of data
    1. Numeric data representation and number bases / Bits, bytes and words / Representation of nonnumeric data (character code, graphical data)
        • Students will be able to convert (small) integers in base 10 representation into binary representation and the other way round.
        • Students will be able to determine how many different values can be represented using a given number of bits.
        • Students will be able to explain how bits are grouped into bytes.
        • Students will be able to explain how bytes are used to encode characters.
  9. Overview of operating systems
    1. Role and purpose of the operating system
        • Students will be aware that the operating system is software that is responsible for managing access to CPU time, memory and files.
  10. Software tools and environments
    1. Programming environments
        • Students will be able to list the tasks (e.g., compile, run, ...) that the programming environment they are using is doing for them.
        • Students will be aware that they could use a plain text editor to write their programs.
        • Students will have seen a program be compiled and run from the command line.
        • Students will be able to list the advantages of using a programming environment over a plain text editor.
  11. Recursion
    1. The concept of recursion / implementation of recursion
        • Students will be able to list the characteristics of a recursive solution.
        • Students will be able to formulate (in English) a recursive solution to a given problem.
        • Students will be able to implement a recursive solution given a specification of the algorithm in English.
  12. Social Context of computing
    1. Introduction to the social implications of computing
        • Students will be able to list and explain several ways in which computing affects people's lives (both positively and negatively).