Professional Documents
Culture Documents
retaining skilled workers who can deliver. Unfortunately, many recent university graduates are not adequately prepared to contribute to an organization without months, if not years, of post-graduation practical skills development and polishing. The iCarnegie Software Development Program, powered by the world-renowned Carnegie Mellon University, is designed to change that. This program provides students with the tools and skills needed to successfully enter the work place and immediately begin adding value to an organization. Carnegie Mellon University has a century-long history of academic innovation that has set the standard for its peers. Faculty members across all disciplines are known for cutting-edge research that yields real-world results. The universitys mission of global educational excellence has redened the role a university plays in the development and sustainability of a knowledge-based society. iCarnegie harnesses this world-class education and research knowledge, and delivers it in a scalable way to students around the globe. iCarnegie works with Carnegie Mellon schools and faculty members to develop and maintain exceptional curriculum and professional skill certications in technology, strategy and business. By making key components of the Carnegie Mellon education available to a broader audience, iCarnegie is enhancing how education is delivered.
AN INNOVATIVE CURRICULUM
The global, high-performance world in which we live requires levels of performance that can only be achieved by means of practice. Few of these outcomes can be achieved effectively within the constraints of stove-piped courses compartmentalized into blocks of a single semester. The iCarnegie solution is to provide a more robust program architecture and design that employs curricular threads that weave together the core and the remainder of the program into a powerful whole. The iCarnegie Software Development Program makes it possible for faculty to invest their precious time and resources more effectively by leveraging the work, insights and computer science/software engineering best practices from Carnegie Mellon University and iCarnegies partners. iCarnegie combines program architecture and design concepts from large and complex system development with the latest research results into how students learn, to create foundational elements upon which this program is built. Many university professors find themselves in a situation where keeping current with research trends, technology advancement, business developments and the latest advances in pedagogy all divert attention away from student learning. The Software Development Program makes it easier for educators to focus more time and effort on students and their needs, as well as the needs of the major employers for which the students will one day work. It starts with a careful focus on program objectives and outcomes, and a belief that students learn best when they are actively working in a context that is as close as possible to a real work experience. The next step is to identify those critical outcomes that can only be achieved over time through reflection-guided repetition. iCarnegie believes I understand knowledge is only meaningful when coupled with the ability to actually do quality work.
S O F T WA R E D E V E LO P M E N T P R O G R A M
LEARNING-BY-DOING APPROACH
A successful software development professional must be able to actually produce quality software. This requires practice and skill learned only through a learning-by-doing approach. While people do acquire knowledge by reading and listening to lectures, performance skills and quality are only developed through practice. To learn to do a professionals task well, it is best to simulate the task in an environment that is as similar as possible to the work place. For this reason, the Software Development Program core courses focus students on exercises and projects as opposed to lectures and tests. Textbooks, reading sets and lectures (by means of video) are made available, however these are employed as individual knowledge gathering tools as opposed to the centerpiece of the course. Performance assessments are done in controlled settings to ensure honest and fair results, but more emphasis is placed on working with and helping students develop personal, self-assessment skills, as these will be far more useful throughout their professional life. Learning-by-doing activities include individual and small group tasks where the resulting work product can be quickly evaluated against standards by the student, other students or the instructor, or can be used as the source for discussion by the whole class. Doing the work required to create such work-products requires both quality and speed, which can only be achieved when the basic individual skills have been properly learned. If students show speed or quality problems, the professor will suggest remedial activities. Superior speed, quality or other extraordinary performance will be rewarded by suggestions for more advanced work.
PROJECT-FOCUSED LEARNING
While the program employs, teaches and uses theoretical concepts and methods where appropriate, the bulk of the coursework is practical. The role of theory is to allow deeper insights and connections to be made, and provide predictive insights. Theory will not be the primary teaching vehicle, however. Students will participate in a number of real-world projects that require them to understand client issues, needs and constraints as well as the pros and cons of various potential solutions. Project work in a rich, real-world context provides opportunities for much more meaningful work to be done, and makes it possible to explore design choices that are difficult to do abstractly. The first course projects are small, with tasks accomplished individually. The size and complexity of course projects grows over the duration of the program. In all cases, the work will be realistic and students will be expected to gather data from Internet sources and provided materials. The quality of students work will be assessed the same way that commercial firms would assess the work contractors provide to them. (We recommend the school build close connections with local industry and strive to have their participation in the evaluation of class projects to provide feedback that is as real as is possible.)
S O F T WA R E D E V E LO P M E N T P R O G R A M
PROGRAM CORE
This Software Development Program is designed to produce professionals who are able to leverage, with quality, current best practices from computer science and software engineering on software development jobs. This core is specifically designed to facilitate this by providing students with a set of critical foundational and individual skills, before asking them to tackle more complex theoretical, practical and team-oriented topics. This core was designed to be augmented with other courses to provide students with a robust computer science or software engineering education in the context of an excellent liberal arts education, work-focused vocational program or technology/research program. The program architecture and design documentation reduces the effort required to integrate these core courses with courses in the sciences, mathematics, communication and the liberal arts.
CORE COURSES
Computation and Problem Solving Application Development Application Design Choices Performance, Data Structures and Algorithms Architecture and Design Database and Client/Server Applications Human/Computer Interaction and Communication Project Management Networking and Security Computer Systems Managing Technical People Personal and Team Processes
S O F T WA R E D E V E LO P M E N T P R O G R A M
COURSE DESIGN
Our courses employ insights and methods from the latest research into how students learn, and the best ways to facilitate that learning. Some key lessons must be memorized, but the bulk of modern knowledge and skill are more effectively understood and integrated into a professionals work ethic through more collaborative and experiential activities. Lectures can be inspiring, enlightening and even entertaining, however most professionals learn more over the course of their career than they do by listening to university lectures. For these reasons, the iCarnegie Software Development core focuses more precious class time on experiential activities - requiring student to actually do things - than on traditional lectures. Lectures, books and other information delivery sources are important, but new technologies allow us to shift them from shared classroom time to personal study time. This is a critical advancement, as it is nearly impossible for a professor to produce a lecture that addresses the needs of every student. iCarnegie believes class time should be spent on activities that bring value to as many of the students as possible. This belief is at the heart of our learning-by-doing approach to education. By switching from a traditional one-way lecture to a two-way collaboration, class time is invested doing real-world work in an environment that is as similar to the work world as is possible. Students produce useful work products, evaluate each others work and experiment with different tools, methods and techniques to improve the quality of their work. Teachers deliver just-in-time mini-lectures when they see common misunderstandings or difficulties. However the bulk of the professors time is spent quickly evaluating work processes and products and interacting with students in a coaching and mentoring role. When the workflows are smooth and the work products are high quality, students move forward to the next course topic. When there are problems, individual students are directed back to previous or ancillary knowledge and skill-building activities. The early courses in the program focus the student on individual knowledge and skills required across the various software development professions. Vocabularies, ways of thinking and working, standard problems and the recognized standard solutions must be mastered before it is possible for students to be able to work effectively with anyone else. Students must first become worthy of trust before they can move from solo activities to pair activities and then to team activities. To become trustworthy, students must develop knowledge and skills that are both technical and non-technical. That is because most problems in the real world are usually more about communication and frame-of-reference problems than technical issues. For this reason, the iCarnegies Software Development Program is best deployed with a collection of other courses to address the whole student and the breadth of each of their needs.
S O F T WA R E D E V E LO P M E N T P R O G R A M
COURSE OUTCOMES
Client Engagement Graduates will be able to engage with clients to understand their computing problems and what will be needed to produce a solution using one of the following: Web-based solutions with scripting and databases Stand-alone solutions using Java and C# with .net or C++ or Objective C Independent Thinking Graduates will be able to work individually and produce professional-looking work products including: User requirements document AS-IS and TO-BE documentation using UML Design documents using Object Oriented methods and UML Testing and acceptance plans and test scripts Readable code with excellent comment Teamwork Graduates will be able to work as effective members of development teams using protocols from Scrum, and be able to play the various roles. Research and Presentation Skills Graduates will be able to use written references and formalisms to research potential solutions. They will also be able to evaluate alternatives by means of establishing a decision rubric, and be able to present their work and their results, and make recommendation using professional presentations. Problem Solving Graduates will be able to outline approaches to address modest-sized, ill-defined problems; work in a small group to develop these outlines into plans; support the implementation and refinement of the plan using recognized protocols and tools; and communicate effectively with clients and leaders about the project risks, issues and resolution approaches. Lifelong Learners Graduates will develop knowledge and skill-acquisition abilities, as well as insights about the need for lifelong learning.
S O F T WA R E D E V E LO P M E N T P R O G R A M
S O F T WA R E D E V E LO P M E N T P R O G R A M
are given a set of real problems drawn from current industry, science and business, and are asked to solve the problems by hand while gathering data about time, effort and defects. Students are then shown how automation can - when done properly - improve all three. Students are also shown how a bad solution can actually do more harm than good. Students will be introduced to a set of key principles, such as thinking before coding and testing before developing. Concurrent with this first computing course, it is desirable to provide some form of communication course that focuses on establishing data gathering, evaluation, analysis and understanding skills using various information sources such as the library and the Internet. An optimal course would provide a real-world project and students should be asked to find information, determine whether it is credible, assess it along various dimensions (e.g. relevance, bias, supports or refutes an assertion) and use it properly. When students take such a communication course at the same time as the Computing and Problem Solving course, care must be taken in both courses to make it clear how each contributes to the total skill set students are expected to develop. The first course in the Computing thread also introduces students to information processing and how the Web, scripting, spreadsheets and simple databases bring value to people striving to solve problems. This computational thinking foundation is then used in subsequent courses to provide more vocabulary, principles, concepts and standard problems and solutions that move students toward the programs goal. The second course expands the complexity of the kinds of problems that can be solved by means of a computer through the use of an object-oriented programming language. Key to this expansion is the notion that there are many potential solutions. Without some way to capture the requirements and the solution choices, human foibles will lead to problems as these solutions get larger and more complex. The third course shows students that choices of representation and algorithm are important. The use of a concatenation operator in Java has significant performance problems, and knowing when to use and when not to use this built-in operation is critical. Similarly, choices of data structures and algorithms are equally critical. The notion of documenting design choices and rationale is emphasized along with considerable direct experience with performance trade-offs to build the case that these decisions can be important. The first three courses establish a solid foundation in a single programming language, Java, as this is one of the few type-safe languages that are widely used that also provides solid support for creating reusable libraries. It takes time to build the sophistication required to appreciate the rationale behind generics, interfaces and abstract classes, and experience has shown that a single class in this topic tends to just teach the syntax without really allowing students to appreciate the principle. The fourth course in the program leverages basic insights and understanding of computing in general and data structures in particular, and exposes students to other languages that may, in some cases, be more appropriate for providing significantly enhanced performance. Students will experiment with Java, C and assembly languages to more fully appreciate how computers work, how data structures are implemented and the trade-offs made between languages. Woven into this fourth class is the beginning of a more formal algorithm analysis approach. We recommend students take some form of computational discrete math course prior to taking this fourth course.
S O F T WA R E D E V E LO P M E N T P R O G R A M
From the four lower division foundational courses comes a number of potential specializations at the upper division level. For the software development program, the Database and Client/Server Applications, the Human/Computer Interactions and Communication and the Networking and Security courses establish a solid technical foundation for software developers. The Project Management course gives an additional set of key insights about the software development from another perspective, making it easier for developers and managers to work effectively together. As a result, the programs flexibility gives students both the breadth and depth to quickly become useful in just about any software-intensive domain. Design and Theory thread Successful software development requires students to be able to use the logic and mathematics of the real world as primary problem solving tools. The Design and Theory thread provides students with these capabilities. iCarnegie acknowledges the accomplishments of computer science educators who developed the foundational theories and developed curricula to teach them to undergraduates. In the early days of computing, not all theory was well understood and the theory that was understood was not taught adequately. Over time, some of the premiere schools developed excellent theory courses, but the design and structure of these courses made it difficult for average students to gain value from them. After more than a decade of experience with these courses, we are now able to tailor the teaching of theory to the specific educational goals and the learning outcomes of mainstream students. Pure theory courses have been a barrier to entry to software development. For this reason, this program offers an integrated theory as part of development approach. Students who desire more intense theory development have room in the curriculum to do that in their electives. Since the Design and Theory thread in this curriculum has been spread over a number of courses, it is critical that the faculty members implementing the curriculum fully appreciate this thread and ensure that each course contributes effectively to coverage of the entire thread. The Computation and Problem Solving course introduces one of several motivations for students to explore and become familiar with the theory. The course introduces students to a wide array of computing applications in modern society where quality and performance are critical. Being able to produce system applications is not just a matter of rote learning, memorizing and recalling a small set of standard answers to a set of standard questions. While we provide students with the basic building blocks of computing and problem solving, we are also helping them develop a more realistic vision for what computing is, why it is important and why solutions must be carefully designed, implemented, operated and maintained. Given this informal foundation from the Computation and Problem Solving course, we strongly believe that an applied Discrete Mathematics course in addition to a good sequence of Calculus courses is required to provide the foundational problem-solving tools students will need. Only individuals who fully appreciate applied mathematics and computer science theory, and are able to deliver these courses employing well-crafted, real-world problems and their solutions, should be hired to teach these crucial math courses.
10
S O F T WA R E D E V E LO P M E N T P R O G R A M
The second course in the Computing thread extends the informal and practical aspects of the theory by introducing and consistently using pre-conditions and post-conditions as a key part of the Java documentation required of the students. This course also introduces the notion of finite state machines, their role in scanners and how basic UML state charts bring value to the analysis of designs. The third course in the Computing thread, Application Design Choices, introduces the concepts of loop invariants and the basic and practical aspects of proof of correctness that are often overlooked by the approaches that many use to teach the topic. Regular expressions are introduced and are used in conjunction with the data structures that are developed in the class. Key elements of computer science theory are reinforced by means of their use in UML diagrams provided to the students in the early courses and produced by the students to explain their designs in the later courses. The fourth course, Performance, Data Structures and Algorithms, is a major expansion of this thread. Since the basic data structure concepts have already been introduced in the previous course, this course addresses this topic from a performance perspective, where we define performance in terms of correctness, speed and resource utilization. The basic ideas of proof of correctness are refined and reinforced in each assignment as it makes sense to do so. In addition, the notion of NP-completeness is introduced and the basic proof approach is used to evaluate various graph algorithms. The remaining courses in the thread provide additional practice with the foundational concepts as well as opportunities to dig more deeply in some specific topics, providing more insight into the use of theory and its application to real-world problems. The final course includes a major project that could be thought of as a mini-capstone. This course verifies and validates that these design and theory lessons have been properly learned and the student can compellingly demonstrate this accomplishment. Research Skills thread True research begins with the development of an understanding of what has already been done in order for new work to leverage the past work wisely. The totality of human knowledge and understanding and its expression in books, articles and other scholarly and professional forms is growing exponentially, so it is impossible for anyone to know it all. In the digital age, educated people must learn how to find and evaluate potential materials for suitability for the project, and determine the credibility of each source. Only when all of these things are positive is it time to understand the key insights from these works and apply them wisely. Developing these skills takes time and repeated practice.
S O F T WA R E D E V E LO P M E N T P R O G R A M
The core is specifically designed to transition students from an environment where everything needed is nicely packaged and provided to them, to the real world where there is a mountain of potentially useful materials hiding in a vast universe of useless trash. Communication Skills thread Students ability to effectively participate in all aspects of the communication process is crucial for success. In todays highly competitive world, being just technically correct is not enough. Professionals must also be able to properly understand both technical and contextual issues, and be able to compellingly explain how a proposed solution will bring both short-term and long-term value. The Communication thread is rooted in the lower division and covers the outcomes traditionally covered by language arts courses.
11
The programs core is most effective when coupled with a sequence of communication courses. The detailed design for each core course includes requirements for communication skills and capabilities. These requirements can be satisfied by stand-alone courses or by augmenting the core course with ancillary materials and support services for those students who are lacking the communication requirements. Professionalism and Ethics thread Technical lessons of software development are critical but are not, by themselves, sufficient. The Computing and Communication threads provide students with a wide array of problem-solving tools. Selecting the correct tools and methods typically requires a much deeper appreciation of the context, business issues and host of other issues that are not traditionally addressed in an undergraduate program. The purpose of the Professionalism and Ethics thread is to provide students with the required preparation so they are able to make these data-driven decisions, properly considering the short-term and long-term consequences as well as the impact of these decisions on society and the planet. The Professionalism and Ethics thread may be implemented in many ways. The detailed design of the core provides requirements for professional insights and capabilities. These can be satisfied by formal courses, properly mentored internships or co-ops, etc. Interpersonal and Team Skills thread From the beginning of the program, students are made aware of the importance of group work. Among their tasks during the first three semesters is to develop the personal knowledge and skills necessary to be a worthy team member. These ideas are then enhanced with actual pair programming experiences in the fourth semester and expanded more robustly in the remaining classes in the core. All of the upper-division courses in the core are team oriented and the foundations and primary skills developed in the first two years are further refined and extended in the courses in the junior year. Careful coordination among the faculty of these courses must ensure that the same processes and methods are applied in all of these courses. This will enhance student knowledge and skills, and avoid confusion that can occur when conflicting approaches are used or when skills are assumed but have not been developed. Reflection, Self-assessment and Improvement thread In the real world, it is important to realize that there is seldom a single right answer to any problem. It is also common for producers of solutions to have a difficult time understanding the real needs of their clients. Even when they do understand, it is easy to produce solutions that might work for some clients, but fail to align with others. It is only by means of engagement, and then reflection on what worked and what did not work, that these issues can be surfaced and resolved. When a client says no, the proper response is to understand why the client said no and what it will take to transform that no into a yes. This is the essence of reflection and improvement. Reflection and improvement are typically best learned by means of actual practice as opposed to traditional readings, lectures and tests. For actual practice to be meaningful, students must perform work
12
S O F T WA R E D E V E LO P M E N T P R O G R A M
that is complex enough to require that choices be made. Work must then be done based on these choices, and then the impact of these choices must be assessed. Without this complexity or mechanisms to relate performance to the choices made, students will not have the basis required to appreciate the result of improvement and the value of reflection. While students will be exposed to the ideas of choices and their consequences in the first three courses, it isnt until the fourth course, Performance, Data Structures and Algorithms, that students will work on assignments of adequate size to provide an opportunity for reflection and improvement. The diversity of the remaining four courses makes it critical to ensure that the designed projects for these courses are implemented carefully. The fourth, fifth and sixth courses are designed around a major project where there is the need for choices to be made. Time at the end of the course will be provided to perform the reflection along with enough additional time so students are able to assess, reflect, design an improvement, implement the improvement, assess again and then analyze the benefits of the improvement. During the final class in the core, students should be able to demonstrate this process and its potential benefit quite easily.
Software Processes, Methods and Tools thread A more formal focus on software processes, methods and tools is another topic best addressed in the context of larger, complex projects. The nature of the first three courses makes it difficult to meaningfully introduce this topic as an integral element of a class project. By the fourth class, complexity starts to become an issue; more and more work is best done as part of a team; and the need for processes, methods and tools becomes clearer. Each of the remaining four courses is team oriented with rather significant class projects. Giving adequate class time to the topics of project infrastructures, such as processes, methods and tools, is critical. Toward that end, we expose the students to the waterfall, spiral and SCRUM development methods, and have students practice each prior to the seventh course, Project Management. This provides significant material during the Project Management course to discuss and reflect on the benefits of these processes, methods and tools. The major project in the Networking and Security course also provides an opportunity for student to demonstrate their understanding and insight about which processes are critical; what development methods are useful for them and their project; and which tools are needed and must be mastered.
S O F T WA R E D E V E LO P M E N T P R O G R A M
Tactical and Strategic Problem Solving thread In addition to understanding the short-term and long-term consequences of technical and non-technical decisions, students must fully appreciate how they, their team and their work fit into their companys business, and how the company fits into the broader business and societal context. Even when the professional is focused on very technical aspects of a system, ethical and societal responsibilities remain. Project success at the expense of the current and future health of the team and the company is not ethical, yet many are not able to appreciate this due to an inadequate capacity to extrapolate beyond the small technical world in which they operate. It is for this reason the program includes a focus on this key issue.
13
14
S O F T WA R E D E V E LO P M E N T P R O G R A M
15
S O F T WA R E D E V E LO P M E N T P R O G R A M
COURSE DESCRIPTIONS
1 COMPUTATION AND PROBLEM SOLVING
Objectives Computers play a critical role in just about everything humans do, and software professionals need to have a deep appreciation for the human and business aspects, as well as the theoretical. This gentle introduction to computing and problem solving provides students with realistic insights about the field of computing. At the heart of computing is a way of thinking and working that is more disciplined than many students have ever experienced, but the benefits of seeing, understanding and then developing those skills can be stunning. This course prepares and launches students down educational paths in all of the science and business domains, as well as in careers as software developers, software engineers and computer scientists. This story-centered course introduces students to standard problems people regularly face in science and business. Manual solutions are reviewed before automated solutions are considered. The concepts of data, data representation, data operators and types, and the limits of computer representations are explored. The vocabulary and uses of the key elements of computer systems, operating systems, application programs, networks, data storage, servers, browsers, client-side and server-side applications are introduced and used in hands-on projects. Basic business modeling is introduced and spreadsheets are used to answer typical what if questions, as well as many basic computational problems. Key Outcomes Students successfully completing this course will be able to produce simple static Web pages and basic interactive Web pages using simple applets and servlets. Students will be able to design simple standalone and server-side databases and simple spreadsheet models to address simple business problems. Students will learn how to use browsers to find information, employ Web page creation tools to create attractive static Web pages and use JavaScript to make Web pages more useful and interesting. Students will also be able to design spreadsheets to solve basic business problems, use basic diagrams and structured prose to express simple computational solutions and apply the basic tools of IDEs to perform simple development functions and activities. This course also teaches students how to knowledgably discuss how computers work and the reasons behind limitations faced by computers and applications. Students will gain a deep understanding of the notion that there are choices to be made, that some of these choices have consequences, and some consequences may not be realized until much later. Students will also learn about the costs and potential benefits of an automated solution, lifecycles of software development and ethical issues in building solutions and issues of professional responsibility Prerequisites: None (Algebra II, basic computer usage skill is desirable.)
16
S O F T WA R E D E V E LO P M E N T P R O G R A M
2 APPLICATION DEVELOPMENT
Objectives Software development is a blend of analysis, synthesis and the application of less formal rules. This course lays a solid foundation for the software development professional by elaborating and extending the basic computational thinking and problem solving of the Computation and Problem Solving course, and introducing crucial engineering concepts (e.g. interfaces, abstraction, generalization) required to enable reuse, tailoring and increase in scale. This course builds on the concepts from the first course to produce more useful client-side applets and standalone applications. Objects are introduced early as a key strategy to control complexity and support reuse in real world applications. Basic design concepts are introduced in parallel with programming language concepts and simple UML diagrams, and actual implementations are used to facilitate discussions and learning. Real-world applications are produced based on realistic materials from typical clients. Key Outcomes Students successfully completing this course will be able to produce basic dynamic applets and basic standalone object-oriented applications from informal specifications using OO principles. Students will be able to develop modest standalone object-oriented applications from correct UML specifications, create a string tokenizer from a state-machine description and devise useful JavaDoc documentation complete with pre and post conditions. Students will be able to successfully use basic UML designs to write modest-sized applications, apply common professional tools, use strings and numeric libraries to perform basic operations and employ Internet sources to find reference materials and relevant discussion groups. At the conclusion of this course, students will be able to knowledgeably discuss object-oriented design basics and how they bring value to software developers, articulate the role design plays and identify the reasons and excuses people use to avoid design as well as the role of testing and reviews and why both are needed Prerequisites: Course #1 - Computation and Problem Solving
S O F T WA R E D E V E LO P M E N T P R O G R A M
17
18
S O F T WA R E D E V E LO P M E N T P R O G R A M
19
S O F T WA R E D E V E LO P M E N T P R O G R A M
20
S O F T WA R E D E V E LO P M E N T P R O G R A M
21
S O F T WA R E D E V E LO P M E N T P R O G R A M
22
S O F T WA R E D E V E LO P M E N T P R O G R A M
8 PROJECT MANAGEMENT
Objectives This course introduces key project management concepts and terms. Students are given small assignments associated with key project management topics such as process, estimation, quality, change management and measurement, but do not yet deal with a simulated project. In many ways this course is like a tailor having his apprentice sew together a garment without the apprentice knowing anything about how the pieces of cloth were created, and learning about the pattern one step at a time. Students learn about the key software development processes, and much attention is given to the question of how much process is good process? with an emphasis placed on good process enabling and facilitating productive and quality work. Students are also introduced to the crucial differences between project management and software project management, and the differences between plan-driven software projects and agile projects. Key Outcomes Students successfully completing this course will be able to produce and use estimates, measurement options, risk management reports, schedules and budgets. They will also be able to create and use earned value reports, project status reports, and change management reports. Students will be able to knowledgeably discuss the project managers role, and identify project concepts and terminology. Students will have a deep understanding of processes and methodologies, and be able to explain the differences between project management and software project management, as well as the differences between traditional and agile project management. Prerequisites: Course #7 - Human/Computer Interaction and Communication
23
S O F T WA R E D E V E LO P M E N T P R O G R A M
24
10 COMPUTER SYSTEMS
Objectives The limit of performance improvement that comes through size reduction of electronic elements has been reached, and performance gains must now come from other sources. The use of special purpose processors and system interfaces, as well as multiple CPUs and cores have transformed computers into complex computing systems made up of a complex blend of hardware, firmware and software. This course covers key characteristics, principles and trends in computing system design for undergraduates who have little formal background beyond basic assembly level language experience. This course makes the realities of computing hardware and software explicit. Up to this point, much of complexity of computing has been hidden behind interfaces, APIs, frameworks and operating systems. This course pierces these barriers and gives students a broad introduction to how computers work in the real world in enough detail that the true engineering design tradeoffs can now be seriously studied. This course builds upon key concepts from the Performance, Data Structures and Algorithms class as needed to cover complete systems built from hardware, firmware, operating systems, applications and frameworks and libraries. Key and foundational aspects of computers are used to develop the complex interactions between the multiple independent computing elements at the heart of machines today, with special focus on concurrency and parallelism required to properly leverage the rapidly growing number of CPUs/cores/threads in common machines. How these features bring value to application developers is explored in some detail. Additional topics such as cloud computing and mobile computing are introduced. Key Outcomes Students successfully completing this course will be able to produce solution modules optimized to maximize various performance characteristics of a system by leveraging the native hardware and fundamental sub-systems. Students will also be able to create excellent machine-level code tuned to accomplish specific high-performance computation goals, create solution modules to exercise the special functions of subsystem hardware (e.g. GPUs) and develop small applications written in languages specifically designed for parallel applications. Students will be able to leverage insights about CPU designs, pipelines and caching to create effective special purpose solutions, and use system performance specifications to make predictions about solution performance. Students will also be able to employ special purpose languages, tools and APIs to extract value from processors with multiple CPUs and cores not possible using generic programming languages. At the conclusion of this course, students will be able to knowledgably discuss which problems lend themselves to various programming languages, frameworks and systems with supporting evidence. Students will also be able to articulate RISC and CISC instruction set models and the consequences of these choices given the reality of computing today. Students will be able to discuss I/O subsystem standards, their costs/benefits and how to properly choose one for a system being developed, and discuss solving parallel problems with threads in Java and similar problems in other languages and the costs, benefits and consequences. Students will understand and be able to discuss advantages, disadvantages and risks of cloud computing and when it might make sense to employ, and challenges facing the rapid growth of personal mobile computing solutions. Prerequisites: Course #4 - Performance, Data Structures, and Algorithms
25
S O F T WA R E D E V E LO P M E N T P R O G R A M
26
S O F T WA R E D E V E LO P M E N T P R O G R A M
27
S O F T WA R E D E V E LO P M E N T P R O G R A M
iCARNEGIE
A subsidiary of Carnegie Mellon University, iCarnegie Inc. is a global leader in providing educational strategy to governments, businesses, universities and K-12 institutions. iCarnegies mission is to use high-quality, locally-delivered programs to help enhance market competitiveness and develop local workforces by building skills and abilities to help countries and organizations become more competitive. iCarnegie delivers top quality, highly scalable training and academic programs with a focus on job outcomes and a practical learning-by-doing, story-centered approach. iCarnegie has delivered more than 200,000 course enrollments in more than 20 countries. The company uses a delivery model that relies on local face-to-face instruction, and has trained more than 2,000 instructors to teach its courses globally. iCarnegie relies on Carnegie Mellon University faculty, staff, intellectual property and expertise, as well as other world-class experts, to develop and deliver its programs and train instructors in partner institutions. The company has developed academic and professional programs in various fields, including ICT (Information Communication Technology, such as software development, web development, robotics, front end engineering and information technology), applied science, mobile applications, telemedicine, and business and entertainment technology/game development. For more information, visit http://www.icarnegie.com.
28
S O F T WA R E D E V E LO P M E N T P R O G R A M
iCARNEGIE WORLD HEADQUARTERS 161 N. Dithridge Street, Pittsburgh, PA 15213 | P: 412.622.2150 | F: 412.621.2865 | W: www.icarnegie.com