Advanced Programming for Engineers (Spring 2014-15)


The textbook for the course is:

  • Big Java: Early Objects by Cay Horstmann, 5th edition, John Wiley and Sons, 2014, ISBN: 978-1-118-43111-5.

Please note that some of the chapters covered in this course are available only in the electronic version of the textbook and are omitted in the print version.

Students in the course will also be required to frequently access and use online resources such as Oracle's Java API documentation.

Please note that all exams in this course are open-lecture-slides, but not open-text-book. Access to a hardcopy textbook is not required during the examination. Therefore, purchasing an electronic copy of the textbook will adequately serve the needs of this course.

Optional references

Students with advanced interest in Java programming will find it interesting and useful to refer to:

  • Core Java, Volume I--Fundamentals by Cay Horstmann and Gary Cornell, 9th edition, Prentice Hall, 2012.
  • Core Java: Volume II--Advanced Features by Cay Horstmann and Gary Cornell, 9th edition, Prentice Hall, 2013.


This course presents an introduction to the Java programming language with a special emphasis on engineering applications. The course additionally includes a weekly 2-hour lab session, a weekly take-home assignment and an independent programming project.

  • A review. A review of Java fundamentals through examples; Why learn Java; garbage collection; principles of data abstraction and encapsulation; using packages; review of static fields and scope; engineering examples.
  • Inheritance and polymorphism. Concepts of inheritance; using and implementing superclasses and subclasses; access control; the inheritance hierarchy; polymorphism; creating and using interfaces.
  • Graphics and animation. Use of polymorphism in graphics; a basic introduction to graphics; callbacks and inner classes; events, event sources and event listeners; timer events and animation; mouse events; event adapters; graphical user interfaces; customizing frames; layout management and buttons.
  • File input/output and exceptions. An overview of exception handling with examples; Java exception hierarchy; checked and unchecked exceptions; designing your own exceptions; files and streams; the File class; reading and writing text files; engineering examples.
  • Recursion, sorting and searching. Use of recursion in programming; fractals and their use in gaming; applications of recursion in engineering; mutual recursion; sorting on real data.
  • Multithreading. Fundamentals of multithreading; running and terminating threads; using thread pools; race conditions; synchronizing access to objects and avoiding deadlocks; using multithreading wisely.
  • Network programming. Fundamentals of network programming; the TCP lifecycle; application-level protocols; use of sockets; client programs; writing a simple server program.
  • Advanced data structures. The Java Collections framework; an introduction to data structures and how to use them; linked lists; stacks; queues; sets; maps; hash tables and priority queues; tree sets and tree maps; computation of hash codes; use of iterators; engineering examples.
  • Writing an Android app. Using the Android Software Development Kit (SDK); creating a GUI on an Android device; the basic architecture of an Android app; managing multiple activities, services and data in an app; a simple complete example of an Android app.

Grading policy

The grading in the course is based on weekly in-lab assignments, weekly take-home assignments, a project, a mid-term examination, and a final examination. The grade distribution will be as follows:

  • Weekly in-lab assignments: 10%
  • Weekly take-home assignments: 10%
  • Independent project: 10%
  • Mid-term examination: 30%
  • Final examination: 40%

Both your class rank in the exam scores and your class rank in the overall scores will be considered for the final grade.

Policy on exams

All exams in the course will be open-lecture-slides and open-textbook. If you don't have a textbook, the instructor will bring along a few textbooks for use by students during the exam. Use of other books or any other material such as homework solutions or class notes, however, is not permissible. Use of calculators, cell phones, laptops or any other devices capable of computing are prohibited. The exams will cover material discussed in the lectures, homeworks or sections of the textbook given as reading assignments. For example, the exams may include questions on material covered in class lectures or homeworks but not specifically covered in the textbook. Similarly, the exams may include any material covered in a section of the textbook given as a reading assignment but not specifically covered in the lectures or homeworks. A sample exam will be made available to students before each exam.

Policy on independent project

This independent project is designed to allow students a creative exercise in programming. In this project, the student defines the programming project and completes it. The student has the freedom to choose any programming project and is encouraged to choose one that he/she finds interesting. It is suggested that the chosen project be of greater algorithmic difficulty than any of the assignment problems. It is a requirement that students choose a project that uses programming techniques explored in this second course of the two-course sequence. It is strongly encouraged that no two students choose the same project.

Each student is expected to work on his/her programming assignment independently; it is not considered acceptable to copy another student's work or use solutions from any other source.

The independent project will be evaluated on the Originality and quality of problem statement (O), Effort put into the solution (E), Quality of documentation/comments (Q), Correctness, i.e., whether or not the code works as stated (C), Algorithmic efficiency and elegance of the solution (A), and the Difficulty of the problem and the solution approach (D). Each of these categories will be evaluated out of 10, and the overall score (out of 100) will be computed as: (O*0.5 + E*2.5 + Q) + (C*0.3 + A*0.3) * D.

Policy on absences

Absence from examinations or lab sessions will be excused only under extraordinary circumstances such as medical or family emergencies. A missed examination or a lab session without prior approval and without legitimate reasons will be graded at zero points. An absence will be excused only if the student is able to provide legitimate documentation (such as a physician's note). An absence from an examination or a lab session with prior approval will require the student to take an alternate exam at a later time. Special examinations will not be held earlier or on later dates to accommodate, for example, flight schedules for vacations.

Absence (with approval) in a lab assignment will not excuse the student from making the submission, but will only extend the deadline for the submission.

Policy on academic honesty

The following is a partial list of activities that will be considered to constitute academic dishonesty:

  • Presenting the work of another person (fellow student or not) as your own.
  • Cheating in an examination such as through conversations with other students, sharing textbooks, calculators or other materials with another student, using unauthorized books not approved by the instructor in an open-book examination.
  • Inappropriate or unauthorized use of technology such as calculators, laptops or cell-phones during an examination.
  • Using or attempting to use the work of another student or providing answers to other students.
  • Failing to take reasonable measures to protect your work from use by other students in homeworks or examinations.
  • Penalties for academic dishonesty include a lowering of the grade or a failing grade in the course.

Related links