CSCI-374-02
Table of Contents
- Class info
- Introduction
- Texts
- Lectures
- Emacs (videos recommended strongly)
- Virtual Machine
- What is the goal of the class?
- Learning objectives
- What will be covered?
- Grades
- Active College E-Mail
- Ada Statement: Students With Disabilities
- Academic Integrity
- Acknowledgement
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 |
Introduction
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.
Texts
- Haskell
- Lipovaca, Learn you Haskell for Great Good! (free)
- Hutton,Programming in Haskell, 2nd Edition (paid, optional)
- Hurt, Get Programming with Haskell (paid, optional)
- emacs lisp
- Chua, elisp-tutorial (free, highly-recommended)
- The resource is inomplete but contains other references
- Chua, elisp-tutorial (free, highly-recommended)
- Python
- Downey, Think Python 2nd Edition by Allen B. Downey (free, optional)
- LaTeX
- Oetiker The Not So Short Introduction to LATEX (free, optional)
- Javascript
- Haverbeke Eloquent Javascript (free, optional)
- R
- Verzani Simple R (free, optional)
- orgmode
- The org mode team, org-mode (free, optional)
- Dominick, compact org-mode guide (free, optional)
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
Below is a link to the VM as a 4.2 Gig ‘.ova’ file
Here is a link on how to load a VM
What is the goal of the class?
Introduce you to at least four very different programming languages. We will concentrate on Haskell to learn the principles of functional programming and manage complexity. This will be compared to other languages and paradigms including Javascript and Object Oriented Programming.
If the class is successful students will be able to use general principles for data representation & manipulation. They will write efficient, maintainable and modular code.
If the class is successful students will be able to create abstract data types. They will understand the mathematics of both additive and product types.
If the class is successful students will be able to use techniques to analyze the advantages and disadvantages of a programming paradigm for a given problem.
Students will become familiar with tools for contributing to open source projects and open source resources for learning new languages, joining new programming communities and obtaining employment in emerging languages.
Learning objectives
Upon completing the course, you should be able to:
- Connect to the IRC channel for your language, construct a minimal example and ask an appropriate question.
- Write Haskell programs using recursion, higher order functions and user defined types.
- Describe the major categories of Languages and the Software Life Cycle
- Understand the scope rules, type system, parameter passing and data abstraction of a language.
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.
- Programming Paradigms
- Software Lifecycle
- Emacs, Meetups, Git and IRC clients
- Haskell: Intro
- Haskell: Types
- Haskell: Syntax
- Haskell: Recursion
- Haskell: higher-order functions
- Haskell: modules
- Haskell: user defined types
- Haskell: IO
- Haskell: functional programming
- Compilers
- Syntax
- Binding and Scope
- Reflex: Functional Reactive Programming in Haskell
- Concurrency
Grades
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 (dsalane@jjay.cuny.edu), 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 Turnitin.com (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 Turnitin.com and Blackboard has a similar module called SafeAssign. Any written assignments submitted may be subject to evaluation by these or similar programs.
Acknowledgement
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.