In accordance to DARI/Poli/UFRJ

Philosophically, this lecture is in complete agreement with the ACM report, which emphasizes this new recommendation in section 3.2.4: "Computer science professionals frequently use different programming languages for different purposes and must be able to learn new languages over their careers as the field evolves. As a result, students must recognize the benefits of learning and applying new programming languages. It is also important for students to recognize that the choice of programming paradigm can significantly influence the way one thinks about problems and expresses solutions of these problems. To this end, we believe that all students must learn to program in more that one paradigm".

Syllabus

Introduction, Paradigms: funcional, logical, imperative, object oriented. Interpretation and Compilation. Sintax Definition, Sintax-Semantics Relationship, Control, Language Systems, Types, Polimorphism, Scope, Memory Location for Variables, Formal Semantics, Memory Management, Objects Orientation Parameters, Cost Models, History of Languages, Cases (Ada, Assembly, AmForth, C, C++, Cobol, Fortran, Haskell, Java, Lisp, ML, Pascal, Python, Smalltalk, Snowball). Practice in ML, Prolog and Java.

ML

The implementation of ML used in this course is Standard ML of New Jersey, you can download it from the Standard ML of New Jersey web site. Linux users may do: “sudo apt-get install smlnj”. The Standard ML of New Jersey web site also has links for downloading a nice emacs mode for ML, experienced emacs hackers might consider installing it for themselves. There are several good ML tutorials available on the Web. A tutorial developed by Stephen Gilmore is called Programming In Standard ML ’97: An On-line Tutorial. The text for this one is very well organized. Robert Harper has a very extensive introductory on-line text, Programming in Standard ML, that includes lots of examples. Andrew Cumming of Napier University in Edinburgh has written a tutorial site for ML called A Gentle Introduction to ML. There are many small tutorial exercises, and if you set things up right you can cut from them and paste into an ML session.

Java

The implementation of Java used in the book is the basic Java Development Kit (JDK), using the simple command-line compiler, javac. You can download this for Windows and Unix platforms from Oracle’s Java site; Java SE, the Standard Edition, is the one you want. Most Mac OS X systems already have the necessary java and javac commands; to check, run the Terminal application and try the command “javac -version”. It should show the version information for the javac tool, and any version 1.5 or later will work fine. If it shows an earlier version, or if it gives a “command not found” error message, then you will need to install tools maintained by Apple at the Mac Dev Center. This will require registering as an Apple Developer, but it’s free. Those who have already learned to program in Java may be familiar with a integrated development environment such as Eclipse. That will work fine too. In fact, if you are planning to do any Java programming beyond the elementary level covered in the course, it would be a good idea to learn how to use Eclipse, which is very good, very popular, and free. You can download it here. The classic on-line tutorials for more experienced programmers are the Java Tutorials, which are also available in book form. These are very thorough tutorials with many examples.

Norms and evaluation rules (in portuguese).

Playground

/* Sometimes I believe compiler ignores all my comments */

I found this link comparing programming languages to vehicles (“If programming languages were vehicles”) and I think it is funny joke. The arguments are not strictly technical, but it is possible to get the big picture.

Programming Languages Ranking: A rank is a list of items in a group according to some criteria. It doesn’t mean its is undoubtedly true, but that if you agree with such criteria, then the relationship between the items is given by the rank. The TIBOE Index is an acceptable rank for programming languages.

Timeline of the most popular programming languages since 1965 to 2019. So far the most intense ranking I've ever seen.