Computer Science and Networking Fundamentals


CSCI E-22: Data Structures

A survey of fundamental data structures for information processing, including lists, stacks, queues, trees, and graphs. The course explores the implementation of these data structures (both array-based and linked representations) and examines classic algorithms that use these structures for tasks such as sorting, searching, and text compression. The Java programming language will be used to demonstrate the concepts discussed in lecture, and programming problems must be completed in Java. Key notions of object-oriented programming, including encapsulation and abstract data types, are emphasized.

5 Problem sets

Fall 2020

Github:


CSCI E-55: Java, Hadoop, Lambda Expressions, and Streams

This course is intended for programmers who want to learn Java. The initial focus is on Java as an all-purpose, object oriented language. Later, we cover the main features introduced in Java 8 which expanded Java into a functional language. Tools and applications considered in our explorations include Linux, the open-source platform that is especially valuable for Java developers; Java tools for generating application program interface (API) documents, such as Javadocs; and unit testing using JUnit. This course also covers build tools including Java Generics and the MapReduce programming model (MR), and students will use the Hadoop APIs for solving MR problems We work on a Linux virtual machine, first using the terminal and then moving to a popular, modern integrated development environment (IDE) running in the virtual environment. This course covers the evolution of Java as an object-oriented language, from the simplest program, HelloWorld.java, culminating in the major release known as Java 7. Java 8 took the language through a radical change by supporting functional programming. The second part of this course presents an introduction to those functional features through several hands-on assignments. Students gain a comprehensive understanding of the language, its features, its syntax, and its libraries, up through an in-depth study of Threads. We explore some of the most common uses of Java in today's technical environment.

8 Assignments

Fall 2018

Github:


CSCI E-66: Database Systems

This course covers the fundamental concepts of database systems. Topics include data models (ER, relational, and others); query languages (relational algebra, SQL, and others); implementation techniques of database management systems (index structures, concurrency control, recovery, and query processing); management of semistructured and complex data; distributed and noSQL databases.

5 Problem sets

Spring 2018

Github:


CSCI S-40 : Communication Protocols and Internet Architectures

This course provides a structured approach to the design, analysis, and implementation of networks and protocols. We study various protocols, including TCP/IP, WWW/HTTP, DNS, e-mail/SMTP, multimedia protocols for voice and video (SIP), protocols for network security, and the IEEE 802 LAN protocol suite. In each case, the protocol's functions and the underlying reference model are discussed. LAN architecture and design, routing and switching, and the design and analysis of both private networks and the Internet are presented.

5 Problem sets

Summer 2018

Github:


CSCI S-40: Secure Mobile Computing

Secure mobile computing explores the threat landscape of mobile computing at the device, communication infrastructure, platform, and application levels. Students appraise secure mobile computing tools and techniques to implement confidentiality, integrity, and availability of mobile computing data. Students also review mobile computing communications security and infrastructure security to evaluate eavesdropping and surveillance avoidance techniques

7 labs and final project

Spring 2019

Github: