For the PDF version of my CV, please click here.
SHORT STATEMENT
Colleges are one of the core elements of society. Along with knowledge transmission, a teacher should encourage student discussions, questioning and research. I have been practicing the teaching role since being in high school. During my graduate studies, a teaching assistant's and a lab instructor's roles helped me to take a breath between the periods of reclusive research, enjoy the communication with students and the fruits of knowledge sharing. Moreover, teaching helped me to improve my knowledge of multiple subjects. Today, I am enjoying my position as Assistant Professor at Alfred University, where I have designed and taught several courses for the new Computer Science program. In this role, I also act as an academic advisor to students majoring and minoring in Computer Science. Additionally, I guide students on research projects, providing them with the necessary background, nurturing their research ideas, and coaching them through the research process and the writing of their papers.
EXPERIENCE
Before coming to the USA, I was part-time working as a private math tutor for high school students. After I graduated from Moscow Engineering Physics Institute, I started my career at Diasoft, one of the leading companies that develop banking software in Russia. My duties included preparing and conducting training for banks' employees, to teach them how to use and troubleshoot the complex banking software. In 2014, Diasoft gave me "Employee of the Year" award, thanks to the positive feedback received from bank employees. I was also promoted to a "Senior Implementation Specialist", and later to a "Lead Implementation Specialist" position at Diasoft and had been involved in numerous implementation projects in Russia and abroad.

During my graduate studies at Clarkson University and Rochester Institute of Technology, I worked as a Teaching Assistant for various courses. For all of the courses that included an instructor's evaluation, I received positive feedback from students with an average grade above 4 out of 5. In 2016-2017, I was instructing introductory labs for C++ (CS-141) at Clarkson University for more than 40 students and held office hours (5 hours per week). Besides, I was responsible for grading lab assignments and exams. I was assisting Dr Jeanna Matthews and the lecturer Padraic Cashin. In 2016-2017, I was holding office hours and grading homework assignments for the advanced C++ course (CS-142, up to 50 students) under Dr Alexis Maciel. The grading included giving detailed feedback to students in electronic form. In 2016, at Clarkson University, I instructed labs for the Computer Networking course (CS-455/555) with up to 50 students. The labs were based on the GENI testbed to simulate different network topologies and scenarios. I was assisting my advisor Dr Yaoqing Liu. In 2018, at Clarkson University, I instructed labs for the Operating Systems class (CS-444/544) for up to 40 students. In the lab, students were required to design several standard mechanisms of an Operating System on top of a toy open-sourced operating system XV6. In 2019, at the Rochester Institute of Technology, I held office hours for a graduate course for Computer Algorithms (CSCI-665) with more than 60 students and worked as a homework and exam grader. I was assisting the department chair of Computer Science Dr. Mohan Kumar.

Today, I teach different Computer Science courses to students of Alfred University, CS majors and non-majors. My courses are designed to offer an engaging learning experience through a variety of hands-on coding activities and labs. During a course, students have multiple opportunities to apply theoretical knowledge to real-world scenarios, which provides them with a deeper understanding of the subject.

I have designed and taught the following courses:
  • Computer Science I (Introductory to Computer Science), in-person and online;
  • Computer Science II (Data Structures), in-person;
  • Database Systems, in-person;
  • Computer Networking, in-person and online;
  • Computer Algorithms, in-person.
I have advised dozens of undergraduate students majoring and minoring in Computer Science. Additionally, I co-advised several graduate students at Rochester Institute of Technology on their research capstone projects. These projects covered topics such as RDMA kernel bypassing and the integration of the Kubernetes container orchestrator with the programmable data plane.
METHODOLOGY
I believe there are several keys to successful teaching. First of all, a teacher should have a deep knowledge of a class subject and a strong understanding of the adjacent subjects. Second, the teacher should be able to have a fresh look at a subject from a student's point of view. For this goal, I review materials every morning before classes. Also, I have found it very efficient to explain the material using real-life simple examples. Third, a teacher needs to encourage the active participation of students in the class, with hands-on exercises and discussions. Additionally, providing assignments that prompt students to study outside of class is valuable, considering the diverse ways in which students learn. For my courses, I designed dozens of quizzes, labs and other activities. Fourth, a teacher should give detailed feedback on assignments submitted by students. Students should be encouraged to review their graded work, and possibly discuss it with the instructor. Next, a teacher needs to motivate students with examples, assignments, and projects that solve real-life problems. Finally, the teacher must show integrity in the classroom: to be precise, on-time, clear with assignment requirements, consistently sharing materials online and keeping communication with students during a semester by replying to their emails and holding office hours. If students' schedule does not allow to attend walk-in office hours, they can always schedule an appointment with me using scheduling services such as Calendly.
COMPUTER SCIENCE I AND II

Computer Science I: Introduction to Programming

This foundational course introduces core programming concepts, including variables, functions, loops, data types (integers, floats, strings), data structures (lists, dictionaries, sets), and Object-Oriented Programming. Additional topics include recursion, unit testing, programmable drawing, and advanced programming techniques. Delivered in an interactive tutorial-style format, lectures encourage students to actively code alongside the instructor. While Python is the primary language, the course is designed with versatility in mind, ensuring the knowledge and skills gained are transferable to other programming languages.

Students develop their skills through a combination of guided and independent work. During seven hands-on labs, students receive personalized assistance to reinforce their understanding of key concepts. In contrast, the seven tests are completed entirely independently, allowing students to demonstrate their mastery of the material. Additionally, 16 quizzes provide regular opportunities for assessment and practice.

To further apply their learning, students undertake an independent programming project of their choice, receiving guidance and coding support from the instructor as needed. The course culminates in a presentation of these projects, showcasing their creativity and problem-solving abilities.

Computer Science II: Data Structures

Building on the programming fundamentals introduced in Computer Science I, this course delves into runtime analysis, teaching students to evaluate code efficiency and understand its relationship to data structures. By studying and implementing key data structures—such as stacks, queues, linked lists, binary search trees, heaps, and hash tables—students learn to make informed decisions about which structure is best suited for solving specific problems. This course bridges foundational programming concepts with the advanced techniques needed for efficient software development.

Course lectures feature extensive visualizations and discussions of how data structures work, paired with tutorial-style implementations where the instructor codes with the class's help. Students actively participate by typing the code themselves, asking questions, offering critiques, and engaging in collaborative problem-solving to ensure a thorough understanding of every line.

In addition, the class explores real-world problem-solving techniques through detailed walkthroughs of challenging algorithmic problems, inspired by popular coding platforms like LeetCode. The instructor actively engages in analyzing and solving these problems alongside the students, fostering a collaborative environment. Independent work includes ten quizzes, seven hands-on labs where students implement or apply data structures to solve practical problems, and six tests to assess their understanding and skills. Finally, students complete a term project applying course data structures in software development, exploring new data structures, or reimplementing them in another language, culminating in a presentation showcasing their work and its applications.
ALGORITHM DESIGN
In this course, students explore the mathematical foundations of algorithm efficiency and study fundamental algorithms essential to everyday applications, including divide-and-conquer, graph, greedy, dynamic programming, and network flow algorithms. As with all my courses, it is highly interactive, featuring discussions on algorithm design, visual representations to enhance understanding, and collaborative coding sessions where the class works through implementations together.

The divide-and-conquer module covers the Master Theorem, sorting algorithms, and other divide-and-conquer techniques such as inversions and closest pairs. In the graph module, students study graph representations (adjacency matrix vs. adjacency list), BFS, bipartite graphs, DAGs, and topological ordering. The greedy algorithms module includes Dijkstra's algorithm, minimum spanning trees (Prim's and Kruskal's with Union-Find), and other problems like interval scheduling and partition. Students also explore proofs of correctness for greedy algorithms, ensuring a deep understanding of their application and limitations. The dynamic programming module focuses on foundational theory (Bellman equations) and practical applications such as weighted interval scheduling, Kadane's algorithm, segmented least squares, knapsack, sequence alignment, and the Bellman-Ford algorithm. In the network flow module, students dive into the Max-Flow Min-Cut Theorem, the Ford-Fulkerson algorithm and its implementations, and various network flow applications and extensions.

Classes also involve tackling medium and hard problems from platforms like LeetCode, aimed at enhancing coding skills and preparing students for technical interviews. The course includes 22 quizzes to reinforce complex algorithmic concepts discussed in lectures. Independent in-class work features six labs and six tests, each focusing on a specific module.

The course concludes with discussions on intractability, including topics like NP-reductions and P vs. NP, providing students with a deeper understanding of computational complexity. To wrap up, students deliver a research-style presentation on an algorithm they studied independently, showcasing their understanding and analysis.

DATABASE SYSTEMS
This course provides a thorough exploration of the relational data model, with a deep focus on SQL and procedural SQL. Topics include relational algebra, basic SQL commands for data definition and manipulation, data aggregation using GROUP BY and JOIN, data abstractions, constraints, referential integrity. Students will also learn advanced SQL techniques such as SQL functions, procedures, and triggers, as well as theoretical topics like Entity-Relationship model design and normalization theory. Additionally, students gain insight into SQL database administration, learning key concepts for managing and maintaining databases in real-world applications. The course concludes with a discussion on NoSQL concepts.

The course is highly interactive, featuring hands-on SQL coding tutorials and labs. Students solve challenging SQL problems from platforms like LeetCode to prepare for technical interviews. Assessments include multiple written and coding tests, along with 18 quizzes designed to solidify both theoretical and practical knowledge discussed in the classroom.

Throughout the course, I lead a tutorial where we collaboratively develop a toy 3-tier application. Students follow along as I guide them through integrating the front-end, back-end server, and database, providing hands-on experience with HTML, CSS, JavaScript, and back-end server concepts. For their final project, students apply these skills to implement and present their own database-driven application, using either a 2-tier or 3-tier architecture.
COMPUTER NETWORKING
This course introduces students to the design and operation of computer networks, with a focus on the TCP/IP model and network application designs. Key topics include packet switching, application layer protocols (such as HTTP and DNS), socket programming, transport layer protocols, and principles of reliable data transfer. Students also study network layer architecture, routing principles, IPv4 and IPv6, routing protocols like OSPF and BGP, and Link Layer design. Additional topics include Multiple Access Control, Ethernet, ARP, VLAN, DHCP protocol, NAT, and STP. The course concludes with network security fundamentals, including technologies such as cipher block chaining and both symmetric and asymmetric encryption.

Students gain hands-on experience with Linux networking commands, such as those used for monitoring, configuring, and troubleshooting network interfaces and services. The course also features a tutorial where students code a peer-to-peer (P2P) application, providing practical exposure to real-world network communication.

This highly interactive course is structured around discussion-based lectures, encouraging active student participation. It is enriched by 24 quizzes that review all course material and 11 labs that include trace analysis using Wireshark and network simulations performed on cutting-edge infrastructure such as the FABRIC testbed. These labs include practical exercises involving subnetting, configuring static routing, OSPF, and Software-Defined Networking. For their final term project, students implement and present a networking application of their choice, showcasing their understanding and skills.
STUDENT EVALUATIONS

Here I share the selected student evaluations I received through the years as a Teaching Assistant or an Instructor

"Fantastic TA. Cares about students. Best of luck, Garegin."

"He is always extremely helpful, I would always go to office hours and he would explain things very thoroughly and clearly. One of the best TA's I've had at Clarkson!"

"A very nice guy, taught the information in an interesting and understandable way. Was always helpful when we didn't know what to do."

"You made OS bearable and were very generous and helpful."

"I really like the practice w/ the things we learned in class that we get to do in lab. The best lab days were when it was mostly time to work w/ a short lecture".

"It was an elective course and it was great. I loved it. I learn a lot about programming and gained vast knowledge that I did have. Thanks Professor Grigoryan."

"All the code being available on canvas was helpful. Professor Grigoryan was very effective overall."

"I like everything about the course. One thing I liked really the most was his availability after class."

"I like that Professor really likes and know what he is doing, and he usually have answers on the students questions. I really like a lot of practical assignments we have."

"Overall, I enjoyed the content covered. Networking is a very important topic and we were able to cover a wide range of material. I liked the order things were taught, where an overview was taught, including high level info for each network layer, followed by going through each layer in more depth. I liked having the quizzes after many classes as homework to help reinforce the concepts. I felt two tests was a good amount and covered a good amount of material, and were a fair/good difficulty."

"Prof allowed us to be creative with how we solved problems."

"Dr. Grigoryan explains things in a clear manner, often explaining things multiple ways. I also thought it facilitated problem solving skills, and the problems were quite fun."

"I liked how the course never got boring. We were always taught new ways of solving problems which held my interest."

"I thought the videos were very helpful. I liked going at my own pace. I think the assignments were reasonable and well thought out, it helped me really understand the content. I also liked how helpful the professor was and how quickly he responded to emails."

"There was a strong systematic approach in teaching all of the data types. Every topic felt in order and built off of the next."

"I liked the different topics we went over, and he was available often outside of class"

"I think the course I very interesting and instructor did a good job with encouraging students "

"I liked how interesting the course was and how it kept us engaged throughout the semester."

"Extremely structured and consistent " ... "It's career oriented." ... "I like how it teaches us interview questions" ... "Everything was very organized and clear" ... "Instructor is knowledgeable in his field"

"I learned a lot about SQL and how to implement it into python, Garegin did a good job at teaching the course" ... "The practical SQL instruction (as that is what is most useful professionally), rather than just pure theory."

"I liked the progression of concepts that we learned, it felt very natural going from each topic to the next. I also really liked Dr. Grigoryan's approach to teaching the class in that he had us doing a lot of actual coding after we learned about each algorithm. Not only did this improve my coding abilities of course, but it massively improved my understanding of the concepts."

"He cares a lot about student progress. I was not doing well in this course first and then I started going to office hours and my grade has gone up a lot."

"I like how organized the class was. From day one there was a clear concise schedule. Everything was presented right when we said it would be on the syllabus. I appreciate how enthusiastic, the teacher was while teaching. You can tell the passion that is there, and it makes you want to learn the topic even more."

"I like coding so I was always excited to learn new things. This was the class I looked most forward to every day."

"Dr. Grigoryan is very organized and outlines the course very well."

"Learned a lot of cool stuff that will be very valuable in my coding journey."

"I liked how it was really practical and useful for real life and we did a lot of work."

"It [the course] showed me another way of thinking and approaching coding. The constant quizzes and exercises made it easier to remember and work on what we learnt in class."

"It [the course] kept me engaged with hands-on coding and real problem-solving. I liked what we learned by doing labs on not just listening to theory. The instructor explained topics clearly and was patient when I had questions."
© Garegin Grigoryan, 2026 | email@garegin.info