ECE 1111: Engineering Computation I

Syllabus

Contact Information:

Lecture MWF: 11:00 - 11:50 AM (ENGR 304 / Online)
Laboratory M: 3:00 - 4:50 PM (ENGR 0312)
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) Anway Bose, PhD Student
Office: ENGR 604A
Office Hours: (T) 3:00 PM - 4:00 PM and (W) 11:00 AM - 1:00 PM
Phone: 267-902-8745 (Zoom, email or text preferred in that order)
Email: anyway.bose@temple.edu
Peer Mentor(s) Ellie Lutz, BS EE Student
Office: ENGR 702
Office Hours: (M) 3:30 PM - 4:30 PM, (TR) 1:30 PM - 2:30 PM
Phone: 484-681-0820 (Zoom, text or email preferred in that order)
Email: elaina.lutz@temple.edu

Damien Ortiz, BS EE Student
Office: ENGR 702
Office Hours: (M) 3:00 PM - 5:00 PM
Phone: 484-769-4322 (Zoom, email or text preferrred in that order)
Email: damien.ortiz@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 In recent years, vibe coding has become the dominant way students learn to program. We will embrace tools such as Claude.Ai, ChatGPT, and Gemini. We expect you to use these tools not just to get answers quickly, but to explore those solutions to learn the details of how to program. A guiding principle in this course is "Don't submit code you don't understand."
Reference
Textbooks
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.

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.

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.

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) or HNRS 1901 (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 Syllabus:: Please click here to view the university's syllabus template. It includes pointers to many important wellness resources, and discusses many university policies not covered here.

Accessibility Policy: The university accessibility poliy states:

"Any student who has a need for accommodations based on the impact of a documented disability or medical condition should contact Disability Resources and Services (DRS) in Howard Gittis Student Center South, 4th Floor, Room 420 (drs@temple.edu; 215-204-1280) to request accommodations and learn more about the resources available to you. If you have a DRS accommodation letter to share with me, or you would like to discuss your accommodations, please contact me as soon as practical. I will work with you and with DRS to coordinate reasonable accommodations for all students with documented disabilities. All discussions related to your accommodations will be confidential."

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 (Labs 1-13) 15%
Laboratory (Final) 10%
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/12
  Linux: Virtualization, Command Line Basics, and Shells  
slides | code | video
02
01/14
  Linux: Command Line Programming  
slides | code | video
03
01/16
  Linux: Scripts vs. Programs  
slides | code | video
04
01/21
  Linux: The Bash Programming Language  
slides | code | video
05
01/23
  Python: Scripts and Programs  
slides | code | video
06
01/26
  Emacs: Advanced Text Editing  
slides | code | video
07
01/28
  Linux: Clusters, Job Submission, Job Monitoring  
slides | code | video
08
01/30
  Linux: Introduction to VSCode  
slides | code | video
09
02/02
  C/C++: Compiling and Debugging Code in Linux  
slides | code | video
10
02/04
  C: Basic Syntax  
slides | code | video
11
02/06
  Exams: Exam No. 1 - Review  
slides | code | video
12
02/09
  C/Python: Atomic Types  
slides | code | video
13
02/11
  Exams: Exam No. 1 - Basic Linux Programming (Lectures 01-11)  
exams
14
02/13
  C: Built-In Operators and Operator Precedence  
slides | code | video
15
02/16
  C: Arrays and Strings  
slides | code | video
16
02/18
  C: Function Calls and Scope  
slides | code | video
17
02/20
  C: Pointers Revisited  
slides | code | video
18
02/23
  C: Bitwise Operators  
slides | code | video
19
02/25
  C: Function Pointers, Macros and Recursion  
slides | code | video
20
02/27
  C: ASCII (Formatted) I/O  
slides | code | video
21
03/09
  C: Binary (Unformatted) I/O  
slides | code | video
22
03/11
  C: Control Flow  
slides | code | video
23
03/13
  C: Structures  
slides | code | video
24
03/16
  Exams: Exam No. 2 - Review  
slides | code | video
25
03/18
  C: Math Functions and Libraries  
slides | code | video
26
03/20
  Exams: Exam No. 2 - C Programming (Lectures 12-24)  
exams
27
03/23
  C++/Python: Anatomy of a Class  
slides | code | video
28
03/25
  C++/Python: Constructors, Destructors, Member Functions and Memory Management  
slides | code | video
29
03/27
  C++/Python: Type Declarations  
slides | code | video
30
03/30
  C++/Python: Templates and Inheritance  
slides | code | video
31
04/01
  C++/Python: Advanced Syntax  
slides | code | video
32
04/03
  C/C++/Python: Linked Lists  
slides | code | video
33
04/06
  C++/Python: Exception Handling and Multithreading  
slides | code | video
34
04/08
  C/C++/Python: Data Structures and Functional Programming  
slides | code | video
35
04/10
  C++/Python: Unit Testing  
slides | code | video
36
04/13
  Python: Object-Oriented Program Design (Part I)  
slides | code | video
37
04/15
  Review: Exam No. 3  
slides | code | video
38
04/17
  C++/Python: Object-Oriented Program Design (Part II)  
slides | code | video
39
04/20
  Exam No. 3: C++ Programming (Lectures 25-37)  
exams
40
04/22
  Python: GUI Programming and Application Development  
slides | code | video
41
04/24
  Rust: Emerging Languages  
slides | code | video
42
04/27
  Professional Development: Phuykong Meng, Software Engineer, Amazon Retail Store (BS CS, Temple: Spring 2025)  
slides | code | video
43
05/01
  Final Exam (10:30 AM - 12:30 PM): Python Programming  
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:

You will need to go to the TinkerCad Web Site (https://www.tinkercad.com/) and create an account. The homework schedule is as follows:

HW
Due Date
Item(s)
01
01/20
  Cloud Computing  
02
01/26
  Scripting in Linux  
03
02/02
  Python Programs  
04
02/09
  Formatted I/O and Make Files  
05
02/16
  Basic Math Operations and Numerical Precision  
06
02/23
  Array and String Manipulations  
07
03/09
  Bitwise Operators, Masking and Character String Conversions  
08
03/16
  Formatted and Binary I/O  
09
03/23
  TBD  
10
03/30
  TBD  
11
04/06
  TBD  
12
04/13
  TBD  
13
04/20
  TBD  
14
04/27
  TBD  

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.

If for some reason you need an extension on the homework, please discuss this with your TA/peer mentor. We understand unforeseen events arise. However, we will not gran an extension without a meaningful reason. Learning proper time management is another life lesson we try to teach in this course.

Laboratories:

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

Lab
Due Date
Item(s)
01
01/14
  Infrastructure  
02
01/21
  Linux Command Line Programming  
03
01/28
  Basic Shell Programming and File Manipulations  
04
02/04
  Introduction to Tinkercad  
05
02/11
  Streaming and Plotting Data in Tinkercad  
06
02/18
  Random Number Generation  
07
02/25
  Mixing Data Streams in C  
08
03/11
  Data Communications in C  
09
03/18
  TBD  
10
03/25
  TBD  
11
04/01
  TBD  
12
04/08
  TBD  
13
04/15
  TBD  
14
04/22
  TBD  

Students will submit their lab assignments online following the instructions provided in each lab. The course instruction team will interview students to give them a chance to explain their solutions - a process we call a lab check-off.

If you miss a lab without prior authorization, you will receive a zero for the lab. If you need to miss a lab, arrange a time to complete the check-off process before the scheduled lab. Requests after the lab has taken place will not be honored.

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 ;)