ECE 1111: Engineering Computation I

Syllabus

Contact Information:

Lecture MWF: 11:00 - 11:50 AM (ENGR 304 / Online)
Laboratory W: 3:00 - 4:50 PM (ENGR 0312)
Lecturer Joseph Picone, Professor
Office: ENGR 718
Office Hours: (MWF) 09:00 AM - 11:00 AM, other times by appointment
Phone: 215-204-4841 (desk); 708-848-2846 (cell - preferred)
Email: joseph.picone@temple.edu
Zoom: joseph.picone@temple.edu or joseph.picone@gmail.com
Teaching Assistant Yusuf Qwareeq, PhD Student
Office: ENGR 727
Office Hours: (TR) 1:00 PM - 2:00 PM (online via Zoom)
Phone: 267-301-3365 (Zoom, email or text preferred in that order)
Email: qwareeq@temple.edu
Peer Mentor(s) Shane McNicholas, BS CpE Student
Office: ENGR 702
Office Hours: by appointment (in-person or online via Zoom)
Phone: 267-400-0873 (Zoom, text or email)
Email: shane.mcnicholas@temple.edu
Email Help: temple_engineering_ece1111_help@googlegroups.com
Communication: temple_engineering_ece1111@googlegroups.com
Website http://www.isip.piconepress.com/courses/temple/ece_1111
Textbook There are many textbooks available to learn C programming. However, the best way to learn is to jump right in. There are several interactive sites that will let you write, test it, and receive feedback on what is wrong. Two sites we will make use of in this course are:
  • Learn C: a browser-based environment that lets you work homework problems without installing any software on your machine.

  • HackerRank: a web site many employers use to evaluate programmers. It contains many example problems and lots of analytics that allow you to evaluate how you compare to employer expectations. This web site reinforces the importance of requirements-driven programming since you must develop code to pass specific test cases, and then you are evaluated on blind, or previously unseen, test cases.

  • Leetcode: a great resource for solving typical job interview questions. These are more advanced problems that are more relevant after you have finished this course.
Reference
Textbooks
Learning how to use the Internet to problem solve is another very important skill you will learn in this course. We often describe this as "learning how to learn." An amazing resource that contains an answer to just about any computer question you can imagine is:

Stack Overflow: where you can find answers to almost any programming question.

But you have to learn enough about terminology and computing to know exactly what to search for. After a few weeks in the course, such searches will become second nature.

Programming languages change so fast that today everyone learns using Internet resources. Nevertheless, there are times when you want to read a textbook that presents an organized and thoughtful view of a programming language. There are many open source books available to learn C:

and C++:

However, at some point, if you want to be respected as a C/C++ programmer, you need to have read this book:

B.W. Kernighan and D.M. Ritchie
The C Programming Language
Prentice-Hall; Second Edition
April 1, 1988, 272 pages
ISBN: 978-0131103627
URL: The C Programming Language

It is considered one of the most influential programming books ever written and is the definitive textbook on C programming. It is especially strong on data types, pointers, and bit-level programming.

The C++ programming language has been evolving quite a bit recently. It is dangerous to invest in a textbook since they tend to lag changes in the language. Online resources are much better.

However, this book is another classic, and presents an integrated view of C and C++. It is an excellent introduction to the C programming language as well as providing a very readable and pragmatic discussion of C++:

S.B. Lippman and J. Lajoie
The C++ Primer
Addison-Wesley Professional; Fifth Edition (August 16, 2012)
976 pages
ISBN: 978-00321714114
URL: The C++ Primer (Fifth Edition)

I used the first edition of this book to learn C and C++ and found it invaluable. I actually felt I learned C much better after understanding the C++ programming language.

If you want an introduction into computer science and the basic concepts it encompasses, this is a good place to start:

A. Aho and J. Ullman
Foundations of Computer Science
URL: The C++ Primer (Fifth Edition)

A more contemporary book that provides a nice overview of many relevant topics in computer science that electrical and computer engineers should be familiar with as programmers:

R. Sedgewick and K. Wayne
Computer Science - An Interdisciplinary Approach
Addison-Wesley Professional; First Edition (June 25, 2016)
1168 pages
ISBN: 978-0134076423
URL: Computer Science - An Interdisciplinary Approach

This book introduces you to the fundamentals of the Linux operating system:

W. Shotts
The Linux Command Line
URL: The Linux Command Line (5th Edition)

The O'Reilly Book Series is well known for its excellent presentations on most computer science and software topics.

In this course we will make extensive use of the LinkedIn Learning (formerly Lynda.com) tutorials available through the TU Portal. Make sure you log into the TU Portal and select the "LinkedIn Learning" link from your menu on the left to access all of their excellent resources. These two tutorials are particularly useful for this course: Learning Linux Command Line (by S. Simpson) and Learning C (by D. Gookin).

Though the bulk of this course will deal with the C and C++ programming languages, we will spend about four weeks introducing you to Python. This is in preparation for a follow-on course in data structures and algorithms that many of you will take. A good place to begin is:

A.B. Downey
Think Python 2e
URL: https://greenteapress.com/wp/think-python-2e/

There are many great free books available for learning about many data analysis tools available in most Python distributions: 5 Free Books For Learning Python For Data Science.

Other
Resources
Internet-based resources play a major role in this course. We will make extensive use of the Linux operating system, but will only have time to scratch the surface on this topic. An excellent in-depth training course can be found here:

Free Linux Online Training: a wide range of Linux tutorials are available.
LearnPython.org: many excellent interactive tutorials.

Prerequisites Minimum grade of C- in:
 ENGR 1102 (may be taken concurrently)
 PHYS 1061 or PHYS 1961
 MATH 1041 or MATH 1941

Course Description: Please see the university bulletin for a description of the course.

ABET Syllabus:: Please click here to view the ABET syllabus for this course.

University Policy Statements:: Please refer to the College of Engineering Policies and Procedures web site regarding the policies and procedures you are responsible for. The source location for this information is in the TU Portal: College of Engineering -> Advising -> Temple University Syllabus Policy.

Course Overview:

Software plays an integral role in any engineering discipline today. However, electrical and computer engineers need to understand a wide range of software issues including low-level issues such as bits, bytes, memory allocation, processor architectures, and high-level issues such as modularity, rapid prototyping, software testing, verification and maintenance. The primary goal of this course is to introduce students to a low-level programming language, C, that allows electrical and computer engineers to develop embedded systems in which we must be concerned about hardware-related issues such as efficiency and memory consumption.

In this course, we will first focus on learning the basics of the Linux operating system and the C programming language. We will do this using a cloud computing infrastructure and an integrated development environment that facilitates program development and debugging. We will then introduce specific elements of the C language that are useful for engineering software development, including bit-level and byte-level manipulations of basic data types and structures. Next, we will discuss program design and structure with an emphasis on modular, data-driven and object-oriented programming. The course will conclude with a discussion of key elements of software that are critical to engineering computation: data structures, algorithms and I/O.

These follow-on courses in our curriculum will reinforce these concepts: A common theme throughout all these courses is that an engineer must be able to learn quickly how to write efficient code in almost any programming language, because you will use many languages throughout your career.

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. Laboratories are designed to reinforce key concepts in class and will involve hands-on programming. Quizzes and exams will also involve live programming exercises. Homework assignments play a critical role in the class and will involve significant amounts of programming outside of class.

We will have three in-class exams in this course and a comprehensive final. You will be expected to do original programming in class and will have access to the Internet as a resource. You will not, however, be allowed to use online chat services for problem-solving.

Unannounced quizzes will be given periodically throughout the course to encourage you to attend lecture classes and keep up with the daily work. You must be present in class to receive credit for the quizzes. You cannot participate in the quiz remotely if you miss class with an unexcused absence. 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.

Homework assignments, quizzes, lab reports and exams are submitted by placing files in the following directories on the class server:

      /data/courses/ece_1111/current/homework/hw_xx/lastname_firstname
      /data/courses/ece_1111/current/quizzes/qu_xx/lastname_firstname
      /data/courses/ece_1111/current/labs/lab_xx/lastname_firstname
      /data/courses/ece_1111/current/exams/ex_xx/lastname_firstname

If you need to prepare a Microsoft Word document for this course, a template for these assignments can be found here. More details will be provided on this as the semester progresses.

Grading Policies:

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


Lecture Schedule:

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

Class
Date
Topic(s)
Online Materials
01
01/17
  Linux: Virtualization, Command Line and Shells and Amazon AWS  
slides | code | video
02
01/19
  Linux: Command Line Programming  
slides | code | video
03
01/22
  Linux: Emacs, Text Editing, Program Development and IDEs  
slides | code | video
04
01/24
  Python: Program Structure - Basic Syntax of a Python Program  
slides | code | video
05
01/26
  Python: Atomic Types and Built-In Data Structures  
slides | code | video
06
01/29
  Python: Loops, Conditionals and Text File I/O  
slides | code | video
07
01/31
  Python: Functions and Linear Algebra Using Numpy  
slides | code | video
08
02/02
  Python: File I/O and Directory Traversal  
slides | code | video
09
02/05
  C: Editing, Compiling and Debugging Code in Linux  
slides | code | video
10
02/07
  C: Basic C Syntax  
slides | code | video
11
02/09
  Exams: Exam No. 1 - Review  
slides | code | video
12
02/12
  C: Atomic Types  
slides | code | video
13
02/14
  Exams: Exam No. 1 - Basic Linux and Python Programming (Lectures 01-11)  
exams
14
02/16
  C: Numeric Representations  
slides | code | video
15
02/19
  C: Arithmetic, Relational and Logical Operators  
slides | code | video
16
02/21
  C: Function Calls, Scope and Operator Precedence  
slides | code | video
17
02/23
  C: Bitwise Operators  
slides | code | video
18
02/26
  C: Arrays and Strings  
slides | code | video
19
02/28
  C: Pointers  
slides | code | video
20
03/01
  C: Casting and Type Conversions  
slides | code | video
21
03/11
  C: Formatted I/O  
slides | code | video
22
03/13
  C: Binary I/O  
slides | code | video
23
03/15
  C: Control Flow – For, While, If/Else, Case  
slides | code | video
24
03/18
  Exams: Exam No. 2 - Review  
slides | code | video
25
03/20
  C: Functions, Return Values and Recursion  
slides | code | video
26
03/22
  Exams: Exam No. 2 - C Programming (Lectures 12-24)  
exams
27
03/25
  C: Math Functions and Other Libraries  
slides | code | video
28
03/27
  C: The Structure Declaration  
slides | code | video
29
03/29
  C: Function Pointers and Macros  
slides | code | video
30
04/01
  C++/Python: Anatomy of a Class  
slides | code | video
31
04/03
  C++/Python: Constructors, Destructors, Member Functions and Memory Management  
slides | code | video
32
04/05
  C/C++/Python: Type Declarations  
slides | code | video
33
04/08
  C++/Python: Templates (C++ Only) and Inheritance  
slides | code | video
34
04/10
  C/C++/Python: Linked Lists  
slides | code | video
35
04/12
  C++/Python: Exception Handling and Multithreading  
slides | code | video
36
04/14
  Python: Data Structures  
slides | code | video
37
04/17
  Review: Exam No. 3  
slides | code | video
38
04/19
  Python: Functional Programming  
slides | code | video
39
04/22
  Exam No. 3: C++ Programming (Lectures 25-37)  
exams
40
04/24
  C++/Python: Unit Testing  
slides | code | video
41
04/26
  MS Office: Excel  
slides | code | video
42
04/29
  Guest Lecture: Ilyana Dropkin, Senior Engineer, PJM Interconnection, LLC (BSEE - 2011, MSEE - 2013)  
slides | code | video
43
05/03
  Final Exam (10:30 AM - 12:30 PM): Comprehensive (Lectures 1-42)  
exams


Note that all previous lectures for this course are available online in the lectures archive and videos archive so there is no shortage of material available that covers the specific concepts discussed in this course.

Please also note that the dates above are fixed since they have been arranged to optimize a number of constraints.

Homework:

The homework schedule is as follows:

HW
Due Date
Item(s)
01
01/22
  Cloud Computing  
02
01/29
  Simple Data Manipulation  
03
02/05
  Driver Programs and Workflows  
04
02/12
  Basic Linear Algebra  
05
02/19
  Formatted I/O and Make Files  
06
02/26
  Basic Math Operations and Numerical Precision  
07
03/11
  Bitwise Operators, Masking and Character String Conversions  
08
03/18
  Array and String Manipulations  
09
03/25
  File I/O  
10
04/01
  Function Calls  
11
04/08
  Lists and Trees in C++ and Python  
12
04/15
  Histograms, Word Counts and Data Structures  
13
04/22
  Standard File Formats  
14
04/29
  Functional Programming in Python  

Homework is due by 11:00 AM on the date shown. 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.

Laboratories:

The laboratory component of ECE 1111 meets once a week and will cover the following topics:

Lab
Due Date
Item(s)
01
01/17
  Infrastructure  
02
01/24
  Creating Simple Python Programs  
03
01/31
  Basic Command Line Programming and File Manipulations  
04
02/07
  Vector and Matrix Manipulations  
05
02/14
  Python Application Programming  
06
02/21
  Basic C Syntax, Atomic Types and Command Line Programming  
07
02/28
  Simple Engineering Mathematics  
08
03/13
  Arrays and Strings  
09
03/20
  Pointers and Arrays  
10
03/27
  File I/O  
11
04/03
  Windowed Grep in C and Python  
12
04/10
  C++ and Python Classes  
13
04/17
  Binary Data  
14
04/24
  Laboratory Final: Application Programming  

Students will submit their lab assignments online following the instructions provided in each lab.

Plagiarism Policy:

In this class, you are encouraged to collaborate with your classmates. Working as teams to learn how to program is a very important and efficient way to learn. As professionals, we rely on our vast network of colleagues to solve problems, learn new things, make key design decisions, etc. We all use the Internet quite a bit as you will soon see.

However, the work you turn in must be original. Our plagiarism detection software is very advanced and will find similarities in your code if you copied it from someone else or from the Internet. Further, in a class this small, we get to know each of you fairly well and learn your style of coding and commenting. If you simply copy code from your colleague or from the Internet, you will get caught - trust me. We can often look at a piece of code and tell who wrote it - programming is like art - a very personal thing in which your personal style will become very clear and consistent.

Be sure to protect your homework, exams, etc. Be sure to personalize your code using comments, formatting, variable naming, etc. We will teach you how to do this. You must demonstrate you understand the code even if you copied it from the Internet. If someone does copy your code, it is as much your fault as their fault since you should have protected the code. Again, trust me, if two assignments are similar, or the code is copied from the Internet, our software will find it.

The first time you are caught will result in a grade of zero on the assignment. The second time you are caught will result in dismissal from the course with a failing grade.

Working in groups is really critical to your success in this course. There is a famous quote about how you can judge a person by examining their five closest friends. Get to know your classmates and arrange meeting times where you can work together. If you need help during these sessions, don't be afraid to dial up your instruction team. If we are around and available, we will be happy to jump in a Zoom session and answer questions. We are always up for a 2 AM debugging session ;)