Courses in Fall 2011
CS5950 - F11
Time & Place: T Th 8:30am-9:45am, C0141 CEAS,
This course is a 3 credit hour advance undergraduate or introductory graduate level topics course, intended for students who plan to pursue design and development concerning the exciting area of sensor network systems. This class will focus on the nature of computation and communication needed to design large-scale distributed smart sensor networks. The course will cover two fronts: introduce students to the diverse literature on sensor network computing, and expose them to the fundamental issues in designing and analyzing sensor network information processing applications. We will study emerging technology and standards, by reading papers on topics ranging from networking, language and OS support to algorithms for coordination, important constraints in scaling and deploying sensor network systems, and pervasive computing. Students will be exposed to the topics of querying, data routing, network self-organization, and power-aware solutions and how they can support high-level information processing tasks. This semester’s focus will be on systems and applications development.
This course requires active and serious student participation in a semester-long group project. Groups of no more than two-three students will be responsible for one or more aspects of the design and development of a sensor network system. The group project is intended to complement the reading material by allowing the students to develop experimental skills for network, mobile apps (iPhone, Android, etc) and real-time operating system programming. Each group will have an opportunity to present its work to the class and to the department.
Topics Covered (tentative):
Driving applications, constraints/challenges, collaborative information processing in sensor nets
Wireless and wired networking issues for sensor nets
Networking for sensor nets: directed diffusion, aggregation
Network discovery/initialization, location/time services
Networking for sensor nets: routing, large-scale analysis, power-aware computing and communication
Localization and tracking; self-configuration/organization
Information management: geometric querying, mobile clustering, leader election, kinetic data structure
Physical constraints, power and other resources, resource management
Tools, hw/sw Platforms: TinyOS, eCOS, RTOS, Motes, iBadges, Embedded PCs, Simulators
Pervasive and amorphous computing
Course Prerequisites:
Strong desire, self-motivation & dedication to learn & contribute to the emerging area of smart sensor networks
Proficient in C, C++ or Java (especially network programming)
Low-level, systems programming and Linux programming experience
Some mathematics and statistics background
Permission of the instructor if you are missing any of the above.
Courses in Fall & Spring 2012
Prerequisites:
By Courses: CS1110 - Computer Science I or equivalent with a grade of C or better (prerequisite); Math1220 or Math 2000 (co-requisite)
By Topic: Basic concepts of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; Basics of object oriented programming - be able to create and use elementary objects; Java language for both procedural and introductory object oriented programming; Basics of the software life cycle; Validating quality of software produced; Introductory sorting and searching algorithms; Algorithms for elementary problem solutions; Documenting programs effectively and efficiently; Team work.
This is the standard Computer Science II course using the Java computer language. The emphasis is on designing and programming object-oriented computer solutions to problems, as well as on the data structures used for this purpose. An introduction to the analysis of algorithms is made. Students must register for both a lecture section and a laboratory section.
The course is very structured, as is appropriate for sophomores or advance freshmen. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a comprehensive final examination.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
S. Zakhour, S. Hommel, J. Royal, I Rabinovitch, T. Risser and M. Hoeber, The Java Tutorial: A Short Course on the Basics (4th Edition), Prentice Hall / Pearson, 2006, ISBN-10: 0321334205 | ISBN-13: 978-0321334206.
T. Gaddis, Starting out with Java, Early Objects (4th Edition), Pearson / Prentice Hall, 2010, ISBN-10: 0132164760 | ISBN-13: 978-0132164764
http://wps.pearsoned.com/wps/media/access/Pearson_Default/11619/11898392/login.html
- Learn about various phases of the software life cycle.
- Understand the concept of recursion and structured programming.
- Understand the concepts of classes and object oriented programming.
- Understand the concepts of polymorphism.
- Learn exception handling.
- Learn common complex data structures.
- Learn about interfaces, generics and collections.
- Learn about searching and sorting, and learn basic mathematical techniques for analyzing their complexity.
- Learn working in a pair or team-programming environment.
- Learn and use version control and documentation tools.
Student will be able:
To write well-structured, well-documented Java programs that follow relevant phases of the software life cycle.
To use recursive solutions for problems that are appropriate for the recursive strategy.
To design, create and use class and object hierarchies.
To use polymorphism (incl. abstract classes and methods).
To design complex data structures—including two-dimensional arrays, linked lists, stacks and queues.
To use generics or collections to perform operations on complex data structures.
To program various searching (linear, binary) and sorting (e.g., insertion, selection, bubble, merge, quick) algorithms, and be able to analyze their efficiencies.
To work in a pair or team programming environment.
To utilize version control and document generation systems.
Courses in Spring & Summer II - 2013
CS1120 - S and SU13
Prerequisites:
By Courses: CS1110 - Computer Science I or equivalent with a grade of C or better (prerequisite); Math1220 or Math 2000 (co-requisite)
By Topic: Basic concepts of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; Basics of object oriented programming - be able to create and use elementary objects; Java language for both procedural and introductory object oriented programming; Basics of the software life cycle; Validating quality of software produced; Introductory sorting and searching algorithms; Algorithms for elementary problem solutions; Documenting programs effectively and efficiently; Team work.
This is the standard Computer Science II course using the Java computer language. The emphasis is on designing and programming object-oriented computer solutions to problems, as well as on the data structures used for this purpose. An introduction to the analysis of algorithms is made. Students must register for both a lecture section and a laboratory section.
The course is very structured, as is appropriate for sophomores or advance freshmen. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a comprehensive final examination.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
CS1120 - Advanced Java and Data Structures, Pearson Custom book, selected chapters from Gaddis and Muganda's book, ISBN 978-1269087278, Available in bookstore around Jan 17, 2012. Beginning chapters will be available online via your elearning until the book becomes available.
T. Gaddis, Starting out with Java, Early Objects (4th Edition), Pearson / Prentice Hall, 2010, ISBN-10: 0132164760 | ISBN-13: 978-0132164764
http://wps.pearsoned.com/wps/media/access/Pearson_Default/11619/11898392/login.html
T. Gaddis and G. Muganda, Starting out with Java: From Control Structures to Data Structures, Pearson, 2012, ISBN 10: 0321545869.
S. Zakhour, S. Hommel, J. Royal, I Rabinovitch, T. Risser and M. Hoeber, The Java Tutorial: A Short Course on the Basics (4th Edition), Prentice Hall / Pearson, 2006, ISBN-10 0321334205 | ISBN-13: 978-0321334206.
http://www.pearsonhighered.com/educator/product/Java-Tutorial-The-A-Short-Course-on-the-Basics/9780321334206.page
Learn about various phases of the software life cycle.
Understand the concept of recursion and structured programming.
Understand the concepts of classes and object oriented programming.
Understand the concepts of polymorphism.
Learn exception handling.
Learn common complex data structures.
Learn about interfaces, generics and collections.
Learn about searching and sorting, and learn basic mathematical techniques for analyzing their complexity.
Learn working in a pair or team-programming environment.
Learn and use version control and documentation tools.
Student will be able:
To write well-structured, well-documented Java programs that follow relevant phases of the software life cycle.
To use recursive solutions for problems that are appropriate for the recursive strategy.
To design, create and use class and object hierarchies.
To use polymorphism (incl. abstract classes and methods).
To design complex data structures—including two-dimensional arrays, linked lists, stacks and queues.
To use generics or collections to perform operations on complex data structures.
To program various searching (linear, binary) and sorting (e.g., insertion, selection, bubble, merge, quick) algorithms, and be able to analyze their efficiencies.
To work in a pair or team programming environment.
To utilize version control and document generation systems.
Courses in Fall 2014
CS1110 - F14
You need to be also registered for one of the labs from CRNs 40309, 40310, 40311, 42678, or 43246.
Prerequisite (may be taken concurently): MATH 1180 or MATH 1220 or MATH 2000 or MATH 1700 or MATH 1230 or MATH 1710 or MATH 2720 or MATH 3740.
This course is aimed at college freshmen and other students seeking a basic knowledge of computer programming. As a freshman level course it has two goals: 1) to develop basic knowledge, skills, and attitudes relating to student of computing and computer science, and 2) to develop basic knowledge, skills, and attitudes for general college level academic, college life and beyond.
The course is very structured, as is appropriate for freshmen. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a comprehensive final examination.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
Required Texts
Starting Out with Java – From Control Structures through Objects **CS 1110 Textbook**, by Tony Gaddis, Pearson Custom – Computer Science, (2013) ISBN-10: 1269046780, ISBN-13: 9781269046787, Pearson Learning Solutions, Boston, MA.
Pearson MyProgrammingLab is bundled with the custom book at the WMU bookstore. If you have purchased the full book or a used custom book, you may have to purchase the access code for MyProgrammingLab separately.
consistently follow a problem solving process;
Understand, design, implement, and test
read, develop, and implement algorithms to solve simple problems;
Define, recognize, design, and implement algorithms (pseudocode)
understand and use basic concepts of high-level language procedural programming;
Main program, Declarations, Assignment-statements, I/O-statements, Selection-statements, Loop-statements, Method Call-statements, Statements vs. Expressions
understand and use basic concepts of OOP;
consistently document programs effectively and efficiently;
Program Identification, Sectional Comments, Side-by-Side Comments, Redundant vs. Non -redundant Comments, Use of white-space and indentation, Use of readable identifiers
understand and use basic components of an integrated development environment (IDE);
Context-sensitive Editor, Build/Compile, Execute, Symbolic Debugger
know the basic phases of the software life cycle and software development cycle;
Concept, Development, Maintenance, Retirement
Requirements, Design, Code & Debug, Test
know basic searching algorithms;
Linear and binary search;
Selection and insertion sort;
gain an initial and elementary understanding of algorithm complexity;
Big O Notation
Courses in Summer I 2014
CS1110 - SU14
You need to be also registered for the lab, T R 9:30-11:20am, CRN 21042
Prerequisite (may be taken concurently): MATH 1180 or MATH 1220 or MATH 2000 or MATH 1700 or MATH 1230 or MATH 1710 or MATH 2720 or MATH 3740.
This course is aimed at college freshmen and other students seeking a basic knowledge of computer programming. As a freshman level course it has two goals: 1) to develop basic knowledge, skills, and attitudes relating to student of computing and computer science, and 2) to develop basic knowledge, skills, and attitudes for general college level academic, college life and beyond.
The course is very structured, as is appropriate for freshmen. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a comprehensive final examination.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
Required Texts
Starting Out with Java – From Control Structures through Objects **CS 1110 Textbook**, by Tony Gaddis, Pearson Custom – Computer Science, (2013) ISBN-10: 1269046780, ISBN-13: 9781269046787, Pearson Learning Solutions, Boston, MA.
Pearson MyProgrammingLab is bundled with the custom book at the WMU bookstore. If you have purchased the full book or a used custom book, you may have to purchase the access code for MyProgrammingLab separately.
consistently follow a problem solving process;
Understand, design, implement, and test
read, develop, and implement algorithms to solve simple problems;
Define, recognize, design, and implement algorithms (pseudocode)
understand and use basic concepts of high-level language procedural programming;
Main program, Declarations, Assignment-statements, I/O-statements, Selection-statements, Loop-statements, Method Call-statements, Statements vs. Expressions
understand and use basic concepts of OOP;
consistently document programs effectively and efficiently;
Program Identification, Sectional Comments, Side-by-Side Comments, Redundant vs. Non -redundant Comments, Use of white-space and indentation, Use of readable identifiers
understand and use basic components of an integrated development environment (IDE);
Context-sensitive Editor, Build/Compile, Execute, Symbolic Debugger
know the basic phases of the software life cycle and software development cycle;
Concept, Development, Maintenance, Retirement
Requirements, Design, Code & Debug, Test
know basic searching algorithms;
Linear and binary search;
Selection and insertion sort;
gain an initial and elementary understanding of algorithm complexity;
Big O Notation
This is one of the foundation courses required for computer science masters degree starting Fall 2014. Check the details of foundation courses at
Prerequisites:
By Courses: (MATH 1450 or CS1310) and CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; introductory sorting and searching algorithms; elementary data structures (linked lists, queues, stacks, hash maps); documenting programs effectively and efficiently; team work.
This is an exciting but challenging advanced undergraduate and beginning graduate course basic, fundamental and foundational to computer science. This course is a continuation of the study of data structures and algorithms, emphasizing methods useful in practice. It provides a theoretical foundation in designing algorithms as well as their efficient implementations. The focus is on the advanced analysis of algorithms and on how the selections of different data structures affect the performance of algorithms. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; backtracking; branch-and-bound; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; and parallel computing.
The course is appropriate for seniors and beginning graduate students. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a number of quizzes.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
Algorithm Design: Foundations, Analysis and Internet Examples by Michael Goodrich and Roberto Tammassia, Wiley, ISBN: 978-0-471-38365-9
Notes - Summation and Recurrence Relations.
A number of textbooks (in addition to GT's book) on algorithm design appropriate for this course have been published. The course will cover material from these books as well as material from research papers.
The book "Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne, Addison-Wesley Professional, ISBN-10: 032157351X, ISBN-13: 978-0321573513" used last semester may suffice for you, if you can copy problems sets needed in homeworks from one of your colleagues who has purchased the required texbook.
Reinforce analytic development and problem solving abilities, and develop a foundation in computer science.
Show progress with regard to understanding the analysis and performance of algorithms (for further use, e.g., in graduate level courses), including knowledge and use of terminology and how the theory connects with real-world applications, possibly in different and new areas.
Apply the concepts covered in the course to written and practical problems, e.g., by combining problem solving with computer programming and the use of software tools as part of assignments.
Students who earn a “C” or better in this course should have knowledge of
Sequential algorithms pertaining to the greedy, divide-and-conquer, dynamic programming, backtracking and branch-and-bound paradigms;
Parallel algorithms pertaining to SIMD, MIMD, shared memory and message passing systems;
Introductory databases and data management applications;
Analyzing iterative and recursive sequential and parallel algorithms;
Efficient data structures such as AVL trees, 2-3 trees, min-max heaps, B-trees.
Courses in Spring 2014
CS1120 - S14
Prerequisites:
By Courses: CS1110 - Computer Science I or equivalent with a grade of C or better (prerequisite); CS 1110 and one of the following: MATH 1220 or MATH 2000 or MATH 1700 or MATH 1230 or MATH 1710 or MATH 2720 or MATH 3740 (the MATH prerequisite may be taken concurrently).
By Topic: Basic concepts of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; Basics of object oriented programming - be able to create and use elementary objects; Java language for both procedural and introductory object oriented programming; Basics of the software life cycle; Validating quality of software produced; Introductory sorting and searching algorithms; Algorithms for elementary problem solutions; Documenting programs effectively and efficiently; Team work.
This is the standard Computer Science II course using the Java computer language. The emphasis is on designing and programming object-oriented computer solutions to problems, as well as on the data structures used for this purpose. An introduction to the analysis of algorithms is made. Students must register for both a lecture section and a laboratory section.
The course is very structured, as is appropriate for sophomores or advance freshmen. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a comprehensive final examination.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
CS1120 - Advanced Java and Data Structures, Pearson Custom book, selected chapters from Gaddis and Muganda's book, ISBN 978-1269087278.
T. Gaddis and G. Muganda , Starting Out with Java: From Control Structures through Data Structures, Second Edition. Prentice Hall, 2012. ISBN-13: 978-0-321-54586-2, ISB-10: 0-321-54586-9
Note: Our custom book (“Required”) contains selected chapters from the Gaddis and Muganda's book, so if you would rather have the full book, you may buy this book.
T. Gaddis, Starting out with Java, Early Objects (4th Edition), Pearson / Prentice Hall, 2010, ISBN-10: 0132164760 | ISBN-13: 978-0132164764
http://wps.pearsoned.com/wps/media/access/Pearson_Default/11619/11898392/login.html
S. Zakhour, S. Hommel, J. Royal, I Rabinovitch, T. Risser and M. Hoeber, The Java Tutorial: A Short Course on the Basics (4th Edition), Prentice Hall / Pearson, 2006, ISBN-10 0321334205 | ISBN-13: 978-0321334206.
http://www.pearsonhighered.com/educator/product/Java-Tutorial-The-A-Short-Course-on-the-Basics/9780321334206.page
Learn about various phases of the software life cycle.
Understand the concept of recursion and structured programming.
Understand the concepts of classes and object oriented programming.
Understand the concepts of polymorphism.
Learn exception handling.
Learn common complex data structures.
Learn about interfaces, generics and collections.
Learn about searching and sorting, and learn basic mathematical techniques for analyzing their complexity.
Learn working in a pair or team-programming environment.
Learn and use version control and documentation tools.
Student will be able:
To write well-structured, well-documented Java programs that follow relevant phases of the software life cycle.
To use recursive solutions for problems that are appropriate for the recursive strategy.
To design, create and use class and object hierarchies.
To use polymorphism (incl. abstract classes and methods).
To design complex data structures—including two-dimensional arrays, linked lists, stacks and queues.
To use generics or collections to perform operations on complex data structures.
To program various searching (linear, binary) and sorting (e.g., insertion, selection, bubble, merge, quick) algorithms, and be able to analyze their efficiencies.
To work in a pair or team programming environment.
To utilize version control and document generation systems.
This is one of the foundation courses required for computer science masters degree starting Fall 2014. Check the details of foundation courses at
Prerequisites:
By Courses: (MATH 1450 or CS1310) and CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; introductory sorting and searching algorithms; elementary data structures (linked lists, queues, stacks, hash maps); documenting programs effectively and efficiently; team work.
This is an exciting but challenging advanced undergraduate and beginning graduate course basic, fundamental and foundational to computer science. This course is a continuation of the study of data structures and algorithms, emphasizing methods useful in practice. It provides a theoretical foundation in designing algorithms as well as their efficient implementations. The focus is on the advanced analysis of algorithms and on how the selections of different data structures affect the performance of algorithms. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; backtracking; branch-and-bound; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; and parallel computing.
The course is appropriate for seniors and beginning graduate students. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, and quizzes. Each week reading will cover one or two chapters of the textbook. The reading, writing, and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two midterm examinations during the course and a number of quizzes.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
Algorithm Design: Foundations, Analysis and Internet Examples by Michael Goodrich and Roberto Tammassia, Wiley, ISBN: 978-0-471-38365-9
Notes - Summation and Recurrence Relations.
A number of textbooks (in addition to GT's book) on algorithm design appropriate for this course have been published. The course will cover material from these books as well as material from research papers.
The book "Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne, Addison-Wesley Professional, ISBN-10: 032157351X, ISBN-13: 978-0321573513" used last semester may suffice for you, if you can copy problems sets needed in homeworks from one of your colleagues who has purchased the required texbook.
Reinforce analytic development and problem solving abilities, and develop a foundation in computer science.
Show progress with regard to understanding the analysis and performance of algorithms (for further use, e.g., in graduate level courses), including knowledge and use of terminology and how the theory connects with real-world applications, possibly in different and new areas.
Apply the concepts covered in the course to written and practical problems, e.g., by combining problem solving with computer programming and the use of software tools as part of assignments.
Students who earn a “C” or better in this course should have knowledge of
Sequential algorithms pertaining to the greedy, divide-and-conquer, dynamic programming, backtracking and branch-and-bound paradigms;
Parallel algorithms pertaining to SIMD, MIMD, shared memory and message passing systems;
Introductory databases and data management applications;
Analyzing iterative and recursive sequential and parallel algorithms;
Efficient data structures such as AVL trees, 2-3 trees, min-max heaps, B-trees.
Courses in Fall 2015
CS6030 - F15
Prerequisites:
By Courses: CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; sorting and searching algorithms; data structures (linked lists, queues, stacks, hash maps); divide-and-conquer, greedy, dynamic programming, branch-and-bound and backtracking algorithm design techniques; documenting programs effectively and efficiently; team work. Proficient in Java, C, C++, or C# beyond the experience in CS3310. Low-level, systems programming and Linux programming experience desired. Some mathematics and statistics background. Strong desire, self-motivation & dedication to learn and contribute to the interesting area of cloud-computing.
This course is a 3 credit hour advance undergraduate or introductory graduate level topics course, intended for students who plan to design and develop applications, or pursue research in the exciting area of cloud computing. Cloud computing comes into focus only when you think about what IT always needs: a way to increase capacity or add capabilities on the fly without investing in new infrastructure, training new personnel, or licensing new software. The primary objective is to provide the introduction to the current practices of cloud computing, often also known as the Internet as a platform. Mainly focusing on cloud computing models, techniques, and architectures, this course will provide students with the knowledge and hand-on experience in designing and implementing cloud-based software systems. Topics may include advanced web technologies (e.g. AJAX and Mashup), distributed computing models and technologies (Hadoop and MapReduce), Infrastructure-as-a-Service (IaaS), Software as a Service (SaaS), Platform-as-a-Service (PaaS), virtualization, parallelization, security/privacy, and other issues in cloud computing. This course will also explore the current challenges facing cloud computing. Approximately two-thirds of this course will be devoted to learning applications programming for various cloud infrastructures and the rest to development/understanding of systems issues in installing and implementing clouds and related systesm on different platforms.
Required Texts
Mastering Cloud Computing by Buyya, Vecchiola & Selvi, 2013, Morgan Kaufmann Publishers, ISBN 9780124114548
We will also extensively refer to research papers and material available on the web.
Hadoop: The Definitive Guide, Third Edition, by Tom White (O'Reilly)
Data-Intensive Text Processing with MapReduce, by Jimmy Lin and Chris Dyer
Students will be able to describe principles behind cloud-computing.
Students will be able to write simple application programs using a public or private cloud infrastructure.
Students will be able to install cloud software and run a cloud.
Students will be able to write simple programs using MapReduce.
Students will be familiar in using Hadoop (HDFS).
Students' progress and achievements towards reaching the course goals and objectives will be apparent from such measures as: the results and creativity displayed in course assignments; and the contents of and performance on certain exam portions.
Courses in Summer II 2015
Prerequisites:
By Courses: CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; sorting and searching algorithms; data structures (linked lists, queues, stacks, hash maps); divide-and-conquer, greedy, dynamic programming, branch-and-bound and backtracking algorithm design techniques; documenting programs effectively and efficiently; team work. Proficient in Java, C, C++, or C# beyond the experience in CS3310. Low-level, systems programming and Linux programming experience desired. Some mathematics and statistics background. Strong desire, self-motivation & dedication to learn and contribute to the interesting area of cloud-computing.
This course is a 3 credit hour advance undergraduate or introductory graduate level topics course, intended for students who plan to design and develop applications, or pursue research in the exciting area of cloud computing. Cloud computing comes into focus only when you think about what IT always needs: a way to increase capacity or add capabilities on the fly without investing in new infrastructure, training new personnel, or licensing new software. The primary objective is to provide the introduction to the current practices of cloud computing, often also known as the Internet as a platform. Mainly focusing on cloud computing models, techniques, and architectures, this course will provide students with the knowledge and hand-on experience in designing and implementing cloud-based software systems. Topics may include advanced web technologies (e.g. AJAX and Mashup), distributed computing models and technologies (Hadoop and MapReduce), Infrastructure-as-a-Service (IaaS), Software as a Service (SaaS), Platform-as-a-Service (PaaS), virtualization, parallelization, security/privacy, and other issues in cloud computing. This course will also explore the current challenges facing cloud computing. Approximately two-thirds of this course will be devoted to learning applications programming for various cloud infrastructures and the rest to development/understanding of systems issues in installing and implementing clouds and related systesm on different platforms.
Mastering Cloud Computing by Buyya, Vecchiola & Selvi, 2013, Morgan Kaufmann Publishers, ISBN 9780124114548
We will also extensively refer to research papers and material available on the web.
Hadoop: The Definitive Guide, Third Edition, by Tom White (O'Reilly)
Data-Intensive Text Processing with MapReduce, by Jimmy Lin and Chris Dyer
Students will be able to describe principles behind cloud-computing.
Students will be able to write simple application programs using a public or private cloud infrastructure.
Students will be able to install cloud software and run a cloud.
Students will be able to write simple programs using MapReduce.
Students will be familiar in using Hadoop (HDFS).
Students' progress and achievements towards reaching the course goals and objectives will be apparent from such measures as: the results and creativity displayed in course assignments; and the contents of and performance on certain exam portions.
Courses in Spring 2015
Prerequisites:
By Courses: CS3310 or equivalent with a grade of C or better; or permission of the instructor.
By Topic: Advance understanding of high-level language programming - conditional structures; looping structures; arrays; program logic - to solve problems; object oriented programming - be able to create and use objects; software life cycle; validating quality of software produced; sorting and searching algorithms; data structures (linked lists, queues, stacks, hash maps); divide-and-conquer, greedy, dynamic programming, branch-and-bound and backtracking algorithm design techniques; documenting programs effectively and efficiently; team work
This is an exciting but challenging advanced undergraduate and beginning graduate course fundamental and almost foundational to computer science. Parallel, distributed and high-performance computing techniques have become pervasive due to upiquity of multi-core architectures (existing even in smart hand-held devices), high speed networking and compute-clusters. In fact, the new curricular standards from IEEE and ACM are soon going to be released that integrate HPC concepts in core computer science courses at the undergraduate level including CS1, CS2 and CS3 (see NSF/IEEE-TCPP Curriculum Initiative and Computer Science Accerditation Board, in particular ACM Computer Science Curricula 2013). For quick preview of PDCS and HPC topics in core CS courses read Parallel Processing pages taken from CS Curricula 2013, and TCPP Curriculum Initiave pages from the CS Curricula 2013.
Parallel Computations I will cover architecture, synchronization and communication aspects of parallel and distributed systems. This course will focus on the design and analysis of algorithms which have a prototype treatment on current machines. These algorithms may include parallel sorting, combinatorial search, graph search and traversal, applications in graphics, 2-D finite differences, 2-D finite element techniques, matrix algorithms and the Fast Fourier Transform.
CS 5260 will cover cutting-edge topics, on multi-core computing and threaded programming; distributed systems; graphics processing units (GPUs) and Cuda; cloud computing with infrastructure as a service and on-demand resource provisioning; "ubiquitous" computing, including web based systems and technologies, and smartphone applications; grid computing with national and oversees sites; as well as working on the parallel systems in our department and handling classical problems and algorithms. We will get hands-on experience on our cluster of about 20 processors and on a shared memory, multi-core processor and GPU based system.
The course is appropriate for seniors and beginning graduate students. Like most college courses, this course requires students to take responsibility for their own learning. The course follows a strict schedule of reading, writing, programming & homework exercises and quizzes. Each week reading will cover one or two chapters of the textbooks. The reading, writing, homework and examination schedule is firm. Students are required to develop the discipline to follow the schedule.
As is typical of many college courses, this course will require two examinations during the course and a number of quizzes.
Classroom activities, unlike the readings and quizzes, are somewhat less structured. This allows for tangents in discussions, the use of occasional visiting guests, unforeseen instructor absences, holidays, etc. The flexibility of the classroom does not tie students or instructor to the textbook readings, but does complement and enhance those readings. Students are responsible for material in the textbook, whether or not the material is addressed in the classroom. Students are also responsible for material and skills presented or discussed in class.
An Introduction to Parallel Programming by Peter S. Pacheco, 2011, Elsevier, ISBN 978-0-12-374260-5
CUDA by Example - An Introduction to General-Purpose GPU Programming by Jason Sanders and Edward Kandrot, 2011, Addison-Wesley, ISBN 978-0-13-138768-3
A number of other books appropriate for this course have been published. The course will cover material from these books as well as material from research papers. Some of the books are:
Parallel Programming for Multicore and Cluster Systems. Thomas Rauber and Gudula Rünger, Springer 2010 (ISBN: 978-3-642-04817-3)
Parallel Programming - Techniques and Applications. B. Wilkinson and M. Allen, Prentice Hall
Using MPI - Portable Parallel Programming with the Message-Passing Interface. W. Gropp, E. Lusk and A. Skjellum, The MIT Press
Parallel Programming in C with MPI and OpenMP. Micheal J. Quinn, McGraw-Hill
Introduction to Parallel Computing. A. Grama et al., Benjamin/Cummings Publishing Company
An Introduction to Parallel Algorithms, Joseph JaJa, Addison-Wesley
Course Learning Outcomes
Students will be able to use parallel tools and environments.
Students will understand the effects of parallel overhead on performance.
Students will be able to apply parallel strategies and paradigms to design parallel/distributed algorithms.
Students will study and explain the topics of their presentations in detail.
Students will have the opportunity to participate in research projects.
Students' progress and achievements towards reaching the course goals and objectives will be apparent from such measures as: the results and creativity displayed in course assignments; and the contents of and performance on certain exam portions.