60 likes | 74 Views
CSE 332 Overview and Structure. CSE 332 emphasizes studio-based active learning Introductory lecture material followed by hands-on exercises More time in guided exploration than in passive absorption Key insight: different people learn in different ways
E N D
CSE 332 Overview and Structure • CSE 332 emphasizes studio-based active learning • Introductory lecture material followed by hands-on exercises • More time in guided exploration than in passive absorption • Key insight: different people learn in different ways • Our goal is to make many resources available to you • Your goal should be to engage those resources actively • Professor’s (and teaching assistant’s) role • Emphasis on guidance, coaching, discussion • Student’s role • Emphasis on exploration, peer interaction, teamwork
C++ Language and Paradigms • The course focuses a lot on C++ • But also on general programming issues it raises • C++ is a multi-paradigm language • Procedural programming with functions • Object-oriented programming with classes • Generic programming with templates, typedefs • The course structure lets us explore these in parallel • Comparison to C • Adds higher-level features, keeps lower-level ones • Comparison to Java • Many similar ideas, but often with different nuances • Gives a less abstract view of the underlying platform
How C++ Has Evolved • C is a popular language for developing low-level systems software and applications • E.g., operating systems like Linux • However, it’s difficult to support type safe software reuse without inheritance, etc. • E.g., for middleware frameworks like ACE • Stroustrup designed C++ with classes/objects • But kept procedural parts very similar to C • Later, templates (generics) were added • With which Stepanov, et al. developed the STL • The C++11 and C++14 standards unified all this • E.g., adding lambdas, type inference, move semantics
Approach We’ll Take in CSE 332 • A key goal is to expand & refine your mental models • For C++ mainly, but also for programming in general • Notice and try out new ideas, share them, discuss them • Challenge your understanding in as may ways as you can • If you don’t remember every detail at first, that’s ok • We’ll revisit concepts and techniques from different angles • Try to refresh your memory early and often • Apply what you learn, early and often, towards mastery • We’ll work together to build understanding in stages • First as a consumer of an approach (can you use it?) • Then understanding it thoroughly (when can you use it?) • Then as a contributor to the approach (can you expand it?)
Approach We’ll Take, Continued • We’ll talk about how/why the tools you’ll use work • E.g., how new/delete operators are used by smart pointers • Give insight into special cases when new tools are needed • Throughout the course, the point is to learn by doing • Mini-lectures and readings are intended as preparation • Studio exercises build understanding and expertise • Lab assignments ask you to apply what you’ve learned • 10 years from now, the languages you use may differ • I’ve worked in C++, C, Pascal, Java, and x86 assembly • But your mastery of procedural/OO/generic ideas will help • And, you’ll have a pretty solid grounding in C++ until then
Topic Areas Covered This Semester • C++ program basics • Variables, types, control statements, development environments • C++ functions • Parameters, call stack, exceptions • C++ memory • Addressing, layout, management • C++ classes • Encapsulation, abstraction, inheritance polymorphism • C++ generics • Overloading, templates, interface polymorphism , associated types • C++ STL • Iterators, algorithms, containers, functors