看完了unit 1 C Programming Modle，对于 c语言内部运作机制窥的一二，也不枉费了一番心思。如此探究内部运作机制，揭开了掩盖在外层包装下的种种内幕，让我站底层对编写的程序有了深刻的了解，。某些人看来，这对于一般的应用型工作即使有所帮助，花去大量时间纠缠在这上面似乎有些得不偿失。我却不这么认为，知其然而不其所以然，永远成为不了真正的高手，充其量一个coder。原理性的东西是基础，只有彻底的明白才能写高效的程序，真正的programmer。胸有丘壑方能挥洒自如！
呵呵，或许是花费了一些时间，总想证明一下自己是正确，便Baidu了一下几个关键字，便搜罗出一长串关于SSD课程的东东。有一段内容是介绍Carnegie Mellon University，摘录如下：
卡内基梅隆大学被公认为世界计算机教学的先驱，其计算机学院在美国众多高校的计算机学院中连续数年排名第一，现任教师中有多位图灵奖获得者和众多美国国家科学院和工程院院士。为了将优秀的软件技术教育课程提供给校外人士，卡内基梅隆大学软件技术教育中心（CTE）编写了一套SSD(Software Systems Development Course)课程，其素材直接来源于卡内基梅隆大学计算机学院的最新研究成果。每年还根据软件业的最新进展和课程的反馈意见对教学内容作至少两次修改。目前，该课程已经在欧洲、巴西、日本、印度、以色列、韩国、墨西哥等国家和地区得到广泛推广。凡是通过SSD前5门课程考试的学员，将获得由美国CTE颁发的计算机软件工程师证书(The Certificate of Computer Programming)，能利用软件开发工具在互联网环境下编制软件和独立解决问题；凡是通过SSD所有10门课程考试，获得由美国CTE颁发的软件系统开发工程师证书(The Certificate of Software Systems Development)，能利用现代的软件系统开发工具、技术和方法分析应用问题，进行软件系统设计和系统编程，解决问题，掌握软件系统项目的组织和管理技术。
SSD1 = Introduction to Information Systems
This course enables students to gain fundamental knowledge and skills in software development and problem solving through programming. Students learn how software is written, its fundamental building blocks, and how multiple pieces of software cooperate to make Web-based applications work. The course uses an “objects-first” approach to teach programming languages and lays the foundation for learning advanced Java. Students learn to create Web pages in HTML and Servlets in Java, and build the logic behind typical web applications such as online music play-lists and simulation environments. Students completing this course are prepared to hold responsibilities in developing and supporting interactive websites of a small to moderate scale.
Topics: Introduction to software development processes and environments; clients, servers and data transfer; introduction to naming issues; languages, syntax, interpretation, compilation and execution; program control structures; data representation (simple types, encapsulated types); basic Java and HTML; documentation; and Servlets.
Prerequisites: None (Algebra II, familiarity with computers and Web preferred)
SSD2 = Introduction to Computer Systems
This course introduces software development students to the fundamentals of using and maintaining computer systems in an Internet environment. Students gain important knowledge that will help them effectively communicate with the IT personnel they will meet in the workplace, as well as understand more about security issues and the environment in which their software systems will reside. The basic components and functions of the computer and the network are introduced, along with tools and procedures for their operation and maintenance.
Topics: Basic machine architecture (processors, memory, I/O); basic operating system concepts (processes, concurrency, address spaces); I/O devices for storage and multimedia; basics of processing, storage and communication capacity; command processors and scripting; file systems; basic network architecture; installing new software and devices; security; backups, compression, and encryption.
Prerequisites: SSD1, which may be taken concurrently (or skills/education equivalent)
SSD3 = Object-Oriented Programming & Design
This course introduces students to professional tools and processes for designing, documenting, and programming software systems. Students learn effective software architecture and problem solving techniques by means of object-oriented programming and design. There is an emphasis on problem analysis and solution design, documentation and coding conventions (using formats widely applied in the workplace), and implementation. Students use commercial software libraries and create robust software applications, such as a point-of-sale cash register kiosk. Starting with a specification, students design UML class diagrams, use design patterns, implement in Java, and test their solutions. This course gives students the experience and knowledge to create highly functional, well-designed software systems.
Topics: Modularity and abstraction; encapsulation; inheritance; polymorphism; use and creation of software libraries; Javadoc; unit testing; UML; Java programming; IDEs; design patterns.
Prerequisites: SSD1 (or skills/education equivalent)
SSD4 = User-Centered Design & Testing
This course focuses on a different dimension in developing robust, maintainable, and efficient software. Software and Web applications that have “users” can be characterized along a dimension of usability. In other words, “is it straightforward for the user to get the software to do what it is supposed to do?” – whether the task is to draw a map, pay a bill, find a phone number, order
an item, book a flight, or change the format of a text page. In this course, students learn the most important techniques of Human-Computer interaction, so that they can conduct user studies to isolate usability problems and ultimately build software that gracefully assists its users in accomplishing intended tasks. Students receive training in the basic skills of task analysis, interface evaluation, and effective UI design. Visual Basic is used in various programming assignments.
Topics: Task analysis; user interface idioms; user interface toolkits; rapid prototyping and evaluation; simple user studies and usability aspect reports; “think aloud” methods; Visual Basic programming.
Prerequisites: SSD3, which may be taken concurrently (or skills/education equivalent)
SSD5 = Data Structures & Algorithms
This course prepares students for designing data-intensive software applications, bolstered by a practical assignment involving the development of an online auction system with rich functionality. To support such applications, students learn how to select algorithms and representations they will frequently use as professional programmers and software developers, and how to reason informally about algorithm and data structure correctness and complexity. Students also gain a thorough understanding of the dependence of execution time and memory requirements on the data structures and algorithms chosen. Programming assignments use the C++ programming language and the Standard Template Library.
Topics: Abstract data types; data structures and invariants; simple algorithm analysis; sorting and searching; trees and graphs; associative data structures; C++ programming with the Standard Template Library (STL).
SSD6 = System-Level Programming
This course prepares programmers to consistently produce software applications that execute rapidly and are efficient in their use of memory. This is accomplished by providing students with a programmer’s view of processors, memory, and operating systems. Students learn explicitly about memory organization and hierarchies, context-switching and threads, and the transformations that a high-level program undergoes before it is executed on actual hardware. This knowledge enables students to eliminate obscure “bugs” and to measure and optimize software program performance. Programming assignments use the C programming language.
Topics: Programming in C; debugging; memory management, memory hierarchies, cached memory, virtual memory; performance measurement and tuning; DLLs; operating systems; basic concurrent programming.
Prerequisites: SSD2 (or skills/education equivalent), SSD5
SSD7 = Database Systems
At the heart of today’s web-based software applications that are revolutionizing businesses, there are well-designed database systems enabling rich functionality. This course trains students to build such systems, by teaching database concepts and then the practical work of database system design and implementation. It draws on previous training in advanced Java, web environments, object-oriented programming, and usability design. Students develop client-server applications in Java and JSP, using database management systems. The assignment involves the creation of an e-commerce bookstore, which must support the ability for users to register themselves, search content, place and track orders, and change personal settings. Students gain the necessary skills to create data models appropriate for specific applications (relational data models are emphasized), tune the underlying database for fast response times, and ensure the system is robust enough to handle failures.
Topics: Relational data models and data independence; relational query languages and SQL; database design; normalization; client-server applications; transactions; indexes; performance issues.
SSD8 = Networks & Distributed Programming
This course focuses on the principles and practices of building business applications that are distributed across networks, allowing for many users to be part of a connected community. Students start with an overview of networking technology that supports data and multimedia communication. The students apply concepts to a number of practical assignments involving the development of distributed applications, including web servers, calendars, and chat systems. Students learn application-oriented protocols and approaches to distributed object-oriented programming using Java. With network-based applications being a frequent source of security issues for many companies, professionals having strong knowledge in this area are an asset in helping to prevent such problems in the workplace.
Topics: Networking protocols and technology; multimedia networking; client/server design, thick and thin clients; CORBA and related tools; Web implementation issues; electronic mail; security and privacy issues.
SSD9 = Software Specification, Test and Maintenance
The course prepares students for the software development processes and planning activities they will encounter in the workplace, by providing them with practical experience in managing all phases of a software project’s life cycle – from requirements gathering through design, testing, and final deployment. This course, which has served as a masters-level course at Carnegie Mellon University, focuses on the principles of developing economical, reliable software systems following modern software engineering practices. Students work individually or in multi-person teams to develop and manage all the steps required to build a database-driven software project of significant scale, in this instance, an online musical instrument store.
Topics: Life cycle models, requirements analysis, specification, design, implementation, inspection, testing, documentation, configuration control, CASE tools, and reuse.
Prerequisites: SSD4, SSD7
SSD10 = Software Project Organization & Management
This course prepares students to organize and manage teams of individuals involved in the development of software applications and products. The skills taught are crucial for the workplace, where software project plans must be developed to withstand typical problems such as schedule over-runs, budget over-runs, and other risks that affect software quality. Students learn techniques of project planning, scheduling, costing, risk analysis, and organization. Students examine and critique various kinds of software planning and management artifacts that are representative of plans encountered in the workplace.
Topics: Project management techniques: scheduling, budgeting, risk analysis; basic project management tools; leadership principles; client relationships; liability issues; intellectual property issues; confidentiality issues; CMM; ethics. Prerequisites: SSD9 (may be taken concurrently), or several years’ programming experience (as determined by education partn
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-No Derivative Works 2.5 China Mainland License.