Associate Professor of Computer Science
His main research interest is in the area of genetic optimization of neural networks for human-like tasks, mainly for cooperative, team-based games. He is currently studying ways in which the coding of evolved parameters affect the performance of artificial multi-agent systems under environments with changing conditions. He is also interested in issues of technology and society, such as access to STEM education for underrepresented students, privacy and data collection on the Internet, and the effect of new media and new technology on the economy.
His papers have been presented at conferences such as the International Joint Conference on Neural Networks, the Congress on Evolutionary Computation, and the International Conference on Neural Information Processing.
This course will examine the ways in which current technology facilitates and even encourages the collection of information on individuals, the ways in which that information can be used, pros and cons of such tendencies, and a variety of techniques to either expand or restrict the sharing and collection of data. The course will both deal with the mathematical foundations of these techniques and its social implications. No previous computer experience is required for the course. Successful students will gain knowledge on how data is collected during online activities, what that data can be used for, and how that data collection can be made easier or harder. Successful students will be exposed to cryptography theory, secure network, issues around big data, and recent advanced in computing a they relate to these issues (such as quantum computing, for example).
This course exposes students to several major artificial intelligence (AI) techniques. For each of these techniques we start by looking at basic definitions and theoretical considerations, followed by looking at open source software packages that implement the AI approach, and then how to use these software packages for decision-making steps within larger applications. Techniques we look at include: searching, decision trees, artificial neural networks, evolutionary computation, Hidden Markov Models, and Naive Bayes Classifiers. By the end of the semester, successful students understand the theoretical foundations of each approach, and are equipped to correctly choose which approach to use for different needs. Prerequisite: a semester of college level programming
Mobile communication devices such as smart phones and tablets have become prevalent in the U.S. These devices have the capacity to change the way in which people interact with each other and with information. In this course we will study how to develop programming code for these devices, the current state of technology and use of mobile computing devices, and a series of user interface design concepts angled towards maximizing user efficiency with these devices. Prerequisite detail: at least one college level course in computer programming, preferably using an object oriented language like Java, C++, or Python.
This course is designed to give students a strong introduction to computer programming, with an emphasis on their developing their own projects by the end of the semester. As a course that can provide a strong foundation for further computer science courses, this class will expose students to input/output operations, if-else structures, loops, functions, objects, and classes. The course will also introduce students to the use of Python libraries developed by the Open Source community in order to incorporate advanced features into their own programs. Some of these libraries include Pygame, pyEvolve, and Pylab. No prior programming experience is necessary.
Bigger-sized software programs, which are developed through a longer time span, require development steps that are not necessary for smaller projects. This course will expose students to the design, implementation, testing, and maintenance of this type of projects, putting particular but not exclusive emphasis on agile development methods. Students will be involved in the actual GROUP implementation of a major piece of software, in conditions similar to those found in industry. Prerequisite: Students must have ample experience before the beginning of the course with the C, C++, or Java, or some other high level languages, in at least a semester of computer programming experience. By the end of the semester successful student will be able to: understand the reasons for software engineering, and act accordingly; understand the differences between the waterfall model and agile models of software engineering, and when to best use each of them; understand what is involved in each of the following step by having engaged in each of them: requirement engineering; system modeling; architectural design; software testing.
This course will expose students to the major topics involved in developing real-life applications that make use of data in order to dynamically generate websites. Emphasis will be placed on both standard database theory, such as normalization and integrity, and real-life deployment, installation, and maintenance of database driven websites. The course will concentrate on the Model-View-Controller software architecture. Code development will be done using Ruby and Ruby on Rails, but previous experience with these languages is not assumed. The course will also briefly touch on other database models and languages, but not much. Prerequisite: At least two semesters of college-level programming experience with a high level programming language.