|
|
 |
|
|
 |
 |
|
|
Summary
|
|
As an adjunct professor at the departments of Computer Science of the University of Illinois at Chicago, DePaul University, Texas State University at San Marcos and the University of Texas at San Antonio, I have taught over 1,000 undergraduate and graduate students since 2004. I have been teaching graduate courses on Distributed Objects, Object-Oriented Languages, Model-Driven Architectures, Software Engineering, Formal Methods of Software Engineering, and Advanced Computer Security. I designed the latter course, got it approved, and taught it at San Marcos in Spring 2005. I earned excellent course evaluations, some of which you will find on this web site.
|
My Teaching Philosophy
|
|
A guiding principle of my teaching philosophy is a paraphrase of the Golden Rule: teach others as you would have them teach you. As a computer scientist I constantly learn new fundamental ideas, and I use these ideas to create new technologies that allow software engineers to accomplish their jobs faster and at a fraction of cost. Therefore I want to be effective at learning new ideas and to develop a clear understanding of their fundamentals fast.
When I am simply presented with a heap of facts accompanied by hard-to-understand formulae or complex diagrams, I consider such teaching method ineffective, since students are inundated with information which they do not comprehend. Instead, I state a problem clearly and in precise terms, and explain the solution to this problem using Occam’s razor as a guiding principle – that is, among other possible solutions this one is the simplest for specific reasons. My teaching philosophy is to give a clear explanation of the core principles and laws, and show how to use them to solve problems.
My teaching is about freedom. Hugh Mercer Cutler said in Recalling Education that a person is truly free only if s/he can order a bewildering variety of goods and make it less bewildering. The ultimate freedom is to understand the complexity of the surrounding world and to know few choices that control and manipulate it. In the complex world of computer science this freedom enables software engineers to harness the bewildering variety of principles, theories, and laws and use them to create software systems with no deficiencies.
I believe most students take computer science and software engineering courses for a specific reason – they want to become professional software engineers. Some of them may already have experience working for high-tech companies. They take classes not only because they want a degree, but also because they want to acquire knowledge that they can use in their professional lives. Their desire to learn practical techniques makes some of them develop critical attitudes towards theory, falsely thinking that “real programmers” do not need it. It is my job to prove them otherwise.
When teaching a course, I use my background of over twenty years of hands-on software development in industry and founding my own companies to establish the trust between me and my students. I promise to them that I would never require them to learn anything that is not needed in the software industry. I tell them that if they find out that some material is superficial, then I would drop my requirement that they should learn this material. Occasionally, students take up on the task of proving to me that certain topic is not relevant, and during the argument they change their minds and develop interest in this topic because I explain how this knowledge will help them to accomplish their tasks.
Computer science theory is an integral part of my research. I extend and use results in theoretical computer science to create technologies for software engineers to improve their productivity. When teaching a topic, I show to students how theoretical results are used in software technologies. For example, students of computer science often complain about topics like set theory or predicate calculus as boring. When teaching graduate-level course on Formal Methods of Software Engineering, I start with a problem that is interesting and easy to understand. I present a small program that has bugs in it, and I ask students to find these bugs. It takes them a while to do that, and then I tell them that there is a tool that can find these bugs automatically. In some cases I used Alloy Analyzer, a tool developed by the MIT Software Design Group for analyzing models. Then I show to my students how to create a model of the program in question using the Alloy structural modeling language. This language is based on first-order logic and the set theory. Next, I run this model in the Alloy Analyzer, and the bugs that students worked so hard to find, are determined automatically within a minute. Seeing is believing, and this example convinces my students immediately about the value of the synergy of theory and practical knowledge
|
My Teaching Experience
|
|
I have taught ten different undergradulate and graduate courses at four different research universities in the USA.
- CS 540, Advanced Software Engineering, Fall 2010, Fall 2011. Graduate-level course, Department of Computer Science, U. of Illinois at Chicago.
- CS 107, Introduction to Computing, Summer 2010. Undergraduate course, Department of Computer Science, University of Illinois at Chicago.
- CS 480, Database Systems, Spring 2010 Graduate-level course, Department of Computer Science, University of Illinois at Chicago.
- CS 474, Object-Oriented Languages, Spring 2009. Graduate-level course, Department of Computer Science, University of Illinois at Chicago.
- SE 457, Service-Oriented Architectures, Spring 2009, Spring 2010. Graduate-level course, Department of Computer Science, DePaul University, Chicago, IL.
- SE 549, Model-Driven Software Development, Winter 2009. Summer I, 2009, Advanced graduate-level course, Department of Computer Science, DePaul University, Chicago, IL.
- CS 441, Distributed Objects, Fall 2008, Fall 2009. Graduate-level course, Department of Computer Science, University of Illinois at Chicago.
- CS 5392, Formal Methods of Software Engineering, Spring 2004, Spring 2006, Graduate-level course, Department of Computer Science, Texas State Univerisity at San Marcos.
- CS 5391, Survey of Software Engineering, Spring 2004, Fall 2004, Spring 2005, Graduate-level course, Department of Computer Science, Texas State Univerisity at San Marcos.
- CS 5103, Software Engineering, Summer 2004, Graduate-level course, Department of Computer Science, University of Texas at San Antonio.
- CS 4378X, Computer Systems Security, Fall 2004, Spring 2006, Undergraduate-level course, Department of Computer Science, Texas State Univerisity at San Marcos.
- CS 5369X, Advanced Computer Security, Spring 2005, Graduate-level course, Department of Computer Science, Texas State Univerisity at San Marcos.
|
|
|