Teaching

Teaching software engineering, grounded in how it's practiced.

I teach across the undergraduate curriculum in the Department of Computer Science at Omar Al-Mukhtar University, drawing on empirical software engineering research to connect course material to how software is actually built and maintained.

Teaching philosophy

Software engineering is learned by building, breaking, and rebuilding systems under realistic constraints. My courses are structured around hands-on projects and code review as a graded activity. I try to bring findings from my own empirical research — on how developers actually use tools, repositories, and crowd resources — directly into the classroom, so students see the discipline as it's practiced today, not as a fixed set of rules.

Academic positions

[Year] — present

Lecturer

Department of Computer Science, Omar Al-Mukhtar University, Libya

[Year] — [Year]

Tenure-Track Assistant Professor

School of Computer Science, Carleton University, Canada

[Year] — [Year]

Postdoctoral Research Fellow

Software Analysis and Intelligence Lab (SAIL), Queen's University, Canada

[Year] — [Year]

Ph.D. in Software Engineering

Concordia University, Canada — supervised by Dr. Emad Shihab and Dr. Juergen Rilling

[Year] — [Year]

M.Sc. in Computer Science

Concordia University, Canada

Courses

6 courses
CS 3310

Software Construction & Design

Undergraduate core course on building maintainable software: version control, testing, modular design, and team-based development.

UndergraduateFall, yearly
CS 4420

Software Testing & Quality Assurance

Techniques for testing large systems: unit, integration, and system testing, mutation analysis, and test automation.

UndergraduateSpring, yearly
CS 4890

Capstone: Software Engineering Practicum

Team-based, semester-long project building a real system for an external partner, from requirements through deployment.

UndergraduateFall & Spring
CS 6210

Empirical Methods in Software Engineering

Graduate seminar on designing and evaluating empirical studies of software systems and developer behavior.

GraduateFall, alternate years
CS 6330

Mining Software Repositories

Graduate course on extracting and analyzing data from version control, issue trackers, and code review systems to study developer behavior.

GraduateSpring, alternate years
CS 6900

Research Seminar: Crowdsourcing & Software Ecosystems

Reading and discussion seminar on crowd-based knowledge sharing (Stack Overflow, npm) and how software ecosystems evolve.

GraduateSpring, yearly