I am a computer science PhD student and course instructor at Indiana University Bloomington, where I focus on computer science education, programming language theory, compilers, and logic.

I received my Master of Science in Computer Science and Bachelor of Science in Computer Science at the University of North Carolina at Greensboro in the Spring 2022 and Spring 2021 semesters respectively. I was a graduate instructor's assistant for the computer science department in the 2021-2022 academic year. Formerly, I was a graduate assistant for the ITS Learning Center. I was in the Accelerated Master's Program (AMP) which allows students to get their master's degree in one year compared to two.

I have been programming since I was 14 years old, where I started with basic HTML/CSS. I then moved to BASIC and C++ in my sophomore year of high school. Afterwards, I learned Java and several others such as C, Python, F#, Scheme, LISP, Prolog, and others.

**Theoretical Computer Science Interests:** Computer Science Education, Programming Languages, Compilers, Linguistics Syntax and Semantics, Theory of Computation, Computer
Graphics, Algorithm Analysis, Artificial Intelligence

**Practical Computer Science Interests:** Systems Programming, Embedded Software Engineering, Parallel
Computing, Computer Architecture

See also my curriculum vitae for more information.

- IU Email: ljcrotts@iu.edu
- Email: joshuacrotts@outlook.com
- ORCID ID: 0000-0002-7513-5618
- GitHub: JoshuaCrotts
- LinkedIn: JoshuaCrotts

**Theoretical computer science for beginners:**I wrote a book that introduces the fundamental and principles of theoretical computer science to beginners. It is published by J. Ross Publishing and is also available on Amazon.**Computer science education via computer graphics:**As a computer science education researcher, it's pretty evident that I love teaching and helping students learn. To complement this, I enjoy writing creative problem sets and assignments for students. Recently, I wrote an assignment explaining a computer graphics technique known as ray-marching. It was accepted and presented at ACM's 53rd SIGCSE conference. Here is a link to the assignment description.**Automatic generation of syntactically valid and sound arguments:**Generating an argument that is syntactically valid is rather simple. I want to see if it is possible to generate a logically sound argument (i.e., one that is semantically valid) as well.**Cross-site scripting survey:**For my graduate course on software security, I wrote a survey paper about antiquated and modern cross-site scripting detection and prevention techniques.**Compiler vulnerablities and security survey:**For my graduate course on computer security, I wrote a paper where I analyzed vulnerabilites erroneously introduced by compilers and optimization algorithms.**Natural deduction and proof techniques:**My master's thesis discusses an improved automatic natural deduction proving system, better suited for beginning formal logic students across multiple disciplines. Further, we present a gold standard notation/language grammar for encoding propositional and predicate logic formulas to aid in automated testing of theorem provers. This work has extended into two separate papers presented at the 6th International Conference on Education and E-Learning: the first being a comparison of publicly-available natural deduction logic tutors, and the second emphasizing the importance of a gold standard for (classical) logic formulas and notation.**Formal logic education:**I wrote a preliminary paper on the Formal Logic Aiding Tutor (FLAT): a tool that aims to improve formal logic pedagogy. This improved upon the Logic-Learning Assistance Tool (LLAT) project that I built for my undergraduate senior capstone project at UNCG. I presented a poster on LLAT at the 15th Thomas Undergraduate Creativity Expo. The work on FLAT was extended into my master's thesis.**Artificial intelligence:**In the past, I have done research that focuses on rhetoric, education, and Prolog with Dr. Nancy L. Green. I have three published papers in inductive logic programming, antithesis detection, and AI argument scheme education. I presented a poster on the automatic detection of rhetorical devices in science policy articles at the 14th Thomas Undergraduate Creativity Expo at UNCG.**Buffer overflows and kernel security:**For my graduate operating systems course, I wrote a research paper discussing the well-known buffer overflow vulnerability and how it affects kernel security.**Rendering and compression:**I presented a paper on classic rendering and compression algorithms in computer graphics at the 21st Annual Honors Undergraduate Symposium at UNCG.

- CSCI-C 212, CSCI-A 592: Introduction to Software Systems, Spring 2024
- CSCI-C 212, CSCI-A 592: Introduction to Software Systems, Fall 2023

- CSCI-C 212, CSCI-A 592: Introduction to Software Systems, Summer 2023
- CSCI-C 212, CSCI-A 592: Introduction to Software Systems, Spring 2023
- CSCI-C 211, CSCI-A 591: Introduction to Computer Science, Spring 2023
- CSCI-C 211, CSCI-H 211, CSCI-A 591: Introduction to Computer Science, Fall 2022

- CSC 490 - Senior Capstone, Section 01, Spring 2022
- CSC 471 - Principles of Database Systems, Section 01, Spring 2022
- CSC 462/662 - Principles of Operating Systems, Section 01, Spring 2022
- CSC 454/654 - Algorithm Analysis and Design, Section 01, Spring 2022
- CSC 362 - System Programming, Section 01, Spring 2022
- CSC 490 - Senior Capstone, Section 01, Fall 2021
- CSC 471 - Principles of Database Systems, Section 01, Fall 2021
- CSC 362 - System Programming, Sections 01 & 02, Fall 2021
- PHI 310 - Introduction to Formal Logic, Section 01, Spring 2021
- CSC 130 - Introduction to Computer Science, Sections 02 & 03, Spring 2021
- PHI 310 - Introduction to Formal Logic, Section 01, Fall 2020
- CSC 130 - Introduction to Computer Science, Sections 01 & 04, Fall 2020
- CSC 130 - Introduction to Computer Science, Sections 03, Spring 2020
- CSC 130 - Introduction to Computer Science, Sections 01, Fall 2019

**CSCI-P 523**Compilers. Fall ’23.**CSCI-B 629**Advanced Functional Programming. Fall ’23.**CSCI-B 629**Proofs as Programs. Spring ’23.**LING-L 546**Semantics. Spring ’23.**CSCI-Y 799**Computer Science Colloquium. Fall ’22.**CSCI-B 599**Teaching in Computer Science. Fall ’22.**CSCI-B 521**Programming Languages. Fall ’22.**PHIL-P 505**Logical Theory I. Fall ’22.

**CSC 699**Thesis. Spring ’22.**CSC 693**Software Security. Spring ’22.**CSC 661**Principles of Computer Architecture. Spring ’22.**CSC 699**Thesis. Fall ’21.**CSC 681**Principles of Computer Security. Fall ’21.**CSC 656**Foundations of Computer Science (Graduate Mathematics). Fall ’21.- CSC 490 Senior Capstone. Spring ’21.
- CSC 362 System Programming. Spring ’21.
- CSC 439 Introduction to Compiler Design. Fall ’20.
**CSC 677**Principles of Computer Networks. Fall ’20.**CSC 662**Principles of Operating Systems. Fall’20.**CSC 654**Algorithm Analysis & Design. Spring ’20.- CSC 471 Principles of Database Systems. Spring ’20.
- CSC 461 Principles of Computer Architecture. Spring ’20.
- CSC 429 Introduction to Artificial Intelligence. Spring ’20.
**CSC 652**Theory of Computation. Fall ’19.- CSC 340 Software Engineering. Fall’19.
- CSC 339 Concepts of Programming Languages. Fall ’19.
- PHI 310 Introduction to Formal Logic. Fall ’19.
- CSC 330 Advanced Data Structures. Spring ’19.
- CSC 350 Foundations of Computer Science II. Spring ’19.
- CSC 261 Computer Organization & Assembly Language. Spring ’19.
- CSC 230 Elementary Data Structures & Algorithms. Fall ’18.
- CSC 250 Foundations of Computer Science I. Fall ’18.