The Computer Science program is designed to expose students to thinking like a computer scientist, including learning how to transfer concepts from one language to another. Students will learn how to work in a team to tackle complex technical problems and we'll look at current events through a computer science lens. The goal is to give students both technical ability and comfort with computers and computer science.
How do we model what we know? How do we use these models to explain our ideas? How do we solve problems using these models? How can we analyze and improve these solutions? Computer science is an approach to answering these questions that is grounded in mathematical theory and computer logic. The study of computer science is the study of the languages, symbols and theories that we use to answer these questions and to develop new questions. Over the course of four semesters, Computer Science students at St. Mark’s will study the process of problem solving through the lens of computer programming in Java and other languages. Introduction to Computer Science and Application Design are process- rather than information-driven, as students learn to tackle complex challenges in strategically and tactically sound ways, building their arsenal of problem-solving methods. Information Design and Advanced Topics in Computer Science assume a thorough knowledge of these skills and add a layer of theoretical knowledge of common models and algorithms. Students taking Information Design and Advanced Topics in Computer Science in a single year will be prepared to take the Advanced Placement Exam in Computer Science.
Computer Science I
This course provides an introduction to computer programming and organization. It begins with using the SCRATCH programming environment to introduce students to the concepts of computer programming. Every student completes a number of projects which will be maintained on the cloud-based SCRATCH community servers. After SCRATCH students work with MIT App Inventor, a programming language that allows students to create Android phone apps, but which has a visual, block-based look and feel that is similar to SCRATCH. With MIT App Inventor, students are encouraged to create phone apps of their own design. Students, in past terms, have created some impressive apps—some very socially responsible and some directed to solving true global problems. In the final stages of the course, and as time allows, we will move from the visual, block-based programming environments of SCRATCH and MIT App Inventor to Python, a text-based programming language. While programming in SCRATCH, MIT App Inventor and Python, concepts of binary number systems, data representation and some computer architecture concepts are introduced. In the past, students have programmed games such as Tic-Tac-Toe, Connect-4, Maze Runner and Pac-Man-style chase games. Students learn to plan out their ideas with flow charts and execute programming using a controlled implement-and-test approach. (No prior programming experience is expected or required)
Computer Programming with Java I
This course takes a project-based approach to provide a rigorous introduction to the fundamentals of computer programming using the Java computer programming language. Java is an object-oriented programming language and the basics of creating classes and objects in Java is provided. Students will be introduced to Java variables, and control structures like if/then statements and program loops. Data structures such as arrays will be introduced. Students will use their programming skills to tackle challenges like sorting numbers, computing solutions to mathematical puzzles and other projects. Animation basics such as frames, timers and threads will also be introduced. A game, such as Brickbreaker, Pente or other game of class choosing, with animated graphics will also be created which can be run on a web page. Java I is a beginning programming course, open to all, but please note Java I has a subject matter and workload that is somewhat more rigorous than the introductory work of Computer Science I. If you want to jump into coding with a text-based, professional coding language, or you have had some basic experience with languages like Python and you want to try Java, this course is for you. (No prior programming experience is expected; however, Departmental permission is required)
Computer Programming with Java II
Intermediate Java Programming
This course continues the work started in Computer Programming with Java I. Students here will have a good understanding of the basics of object-oriented programming and how to create a simple Java program consisting of multiple interacting objects. Topics in this course will expand on the basics and move into areas such as data structures (e.g. stacks, heaps, queues), algorithm construction and determining the efficiency of a program. More complex programs of student interest will be developed as final projects. (Prerequisite: completion of Computer Programming with Java I or Departmental permission).
New Media I
Fall & Spring
Join the new media revolution! The Internet has given people the power to express themselves in ways that people ten years before thought never possible. Today, a person can be a filmmaker, book publisher, animator, designer and entrepreneur and have a world-wide presence from one computer in that person’s home. Learn the skills of the new media by learning how to build your own web page. In this course students will learn the basics of HTML (HyperText Mark-Up Language). Students will develop stories and narrative that will be structured through HTML. Animated content and games will be added using FLASH a program that allows students to create Web-ready animations. In addition, students will learn the basics of web filmmaking using iMovie and then a more powerful program Director. (No prior programming experience is expected or required)
Robotics—Team Engineering Large Robots
Want to team up to create something large and powerful? This is the course for you! Large Robots introduces students to the world of robotics programming and mechanical engineering, using the tools and equipment of the FIRST Robotics competition (FRC, http://www.usfirst.org/roboticsprograms/frc), an international high school competition self-described as “as close to ‘real-world engineering’ as a student can get.” Drawing on the challenges presented in FRC, students will learn to cooperatively teleoperate, program and develop physical systems for 50–120 pound robots. Key areas of focus include modular design approaches, use of sensors to interact with the robot’s environment, mechanical engineering of robotic components and systems and structured teamwork (via scrums and Agile development processes). Final projects may include work on components of the current St. Mark’s Team 3566 competition robot. Students in this course are not required to join the robotics team, however completion of this course will well-prepare students for robotics competition and future engineering challenges. (Prerequisites: none)
Robotics—Small Robots (formerly Robotics I)
Robots are fun and easy to build. Robots also do more than just perform simple tasks. Robots can be built to express joy, present riddles and provide fun. Join in the movement that will transform the future—come and learn the basics of robot building. This course will provide a basic introduction to robotics and provide a way for students to build and create using the tools of robotics. Students begin using a pre-built robot such as an iRobot Create and then progress to building their own robots using Lego Mindstorms and/or Vex or other building systems. A history of robotics from initial robots to robotics use today for industry, art and fashion will also be discussed and explored. With some skill level achieved, students will then progress to planning and building a robot for operation or artistic expression. (No prior programming experience is expected or required)** Offered in even Spring Years: Spring 2016, 2018, etc.)
Robotics/Circuits Engineering with **Physical Computing
Electronic devices surround us, but to most people their workings remain a lifelong mystery. More and more, too, electronic devices are being made to “sense” and respond to light, sound, touch and/or collect and process other kinds of “physical” input. The world of “physical computing” is in its infancy but already we see cars that can “sense” speed, and location enough to change lanes and park. Wii and Kinect systems sense and respond to player motions. We are at the beginning of an age of physical computing where electronic devices will be very in tune with real world stimuli. The touch sensitive iPhone is just the beginning. Circuit Physics with Physical Computing takes students on a journey into this world of electronics and Physical Computing that is far away from the PC and the common interface of computer mouse and keyboard. With knowledge of basic electronics, physical computer “sensing” technology and basic microprocessor programming concepts, students can quickly design and build electronic and physical computing devices that are fun, functional and artistic. Students will learn how individual circuit elements like resistors, capacitors and semiconductors behave and students will also learn basic techniques for controlling electronic circuits using digital microprocessors. Students will subsequently combine these elements to make more complex devices, such as radio transmitters, electronic musical instruments which respond to physical input, environmentally responsive toys, robots or light displays or other electronic or “physical computing” inventions of their imagination. (No prior programming experience is expected or required) ** (Offered in odd Spring Years: Spring 2017, 2019, etc.)
Advanced Topics in Computer Science
Advanced Topics in Computer Science is a course for those students who have some programming experience and who wish to do more. This year-long Java programming course stresses above-all an algorithmic approach and “thinking like a computer scientist” to solve programming problems. An algorithm can be looked at as a step-by-step plan, or method, to solve a problem. If the algorithm is efficient and clever, the “plan” can be implemented in code to solve hard problems like organizing vast sets of numbers, planning the shortest route through a complicated map, or predicting the next President of the United States, (e.g. based on household purchase data). Developing the skill to create an efficient algorithm is a great aim for a student. The skill of “thinking like a computer scientist” can be applied in many other areas. In using an algorithmic approach, students can look carefully and critically at various solutions and pick the one that works “best.” Algorithmic solutions can be tested empirically by running programs for time (the fastest implementation wins) or by looking at them mathematically, such as by looking at the number of times the algorithm needs to run for a given set of data. The “Big O” (Order of N) analysis which analyzes the upper limit behavior of algorithm is just one way of classifying which algorithm works “best.” Study of data structures goes hand-in-hand with work in designing algorithms, so Advanced Topics in Computer Science will give students experience in developing programs with data structures such as: arrays and linked lists and abstract data types such as stacks, queues, trees and graphs. Approaches such as “divide and conquer”, “dynamic programming” and recursion will be explored in exercises and in larger projects. Implementations of sorting methods such as Selection Sort, Insertion Sort, Bubble Sort, Shellsort, Quicksort and Merge Sort will be explored as a way to test different algorithmic approaches.
The students will work on nightly programming assignments and create larger programming projects, such as games and other interactive applications following this algorithm-design approach. Special topics such as Web-based applications or phone application building may be explored, based on student interests. Students entering Advanced Topics in Computer Science will have previous programming experience either from Java I (prerequisite course) or permission of the instructor. Students on entry will show a good comfort level in setting up Java program (in an editor such as Eclipse) and in program-building using control statements (e.g loops and conditionals), subroutines (Java methods), and Object-Oriented elements like classes.
St. Mark's Computer Science (@StmarksCompSci)