skip to content

ECE 2400 - Computer Systems Programming
Spring 2017

MoWeFr 11:15am-12:05pm 306 Hollister

[Course info | Schedule | Piazza | CMS]


For material-related questions, please use Piazza instead of email.



Intermediate computer programming course with a systems bent, equally practical in embedded, desktop, or server environments. Topics include C and C++ programming, input/output, program structure, debugging and profiling, dynamic memory management, essential data structures and programming techniques, program analysis, code optimization, and an introduction to UNIX services and programming environment.

Important: This course does satisfy the advanced programming requirement for ECE majors. It cannot be used, as of today, to replace CS 2110 in the CS curriculum. Beginning Fall 2017, it will be an ENGRD course.

Prerequisites: CS 1110 or CS 1112.

Prof. José F. Martínez
Computer Systems Lab
336 Rhodes Hall
(607) 255-1874

Course Outcomes

Students will:

  • Develop competency in C and C++ programming.
  • Be capable of debugging, profiling, and optimizing code.
  • Understand and be able to use basic data structures productively.
  • Be able to design and code concurrent programs to solve problems.
  • Be capable of leveraging UNIX services.
  • Acquire experience in modern agile programming techniques.
  • Be able to articulate one's technical reasoning in a succinct, comprehensive, accurate, and clear manner, orally as well as in writing.
  • Learn to seek, appreciate, and incorporate everyone's points of view and contributions.
  • Be better prepared to provide and receive constructive feedback.


  • Engineering solves world problems by using technology creatively. I invite and expect every student to contribute creatively as part of their learning process.
  • Success in engineering depends critically on teamwork. I invite and expect every student to engage in constructive discourse, to bring their perspective, and to be accepting of others'.
  • Degrading, abusing, harassing, silencing, or dismissing others is not acceptable behavior. It is also bad engineering.
  • I invite and expect every student to maintain the highest ethical standards, and to abide by Cornell's Academic Integrity Code.


I am committed to providing an enriching learning environment for every student. I am available to discuss academic accommodations for students with disabilities or with special needs or concerns. Requests for academic accommodations should be made as soon as possible, so that arrangements can be made in a timely fashion. Students are also encouraged to register with Cornell's Student Disability Services as needed.

Contacting staff:

Do not contact staff using their Cornell email directly, as your message may be easily overlooked.


  • Lectures: MoWeFr 11:15am-12:05pm, 306 Hollister.
  • Sections: MoWe 7:30-8:45pm, 203 Phillips.
  • TA office hours: TuTh 11:15am-Noon and 1-1:45pm, 429 Phillips.
  • Instructor's office hours: MoWeFr 10:30-11am or by appointment in 336 Rhodes


  • The textbook All of Programming by A. Hilton and A. Bracy, Ed. 0, 2015. Available as ebook (EPUB/PDF) only ($10 last time I checked).
  • An i>clicker (available at the Cornell Store, and I'm sure elsewhere, too). Please note that REEF polling is not supported.
  • An ecelinux account.

Recommended reading

  • K.N. King. C Programming: A Modern Approach. W.W. Norton & Co., 2nd Ed., 2008
  • R. Reese. Understanding and Using C Pointers. O'Reilly Media, 1st Ed., 2013
  • R. Sedgewick. Algorithms in C, Parts 1-4. Addison-Wesley, 3rd Ed., 1998
  • S.B. Lippman, J. Lajoie, and B.E. Moo. C++ Primer. Addison-Wesley, 5th Ed., 2013
  • M. Weiss. Data Structures and Algorithm Analysis in C++. Pearson, 4th Ed., 2013
  • W.R. Stevens and S.A. Rago. Advanced Programming in the UNIX Environment. Addison-Wesley, 1st Ed., 2013
  • A. Williams. C++ Concurrency in Action: Practical Multithreading. Manning Publications, 1st Ed., 2012


  • Exams: Two prelims (15% ea.), one final (25%)
  • Programming assignments: PA1-4, individual (5% ea.); PA5-6, teams of two (7.5% ea.)
  • In-class participation (i>clicker): 10%

Programming Assignments

Programming assignments 1-3 and 5-6 involve performance measurement and writing a short report discussing the results.

  1. Programming for performance I: Complex math functions
  2. Programming for performance II: Cracking passwords
  3. Programming for performance III: Searching and sorting
  4. Writing whole programs: An RPN calculator
  5. Application: Implementing a software cache for distributed systems
  6. Application: Implementing an order book for trading securities