ECE 1111: Engineering Computation I

Syllabus

Contact Information:

Lecture MWF: 11:00 - 11:50 AM (ENGR 305 / Online)
Laboratory F: 3:00 - 4:50 PM (ENGR 0305)
Lecturer Joseph Picone, Professor
Office: ENGR 718
Office Hours: (MWF) 08:00 AM - 10: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(s) Md. Abdullah Al Mamun, PhD Student
Office: ENGR 702
Office Hours: (TR) 3:00 PM - 5:00 PM
Phone: 267-836-5538 (Zoom, email or text preferred in that order)
Email: abdullah18@temple.edu
Peer Mentor(s) Kevin Bui, BS EE Student
Office: ENGR 702
Office Hours: (TR) 12:00 PM - 1:00 PM Phone: 484-561-3730 (Zoom, text or email preferred in that order)
Email: kevinbui@temple.edu

Jahtega Djukpen, BS, CpE Student
Office: ENGR 702
Office Hours: (T) 10:00 AM - 12:00 PM
Phone: 920-791-0477 (Zoom, email or text preferrred in that order)
Email: jdjukpen@temple.edu

Brendan Johnson, BS, CpE Student
Office: ENGR 702
Office Hours: (TR) 2:00 PM - 3:00 PM
Phone: 267-474-0863 (Zoom, email or text preferrred in that order)
Email: brendan.johnson0002@temple.edu

Shahzad Khan, BS, CpE Student
Office: ENGR 702
Office Hours: (S) 9:00 AM - 11:00 AM
Phone: 267-474-0863 (Zoom, email or text preferrred in that order)
Email: shahzadkhan@temple.edu>

Salvatore Tanelli, BS, CpE Student
Office: ENGR 702
Office Hours: (TR) 5:00 PM - 6:00 PM
Phone: 973-816-8411 (Zoom, email or text preferrred in that order)
Email: salvatore.tanelli@temple.edu
Email Help: tu_ece1111_help@listserv.temple.edu
Communication: tu_ece1111@listserv.temple.edu
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 (MATH 1042 (may be taken concurrently), MATH 1942 (may be taken concurrently), 'Y' in MATW, or 'Y' in METW), (ENGR 1102 or 'Y' in ENGW), (PHYS 1062 (may be taken concurrently) or PHYS 1962 (may be taken concurrently)), ENGR 2011 (may be taken concurrently), ENGR 2013 (may be taken concurrently), and ENGR 1001 (may be taken concurrently)

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
08/25
  Linux: Virtualization, Command Line, Shells  
slides | video | code
02
08/27
  Linux: Command Line Programming  
slides | video | code
03
08/29
  Linux: Emacs, Text Editing, Program Development and IDEs  
slides | video | code
04
09/03
  Python: Program Structure and Libraries  
slides | video | code
05
09/05
  Python: Atomic Types and Data Structures  
slides | video | code
06
09/08
  Python: Loops, Conditionals and Text I/O  
slides | video | code
07
09/10
  Python: Functions and Linear Algebra  
slides | video | code
08
09/12
  Python: File I/O and Directory Traversal  
slides | video | code
09
09/15
  C: Editing, Compiling and Debugging Code in Linux  
slides | video | code
10
09/17
  C: Basic Syntax  
slides | video | code
11
09/19
  Exams: Exam No. 1 - Review  
slides | video | code
12
09/22
  C: Atomic Types  
slides | code | video
13
09/24
  Exams: Exam No. 1 - Basic Linux and Python Programming (Lectures 01-11)  
exams
14
09/26
  C: Numeric Representations  
slides | code | video
15
09/29
  C: Built-in Operators  
slides | video | code
16
10/01
  C: Function Calls, Scope and Operator Precedence  
slides | video | code
17
10/03
  C: Bitwise Operators  
slides | video | code
18
10/06
  C: Arrays and Strings  
slides | video | code
19
10/08
  C: Pointers  
slides | video | code
20
10/13
  C: Casting and Type Conversions  
slides | video | code
21
10/15
  C: Formatted I/O  
slides | video | code
22
10/17
  C: Binary I/O  
slides | video | code
23
10/20
  C: Control Flow – For, While, If/Else, Case  
slides | video | code
24
10/22
  Exams: Exam No. 2 - Review  
slides | code | video
25
10/24
  C: Functions, Return Values and Recursion  
slides | code | video
26
10/27
  Exams: Exam No. 2 - C Programming (Lectures 12-24)  
exams
27
10/29
  C: Math Functions and Other Libraries  
slides | code | video
28
10/31
  C: The Structure Declaration  
slides | video | code
29
11/03
  C: Function Pointers and Macros  
slides | video | code
30
11/05
  C++/Python: Anatomy of a Class  
slides | video | code
31
11/07
  C++/Python: Constructors, Destructors, Member Functions and Memory Management  
slides | video | code
32
11/10
  C/C++/Python: Type Declarations  
slides | video | code
33
11/12
  C++/Python: Templates (C++ Only) and Inheritance  
slides | video | code
34
11/14
  C/C++/Python: Linked Lists  
slides | video | code
35
11/17
  C++/Python: Exception Handling and Multithreading  
slides | video | code
36
11/19
  Python: Data Structures and Functional Programming  
slides | video | code
37
11/21
  Exams: Exam No. 3 - Review  
slides | video | code
38
12/01
  C++/Python: Unit Testing  
slides | video | code
39
12/03
  Exams: Exam No. 3 - C++ Programming (Lectures 25-37)  
exams
40
12/05
  Emerging Languages: Rust  
slides | video | code
41
12/08
  Guest Lecture: Daniel Bici, Software Engineer, Sabre Systems (BS CpE, Temple - 2023)  
slides | video | code
42
12/15
  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
09/02
  Cloud Computing  
02
09/08
  Simple Data Manipulation  
03
09/15
  Driver Programs and Workflows  
04
09/22
  Basic Linear Algebra  
05
09/29
  Formatted I/O and Make Files  
06
10/06
  Basic Math Operations and Numerical Precision  
07
10/13
  Bitwise Operators, Masking and Character String Conversions  
08
10/20
  Array and String Manipulations  
09
10/27
  File I/O  
10
11/03
  Function Calls  
11
11/10
  Lists and Trees in C and Python  
12
11/17
  Histograms, Word Counts and Data Structures  
13
12/01
  Python Application Programming  
14
12/08
  Python Functional Programming  

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
08/29
  Infrastructure  
02
09/05
  Creating Simple Python Programs  
03
09/12
  Basic Command Line Programming and File Manipulations  
04
09/19
  Vector and Matrix Manipulations  
05
09/26
  Basic C Syntax, Atomic Types and Command Line Programming  
06
10/03
  Simple Engineering Mathematics  
07
10/13
  Arrays and Strings (Virtual)  
08
10/17
  Pointers and Arrays  
09
10/24
  File I/O  
10
10/31
  Windowed Grep in C and Python  
11
11/07
  Function Pointers and Macros  
12
11/14
  C++ and Python Classes  
13
11/21
  Binary Data  
14
12/05
  Laboratory Final: Python 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 ;)