This course was held in 2016

Course Details

  • Instructor: Ershaad Basheer
  • Email:
  • Phone: 215-204-4217
  • Office location: Science Education and Research Center, room 701F
  • Office hours: Mondays 3:30-4:30 or by appointment
  • Co-Instructor: Richard Berger
  • Email:

Class Hours and Location

Class meets Tuesdays and Thursdays between 2:00-3:20 in Wachman Hall 11


Enrollment in a graduate-level program, or instructor’s permission.

Course Goals

This course is a condensed overview of the knowledge and skills necessary to develop software for scientific applications. By focusing on fundamental mathematical constructs and problem solving strategies, the course provides simultaneously the basis to undertake simple programming tasks for an ongoing research activity, or to pursue further training in scientific and high-performance computing. The material also outlines the commonalities between multiple programming languages to better understand the transferability of methods.

Topics Covered

The course begins with a brief overview of the tools used in the development of scientific software, such as the Linux user environment and its utilities for source code management. Programming basics like integer and floating-point math, control structures, modular programming, and data structures such as vectors or complex numbers, are introduced using the Python programming language. The course will continue by introducing the C++ language, including the concepts of compiled computer code, explicit memory management using pointers, and the use of software libraries. The final weeks give a brief overview of the Fortran programming language and its standard libraries of mathematical functions, and discuss interfacing multiple programming languages. Examples are designed to outline strategies for combining the portability of abstract methods with computational efficiency.


Required readings include lecture notes/slides and selected chapters from the following books (see also the tentative calendar):

  • Mark Pilgrim, Dive into Python 3
  • Steve Oualline, “Practical C++ Programming”, 2nd edition.  O’Reilly Media, ISBN-10: 0596004192, ISBN-13: 978-0596004194
  • Scott Chacon and Ben Straub, The Git Book

Other suggested readings are:

  • Machtelt Garrels, Introduction to Linux
  • IBM DeveloperWorks: Bash by Example
  • Andrew Koenig, Accelerated C++: Practical Programming by Example
    Addison-Wesley Professional, ISBN-10: 020170353X, ISBN-13: 978-0201703535
  • Bjarne Stroustrup, Programming: Principles and Practice Using C++, 2nd edition Addison-Wesley Professional, ISBN-10: 0321992784, ISBN-13: 978-0321992789=
  • Scott Meyers, Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd edition. Addison-Wesley Professional, ISBN-10: 0321334876, ISBN-13: 978-0321334879

Software and Skills Requirements

The environment of reference for this course includes the operating system GNU/Linux and its command-line shell Bash. These will be reviewed during the first two weeks: after this period, students will be given the opportunity of self-assessment through a 30-minutes exercise in class. There are some programs for Windows and Mac OS/X that may be useful to acquire initial familiarity with the tools required this course:

None of these programs is officially supported during the course: for those who do not have access to a Linux-based computer, a suitable VirtualBox disk image will be provided, to be used on personal or Temple computers that are equipped with Windows or MacOS/X. After the first two weeks, all students must be able to use Linux and Bash to manipulate files and directories from the command line, start and stop programs, edit text files, and connect to remote computers through the command ssh.

Homework Assignments

Throughout the semester, short programming assignments will be introduced in class and given as homework to be completed typically within a week. Assignment scores will contribute to the final grade, each carrying a maximum of 20 points. Bonus points beyond 20 will be awarded for the most difficult tasks in each assignment.
Assignments may be turned in electronically via Blackboard, or by email. Assignments turned in within 24 past the deadline carry a penalty of 5 points. Assignments turned in more than 24 hours late will count as zero. Exemptions may be requested, no later than 24 hours before the due date: the final grade will be prorated. A maximum of 2 exemptions from assignments are allowed through the semester.

Midterm and Final Exam

One mid-term exam will be carried out in class on the eight week of the semester, and a final exam on the last week. Both exams will include a combination of a questionnaires offered in class and the presentation of an individual programming assignment. The material for the assignment itself will be given at least three weeks before each exam.

Absence/exemption from the mid-term exam may be excused if a valid justification is provided not later than 24 hours before the exam. There will be no make-up exams.

Final Grades

The contributions to the final grade are 30% from all homework assignments, 30% from the mid-term exam and 40% from the final exam.

Attendance Policy

Attendance is mandatory.

Disability Accommodations

Any student who has a need for accommodation based on the impact of a documented disability, including special accommodations for access to technology resources and electronic instructional materials required for the course, should contact me privately to discuss the specific situation by the end of the second week of classes or as soon as practical. If you have not done so already, please contact Disability Resources and Services (DRS) at 215-204-1280 in 100 Ritter Annex to learn more about the resources available to you. We will work with DRS to coordinate reasonable accommodations for all students with documented disabilities.
Freedom to teach and freedom to learn are inseparable facets of academic freedom. The University has adopted a policy on Student and Faculty Academic Rights and Responsibilities (Policy # 03.70.02) which can be accessed through the following link: