ECE 3084: Engineering Computation III

Syllabus

Contact Information:

Lecture MWF: 11:00 - 11:50 AM (ENGR 308)
Lecturer Joseph Picone, Professor
Office: ENGR 703A
Office Hours: (MWF) 7:45 AM - 8:45 AM, 10:00 AM - 10:45 AM, 12:00 PM - 1:00 PM
Phone: 215-204-4841 (desk); 215-954-7076 (cell - preferred)
Email: picone@temple.edu
Google Hangout: joseph.picone@gmail.com Skype: joseph.picone
Social Media https://www.facebook.com/groups/temple.engineering.ece3084/
temple.engineering.ece3084@groups.facebook.com
Email Google Group URL: http://groups.google.com/group/temple-engineering-ece3084
Google Group Email: temple-engineering-ece3084@googlegroups.com
Website http://www.isip.piconepress.com/courses/temple/ece_3084
Textbook Google Search :)
Reference
Textbooks
This book, as the title suggests, is a good overview of the basics of Linux:

E. Siever, S. Figgins, R. Love and A. Robbins
Linux in a Nutshell, 1st Edition
O'Reilly Media; Sixth Edition
October 2009, 944 pages
ISBN: 978-0596154486
URL: Linux in a Nutshell (6th Edition)

This is an excellent introduction to Python:

Mark Lutz
Learning Python
O'Reilly Media; Fifth Edition
July 2013, 1648 pages
URL: Learning Python

This is a great book for learning about many data analysis tools available in most Python distributions:

Wes McKinney
Python for Data Analysis
O'Reilly Media; First Edition
July 2013, 550 pages
URL: Python for Data Analysis

Other Reference Materials Lynda.com: an online subscription library that teaches
the latest software tools. Log in through the TU Portal.

Free Linux Online Training: a wide range of
Linux tutorials are available.

LearnPython.org: many excellent
interactive tutorials.

Stack Overflow: where you can find
answers to almost any programming question.
  Prerequisites   C- or better in ECE 1111


Grading Policies:

  Item  
  Weight  
  Exam No. 1     10%  
  Exam No. 2     10%  
  Exam No. 3     10%  
  Final Exam     10%  
  Homework Assignments     20%  
  Quizzes     20%  
  Project     20%  
  TOTAL:     100%  

Catalog Course Description:

Electrical and computer engineers are increasingly interacting with the Internet as part of the technology development process. This requires a complex set of software skills that includes knowledge of operating systems and cloud computing, web programming and graphical user programming. Engineers today are also expected to participate in large software development projects that use integrated development environment tools to interact with Internet-based code repositories and agile development methodologies. In this project-based course, students will learn how to (1) work in a cloud-based environment using the Linux operating system, (2) develop complex software systems using object-oriented design in C++, (3) program using interpretive languages such as Python, (4) develop user interfaces and Internet-aware software using Python, and (5) manage complex software projects using contemporary tools such as GitHub and Taiga.

ABET Criteria:

See the course title page for a summary of the ABET criteria this course addresses. You can also view these here.

Course Overview:

With the advancement of graphical user interfaces (GUIs) and app programming on portable devices, students often no longer learn the basics of computing. Whether your job is to manage vast amounts of data or mine information from the Internet to advance your understanding of a product or business, computers allow us to automate and solve problems of immense scale. However, to be effective at doing this, one must understand how computers work and how to program them effectively.

In this course, we will first focus on learning the basics of the Linux operating system. Linux is the dominant operating system for most compute intensive applications. Though a Linux desktop exists, we will focus mainly on learning about the shell and the command line. Some operating systems, such as a Mac, give you direct access to a terminal window as part of the OS (which is a modified version of Unix/Linux). For Windows users, we will install VirtualBox and Linux under VirtualBox. Please see the resources page for more information about this.

In the second part of the course, we will focus on learning C/C++ programming. Students are expected to be familiar with basic syntax. Our focus will be pointers, data structures, function calls, classes, and, most importantly, how you write good, clean, structured code. This will help you better appreciate some of the pros and cons of scripting languages such as Python.

In the third part of the course, we will focus on learning an emerging programming language known as Python. This is a useful language because it supports both interpretive and compiled modes. In the final part of the course we will learn a variety of software engineering tools and discuss strategies for decomposing large problems into a hierarchy of smaller ones.

We will have three in-class exams in this course and a comprehensive final. Each in-class exam will be closed books and notes. You will be allowed one page (double-sided) of notes for the in-class exams. For the final exam you will be allowed four pages of notes, presumably the same notes you used for the in-class exams.

Unannounced quizzes will be given periodically throughout the course to encourage you to attend lecture classes and keep up with the daily work. If you miss a quiz without a prior excuse from the instructor, you receive a zero for that quiz with no exception. Make-up quizzes will not be given. The same policy applies to in-class exams and the final exam as well.

This course will be very hands-on. A significant part of this course is a group project in which you will develop an application in Python that involves a user interface. You will practice agile programming techniques for this project and manage it using Taiga.

We will make extensive use of the Amazon Cloud. Students will work exclusively on a cloud server. Quizzes, exams and homework will be submitted directly on the cloud. Further instructions on this will be provided at the beginning of the semester.

Lecture Schedule:

The lecture component of ECE 3084 meets three times a week and will cover the following topics:

  Class  
  Date  
  Topic(s)  
01
01/14
  Introduction to Macs, Clusters, Virtualization and Clouds  
02
01/16
  The Login Environment, Shells, Environment Variables  
03
01/18
  Command Line History, Pipes, Redirection, Regular Expressions  
--
01/21
  Martin Luther King Day - No Class  
04
01/23
  Files, File Systems and Permissions  
05
01/25
  Scripting and Bash Programming  
06
01/28
  Processes, Tasks and Batch Computing  
07
01/30
  Emacs, Text Editing, Program Development and IDEs  
08
02/01
  Disks, File Systems and I/O  
09
02/04
  Archiving, Backups and Syncing  
10
02/06
  C++: Classes  
11
02/08
  C++: C++ Examples  
12
02/11
  C++: Data Structures  
13
02/13
  Exam No. 1: The Linux Operating System and Shell Programming (Lectures 01-09)  
14
02/15
  C++: More About Data Structures  
15
02/18
  Review of C/C++ Data Types, Pointers, and Memory Management  
16
02/20
  Python: Basic Program Structure and Libraries  
17
02/22
  Python: Arrays, Lists and Other Useful Data Struct  
18
02/25
  Python: File I/O and Directory Traversal  
19
02/27
  Python: Classes and Object-Oriented Programming  
20
03/01
  Python: Unit Testing  
--
03/04
  Spring Break - No Class  
--
03/06
  Spring Break - No Class  
--
03/08
  Spring Break - No Class  
21
03/11
  Python: Introduction to IDEs (Spyder)  
22
03/13
  Python: Exception Handling  
23
03/15
  Multithreading and Parsing  
24
03/18
  Functional Programming: Map, Reduce and Filter  
25
03/20
  Functional Programming: Recursion  
26
03/22
  Exam No. 2: C++ Programming (Lectures 10 - 15)  
27
03/25
  Python: Graphing  
28
03/27
  Python: GUI Programming (I)  
29
03/29
  Python: GUI Programming (II)  
30
04/01
  Python: GUI Programming (III)  
31
04/03
  Git Concepts and Architecture (I)  
32
04/05
  Git Concepts and Architecture (II)  
33
04/08
  Git Concepts and Architecture (III)  
34
04/10
  Introduction to Web Development (I)  
35
04/12
  Introduction to Web Development (II)  
36
04/15
  Introduction to Web Development (III)  
37
04/17
  Agile Software Development  
38
04/19
  Dev Ops  
39
04/22
  Exam No. 3: Python (Lectures 16 - 30)  
40
04/24
  Introduction to Taiga (I)  
41
04/26
  Introduction to Taiga (II)  
42
04/29
  Final Presentations  
43
05/06
  Final Exam (08:00 AM - 10:00 AM): Comprehensive (Lectures 01 - 42)  


Please note that the dates above are fixed since they have been arranged to optimize a number of constraints. If you have conflicts with other classes, such as too many exams within the same week, we need to resolve that the first week of classes.

Homework:

The homework schedule is as follows:

  HW  
  Due Date  
  Item(s)  
01
01/18
  Command Line Programming  
02
01/25
  Text Processing  
03
02/01
  Shell Programming  
04
02/08
  File I/O  
05
02/15
  C++ Variables and Scope  
06
02/22
  Data Structures  
07
03/01
  Sparse Matrices  
08
03/15
  Python Scripting - Filename Processing  
09
03/22
  Python Scripting - Audio Processing  
10
03/29
  Python Scripting - Natural Language Processing  
11
04/05
  Python Practice  
12
04/12
  Map, Reduce and Filter  
13
04/19
  Find a Needle in a Haystack  
14
04/26
  Project Checkpoint No. 1  
15
04/29
  Project Checkpoint No. 2  


LATE HOMEWORK WILL NOT BE ACCEPTED. Keeping up with the homework in this course is critical to your ability to absorb this material in a meaningful fashion.

Homework assignments are deposited on the Amazon AWS server in: /data/courses/ece_3084/current/homework/hw_XX/. More details about this will be given in class.

Additional Resources:

The course notes will include links to a variety of helpful resources.

University Policy Statements: