Skip to main content

Teaching

Courses at North Carolina State University

CSC116: Introduction to Computing – Java
An introductory course in computing in Java. Emphasis on algorithm development and problem solving. Careful and methodical development of Java applications and applets from specifications; documentation and style; appropriate use of control structures; classes and methods; data types and data abstraction; object-oriented programming and design; graphical user interface design.
[Spring 2023, Fall 2022, Spring 2022, Fall 2021, Spring 2021, Fall 2021, Spring 2020, Fall 2019, Fall 2018, Spring 2018, Fall 2017, Summer 2017, Spring 2017, Spring 2016, Fall 2015, Summer 2015, Spring 2015, Fall 2014, Fall 2010, Spring 2010]

CSC216: Programming Concepts – Java
The second course in computing, intended for majors. Emphasis is placed on software system design and testing; encapsulation; polymorphism; composition; inheritance; linear data structures; specification and implementation of finite-state machines; interpretation of inductive definitions (functions and data types); and resource management.
[Fall 2019, Fall 2018, Fall 2017, Spring 2017]

CSC226: Discrete Mathematics for Computer Scientists
Propositional logic and predicate calculus. Logic gates and circuits. Methods of proof. Mathematical induction. Recursive definitions and functions. Solving recurrences. Asymptotic growth of functions. Elementary combinatorics and probability. Introduction to graph theory. Binary relations, including posets and equivalence relations.
[Spring 2023, Fall 2021, Spring 2021]

CSC316: Data Structures and Algorithms
Abstract data types; abstract and implementation-level views of data types. Linear and branching data structures, including stacks, queues, trees, heaps, hash tables, graphs, and others at discretion of instructor. Best, worst, and average case asymptotic time and space complexity as a means of formal analysis of iterative and recursive algorithms.
[Spring 2020]

Summer Camps

College of Engineering Summer Program for High School CSC Summer Camp, There is an App for that!
During the camp, students learned about the software lifecycle and MIT’s AppInventor. Students worked in groups to plan, develop, test, and present their own Android application.
[Summer 2019, Summer 2018, Summer 2017, Summer 2016, Summer 2015, Summer 2014]

Previous Courses at Northeastern University

CS1100: Computer Science and Its Applications
Introduces students to the field of computer science and the patterns of thinking that enable them to become intelligent users of software tools in a problem-solving setting. Examines several important software applications so that students may develop the skills necessary to use computers effectively in their own disciplines.
[Summer I 2014, Spring 2014, Fall 2013, Spring 2013, Fall 2012]

CS3500: Object-Oriented Design
Presents a comparative approach to object-oriented programming and design. Discusses the concepts of object, class, meta-class, message, method, inheritance, and genericity. Reviews forms of polymorphism in object-oriented languages. Contrasts the use of inheritance and composition as dual techniques for software reuse: forwarding vs. delegation and subclassing vs. subtyping. Fosters a deeper understanding of the principles of object-oriented programming and design including software components, object-oriented design patterns, and the use of graphical design notations such as UML (unified modeling language). Basic concepts in object-oriented design are illustrated with case studies in application frameworks and by writing programs in one or more object-oriented languages.
[Summer I 2014, Spring 2014, Fall 2013, Summer I 2013, Spring 2013]

CS4500: Software Development
Considers software development as a systematic process involving specification, design, documentation, implementation, testing, and maintenance. Examines software process models; methods for software specification; modularity, abstraction, and software reuse; and issues of software quality. Students, possibly working in groups, design, document, implement, test, and modify software projects.
[Fall 2012]