Griffin Newbold
Fourth Year Undergraduate at Columbia University
Head Teaching Assistant and Projects Student for Professor Gail Kaiser
Former Teaching Assistant for Professor Adam Cannon
Incoming Software Engineer @ Capital One
Located in New York, New York
This page will describe the relevant courses I have taken during my time at Columbia. This is will effectively be the course descriptions in my own words, plus some may be unfamiliar with the courses Columbia offers so this makes it better, any course denoted with a single asterisk represents those I will be taking in the upcoming semester (Fall 2024), any course denoted with two asterisks represent courses for which I am heavily considering taking in future semesters. The selections will be sorted by course-id per academic year.
Freshman Year at Columbia
COMS 1004, Introduction to Computer Science and Programming in Java
This course taught the basics of programming in Java, starting from the description of elementary searching and sorting algorithms in pseudocode to defining basic variables in Java, then following along the same route as most introductory courses loops, conditionals, file i/o exceptions etc. I had the opportunity to skip this course and jump straight into 3134 but I decided to take this course just in case there was any extra information that I hadn't been taught previously and to give myself a smooth introduction to how CS@CU was all about.
ENGL 1006, Introduction to Computing for Engineers and Applied Scientists
This course was effectively just the same as 1004 but in Python, a course required for all students of the Engineering school no matter what their major. While doing basically everything described above in COMS 1004, it also introduced students to essential Python libraries such as Numpy and gave us a brief introduction to different applications of computation such as cryptography and machine learning.
ENGL 1102, The Art of Engineering
This course is described as "gateway lab" connecting the math and science we learned in high school to what we would be doing in college. This was effectively a course designed to teach about the different fields of engineering in a way that provided a nice introduction to each field that allowed undecided students to get exposure and help aid their decision. This course featured a semester long project in each team of 4-5 people had to design a physical game within a given budget and present it at the end of semester expo. A more in depth description of this project can be found in the projects tab. Along with this course project we did a half semester long engineering-field specific seminar held every other week that explored the field in depth more and built up to another project, I participated in the Computer Engineering group and our project was designing a CPU digitally using Logisim.
COMS 3134, Data Structures and Algorithms in Java
This course is the effective standard for a Computer Science education, every Computer Science student has to take this course at every accredited institution in the country. We started by learning about generics in Java along with elementary algorithm analysis (Big-O) then quickly progressed to learn about the standard data structures, LinkedLists, Stacks, Queues, Heaps, Trees, and HashMaps. We then ended the course by describing useful algorithms for completing certain tasks. Like Dijkstra's algorithm, Kruscal's algorithm, Merge Sort, Quick Sort, Topological Sorting, Breadth First Search and Depth First Search.
Sophomore Year at Columbia
COMS 3157, Advanced Programming
This course introduced us to the C programming language and taught the basics of low level programming. Each assignment effectively built on the previous one and the course culminated with us creating a multi-process three-tier architecture message lookup service. This course took a deep dive into File I/O and HTTP protocols along with learning the C programming langugage.
COMS 3203, Discrete Mathematics
This course was the standard introduction to the math needed to succeed in the CS major at Columbia. Focused on formal logic along with writing proofs, whether it is proof by contradiction or induction. The course then went into different fields of Discrete Math, Discrete Probability, Combinatorics, Number Theory, Cryptography, Functions and Relations and ended with an introduction to Graph Theory.
COMS 3251, Computational Linear Algebra
This course was an introductory course into Linear Algebra starting with the definition of a vector and finishing off with SVD and PCA. This course was made interesting by its emphasis on the computation aspect of linear algebra, effectively saying "yes it is important to know how to do this by hand, but it is more time effective to use these python libraries to help us" A more in depth discussion of Numpy along with learning Python libraries such as Scipy and Sympy gave an extra dimension to the course.
COMS 3261, Computer Science Theory
This course essentially worked from the ground up when it comes to the theoretical aspect of Computer Science. Starting with Regular Languages and Deterministic and Non-Deterministic finite automata, the pumping lemma etc in the first half of the semester, transitioning to a discussion of Turing Machines and an introduction to complexity theory and NP-Completeness in the second half of the semester.
IEOR 3658, Probability for Engineers
A standard introduction to Probability Theory designed for engineers. Starting with the basic axioms of probability we worked our way up to Discrete and Continous Random Variables. Along with basic probabiliy distributions. Finishing off the semester with Moment Generating Functions along with the Central Limit Theorem and the Law of Large Numbers.
CSEE 3827, Fundamentals of Computer Systems
A quick detour from the theoretical and software heavy courses we are introduced to the basic elements that make computers possible in the first place. Starting with the elementary logic gates and working our way up to combinational and sequential circuitry. Along with a brief introduction to MIPS Assembly and then wrapping up the course with a look at how a CPU is constructed along with an introduction to the memory hierarchy and cacheing.
COMS 4111, Introduction to Databases
This course introduced the fundamentals of database design and application development using databases. While in the past the storing of data was handled for us now we have to construct our own databases and perform the necessary queries needed to retrieve the proper data. Beginning with Entity-Relationship Diagrams to Transactions and Database Normalization.
Junior Year at Columbia
COMS 3107, Clean Object-Oriented Design
This course is all about designing, documenting, coding and testing robust computer software in line with object oriented design patterns and clean coding practices. More emphasis on Java generics along with discussion of topics like Javadocs, Anonymous classes, threads and graphical widgets.
COMS 4156, Advanced Software Engineering
This course focuses on the software lifecycle using frameworks, libraries and other services. There is a major emphasis on software testing to make sure the code we write is free of bugs.
COMS 4170, User Interface Design
This course serves as an introduction to the theory and practice of computer user interface design. An emphasis is places on the software design of graphical user interfaces. Topics include Basic interaction devices and techniques, human factors, interaction styles, dialogue design and software infrastructure.
COMS 4901, Projects in Computer Science
Anytime a student desires to work with a professor either in a research capacity or any other way and payment is not an option the student is given credit as compensation. I am completing this course under Professor Gail Kaiser as I am designing assignments for a future iteration of her main course COMS 4156: Advanced Software Engineering.
COMS 4995, Parallel Functional Programming
This course is an introduction into the functional programming paradigm in the haskell language. The first half of the course covers basics of haskell while the second half extends that knowledge to cover parallel programming.
Senior Year at Columbia
COMS 3998, Undergraduate Projects in Computer Science
A continuation of my project for Professor Gail Kaiser, after completion of my primary project I was assigned several mini projects to aid in the transition to assisting her and other TAs in Fall 2024's iteration of COMS 4156: Advanced Software Engineering. This was completed over the summer in conjunction with my internship at Capital One.
COMS 4153, Cloud Computing**
To be Updated at a Later Date
COMS 4701, Artifical Intelligence*
To be Updated at a Later Date
COMS 4995, Mobile App Development for IOS*
Introduces Swift and XCode to students and enables them to build iOS applications.
COMS 4995, Applied Machine Learning**
To be Updated at a Later Date
COMS 6998, Design for Generative AI*
Discusses emerging technologies dealing with Generative AI and requires students to build projects using such technologies.