Ex Corde Ecclesiae
✞ JMJ ✞
Veritatis Splendor

Computer Science Program at
Ave Maria University


Recent News

View Dr. Perugini's short course An Introduction to Computer Science that is part of the inaugural Ave Maria University The Pursuit of Wisdom short course series.

View the New Brochure for the Computer Science Program at Ave Maria University.

View the Curriculum for the Computer Science Program at Ave Maria University.

Webinar About the New Computer Science Program at Ave Maria University

Podcast of the interview Dr. Perugini did on artificial intelligence on July 23, 2024 on the The Catholic Theology Show, hosted by Dr. Michael Dauphinais.

Podcast of the interview Dr. Perugini did on artificial intelligence on September 15, 2023 on the The Drew Mariani Show, which airs on Relevant Radio.

Podcast of the interview Dr. Perugini did on artificial intelligence on June 22, 2023 on the Treasure of Faith radio show, which airs on Divine Mercy Radio.


About Computer Science at Ave

Program Director: Saverio Perugini, Ph.D.
Professor of Mathematics and Computer Science

Computer science1 is the study of information processes. In particular, computer science is the study of how to
• describe (using language),
• predict properties of (using logic), and
• efficiently implement information processes (using machines).
Computer science focuses on how to
• describe information processes by defining procedures/functions,
• analyze the costs required to execute a procedure, and
• the fundamental limits of what can and cannot be computed.
Student Learning Goals and
Outcomes for the Major in Computer Science
Goal 1: Provide a major in computer science that is grounded in theoretical computing and the liberal arts while pragmatic and responsive to the current landscape of computing.Outcome 1: Students will demonstrate strong problem-solving, analytical-reasoning, and computational-thinking skills.Outcome 2: Students will demonstrate familiarity with the timeless and fundamental principles underlying computing.Outcome 3: Students will demonstrate an aptitude for creatively implementing elegant and efficient software systems.Outcome 4: Students will demonstrate an understanding of computing, including the mathematics associated with it, as part of God’s creation and the activity of composing programs and proofs as a creative expression for giving glory to God.


1Evans. D. (2012). Introduction to Computing: Explorations in Language, Logic, and Machines. CreateSpace Independent Publishing Platform.

Contact

For more information about the Computer Science program or to schedule a virtual or campus visit, contact

Dr. Saverio Perugini
E-mail: first [dot] last avemaria edu
Tel: +001 (239) 304-7920
Fall 2024 Office Hours:
Wednesdays 11:00 AM - 1:00 PM,
Thursdays noon - 1:00 PM,
and by appointment.
Office: Academic Building, Room 2048
Ave Maria University
5050 Ave Maria Blvd
Ave Maria, FL 34142 USA


Bachelor of Science in
Computer Science

The Computer Science Major consists of ten required computer science courses and two required physics courses. Computer Science Majors are required to take (or otherwise obtain credit for) the standard Latin sequence. The enriched appreciation for formal grammar coming from the study of Latin aids one in computation thinking, learning computer languages, and computer programming. The habits of mind (clarity and precision) necessary for careful parsing of text are essential for the understanding of mathematical principles and theories, and the development of models to investigate particular situations.At the discretion of the program director, students may receive Advanced Placement credit or transfer credit for courses. Highly motivated students are encouraged to participate in undergraduate research under the guidance of a faculty member.Required Courses for the Major
CSCI 151. Introduction to Computer Programming
CSCI 152. Discrete Structures and Functional Programming
CSCI 251. Algorithms and Programming
CSCI 252. Data Structures and Algorithms
CSCI 270. Web/Mobile App Development
CSCI 350. Automata Theory
CSCI 370. Programming Languages
CSCI 390. Operating Systems and Blockchains
CSCI 470. Artificial Intelligence and Machine Learning
CSCI 490. Computer Networks and Security

Course Prerequisite Flowchart

Required Core Courses in the Sciences and Foreign Language
PHYS 221. University Physics: Mechanics (with laboratory)
PHYS 222. University Physics: Materials (with laboratory)
LATN 101. Elementary Latin
LATN 102. Intermediate Latin
Note: Only students who pass MATH 150 Functions with a C or better or place out of MATH 150 with a 19 or better on the AMU mathematics placement exam will be permitted to take CSCI 151 or CSCI 152.

Minor in
Computer Science

The computer science minor consists of CSCI 151. Introduction to Computer Programming and four computer science electives (any CSCI course).

Course Descriptions

CSCI 101. INTRODUCTION TO COMPUTING
Exploration of the most fundamental ideas and themes that constitute the essence of computer science, including language, logic, abstraction, recursion, problem solving and computational thinking, and programming in a block-structured language. Introduction to object-oriented programming, analysis of the cost of executing procedures, and the limits of what can be computed. Prerequisite: MATH 150 or placement. (4 credits)
CSCI 151. INTRODUCTION TO COMPUTER PROGRAMMING
A first course in computer programming. Introduces computing fundamentals, computational thinking, program design, and programming in a block-structured language, such as Python or Scheme. The fundamentals of programming introduced include data types, program control, input and output, functions, recursion, data and procedural abstraction, and debugging. This is a programming-intensive course, but does not assume any previous programming experience. Prerequisite: MATH 150 or placement. This course fulfills the MATH 270 course requirement for mathematics and physics majors. (4 credits)
CSCI 152. DISCRETE STRUCTURES AND FUNCTIONAL PROGRAMMING
Sets, propositional and predicate logic, the nature of proof and proof techniques, induction, relations, functions, combinatorics, and boolean algebra. Introduction to number systems and computing machines (logic gates and digital circuits). Representation of discrete structures and implementation of associated operations using functional programming. Prerequisite: MATH 150 or placement. This course fulfills the university core mathematics requirement for students majoring or minoring in computer science. This course also fulfills a MATH elective for mathematics majors. (4 credits)
CSCI 251. ALGORITHMS AND PROGRAMMING
Foundational, linear data structures, including lists, stacks, and queues, and the algorithms, analysis, and applications associated with these structures. Exploration of object-oriented design and development, including message passing, dynamic dispatch, inheritance, and exception handling. Introduction to concurrent programming. Prerequisite: CSCI 151. This course fulfills a MATH elective for mathematics majors. (4 credits)
CSCI 252. DATA STRUCTURES AND ALGORITHMS
Dynamic, nonlinear data structures including trees, hash tables, priority queues, and graphs with an emphasis on their implementation, uses, and analysis of the computational complexity of algorithms related to these structures. Introduction to the theory of NP-completeness. Prerequisite: CSCI 251. (4 credits)
CSCI 270. WEB/MOBILE APP DEVELOPMENT
Web application development using state-of-the-art tools such as web frameworks, markup and scripting languages, dynamic web pages, server-side technologies, and database access. Introduction to containerization and distributed version control. Prerequisite: CSCI 251. (4 credits)
CSCI 350. AUTOMATA THEORY
Formal languages (regular, context-free, recursive, and recursively enumerable), machine models (deterministic and non-deterministic finite automata, push-down automata, and Turing machines), grammars (regular, context-free, and unrestricted), relationships between these concepts, the Church-Turing thesis, Rice's theorem, and undecidability. Prerequisite: CSCI 152. This course fulfills a MATH elective for mathematics majors and a PHYS elective for physics majors. (4 credits)
CSCI 370. PROGRAMMING LANGUAGES
The study and implementation of fundamental programming language concepts, including syntax and semantics, grammars and parsing, interpreters, binding and scope, parameter passing and lazy evaluation, types, currying, and continuations. Functional and declarative programming are presented using representative languages. Prerequisites: CSCI 151 and CSCI 350. (4 credits)
CSCI 390. OPERATING SYSTEMS AND BLOCKCHAINS
Introduces the theoretical and practical concepts underlying an operating system’s structure and operation. Topics include process and thread creation and management, scheduling, multi-threaded programming and synchronization, deadlock, memory management, virtual memory, and virtualization. Introduction to blockchain and blockchain operating systems. Prerequisite: CSCI 251. (4 credits)
CSCI 470. ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING
Fundamentals concepts and techniques of intelligent systems. Topics include knowledge representation, search strategies, predicate logic, and expert systems. Introduction to machine learning, including supervised and unsupervised learning, regression analysis, neural networks, deep learning, statistical analysis, and data visualization. Prerequisites: CSCI 152, CSCI 251, and MATH 151 (4 credits)
CSCI 490. COMPUTER NETWORKS AND SECURITY
Internet protocols and secure protocols. Topics include the web, domain name systems, reliable data transfer, flow control, congestion control, routing, wireless networks, secure computing, Internet vulnerability, and security. Prerequisite: CSCI 390. (4 credits)

Fall 2024 and Spring 2025
Computer Science Course Offerings

In the Spring 2025 semester, the following courses are offered:CSCI 152. Discrete Structures and Functional ProgrammingCSCI 470. Artificial Intelligence and Machine LearningIn the Fall 2024 semester, the following courses are offered:CSCI 151. Introduction to Computer ProgrammingCSCI 252. Data Structures and AlgorithmsCSCI 370. Programming Languages

Computer Science Curriculum

The curriculum of the Computer Science Program (major and minor), including a variety of four-year plans, is available here.

Frequently Asked Questions

Can you tell me a little bit more about computer science and the computer science program at Ave Maria University?Absolutely. We have a webinar about the new computer science program at Ave Maria University that we encourage you to watch.What will my course load look like each semester as a computer science major?There are a variety of four-year, semester-by-semester course plans for pursuing a degree in computer science, with options for double majoring with mathematics or physics or minoring in data analytics, available here.I could study computer science at a variety of other universities. What makes the computer science program at Ave Maria University different?We teach computer science from an authentically Catholic perspective. What this means is that we are pursuing it neither for purely utilitarian purposes nor in isolation from other important disciplines such as philosophy and theology. We are pursing it for more liberal purposes—to learn about our Creator and His creation, to unite faith and reason, to unite beauty and utility, and to give glory to God through the creative expression of composing beautiful programs.“The Catholic Church has a history of engaging the sciences even as it has cautioned misapplication of those sciences in theories which do not have enough evidence or in fads which die out.”3Right now what the world is sorely lacking is science and engineering professionals who know their Catholic faith and know that it is consistent with reason, science, etc. We teach our students the truth that faith and reason mutually reinforce each other and we cannot have one without the other. The seventeenth century French philosopher, mathematician, and scientist Blaise Pascal said: “There are two equally dangerous extremes—to shut reason out and to let nothing else in.”Lastly, while one should not pursue studies of computer science for purely utilitarian purposes (e.g., to get a job, make lots of money, etc.), we must acknowledge that part of studying computer science involves the consideration of how one will put the knowledge learned into practice. As we all know job opportunities in computing are ample and the compensation is high. Thus, the study of computer science at Ave Maria University is an educational pathway to help young, practicing, faithful Catholics start, support, and sustain strong Catholic families, communities, and apostolates.This is what makes a computer science degree from Ave Maria University unique.(The short article I wrote in Spring 2022 about the new computer science program offers other insights into this question.)There are a variety of free computer science courses online (e.g., Python, Full Stack Web programming, Machine learning, etc.). Why should I attend (and pay for) university when I can study these topics online, at my own pace, and at home?The reality is that most undergraduates cannot learn this challenging material on their own and demonstrate both a deep understanding of it and the ability to put it into practice in a software development context. This is based on my twenty-plus years of experience teaching computer science to undergraduate students.A common theme of my teaching evaluations is manifested through a comment that continues to recur in my teaching evaluations: “I have tried to learn this material before on my own numerous times and I have never learned it as well as I learned it in this course. I now have much deeper understanding of the concepts.”What type of computer is required for the program? And which operating system and software is required?While my preference is that you have an Apple MacBook, any Windows laptop will be fine. However, do not get a Chromebook. Most of the software we use in the program is open source and we can help you acquire and install it once you arrive on campus.What is the career outlook for software developers and computer programmers?...Should I be worried that AI is going to make software developers obsolete?In general, no and especially not at the moment, no.The headlines and hype surrounding this topic have certainly been sensational. We have read that in the all-too-close future coding will be done by deep programming systems and programmers will effectively become specification writers detailing using natural language to specify the type of code they want the computer to spit out. Not so fast.6^Here are multiple reasons why I do not think deep programming systems will entirely replace human software developers any time soon.     - AI is not there yet. Currently, generative AI chatbots or deep programming systems can write programming code for the types of tasks performed by junior-level developers (and that type of code has been accessible on the web through Google searches for years). AI chatbots are not as effective at generating code that integrates multiple software systems or addresses detailed nuances of programming or software specifications.I was recently asked to analyze the code repository for a production-level e-commerce web application that has not been updated in five years or so. The application consists of multiple software systems that need to talk to each other. It was using outdated versions of open-source APIs (application programming interface) and off-the-shelf subcomponents that are no longer being maintained. In other words, the code was a mess. It has incurred what software developers call technical debt. So the question was: do we try to nurse it back to health using patches (computer science lingo for duck tape) or start over. At the moment, a system like ChatGPT cannot answer this question, automatically patch the system if the former option is preferred, or generate the new code if the latter option is chosen. Whether we are talking about AI systems that generate code, understand natural language, or drive cars, there are always a variety of so called “edge cases”—situations that programmers didn’t anticipate and the AI system is not able to deal with.9Developers who have a deep understanding of production-level software development, frameworks, and integration with all the nuances associated with those aspects are still indispensable.Even if we are currently 95% there to entirely replacing programmers or truck drivers (I am not saying that we are), it is that last 5% which makes all the difference. Will self-driving cars entirely replace human operators if they can drive perfectly 95% of the time on the open highway, but have trouble dealing with particulars and anomalies like lanes closures, road construction, and other nuanced situations (i.e., the “edge cases”)? It really is an “all-or-nothing” proposition. A chain is only as strong as its weakest link.Yes, AI will change the work of software developers rather than eliminate software developers. But this is nothing new. The work of software developers has been evolving over the past fifty years and there is nothing (notwithstanding AI) to indicate that it will not continue to evolve. (In general, computer science is not the field for people who are unwilling or unable to adapt well to change.)     - Artificial intelligence relies on actual human intelligence. As a follow-up to the previous point, it is not the chatbot that is intelligent. The intelligence lies with the designer of the learning algorithm and the human experts (i.e., programmers) who supply the data (i.e., programs) on which the system is trained.11,12     - The proliferation of AI points to the need for more, not fewer, software developers. In my view, the proliferation of AI is the strongest evidence of the need for more computing professionals rather than support for the impending obsolescence of software developers. The explosion (and sustained upward trend) in computer science enrollments across the board1 is further evidence that software developers are in high demand.     - Human-generated data is necessary. AI chatbots are often trained using what are called supervised-learning algorithms (e.g., neural networks). Supervised learning is an AI term that refers to “learning with a teacher” and, in this case, the data on which the chatbot (through the algorithm) is trained is the “teacher.” In other words, the chatbots that generate programming code are dependent on public repositories of human-authored programs for purposes of training. They don't just generate code ex nihilo.Concerns and anxieties regarding the risk of AI displacing or eliminating human work are real and heartfelt. But let us not forget that the things that are most worth doing in life (e.g., reading/writing poetry, watching a sunset, listening to classical music, gazing into the night sky, and holding someone's hand)—the things that nourish our souls and make us feel fully human—are worthwhile pursuits in and of themselves.2 A primary purpose of liberal, higher education is to teach you how to think (logically, analytically, computationally) in a way that leads you to truth, beauty, and goodness.So the fear of AI replacing programmers tends to reduce computer science education solely to job training. We must bear in mind though that studies of computer science at the university level must never be reduced entirely to the acquisition of employable skills or, in other words, utilitarian job training.One prevalent idea I am consistently trying to dispel in my computer science students is that one goes to college so one can get a high paying job. This sentiment is completely understandable, especially given the current climate of high tuition costs and rising student debt. But this is not the primary purpose of college or higher education. “It may be true that you have to be able to read in order to fill out forms at the DMV, but that’s not why we teach children to read. We teach them to read for the higher purpose of allowing them access to beautiful and meaningful ideas.”10 Similarly, while job opportunities in the software industry are vast and compensation is high for those who practice computing well, we study computer science and computational thinking to encounter and engage with truth, beauty, and goodness.The ultimate purpose of university studies, including those of computer science, and indeed everything we do in life, is for the greater glory of God and, in the context of Catholic education, to prepare the students to understand, embrace, live out, and promote the Catholic faith.5 So we should see computing as part of God’s creation and the activity of composing programs as a creative expression for giving glory to God the Father and drawing more souls to Jesus Christ, His Son.Is the effect of AI on the computer science job market something that we should be vigilant of when discerning a career? And, if so, are there strategies for mitigating its effects?Yes, of course you should be vigilant of this as well as a variety of other important issues (e.g., the rise of secularism and moral relativism, your health, water pollution, etc.).Again, perspective is important. “We know that all things work for good for those who love God” (Romans 8:28). Christ (and St. Paul and others) through the Holy Scriptures tell us repeatedly “do not be afraid” and “do not fear.” God is a good Father and He gives His children good gifts (Luke 11: 11-12). “My grace is sufficient for thee” (2 Corinthians 12:9). St. Padre Pio instructs us to “pray, hope, and don’t worry.” So trust in God’s providence. “Seek ye therefore first the kingdom of God, and his justice, and all these things shall be added unto you. Be not therefore solicitous for tomorrow; for the morrow will be solicitous for itself” (Matthew 6: 33–34). Thus, be concerned and vigilant, but don’t overthink things. Don’t fret, just get to work, and focus on the things you can control.As far as strategies for mitigating its effects in a world which is placing an increased emphasis on automation, here are a few:     - Focus on skills that are universally applicable. Computing is an intellectual amplifier (not unlike reading and writing) and, thus, the skills one acquires and hones in the study of computer science—problem-solving, analytical-reasoning, and computational-thinking skills—are applicable to a variety of fields. I have a very close friend who has an undergraduate degree in computer science and attended law school and is now an attorney. I have another friend who has an undergraduate degree in electrical engineering and went on to medical school and is now a physician.So place a majority of your energy on developing strong problem-solving skills and you can do this by working problems from standard programming textbooks. Strong problem-solving skills will serve you well in any field.     - Spend some time learning to use a few of the standard tools of the trade, especially those that have endured the test of time:
         - Git (distributed version control)
         - Docker (virtualization, containerization)
         - Linux (an operating system)
         - vi (text editor)
     - Investigate how you can apply computing to one of your secondary interests.
         - If you like biology, look into bioinformatics.
         - If you like art and graphic design, study creative media applications.
         - If you like physics, then you are in the right place because ... (there are too many applications of computing in physics to enumerate here ...)
         - If you like finance and business, look into fintech, block chains, and cryptocurrencies.
In general, become well versed (not an expert) in a secondary field so that aside from being a computing professional or software developer and you can serve as liaison between domain experts in that field and computing professionals.
     - Focus on establishing a deep understanding of the fundamental and timeless principles underlying computer science rather than on fleeting, ephemeral technological fads. Know what the Church-Turing thesis is and what the Turing theorem is. Know that the halting problem proves that there are limits to computation. Have a general understanding of the theory of NP-completeness. These things are eternal in computing.
In general, focus on what matters. A motive of education is the search for a good life.8 Philosophers have long studied the question: What is the good life and how should I live it? We know living a virtuous life in Christ Jesus is the way to happiness on this Earth and the path to eternal life with Him in Heaven. Christendom College philosophy professor John Cuddeback in his LifeCraft blog reminds us of a few ways to make that a bit more concrete in our daily lives: value
         - presence rather than connectedness;
         - reality rather than image;
         - character, virtue, and faithfulness rather than success;
         - the wondrous rather than the shocking;
         - the enduring rather than the passing; and
         - the beautiful rather than the enticing.
What builds character and virtue is carving out time for contemplation: reading, thinking, slowing down, taking walks, engaging in philosophical discussions, and mental prayer. Doing so will help you developing a strong interior life and ground you in a moral and intellectual foundation that will give meaning, color, and texture to your life. May God bless you.

References

[1] Anderson, N. “College is Remade as Tech Majors Surge and Humanities Dwindle: The University of Maryland Showcases Two Trends Reshaping Higher Education, as Debate Intensifies over the Influence of Career Goals in Academia.” The Washington Post, May 20, 2023, Accessed June 22, 2023. https://www.washingtonpost.com/education/2023/05/19/college-majors-computer-science-humanities/.[2] Deresiewicz, W. 2014. Excellent Sheep: The Miseducation of the American Elite and the Way to a Meaningful Life. New York, NY: Free Press.[3] Karlson, H. “The Vatican and AI: Rome Calls For AI Ethics.” Patheos, March 6, 2020. https://www.patheos.com/blogs/henrykarlson/2020/03/the-vatican-and-ai-rome-calls-for-ai-ethics/.[4] Lewis, C.S. 2001. The Abolition of Man. New York, NY: Harper One.[5] Postman, N. 1992. Technopoly: The Surrender of Culture to Technology. New York, NY: Vintage Books.[6] Yellin, D.M. 2023. “The Premature Obituary of Programming: Why Deep Learning Will Not Replace Programmers.” Communications of the ACM 66, no. 2 (February): 41–44.[8] Bloom, A. 1987. The Closing of the American Mind: How Higher Education Has Failed Democracy and Impoverished the Souls of Today’s Students. New York, NY: Simon & Schuster.[9] Greengard, S. 2023. “Computational Linguistics Finds Its Voice: Advances in Artificial Intelligence Permit Computers to Converse with Humans in Seemingly Realistic Ways.” Communications of the ACM 66, no. 2 (February): 18–20.[10] Lockhart, P. 2009. A Mathematician’s Lament: How School Cheats Us Out of Our Most Fascinating and Imaginative Art Form. New York, NY: Bellevue Literary
Press.
[11] Wailzer, A. “The Simple Reason Why AI Will Never Be Smarter Than Human Beings.” LifeSiteNews, Opinion section, May 9, 2023. Accessed June 28, 2023. https://www.lifesitenews.com/opinion/the-simple-reason-why-ai-will-never-be-smarter-than-human-beings/[12] Feser, E. “Artificial intelligence and magical thinking.” March 29, 2019. Accessed June 28, 2023. https://edwardfeser.blogspot.com/2019/03/artificial-intelligence-and-magical.html[13] Pope John Paul II. Ex Corde Ecclesiae. Apostolic Constitution, August 15, 1990.

Reading List

  • Abelson, H., and G.J. Sussman. 1996. Structure and Interpretation of Computer Programs. 2nd ed. Cambridge, MA: MIT Press.

  • Downey, A.B. 2016. Think Python: How to Think Like a Computer Scientist. 2nd ed. Beijing: O'Reilly.

  • Evans, D. 2012. Introduction to Computing: Explorations in Language, Logic, and Machines. This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.

  • Friedman, D.P., and M. Felleisen. 1996. The Little Schemer. 4th ed. Cambridge, MA: MIT Press.

  • Kernighan, B.W., and R. Pike. 1984. The UNIX Programming Environment. 2nd ed. Englewood Cliffs, NJ: Prentice Hall.

  • Lim. D. 2023. Philosophy through Computer Science: An Introduction. New York, NY: Routledge.

  • Miller, B.N., D.L. Ranum, and R. Yasinovskyy. 2023. Problem Solving with Algorithms and Data Structures Using Python. 3rd ed. Portland, OR: Franklin Beedle and Associates.

  • Perugini, S. 2023. Programming Languages: Concepts and Implementation. Burlington, MA: Jones & Bartlett Learning.

  • Rosen, K.H. 2019. Discrete Mathematics and Its Applications. Eighth edition. New York, NY: McGraw Hill.

  • Sonnier, D. 2013. “Computer Science in a Liberal Arts School: Convincing the Skeptic.” Journal of Computing Sciences in Colleges 28 (5): 115–121.

  • VanDrunen, T. 2023. Algorithmic Commonplaces. Portland, OR: Franklin Beedle and Associates.

  • VanDrunen, T. 2012. Discrete Mathematics and Functional Programming. Portland, OR: Franklin Beedle and Associates.

  • Wing, J. M. 2006. “Computational Thinking.” Communications of the ACM 49 (3): 33–35.

  • Webber, A.B. 2008. Formal Language: A Practical Introduction. Portland, OR: Franklin Beedle and Associates.