CSCI-374-01

Class info

Class Number CSCI 374-01
  Programming Languages
Instructor Evan Misshula
Credits 3
Enrollment ??
Semester Spring 2017
Room 6.64-02 NB
   

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.

Location and Time

  • Where: Rm: 6.64.02, New Building, CUNY John Jay
  • When: Mondays and Wednesdays 7.20 - 8.35

Texts

Computers in the classroom

This is a hands on class. You will be in front of a computer during class throughout the semester. Please feel free to use the computer to take notes or use the class Etherpad to discuss the course material, but do not use the computers for non-class related topics.

What is the goal of the class?

  • Introduce you to at least four very different programming languages. These are Python, Javascript, Clojure and Haskell.

  • 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.
  • Write a Python library
  • 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.
  • Describe the fudamentals of compilers and interpreters

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. Python
  4. Emacs, Meetups, Git and IRC clients
  5. Haskell: Intro
  6. Haskell: Types
  7. Haskell: Syntax
  8. Haskell: Recursion
  9. Haskell: higher-order functions
  10. Haskell: modules
  11. Haskell: user defined types
  12. Haskell: IO
  13. Haskell: functional programming
  14. Compilers
  15. Syntax
  16. Binding and Scope
  17. Clojure
  18. nRepl and Cider and Fig-Wheel
  19. Reflex: Functional Reactive Programming in Haskell
  20. Concurrency
  21. Threads

Lecture Notes

IO Practice programs

  • ioZipFile

  • The corresponding org files are available on our google group

Quiz

Git Repo

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.

http://bit.ly/1wwrUR1

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.

Tutoring

Advanced Data Structures & Programming Languages (CSCI 373 & CSCI 374)

Tuesday & Thursday 1 pm to 5 pm Jennifer Holst

Students who find that they need assistance at other times and days should try to set up specific appointments by contacting:

Freddy Velez freddy.velez@jjay.cuny.edu or Jennifer Holst Jennifer.holst@jjay.cuny.edu

ATTENDANCE POLICY

Students enrolled in this course are required to attend all lecture, recitation and laboratory sessions of the section for which they registered. (During summer session, two weeks of classes are covered each calendar week.) Excessive absences (defined above) will result in a reduction in the grade. Attendance is taken solely from roll sheets circulated at the beginning and/or end of each session. Lateness or early departure (resulting in missing no more than 15 minutes of a session) counts as 1⁄2 absence. Students missing more than 15 minutes of a session will be counted as absent. If the college is officially closed, thereby canceling all classes, an announcement will be found on 237-8000, and broadcast on AM stations WINS (1010), WOR (710), WCBS (880), WADD (1280), WMCA (570), WLIB (1190), and WFAS (1230), as well as FM stations WCBS (101.1) and WBLS (107.5). If a class will be cancelled for extraordinary circumstances, the instructor will email an announcement to the preferred email of enrolled students as soon as practicable. This has not happened in recent memory.

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 372-01) 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

Although I wanted to teach this material for a long time. 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). 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.