I start from the view that learning in computing, data science, and information systems is not primarily the accumulation of procedures. It is the development of disciplined ways of thinking: asking better questions, tracing relationships among people, data, and systems, testing assumptions, and justifying technical and managerial decisions. Technical skills matter, but they matter most when students can use them to analyze problems, evaluate trade-offs, and make responsible decisions.
Information technology is socio-technical. A database, model, program, or platform is never only a technical artifact; it is also a way of organizing work, shaping decisions, and distributing responsibility. I therefore teach technical concepts in the context of the people, organizations, and decisions they affect. Students need more than a correct answer; they need to understand why an approach is appropriate, what its limits are, and how the same reasoning can be applied to new problems.
I also see learning as developmental. Students arrive with different levels of preparation, confidence, work schedules, and professional goals. A well-designed course gives students enough structure to know what matters, enough context to see why it matters, and enough support to recover when they struggle. My goal is not to remove difficulty, but to make productive struggle possible: expectations should be clear, practice should be frequent, and students should have multiple opportunities to act on feedback before they are asked to work independently. In that sense, inclusion is not only a value I hold; it is a design responsibility in every course I teach.
My course design moves from foundations to applied integration to synthesis. Students first build core concepts through focused examples and exercises. They then work with realistic datasets, systems, or scenarios that connect concepts to professional practice. Finally, projects require students to make and defend design decisions, test their work, document their reasoning, and reflect on results.
This progression helps students move from “How do I do this?” to “Why does this approach work, when should I use it, and what alternatives should I consider?” I have used this structure in courses in programming, information systems, database management, business intelligence, data science, and artificial intelligence.
I use worked examples, structured exercises, iterative feedback, and applied projects to make the reasoning behind technical concepts visible. In technical courses, mistakes are not interruptions to learning; they are part of learning. For example, debugging a program, interpreting an unexpected model result, and diagnosing a poorly designed database give students opportunities to practice systematic reasoning rather than simply fixing mistakes.
Clear expectations, transparent assignments, frequent low-stakes practice, and multiple feedback channels help students move from guided practice to independent work without hiding the difficulty of the material.
My teaching is also a form of curriculum development. At Missouri S&T, I have built and refined course materials in programming, data science, analytics, and artificial intelligence. I design materials so that students can revisit examples, execute code, experiment with alternatives, and use the resources beyond a single class meeting. My open textbooks, thinkpy.org and thinkdsm.org, reflect this approach: instructional resources should be accessible, executable, reusable, and continuously improved.
Developing these resources also provides a systematic way to examine the sequence, clarity, and accessibility of my teaching and to revise materials in response to how students actually learn from them.
Teaching and research strengthen each other in my work. My research on information seeking, human-computer interaction, decision-making, and learning systems gives me concrete examples for classroom discussion, while classroom experience surfaces new questions about how people learn technical material and make decisions with information.
I bring that perspective into the classroom by asking students not only whether a system works, but how users interpret it, what assumptions it embeds, and what consequences follow from its design. I see teaching as part of the broader scholarly work of creating, organizing, disseminating, and applying knowledge.