This is an introductory programming course using the Java language. The topics include: basic facts about object-oriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Advanced programming concepts covering classical data structures and object-oriented programming. Emphasis will be on building a collection of re-usable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The object-oriented features of Java covered include classes, templates, inheritance, polymorphism and run-time binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
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, 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.
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.
Formal systems for specification and verification of software; review of the first-order predicate calculus; abstract data types, formal specification, preconditions, postconditions, invariants, predicate transformers, proofs of correctness, and partial and total correctness; correctness for assignments, alternatives, iterations, and procedure calls. Tools for deductive verification, model checking, and analysis of specifications and models.
The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and base-b notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.
Schaefer School of Engineering & Science
Center for the Advancement of Secure Systems and Information Assurance
Research & Education
Ph.D., Computer Science, University of Texas at Austin, 1992
B.A., Computer Science, University of Texas at Austin, 1982
Formal methods and security, including: fine-grained confidentiality/integrity policies; automated analysis/transformation of programs combined with access control to enforce such policies; use of program verification technology for security; methodology for formal specification of system components and refactoring of implementations.
Experience & Service
Co-chair of Formal Methods: Foundations and Applications (15th Brazilian Symposium, 2012).
Co-chair of 2009 ACM Workshop on Programming Languages and Analysis for Security.
Verified Software Initiative: chair of Theory Panel, co-chair of 2008 VSTTE workshop, co-chair of 2010 VSTTE workshop.
Member of the Technical Committees for numerous IEEE and ACM research conferences and workshops.
More complete information can be found via my home page and search sites such as Google Scholar and DBLP.
Associate Scientist, International Software Systems, 1986-91
Assistant Professor, Southwestern University, 1991-97.
Visiting Researcher, Microsoft Research Cambridge, Fall 2010.
Research Professor, IMDEA Software Institute, Madrid, Spring 2011.
Achievements & Professional Societies
Grants, Contracts & Funds
NSF award INT-9813854: Towards a Practical Calculus of Object-Oriented Programming.
NSF award CCR-0208984: Integrating Confinement and Access Control for Encapsulation.
NSF award CCF-0429894: Formal Methods for Behavioral Subclassing and Callbacks.
NSF award CNS-0627338: Access Control and Downgrading in Information Flow Assurance.
NSF award CNS-0708330: A JML Community Infrastructure --Revitalizing Tools and Documentation to Aid Formal Methods Research.
NSF award DUE-083084: Scholarship for Service Cybersecurity Scholars Program (co-PI).
NSF award CCF-0915611: Specification Language Foundations for Modular Reasoning Methodologies.
DHS Science and Technology (subcontract): Tunable Information Flow.
NSF award CNS-1228930: Flexible and Practical Information Flow Assurance for Mobile Apps.
Honors & Awards
Best Software Sciences paper, ETAPS 2005.
Davis Memorial Award for Research Excellence, 2006.
Best student paper (coauthor), OOPSLA 2007.
Distinguished paper, ECOOP 2008.
Invited keynote speaker, ETAPS 2010.
Member ACM, IEEE.
Chunyu Tang, David Naumann, Susanne Wetzel. (Nov 2013). "Analysis of authentication and key establishment in inter-generational mobile telephony", International Symposium on Trust, Security, and Privacy for Emerging Applications.
Stan Rosenberg, Anindya Banerjee, David A Naumann. (Jan 2012). "Decision Procedures for Region Logic", 13th International Conference on Verification, Model Checking, and Abstract Interpretation (VMCAI). Springer. pages 379-395, vol 7148 of Lecture Notes in Computer Science. 7148 379-395.
François Dupressoir, Andrew D. Gordon, Jan Jurjens, and David A.Naumann. (2011). "Guiding a General-Purpose C Verifier to Prove Cryptographic Protocols", In Proceedings, IEEE Computer Security Foundations Symposium.
David A Naumann and Anindya Banerjee. (Mar 2010). "Dynamic Boundaries: Information Hiding by Second Order Framing with First Order Assertions", European Symposium on Programming . Andrew Gordon, Springer LNCS. 6012 2-22.
Anindya Banerje and Mike Barnett and David Naumann. (Oct 2008). "Boogie Meets Regions: a Verification Experience Report", Verified Software: Theories, Tools, Experiments (VSTTE). 177-191.
Anindya Banerjee and David Naumann and Stan Rosenberg. (Jul 2008). "Regional Logic for Local Reasoning about Global Invariants", European Conference on Object-Oriented Programming (ECOOP). 387-411.
Anindya Banerjee and David Naumann and Stan Rosenberg. (May 2008). "Expressive Declassification Policies and Modular Static Enforcement", IEEE Symposium on Security and Privacy. IEEE Press. 339-353.
Andrey Chudnov and David A Naumann. (Jun 2010). "Information Flow Monitor Inlining", Computer Security Foundations Symposium. IEEE Press.
Anindya Banerjee, David A. Naumann. (2013). "State Based Encapsulation for Modular Reasoning about Behavior-Preserving Refactorings", Aliasing in Object-Oriented Programming (State of the Art Survey), Dave Clarke, James Noble, Tobias Wrigstad, Springer-Verlag. LNCS 7850 319--365.