Computer Program

In addition to our traditional school program, FPS offers classes outside traditional school hours to students of our community who are attending other schools: public school, private school or home school.

We offer  Fundamental, Intermediate and Advance level computer courses.  With the exception of our computer courses, some of our courses fulfill the University of California A-G requirements.

Currently, these courses are offered in an online or hybrid style are adjusted instruction.

1.  Computer Science: 1 year course ( UC approved)
2.  Computer program C:  1 year course
3.  Computer program C++:  1 year course
4.  Computer Programming Java:  1 year course
5.  Web Development: 1 year course
6.  Game Design: 1 year  Course

Fundamentals: courses

1. Introduction to Computing:

The Introduction to Computing course is a foundational course in the field of computer science and information technology designed to provide beginners with a comprehensive introduction to the basic concepts, principles, and applications of computer science as a first step in learning about computers. Students are not usually required to have a background in computer programming or technology, but rather are introduced to core concepts and related areas of computer science in a generalized manner. Students learn about the basic workings of computers (including hardware components, CPUs, memory, input and output devices, etc.), data representation and storage, computer networks and communications, algorithms and programming, data structures, operating systems, and computer security and privacy through Introduction to Computing, which lays the groundwork for more in-depth study and practice thereafter. 

2. Introduction to the C language:

Learning C is a step-by-step process that requires a gradual acquisition of basic concepts and programming skills. Students first need to understand programming concepts, such as variables, data types, operators and so on. They will also need to learn the installation of the programming environment and the basic syntax, including variable declarations, assignments, control flow statements, function definitions, and so on. After mastering the basics, they will learn about arrays and pointers, mastering the relationship between pointers and arrays as well as solving problems by writing small programs.

Learning Points:

Basic syntax (including variables, data types, operators, expressions, statements, functions, etc.), control flow, arrays and pointers, strings and writing small C programs to practice the concepts learned.

3. Data Structures:

Learning data structures is a step-by-step process that involves learning different data structure types as well as their operations and applications one by one. Students first need to understand the concept of data structures, how they organize and store data, and the advantages and disadvantages of different data structures. Data structures need to focus on the concepts of arrays, chained lists, stacks and queues, trees and binary trees, and graphs. 

Learning Knowledge Points:

Basic data structures (e.g., arrays, chained lists, stacks and queues), advanced data structures (e.g., trees, graphs, hash tables, sets), algorithmic complexity analysis, searching and sorting algorithms, recursion and iteration, dynamic programming, and graph algorithms.

4. Algorithm design:

Students need to take further courses in algorithm design and analysis on top of mastering C language and data structures. The course covers algorithm design ideas, analysis techniques, and applications, aiming to cultivate students' abilities to design, analyze and implement efficient algorithms in solving various problems and to evaluate the efficiency and performance of designed algorithms. The course specifically introduces the analysis methods of the complexity of algorithms and commonly used algorithm design techniques as well as the corresponding classical algorithms. The course also develops the students' abilities of abstract thinking and flexible use of algorithms to solve problems, laying the foundation for further computer science research and applications.

Learning Knowledge Points:

Basic algorithm analysis: time and space complexity, asymptotic symbolic representation and its application;

Classical algorithms: partition method, recursive method, dynamic programming, backtracking method, branch limit method, greedy algorithm;

Algorithmic optimization and approximation algorithms: the NP-complete problem.

5. Operating systems:

Learning about operating systems is a complex process involving computer science and computer engineering, covering a wide range of aspects such as underlying hardware, system architecture, process management, memory management, and file systems. The course requires students to understand the definition, role and function of operating systems, learn about different operating systems, master process management and scheduling, and understand memory allocation and file systems.

Learning Points:

Understand the basic concepts of operating systems and learn about operating systems such as batch systems, multi-channel batch systems, time-sharing systems, real-time systems, etc. Get a clear understanding of the concepts of processes and threads, as well as memory allocation (virtual memory, paging and segmented memory management techniques), and file systems.

6. Databases:

Studying databases involves understanding how data is organized, stored, and managed, and how database management systems (DBMS) are used to process data. The course requires students to understand the definition of a database, its role, and learn about different types of databases. Students will focus on the relational database model and learn to manipulate data using Structured Query Language (SQL). They will also learn how to design databases and understand database management systems. Finally, they will attempt to design and implement a small database project using the database knowledge gained.

Learning Knowledge Points:

Understand the definition of a database, the role of a database management system (DBMS). Understand the concepts of relational databases and learn to manipulate data using SQL language. Learn database design and optimization. Learn about indexing and query optimization, database security and permissions.

7. Computer networks:

Computer networks is a discipline in which computer development and communication technology are closely integrated and constantly evolving. It is designed to introduce the basic concepts, architectures, and related technologies that computers play over. The course systematically and comprehensively introduces network architecture, data communication fundamentals, OSI reference model, data exchange technology, local area network (LAN) technology, network interconnections, and TCP/IP protocols, covering all levels from local networks to the global Internet. It also fosters students' abilities to understand and configure the network and provides students with an in-depth understanding of the fundamentals of computer networks, the workings of network protocols and the ability to configure and manage network devices.

Learning Knowledge Points: Fundamentals of computer networks: definition, composition and function of networks, classification of networks; OSI reference model: physical layer, data link layer, network layer, transport layer, application layer;

Wireless and mobile networks: fundamentals of wireless communications (cellular networks, Wi-Fi, Bluetooth, etc.), mobile IP and mobile network protocols.

8. Design Patterns:

Students should first take courses in object-oriented programming and data structures. The design pattern course is an important course in the field of software engineering. It allows students to familiarize themselves with commonly used design patterns, understand their working principles and usage scenarios, and be able to apply verified common design patterns in the software design process in order to solve common design problems and improve code quality and maintainability. By learning design patterns, students can improve their software design capabilities, reduce duplication of effort, and increase code reusability and maintainability.

Learning Knowledge Points: Design Patterns Fundamentals; Creation-based design patterns: singleton pattern, factory pattern, abstract factory pattern; Structural design patterns: adapter pattern, decorator pattern, appearance pattern; Behavioral design patterns: observer pattern, strategy pattern, command pattern.


Intermediate level

1. Microcontroller development in C language:

Based on the knowledge of C programming, students learn to use C to write programs to operate microcontrollers (microcontrollers) in embedded systems. Students should learn the basic concepts of microcontrollers, choose the appropriate development board as well as the development environment, start from the most basic LED blinking program, and gradually write more complex programs to control various devices. They should understand the advantages of portability, structured programming, and library support demonstrated by the C language in the development of microcontrollers and learn a series of steps in microcontroller development using the C language, including code writing, compilation, linking, downloading, debugging, etc.

Learning Knowledge Points:

C language fundamentals: basic syntax, control structures, data structures, etc.;

Basic microcontroller: microcontroller architecture, registration of programming, I/O operation, interruption of  processing, memory management, etc.

2. Java Programming:

 Students should first learn the basic syntax and core concepts of the Java programming language, understand the principles of object-oriented programming, and be able to design and create simple classes and objects. Students should also learn to use conditional statements and looping structures to achieve logical control of programs. Students should be familiar with common data types, arrays and collections, and be able to store and process data. Finally, students will be guided to practice simple projects to practice problem solving and cooperative development skills, as well as to develop good programming habits, debugging skills and document reading skills. 

Learning Knowledge Points: Basic introductory: set up the development environment, install Java development tools; Java basics: variables and constants, data types, basic operators, comments, conditional and looping statements, functions; Object-oriented: classes and objects, the concept of encapsulation; Project practice: calculators, student performance management.

3. Web Development:

Students should first learn front-end technologies such as HTML, CSS and JavaScript to be able to build beautiful and interaction-rich web interfaces, understand front-end frameworks such as React or Vue, and be able to build modern single-page applications. At the same time, students should learn to use back-end languages (such as Node.js, Python, etc.) and databases to realize data storage and management as well as master the basic API design and network communication to realize front-end and back-end data interaction. Finally, students are guided to practice small-scale Web projects to practice problem-solving and teamwork skills.

Learning Knowledge Points: Front-end development: HTML, CSS, JavaScript; Front-end framework: Vue.js, React.js; Back-end development: Node.js, Python; Project practice: simple personal web pages, small interactive games or calculators, etc.

4. Java Big Data Analytics:

On the basis of mastering Java programming knowledge, students learn to use Java and related big data processing frameworks to process, mine and analyze large-scale data sets. Students first learn the basic concepts of big data analysis, understand the basic data mining and machine learning knowledge, and master the steps of conducting big data analysis. They also learn the use of big data processing frameworks, how to use Java's visualization libraries to visualize the results of the analysis as well as the principles of learning distributed file systems and other big data storage technologies.

Learning Knowledge Points: Java basics: basic syntax, data types, object-oriented programming, etc; .Common frameworks: Hadoop, Apache Spark; Visualization library: JFreeChart, JavaFX

5. Game Development:

Students should first acquire a basic knowledge of C/C++. Students learn game development by mastering the basic syntax of C++ and object-oriented knowledge such as control structures, data types, pointers and references, memory management and other concepts. Students should master specific elements of C++ game development such as the use of game engines for development, improve game performance by learning multi-threaded programming and network programming, and master the use of audio libraries such as FMOD to add sound effects and music.

Learning Knowledge Points: C/C++ basics: C++ syntax, data types, variables, functions, pointers and references, memory management; Game Engine: Unity, Unreal Engine; Development environment: vs code, visual studio code

Audio libraries: FMOD, OpenAL

6. Python Programming:

Students should first learn the core fundamentals of python and the basic syntax of python such as variables, data types, lists, etc. to master the use of python. They will learn the object-oriented programming ideas and advanced features of python to differentiate between python as a high-level language and a basic language. At the same time, students should learn the commonly used third-party libraries and modules of python to learn to use python's rich ecosystem of resources. Students should also learn about domain-specific applications of python, which ensures that students can provide immediate solutions to problems in different domains.

Learning Knowledge Points: Python basics: data types, variables, functions, advanced features (slicing, iteration, generators, iterators), IO programming; Object-oriented programming: classes, instances, access restrictions, inheritance and polymorphism; Common third-party libraries: numpy, pandas, matplotlib; Network Programming: TCP Programming, UDP Programming

7. Python Crawler:

Students should first master the basic concepts of crawlers and the HTTP request and response mechanism and understand that a crawler is a program that automatically obtains information from a web page, realizes data collection through HTTP requests and page parsing, and stores the collected data in a local file or database. Students should understand that a crawler usually consists of request sending, page downloading, data parsing and data storage. Students should also master the classification of crawlers, learn the libraries and crawler frameworks (e.g., Scrapy) often used by crawlers, and store data. Finally, students should recognize the anti-crawler mechanisms and tactics of certain websites, as well as comply with the ethics and laws governing the use of crawlers. 

Recommended books: "Python Web Data Collection,” "Python Crawler Development and Projects in Action,” "Writing Web Crawlers in Python”

8.  Data Visualization:

Students begin by understanding the basic concepts of what data visualization is and why it is important in analytics. Students are expected to master different types of charts and graphs and their applicability to different types of data, as well as learn to use Python's data visualization libraries, such as Matplotlib and Seaborn. They will understand methods for drawing basic charts (e.g., line graphs, bar graphs, scatter plots) as well as learn to create interactive visualizations using advanced data visualization libraries such as Plotly and Bokeh. Finally, they will learn data visualization design principles such as the selection of charts, labels, colors, and sizes and perform hands-on visualizations with small-scale data sets.


9. Linux learning:

Students should further learn to use the linux system on top of mastering the operating system. They will master the basic knowledge of computers, a preliminary understanding of the Linux system characteristics, installation steps, and basic commands and operations with basic computer network knowledge and basic knowledge of data communication. Students will master the Linux file management methods and techniques, have a basic knowledge of user and group management, and master the Linux network knowledge,  gaining a clearer concept of the TCP/IP protocol and the OSI seven-layer model. They will acquire Linux disk and file system management skills, know how to install Linux software packages, and gradually master the programming skills of Shell scripts. Students should also be proficient in Linux common commands, file and user management, text processing,  and Vim tool use.

Learning Knowledge Points:

Virtual machine installation of Linux, as well as Linux common commands, file and user management, text processing, Vim tools, basic Linux system operation, Linux network management and configuration, Shell script programming

10. Data mining.

Students should further acquire the ability to analyze and process data on top of mastering the python language. For given data and some problems, data analysis and statistical tools are utilized to analyze and present the data. Students will utilize python's statistical function modules such as mean, median, sd, var, scale etc. for analysis. They will also utilize statistical knowledge such as mean, median, and standard deviation to improve efficiency in handling data. Finally, students are guided to utilize the computational power of computers to mine the value of data in a massive amount of data.

Learning Knowledge Points:

Excel, filtering, sorting, formulas, mean, median, standard deviation, numpy library, scikit-learn library


© Copyright , Foothill Preparatory School - All Rights Reserved