The aim of this course is to introduce fundamental computing concepts to first year college students. The course focuses on working in teams, group functioning, use functional programming, and how to effectively use computers. It has introductory level programming content.
The aim of this course is to advance practical and theoretical skills with OOP concepts of engineering students to write effective computer programs. This course teaches general programming techniques, object-oriented programming concepts, exception handling and debugging techniques, input-outputs and filing processes, using libraries efficiently, version controlling, testing of applications and issues such as archiving with using the Java language. There are significant practical teachings of the course.
This course aims to equip students who are not specializing in computing with the necessary skills to design and write simple computer programs of practical use in a commercially popular programming language. The course aims to overcome the well known “programming problem” - students’ fear of writing a program from scratch - by teaching the use of a design method that allows program construction to be broken down into a series of manageable steps. The course aims to inculcate good programming habits from the beginning by emphasizing the need for written specifications and the use of documentation and testing tools in development environment. The object oriented aspects of the programming language (if they exist) will only be introduced to the extent necessary to allow working programs to be created in the subset of the full language used in the course. This course could be given using any programming language. Which means that throughout this document programming language refers to Java, development environment refers to Eclipse, documentation tools refers to Javadocs.
This course aims to equip students who are not specializing in computing with the necessary skills to design and write simple computer programs of practical use in a commercially popular programming language. The course aims to overcome the well known “programming problem” - students’ fear of writing a program from scratch - by teaching the use of a design method that allows program construction to be broken down into a series of manageable steps. The course aims to inculcate good programming habits from the beginning by emphasizing the need for written specifications and the use of documentation and testing tools in development environment. The object oriented aspects of the programming language (if they exist) will only be introduced to the extent necessary to allow working programs to be created in the subset of the full language used in the course. This course could be given using Java. Which means that throughout this document programming language refers to Java, development environment refers to Eclipse, documentation tools refers to Javadocs. For the time being, the language subset used will be defined by the IEEE/ACM Java Task Force package.
This course introduces programming concepts and techniques with the Java language. It intends for all who plan to use computer programming in their studies and careers. Topics include, Object Oriented Programming (OOP) concepts, Java API, exceptions, generic methods, input-output and files, design and using graphical user interfaces (GUI) and application archiving.
This course covers the basic science behind the use of computers to provide effective and efficient methods for carrying out tasks. Tasks examined include data storage and retrieval, sorting and searching. To carry out these tasks, both algorithms and structures for the storage of data need to be specified. Mathematical tools have to be developed that enable us to measure the fundamental effectiveness of algorithms and in particular the way these algorithms scale as the size of the task being performed increases. This course introduces the basic sorting and searching methods and dynamic data structures such as linked lists, trees and hash tables.
This course teaches regular languages, context-free languages and the automata related to these : finite-state automata and push-down automata. The machinery are explained and studied mathematically. Also, regular grammars and context-free grammars and regular expressions are studied extensively. Pumping lemma is thought to prove that a given grammar is nonregular.
This course builds on CMPE 211 to apply similar techniques to analyse more sophisticated algorithms and data structures. Topics covered include graphs and graph algorithms, greedy algorithms, random algorithms, divide and conquer algorithms, dynamic programming and string searching algorithms.
This course aims to provide students with a general understanding of data science and social media analysis, including their design. In addition, the design processes for and programming used in developing such systems will be addressed.
This course introduces object orientation and concurrent processes for large scale problems, using the industrially accepted Java language. This course covers, GUI and concurrent programming, cooperating sequential processes that include critical sections, mutual exclusion, thread synchronization, semaphores, monitors, deadlock starvation and Client-Server programming with Socket, RMI and XMLRPC libraries.
Programs running on the cloud to provide services to users or computers elsewhere are becoming increasingly important. A number of cloud providers, programming languages and programming environments have evolved specifically to address this need. This course looks at the issues involved in writing service-providing programs, using the latest programming languages and technology.
The course is designed to teach the fundamentals of computer graphics focusing on the current dominant interactive 3D rendering pipeline of rasterization. The course topics are however more general and do not depend on any specific rendering approach or API. The course also includes an introduction to curves and splines. These fundamentals are applied in modern OpenGL demonstrations, lab exercises and assignments. This will give students both, an understanding of rendering techniques and a working knowledge of OpenGL which they can apply cross-platform; desktop, mobile and web. This course emphasizes learning how to architect and write graphics software, rather than on learning how to use existing tools to create images.
Operating systems play a fundamental role in the use of computers and are of enormous commercial importance. This course looks at how they work. Contents include, classification and structure of operating systems, storage media, memory management and dynamic storage strategies, scheduling algorithms, I/O and interrupt structures, protection and security, queuing and network
control models, systems software, linkers, loaders, assemblers, translators and programming environments, case studies of existing operating systems and implementation of operating system modules.
The aim of this course is to provide an analytic study of programming languages. The course develops this study by looking primarily at interpreters of programming languages. This course examines the fundamental differences between different programming paradigms, through a study of how to build interpreters for the different models. On completion of the course, the student should have gained an understanding of the role of interpreters in defining the syntax and semantics of various programming paradigms.
This course is the continuation of Digital Design course where logic gates, combinational and sequential circuits are studied. Starting from register design, memory design, ALU, datapath design are covered. Instruction set architecture with examples are covered. RISC and CISC architectures are reviewed.
This course looks at programming for network based systems. Subjects covered include network protocols, network traffic and security, distributed programming and emerging network technologies. The course includes practical network programming.
This course aims to provide students with an introductory understanding of general problems in developing large-scale computer systems that require teamwork, and also the basic principles in planning for tools to develop such systems in economically feasible ways.
This course aims to provide students with the necessary skills to design and implement the main working components of software, in a group setting. Students will form teams and each team member will take varying responsibilities in a rotating fashion, to provide a realistic experience of real-world software development. At the end of the course, the completed software product will be the major assessment element.
The implementation of compilers has enabled the production of increasingly large computer systems. Compilers and assemblers play a crucial role and at the same time are good examples of large and complex programs that have at least in part a sound mathematical basis for the way they work. This course studies the different phases of compiler construction and engineering and scientific issue in each stage.
Study of algorithms for computing numerical answers to mathematical problems. This course will introduce and analyze numerical techniques and algorithms for a variety of basic problems, studying their efficient computer implementation, robustness and reliability. This course will provide an introduction to the basics of the modern numerical techniques when applied to problems of analysis and algebra. The course will have a substantial element of computer-based analysis.
Natural Language Processing (NLP) which is sub-brunch of Artificial intelligence, aims to develop techniques for processing language and speech. The course aims to learn basic algorithms in this field and the main language levels: morphology, syntax, semantics, and pragmatics, as well as the resources of natural language data - corpora. In this course, applications (rapid information extraction, machine translation, word sense disambiguation etc.) are analyzed.
Almost all large data processing systems rely on a generalized database to store and retrieve data. This course looks at the theoretical and technical issues involved in the implementation of such generalized databases. Course contents include introduction to databases, entity relationship model, physical database design and access strategies, relational data model, SQL data manipulation language, theoretical data manipulation language, normal forms and logical database design, query processing, concurrency control and recovery in databases, implementation of a simple storage manager and design of a relational database.
Artificial intelligence (AI) has become an important field of study with a wide spread of applications; AI systems are currently capable of understanding speech, playing chess and performing household tasks. In this module we will investigate questions about AI systems such
as: how to represent knowledge, how to effectively generate appropriate sequences of actions and how to search among alternatives to find optimal or near-optimal solutions. We will also explore how to deal with uncertainty in the world, how to learn from experience, and how to learn decision rules from data.
This course aims to provide students with a general appreciation of the art of user interface design, particularly graphical user interfaces in computer and software systems. It provides extensive case scenarios and examples of bad design, and highlights the importance of improved productivity in computer literacy with better user interfaces.
This is an introductory course to computer security and cryptography. It covers many aspects of secure communication by introducing basic and advanced methods of cryptography, network security, and software security.
This course aims to give a solid understanding of security vulnerabilities in networks, it covers general attack methods with recent applications. A comprehensive introduction to cryptography both in theory and in terms of crypto
algorithms and cryptanalysis methods builds a skeleton of the course. Moreover many fundamental algorithms of cryptography is included and several of them will be implemented.
Basic concepts in number theory, finite fields, elliptic curves necessary for the course will be introduced. Recent usage cases of cryptography for the security of big data will be introduced as well.
Due to recent progress in the computer field, digital pictures are all around us; computing with image is no longer just for the realm of the science, but also for the arts and social sciences and even for hobbyists. By the end of the course, the enthusiastic student will be able to perform image acquisition, enhancement, restoration, wavelet transformation, compression, segmentation and objects recognition.
Machine learning concerns the construction of systems that can learn from data. We need learning every time we cannot directly write a computer program to solve a given task; e.g. programs that learn to recognize human faces, to digitalize an acoustic speech signal and/or written carachters, and to drive autonomous robots. This course covers the theory and practical algorithms for machine learning focusing on classification and dimensionality reduction.