Table of Contents

Class info

Class Number CSCI 374-02
  Programming Languages
Instructor Evan Misshula
Credits 3
Enrollment 30
Semester Spring 2021
Day Mon. & Wed
synchronous 7.20-8.35 pm EST
online synchronous


Programming languages are the medium through which programmers precisely describe concepts, formulate algorithms, and reason about solutions. In the course of a career, a computer scientist will work with many different languages, separately or together. Software developers must understand the programming models underlying different languages and make informed design choices in languages supporting multiple complementary approaches. Computer scientists will often need to learn new languages and programming constructs, and must understand the principles underlying how programming language features are defined, composed, and implemented.

There has been a revolution in programming languages in the last ten years. This class will introduce you to the major styles of programming languages to make it easier for you to learn and use new languages to write elegant, fast and maintainable code.

The class will be a success if some of these tools make the rest of your career (research, government or industrial) more productive and enjoyable.The syllabus will be updated as the course progresses. The schedule is not currently set and will be starting to be updated soon. You are welcome (and encouraged) to make your own recordings of the lectures.



Emacs (videos recommended strongly)

**1 - Setting up the package manager

**2 - Intro to Org Mode

**3 - How to think about Emacs

**4 - Buffers

**5 - Windows

**6 - Search / Swiper

**7 - Navigation / avy

**8 - Autocomplete

**9 - Themes

Emacs refcard

Virtual Machine

What is the goal of the class?

Learning objectives

Upon completing the course, you should be able to:

Most of these are drawn from the ACM’s CS Curriculum 2013

What will be covered?

All of the technologies have been chosen to be readily available and likely to be around for many years to come. You will gain experience with the following (do not worry if you have not heard of some or all of these). Because this is a one semester class, we will not be able to go into depth on these topics, but this should provide the foundation for you to learn more when you need or want to.

Note: this is not the order that we will cover the material and we might not get to all of these in class.

  1. Programming Paradigms
  2. Software Lifecycle
  3. Emacs, Meetups, Git and IRC clients
  4. Haskell: Intro
  5. Haskell: Types
  6. Haskell: Syntax
  7. Haskell: Recursion
  8. Haskell: higher-order functions
  9. Haskell: modules
  10. Haskell: user defined types
  11. Haskell: IO
  12. Haskell: functional programming
  13. Compilers
  14. Syntax
  15. Binding and Scope
  16. Reflex: Functional Reactive Programming in Haskell
  17. Concurrency


There will a few programming assignments. The problems will be difficult. There will be frequent quizzes at the beginning and end of class. If there is no test your grade for the day will be based on your participation and preparation will determine your grade for the day. Successful completion of all homework should guarantee a grade of ‘A’. In addition there will a midterm and final exam in case students are struggling. Be warned, this is a demanding class.

The general rule of thumb regarding college studying is, and has been for a long time, that for each class, students should spend approximately 2-3 of study time for each hour that they spend in class. Many students carry a course load of 15 credits, or approximately 15 hours of class time each week.

If students are spending considerablely more than 7.5 hours per week on the homework, they are advised to speak with the instructor and adjustments will be made. If you put int the time, there is no reason not to get an outstanding mark. Do not try to game the system by not doing the homework and making it up on the exams. That strategy has not been successful yet.

Active College E-Mail

Students are expected to maintain active and accessible college email and Blackboard accounts. Blackboard will be used to send emails and may be used to post announcements, handouts, additional study materials, text supplements, grades, etc. Use the CUNY Portal Login page help features for a forgotten username or password, or contact DoIT, 212-237-8200 for other help. Verify your CUNY email address is correctly listed on Blackboard and keep the mailbox from filling up and refusing delivery, because you will be responsible for the contents of any email sent to that account.

When emailing instructors for this course, start the email’s subject line with the course and section number (e.g., CSCI 374-02) followed by a brief description. Include your full name in the body of every email. Emails that do not contain these descriptive details may be considered spam, and remain unopened and unanswered. Students are expected to check email regularly.

Ada Statement: Students With Disabilities

Qualified students with disabilities will be provided reasonable academic accommodations if determined appropriate by the Office of Accessibility Services (OAS), 212- 237-8031, located in room L.66.00. Prior to granting disability accommodations, verification of a student’s eligibility must be timely received from OAS by the math department chairman, Professor Douglas Salane (, and the instructor, from the OAS. It is the student’s responsibility to initiate contact with the OAS and to follow the established procedures for having the accommodation notice sent to both the course coordinator and the instructor.

Academic Integrity

Students who succeed in this course and graduate with a degree in Computer Science and Information Security may be hired by government or private agencies to analyze evidence and testify in a court of law, placing in jeopardy another person’s reputation and/or liberty. Dishonesty of any kind cannot and will not be tolerated. Students are expected to become thoroughly aware of the “John Jay College Policy on Academic Integrity” (and other college policies), available on the college’s Web site. Sanctions to the extent permitted by the policy will be imposed and any written material submitted may be transmitted by the instructor to (or equivalent service) to help analyze its originality. See the Undergraduate Bulletin for the College’s Policy on Plagiarism and Cheating, which will be strictly enforced. Plagiarism includes copying ASA or homework answers from others. You are required to do your own work to avoid severe grade and disciplinary penalties. The College subscribes to and Blackboard has a similar module called SafeAssign. Any written assignments submitted may be subject to evaluation by these or similar programs.


I have been a serial languaage learner since 2009. My path has been Basic (1979) -> Pascal (1983) -> APL(1985) -> Gauss (1988) -> Fortran (1989) -> C++ (1990)-> S+ (1991) -> Visual Basic (1992) -> Mathematica (2006) -> R (2008) -> eLisp (2009) -> Ruby (2009) -> Javascript (2009) -> Java (2009) -> Python (2011) -> Scheme (2014) -> Go (2016) -> Clojure (2016) -> Haskell (2016). Although I wanted to teach this material for a long time, how to layout this material owes a great deal to Peter Drake whose considerable open source materials I have borrowed from liberally. I hope this course will add some orthogonal contributions.