Learning Program

The main objective of the internship is to learn. When you first start, you will be part of the initial learning program. The learning program is formatted like a school classroom consisting of learning lectures, labs, and projects. The vast majority of learning activities will involve hands-on projects so all students are provided a computer that they can program on. Most intern groups opt for quizzes and optional homework assignments to help reinforce the learned topics to keep on track.
Objectives
First year
Beyond the first year
Orientation

Each new intern must attend the orientation sessions. Depending on the capabilities of the new students, this will take only one or two sessions. As students will be accessing the command line interface (CLI) of Unix-based OSes as opposed to exclusively the graphical user interface (GUI), it is critical that the students gain adequate familiarity with these systems.
- Interns will be guided through the Code of Conduct, Safety Guidelines, schedule, expectations and will be assigned a laptop for working through the lessons.
- Interns are introduced to Unix-based computer operating systems. Where files are stored, how to navigate in the CLI, how to execute and use common Unix commands, and how to interface between the GUI and the CLI.
New interns are also given a screening of "The Mystery Video".
This video is crucial for understanding computer-related things like magic and tubes.
If you do not watch this video, you will not achieve enlightenment.
Ensure that you learn the shocking truth before proceeding too deeply into your internship!!
Introductory Lessons

The NAND2Tetris program requires some prerequisite knowledge- that is, a foundation in certain computing concepts is needed before you can proceed. These lessons are intended to provide that necessary foundation. New interns will go through a series of lessons to help better understand essential computer engineering concepts.
The lessons cover:
- The origins of computing, what a "computer" is, the evolution of the computer over time
- The mathematics (both arithmetical and logical math) behind computing functionality.
- The fundamental building blocks of mechanical and digital electronic computers.
- Basic electrical circuits, semiconductor physics, diodes, transistors and logic gate operation.
Note: The mathematical concepts in this course are very complex. Experience has shown that these concepts are not beyond the understanding of a high school Freshman but it is important that all interns have a strong understanding of math and an enjoyment of the subject.
NAND2Tetris


The NAND2Tetris course aims to teach the essentials of computer design and operation through a ground-up approach. This is done by having the students build a computer from scratch. The computer design is simple but sufficiently powerful to demonstrate key concepts of computing including hardware and software.
Throughout this course, you will learn about logic gates, boolean algebra, assembly language, operating systems, and more.
We start from the NAND logic gate (which is covered in great depth during the introductory learning sessions) and build up towards a functioning, Turing-complete computer which you can program. The culminating project for students is to program Tetris to run on this computer.
"The book exposes students to a significant body of computer science knowledge, gained through a series of hardware and software construction tasks. These tasks demonstrate how theoretical and applied techniques taught in other computer science courses are used in practice. In particular, the following topics are illustrated in a hands-on fashion..."
Hardware | Logic gates, Boolean arithmetic, multiplexors, flip-flops, registers, RAM units, counters, Hardware Description Language (HDL), chip simulation and testing. |
---|---|
Architecture | ALU/CPU design and implementation, machine code, assembly language programming, addressing modes, memory-mapped input/output (I/O). |
Operating systems | Memory management, math library, basic I/O drivers, screen management, file I/O, high-level language support. |
Programming languages | Object-based design and programming, abstract data types, scoping rules, syntax and semantics, references. |
Compilers | Lexical analysis, top-down parsing, symbol tables, virtual stack-based machine, code generation, implementation of arrays and objects. |
Data structures and algorithms | Stacks, hash tables, lists, recursion, arithmetic algorithms, geometric algorithms, running time considerations. |
Software engineering | Modular design, the interface/implementation paradigm, API design and documentation, proactive test planning, programming at the large, quality assurance. |
The learning paradigm is based on an abstraction-implementation. Students will be presented with concepts and be asked to build something in a virtualized environment. Using what they built, the can build something more complex abstracting away the details of the subordinate components. Though everything is presented virtually, the concepts are concrete. A true physical computer could be built with these parts.
Note: Be aware that the material presented is intended for students of computer science and other engineering disciplines in colleges and universities, at both the undergraduate (typically college Sophomore level or higher) and graduate levels. Prospective interns need to be very conscious of this and take into account the significant amount of time and work this will involve. Students with limited time should avoid compounding their situations.
After Initial Learning
Computer Science Projects
Digital Electronics Projects



All interns are required to work on a project to enhance their knowledge and skills. First year interns will gain an understanding of electronic circuits, logic gates, and timers over the course of a number of electronic lab sessions to create a digital electronic clock. Students will learn how to read and write schematics to document their progress. This introduction to digital electronics is useful for prospective computer scientists and electrical engineers.
After the first year, interns can choose from projects already developed in the program or design a new project. Through the IT department, interns have access to various tools and components to work on a wide range of projects.
Examples of pre-designed project builds available...
- Web server build - Students build an Apache web server and learn how to develop web applications and understand backend systems such as SQL databases, manage information flows and use frameworks.
- Microcontroller projects - Learn how to use microcontrollers and FPGAs to build hardware to accomplish varying tasks. We learn how to do complex tasks using Arduino, Teensy, ESP32 microcontrollers, Rasberry Pi SOCs, Xilinix and iCE40 FPGA development boards.
- Linux server projects - Using virtualized servers, students can build interconnected systems in a flat or hierarchical networked environment to understand system administration concepts.
- Networking projects - Students build a physical network to learn about network communication processes and standards. Advanced projects have students learn how DNS, DHCP, VLANs and other technologies work within a network infrastructure. At District Network Schema, you can see and overview of the school district network connectivity map.
- Computer build - Students will build the subsystems that make up a computer by wiring chips and logic gates together. This series of projects uses breadboards, microprocessors, FPGAs, SRAM and EEPROMs for the physical build and assembly language to control it. This is a major culminating project usually done by seniors. Student teams are formed to build the hardware and program the software to make a functional calculator.
- Programming Computer Graphics - Learn how computer graphics work by building a graphics engine for developing games. Students are walked through a series of projects to learn about rendering objects, textures, sprites, double buffering, illumination, particle systems, collision detection and parallax.
Choose Your Own Adventure
After the first year, interns have the option to engage in a more free-form curriculum, based on the interests of the group. Interns have chosen to pursue networking, cybersecurity, and programming curricula.
Interns can propose a custom project that better fits with their interests. These projects would be vetted by a coordinator and evaluated for how well they pertain to identified learning objectives. Students must fully document their progress so that it can become part of the portfolio of project ideas for other interns.
Examples of custom projects include...
- Website - students can setup servers and create websites to learn about the underlying technologies that run them. The website that you are on right now was built by students as an information repository for interns. Their work was interrupted due to the pandemic so there is a lot of room for continuing the development and growth of the site.
- Network infrastructure design - students can build small network with switches, routers, firewalls and servers to learn the fundamentals of network administration.
- Cybersecurity lab - students can setup servers to practice cybersecurity techniques to implement red/black/grey hat teams to test breach and detection methodologies.
Additionally, after the first year, you will be eligible to participate in field work more often.