Courses (Teaching Philosophy)

- The first course in software engineering, covering the software life cycle, proper selection of data structures and algorithms, and the availability and choice of programming paradigms for appropriate design and implementation of well-engineered software. An open laboratory and significant programming experiences form an integral part of this course.
- Taught: Fall 2015, Spring 2016, 2017
- Machine Learning is the study of computer algorithms that improve automatically through experience (Mitchell 1997). In this class we will study both the algorithms themselves and the theoretical foundations of this field. Machine learning algorithms to be studied including decision trees, artificial neural networks, Bayesian learners, evolutionary algorithm, and boosting and bagging techniques. We will study a computational learning theory and PAC learnablity.
- Taught: Spring 2003, 2005, 2007, 2011, 2013, 2015, 2017
- This course provides a broad exposure to intelligent systems, including related fields such as artificial and computational intelligence. Topics include intelligent agents, search, game playing, propositional logic and first-order predicate calculus, uncertainty, learning, communication and perception, and philosophical foundations of intelligent systems. This course is a COEN design elective in the area of intelligent systems.
- Taught: Fall 2006, 2008, 2010, 2016
- Introduction to the analysis of algorithms. topics include: asymptotic complexity notation, recursion analysis, basic and advanced data structures, sorting methodologies, dynamic programming, and graph algorithms, including heuristic search techniques such as best-first and A-star algorithms. Advanced topics include NP-completeness theory and linear programming.
- Taught: Fall 2011, 2012, 2013, 2015, 2016
- Chaos and Nonlinear Signal Processing is a seminar course that investigates recent research in temporal data mining. We will study methods for finding hidden structures in time series. These hidden structures are found using techniques such as phase space reconstruction, clustering, neural networks, and genetic algorithms. Once discovered these structures are useful for solving system classification problems and for predicting events in time series. Example application areas include motor diagnostics, heart arrhythmia classification, speech recognition, and financial time series prediction. In addition to the topics mentioned above, this course discusses machine learning, time series analysis, adaptive signal processing, wavelets, and nonlinear dynamics.
- Taught: Fall 2000, Spring 2002, 2004, 2006, 2010, 2012, 2014, 2016
- Students will be introduced to computer programming with an emphasis on objet-oriented programming (OOP) and OOP design methodologies. The students will learn about typical programming constructs including data types, data structures, control structures, data input and output techniques as well as several algorithms used for solving engineering problems. In addition, students will learn to use modern programming tools in an integrated development environment by focusing on developing software solutions to significant engineering problems.
- Taught: Spring 2000, 2001, 2006, 2010, 2011, 2012, 2013, 2014
- This course introduces students to embedded systems, the types of hardware that can support such systems, and the interfacing used in embedded systems. The course is a combined laboratory and lecture course, which directly applies the embedded systems techniques using various embedded devices.
- Taught: Fall 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2013
- This course provides a broad exposure to the field of artificial intelligence. Topics include intelligent agents, search, game playing, propositional logic and first-order predicate calculus, knowledge bases, planning, uncertainty, learning, communication and perception, and philosophical foundations.
- Taught: Fall 2001, 2003, 2005, 2009
- Evolutionary computation consists of a set of search methods based on the Darwinian principle of survival of the fittest. The methods include genetic algorithms, evolutionary strategies, and evolutionary and genetic programming. These methods have been successfully applied to many different problem domains including optimization, learning, control, and scheduling. This course will provide students with the background and knowledge to implement various evolutionary computation algorithms, discuss tradeoffs between different evolutionary algorithms and other search methods, and discuss issues related to the application and performance evaluation of evolutionary algorithms. .
- Taught: Spring 2001, 2002, 2009
- Overview of computer system design. Cost and performance specification. Design of arithmetic and logic units. Fundamentals of central processor architecture and a comparative study of computer instruction set architectures. Detailed study of microprocessors, including instruction, execution timing and other timing considerations. Discussions of memory and I/O devices, including the interfaces to the CPU and I/O transfer techniques. Study of common bus standards.
- Taught: Fall 1996 (EECE191), Spring 1997 (EECE191), Spring 2002, 2003, 2009
- This software engineering course focuses on fundamental issues, such as engineering process of software development, process models, process management, and quality control; concepts of object orientation; design of classes and objects; and software requirement analysis, use cases, software architectural design, detailed design, implementation and testing. Advanced topics included the Rational Unified Process, Unified Modeling Language (UML), software design patterns, and Computer Aided Software Engineering (CASE) tools.
- Taught: Fall 1995, Spring 2004
- This laboratory course introduces students to the field programmable gate array (FPGA), the VHDL hardware description language, and an interactive development environment (IDE) for designing digital circuits. The course builds upon concepts taught in the computer architecture and systems software courses. Students will design, implement, and test a sequence of progressively more complex circuits culminating in a design project. The design project may include the implementation of a microcomputer, systems software, or evolutionary hardware.
- Taught: Fall 1999, 2000, 2001, 2002, 2003
- Overview of computer hardware: information representation, the control unit, implementation of instruction sets, memories and storage devices, internal bus organization, the arithmetic/logic unit, the input/output unit, interfacing peripherals. Overview of computer software, operating systems components: memory management, input/output, file management, scheduling, resource management, layered operating system design, programing languages and language translators, application layer design, software tools, and system design and design process. Programming exercises in MIPS assembly language and in the Java programming language.
- Taught: Fall 1997, Spring 1998, Summer 1998, Fall 1998, Spring 1999
- Gaining experience in the design, assembly, testing, and trouble-shooting of digital electronic circuits. Experiments encompass a wide range of topics such as: basic logic gates, integrated circuit specifications, Boolean algebra implementations, standard combinational circuits, sequential circuits design, standard sequential circuits, programmable logic devices, digital interfacing, and microprocessors. 7400 series ICs, PALs, PROMs, and microprocessor devices are used.
- Taught: Fall 1996, Spring 1997