ECE 3822: Engineering Computation II
(Software Tools for Engineers)

Syllabus

Contact Information:

Lecture MWF: 09:00 - 09:50 AM (ENGR 312)
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
Teaching Assistant Nabila Shawki, PhD Student
Office: ENGR 702
Office Hours: (R) 12:30 PM - 3:30 PM
Phone: N/A
Email: tuk02200@temple.edu@temple.edu
Peer Mentor Adam Pienkowski, BSEE Student
Office: ENGR 702
Office Hours: (W,R) 12:00 PM - 1:00 PM
Phone: N/A
Email: tuj05689@temple.edu
Social Media https://www.facebook.com/groups/temple.engineering.ece3822/
temple.engineering.ece3822@groups.facebook.com
Email Google Group URL: http://groups.google.com/group/temple-engineering-ece3822
Google Group Email: temple-engineering-ece3822@googlegroups.com
Website http://www.isip.piconepress.com/courses/temple/ece_3822
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 2011; C- or better in CIS 1057


Grading Policies:

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

Catalog Course Description:

The primary goal for this course is to teach engineers how to solve problems of scale using a variety of computer tools. The three main goals for this course are: (1) introduce students to the hierarchy of software tools (e.g., scripting languages, interpreted languages, compiled languages) used to solve engineering problems; (2) introduce the basics of Python, a scripting language that is a dominant tool in engineering; and (3) introduce Java, object-oriented design, and a number of Java-related software tools that automate testing, documentation and cross-compilation into web applications. A common thread throughout these topics is the decomposition of large-scale problems into smaller problems that can be solved using reusable modules. Good software engineering practices will be stressed throughout the course. The latter part of the course will involve developing a significant computer simulation of a real-world engineering system that involves real data and utilizes both Python and Java.

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.

This course will be very hands-on. Anyone can learn this material, but it takes practice, practice and more practice. Hence, lectures will be very interactive. We will attempt to use WebEx so that students can follow along on their own laptops. YOU MUST BRING YOUR LAPTOP TO CLASS EVERY DAY.

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.

A series of computer assignments will be given as homework. Solutions will be prepared as a Microsoft Word document and submitted electronically via email as a pdf file. See the instructions below in the section titled "Homework" for further details.

Lecture Schedule:

The lecture component of ECE 3822 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
  Gcc, Program Compilation, Make Files, Libraries and Linkers  
11
02/08
  C: Basic Data Types and Pointers  
12
02/11
  C: Memory Allocation and Scope  
13
02/13
  Exam No. 1: Linux Fundamentals (Lectures 01 - 10)  
14
02/15
  C: Functions and Scope  
15
02/18
  C: Input/Output (I/O)  
16
02/20
  C++: Classes  
17
02/22
  C++: C++ Examples  
18
02/25
  C++: Data Structures  
19
02/27
  C++: More About Data Structures  
20
03/01
  Review of C/C++ Data Types, Pointers, and Memory Management  
--
03/04
  Spring Break - No Class  
--
03/06
  Spring Break - No Class  
--
03/08
  Spring Break - No Class  
21
03/11
  Python: Basic Program Structure and Libraries  
22
03/13
  Python: Arrays, Lists and Other Useful Data Structures  
23
03/15
  Python: File I/O and Directory Traversal  
24
03/18
  Python: Classes and Object-Oriented Programming  
25
03/20
  Python: Unit Testing  
26
03/22
  Exam No. 2: C/C++ Programming (Lectures 11 - 20)  
27
03/25
  Python: Introduction to IDEs (Spyder)  
28
03/27
  Python: Exception Handling  
29
03/29
  Multithreading and Parsing  
30
04/01
  Python: Graphing and GUI Programming  
31
04/03
  Functional Programming: Map, Reduce and Filter  
32
04/05
  Functional Programming: Recursion  
33
04/08
  Introduction to Web Development  
34
04/10
  Relational and noSQL Databases  
35
04/12
  Git Concepts and Architecture  
36
04/15
  Dev Ops and IDEs  
37
04/17
  Agile Software Development  
38
04/19
  Software Licensing  
39
04/22
  Exam No. 3: Python (Lectures 21 - 32)  
40
04/24
  Software Distribution  
41
04/26
  Microsoft Excel  
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
  More Shell Programming  
05
02/15
  Running Compute-Intensive Jobs  
06
02/22
  Command Line Compilation  
07
03/01
  File I/O  
08
03/15
  C++ Variables and Scope  
09
03/22
  Data Structures  
10
03/29
  Sparse Matrices  
11
04/05
  Python Scripting - Filename Processing  
12
04/12
  Python Scripting - Audio Processing  
13
04/19
  Python Practice  
14
04/26
  Functional Programming Practice  
15
04/29
  Map, Reduce and Filter  


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 emailed to the class teaching assistant using "ECE 3822 - Homework No. XX" as the subject line, and a pdf document named "lastname_firstname_hwxx.pdf" as an attachment (not a link or a Google Doc, but simply an email attachment). The filename should be all lower case. A Microsoft Word template for these assignments can be found here. The assignment code, "hwXX", will he "hw01", "hw02", etc. You are to prepare the assignment in Word using the template provided, convert it to a pdf, and submit the pdf by emailing the document to the class teaching assistant (listed above).

Your pdf document must be 1 Mb or less in size. This means text should not be included as bitmaps or screenshots, but instead inserted in textboxes as plain text. Be careful how you import screenshots and images. In this class we want you to be cognizant of the document size and to learn how to manage that so you don't waste too much disk space or email bandwidth.

Additional Resources:

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

University Policy Statements: