Courses taught by Prof. Coskun

EC327 Introduction to Software Engineering

This course aims to introduce software design, programming techniques, data structures, and software engineering principles. The course is structured bottom up. We will begin with a brief explanation of the hardware that powers modern computers, followed by an introduction to machine languages that control the hardware and the assembly language that organizes that control. We will then proceed through fundamental elements of functional programming languages, using C++ as the case example, and continue with the principles of object-oriented programming, as embodied in C++ and its related languages Java, C#, and Objective C. We will demonstrate the use of Integrated Development Environments (IDEs) to design and manage large bodies of code. The course will conclude with an introduction to elementary data structures and algorithmic analysis. Throughout, we will introduce core competencies in software engineering, including programming style, optimization, debugging, compilation, program management, and dynamic memory allocations. We will also introduce some more advance concepts as time allows, such as hacking, graphical user interface programming, and basic networking. The course also includes a substantial project creating a mobile application using the Android Software Development Kit (SDK) or a web app.

Last Taught: Fall 2020
Syllabus
Course Information
Schedule
ECE-News article on EC327 projects

EC535 Introduction to Embedded Systems

The growing popularity of modern embedded systems calls for a new generation of electrical and computer engineers who can easily cross the boundary between hardware and software. The course is designed to help breed such engineers by introducing students to a balanced, integrated view of software and hardware in designing electronic systems. The lectures will survey a broad array of subjects including system specification languages, embedded processors, memory architecture, communication architecture, real-time operating systems, scheduling, energy efficiency in hardware and software, hardware-software co-design techniques, debugging and verification techniques, and embedded systems security. The concepts will be reinforced with homework and project assignments that involve system design, modeling and validation. The assignments will involve C/Linux programming, ARM/Linux-based evaluation boards, and optionally other microprocessor or FPGA-based boards.

Last Taught: Spring 2021
Syllabus
Schedule
Projects from prior years

Project Demo Playlist

Or search on Youtube 🔍

EC713 Advanced Computing Systems and Architecture

Previously EC700

This class is designed to enable students to follow the latest developments in computer systems and architecture, especially those related to novel multi-core, heterogeneous, or large-scale systems. The course is particularly useful for those who wish to do research related to computing systems, architecture, embedded systems, data centers, high-performance computing, and cloud computing. In addition, the course aims to expand students’ background and skills in the design and analysis of computing systems, especially for those who would like to work in industry in related areas.

The lectures will cover a broad array of recent subjects, including memory/cache management in multi-core systems, hardware multi-threading, tiled architectures, heterogeneous systems, modern OSes and system management policies, large-scale system architectures, virtualization and hypervisors/containers, data center management, energy awareness in computing systems, system reliability/resiliency, and emerging areas such as quantum and neuromorphic computing. The concepts will be reinforced with research paper readings and also with homework and project assignments that involve system design and analysis. The assignments will involve the use of micro-architectural and/or cluster simulators as well as development and experiments on real-world systems.

Last Taught: Fall 2021
Syllabus
Schedule