The use and internals of modern operating systems. Lectures focus on internals, whereas programming assignments focus on use of the operating system interface. Major topics include: the process concept; concurrency and how to program with threads; memory management techniques, including virtual memory and shared libraries; file system data structures; and I/O.
An introduction to programming language design and implementation, with an emphasis on the abstractions provided by programming languages. Assignments involve problem-solving issues in principles of programming languages such as Scheme and ML. Recursive types and recursive functions; structural induction; abstract data types; abstract syntax; implementing languages with interpreters; static vs. dynamic scoping, closures, and state; exceptions; types: type-checking, type inference, static vs. dynamic typing; object-oriented languages: classes and interfaces, inheritance, and subtyping; polymorphism and genericity; and design patterns and the visitor pattern.
This course is an introduction to the structure and design of compilers. Topics include lexical analysis; syntax analysis; symbol table construction; semantic analysis; syntax-directed translation; and if time permits dataflow analysis, liveness analysis; and register allocation. The emphasis in this course is on the integration of the various parts of a compiler. Each student writes a complete compiler for a small, but substantial, language.
This course is an introduction to programming and administration of mainframe computers, which are the backbone of modern enterprise computing. Introduction to z/OS and z/VM; protection and virtualization; total cost of ownership (TCO); converstaional Monitoring System (CMS); initial program load (IPL) and launching new virtual machines; writing scripts in REXX; interactive z/OS facilities: TSO/E, ISPF and Unix; Unix system services; JCL and SDSF; transaction management using the Java CICS API; and network programming concepts: virtual LANs, open service adapters, and hipersockets.
CS 548:Enterprise Software Architecture and Design
This course addresses the important engineering issues in building largescale enterprise software systems. The course emphasizes service-oriented architectures (SOA) and best practices for building service-oriented enterprises in a vendor-neutral fashion. Introduction to SOA; BPM; project management, and configuration management; Web services; mainframe services, virtualization, and data integration; application integration; legacy integration; enterprise integration; federal enterprise architecture (FEA); and case studies.
Developing robust applications in distributed environments. Coursework includes developing a fault-tolerant distributed application. RPC and RMI; Web Services; application servers (e.g., JEE and Websphere). Transactions: concurrency control and recovery, distributed transactions, nested transactions, and business transactions. Models of distributed systems, impossibility results, and Byzantine failures. Protocol design and examples (2PC and 3PC). Distributed snapshots. Logical time and vector clocks. Replication for fault tolerance: primary-backup and state machine approaches, quorum consensus, and process groups. Peer-to-peer networks.
This course introduces the field of mobile computing and the closely related field of pervasive computing. Topics covered include: mobile hardware, wireless communication, ubiquitous data access, resource scarcity, sensing and actuation, location and context awareness, security and privacy, design methodologies and infrastructure, and end-to-end application considerations.
SOC 542:Enterprise Software Architecture and Design
This course addresses the important engineering issues in building largescale enterprise software systems. The course emphasizes service-oriented architectures (SOA) and best practices for building service-oriented enterprises in a vendor-neutral fashion. Introduction to SOA; BPM; project management, and configuration management; Web services; mainframe services, virtualization, and data integration; application integration; legacy integration; enterprise integration; federal enterprise architecture (FEA); and case studies.
SOC 606:Introduction to Developing Internet Applications
This is a survey course of techniques and technologies for developing Internet applications, particularly for the Web. Web servers and security; three-tier client server architectures; database design and administration; and server- and client-side scripting in Web applications. The course also introduces basic software engineering principles and practices, including project management, requirements acquisition, design, testing and configuration management, reliability, security, and risk management.
Schaefer School of Engineering & Science
Department:
Computer Science
Program:
Computer Science
Research & Education
Research
My research interests are in tools, including semantics, for ensuring that software is "safe" and "secure." I have worked on module systems for programming-in-the-large, software adaptation for safe dynamic library updates, various extensions of object-oriented languages to enable reuse, type inference, and language-based security. My work in security leverages techniques in programming languages and software checking to establish end-to-end security properties for applications.
Education
Bachelor of Commerce, University College, Dublin, Ireland, 1981.
Master of Management Science, University College, Dublin, Ireland, 1982.
M.Sc. in Computer Science, University of Maryland, College Park, Maryland, 1987.
Ph.D. in Computer Science, University of Maryland, College Park, Maryland, 1990. Dissertation title: A Programming Environment Based on Types as Specifications.
Experience & Service
Institutional Service
Academic Planning and Resources Committee (APAR), 2006-8.
Program Director, MS in Service Oriented Computing, 2007-present.
Program Director, MS in Enterprise Computing, 2008-present.
Computer Science Department Director, 2006-7.
Achievements & Professional Societies
Grants, Contracts & Funds
A Programming Environment Based on Types-as-Specifications. Individual NSERC Research Grant, 1991-4.
A Type System for Software Reusability. ITRC (Ontario Institute for Technological Research Center) Center of Excellence Grant, 1991-3. With G. Cormack (P.I.), J. Ophel, P. Buhr and M. Coffin.
Semantics-Based Support for Application Frameworks. Individual NSERC (Canadian National Science and Engineering Research Council) Research Grant, 1994-8.
Software Engineering for Distributed Computing and Networking. Acting Principal Investigator. With A. Compagnoni, J. Geller (NJIT), D. Klappholz, N. Minsky (Rutgers), D. Naumann, Thu Nguyen (Rutgers), Y. Perl (NJIT), R. Scherl (NJIT), S. Wetzel. New Jersey Commission on Science and Technology, January 1999 to December 2004.
Distributed Access Control for Accountable Systems. With J. Vitek (co-PI). National Science Foundation, Sept 2003 to August 2008.
Professional Societies
Member, Association for Computing Machinery.
Member, IEEE Computer Society.
Selected Publications
Journals
D. Duggan and F. Bent. (1996). "Explaining type inference", Science of Computer Programming, Elsevier. 27 (1).
D. Duggan, G. Cormack and J. Ophel. (1996). "Kinded type inference for parametric overloading", Acta Informatica, Springer. (33), 21-68.
D. Duggan. (1998). "Unification with extended patterns", Theoretical Computer Science, Elsevier. (206), 1-50.
D. Duggan. (1999). "Dynamic typing for distributed programming in polymorphic languages", Transactions on Programming Languages and Systems, ACM. 21 (1), 11-45.
D. Duggan. (2001). "Higher-order substitutions", Information and Computation, Academic Press. (164), 1-53.
D. Duggan and J. Ophel. (2002). "Open and closed scopes for constrained genericity", Theoretical Computer Science, Elsevier. (275), 215-258.
D. Duggan and J. Ophel. (2002). "Type checking multi-parameter type classes", Journal of Functional Programming, Academic Press. 12 (2), 133-158.
D. Duggan. (2002). "Object type constructors", Acta Informatica, Springer. (38), 367-408.
D. Duggan. (2002). "Type-safe dynamic linking with recursive DLLs and shared libraries", Transactions on Programming Languages and Systems, ACM. 24 (6), 711-804.
T. Chothia and D. Duggan. (2004). "Abstractions for fault-tolerant global computing", Theoretical Computer Science, Elsevier. 3 (322), 567-613.
D. Duggan. (2004). "Type-based cryptographic operations", Journal of Computer Security, 12 (3-4), 485-550.
D. Duggan. (2005). "Type-based hot swapping of running libraries", Acta Informatica, Springer. 41 (4-5).
T. Chothia and D. Duggan. (2007). "Capability passing processes", Science of Computer Programming, Elsevier. (66), 184-204.