How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Ralph Johnson, Erich Gamma, John Vlissides, Richard Helm
Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently. Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk. 0201633612B07092001
Features the best practices in the art and science of constructing software--topics include design, applying good techniques to construction, eliminating errors, planning, managing construction activities, and relating personal character to superior software. Original. (Intermediate)
"This is Effective C++ volume three - it's really that good." - Herb Sutter, independent consultant and secretary of the ISO/ANSI C++ standards committee "There are very few books which all C++ programmers must have. Add Effective STL to that list." - Thomas Becker, Senior Software Engineer, Zephyr Associates, Inc., and columnist, C/C++ Users Journal C++'s Standard Template Library is revolutionary, but learning to use it well has always been a challenge. Until now. In this book, best-selling author Scott Meyers ( Effective C++ , and More Effective C++ ) reveals the critical rules of thumb employed by the experts - the things they almost always do or almost always avoid doing - to get the most out of the library. Other books describe what's in the STL. Effective STL shows you how to use it. Each of the book's 50 guidelines is backed by Meyers' legendary analysis and incisive examples, so you'll learn not only what to do, but also when to do it - and why. Highlights of Effective STL include: Advice on choosing among standard STL containers (like vector and list), nonstandard STL containers (like hash_set and hash_map), and non-STL containers (like bitset). Techniques to maximize the efficiency of the STL and the programs that use it. Insights into the behavior of iterators, function objects, and allocators, including things you should not do. Guidance for the proper use of algorithms and member functions whose names are the same (e.g., find), but whose actions differ in subtle (but important) ways. Discussions of potential portability problems, including straightforward ways to avoid them. Like Meyers' previous books, Effective STL is filled with proven wisdom that comes only from experience. Its clear, concise, penetrating style makes it an essential resource for every STL programmer.
Steven Sanderson has seen the ASP.NET MVC framework mature from the start, so his experience, combined with comprehensive coverage of all its features, including those in the official MVC development toolkit, offers the clearest understanding of how this exciting framework could improve your coding efficiency—and you'll gain invaluable awareness of security, deployment, and interoperability challenges. The ASP.NET MVC Framework is the evolution of Microsoft's ASP.NET web platform. It introduced a radical high–productivity programming model that promotes cleaner code architecture, test–driven development, and powerful extensibility, combined with all the benefits of ASP.NET 3.5. An integral benefit of this book is that the core Model–View–Controller architectural concepts are not simply explained or discussed in isolation, but demonstrated in action. You'll work through an extended tutorial to create a working e–commerce web application that combines ASP.NET MVC with the latest C# 3.0 language features and unit–testing best practices. By gaining this invaluable, practical experience, you can discover MVCs strengths and weaknesses for yourself—and put your best learned theory into practice.
Daniel P. Friedman, Matthias Felleisen
"drawings by Duane Bibby" foreword by Gerald J. Sussman "I learned more about LISP from this book than I have from any of the other LISP books I've read over the years. . . . While other books will tell you the mechanics of LISP, they can leave you largely uninformed on the style of problem-solving for which LISP is optimized. The Little LISPer teaches you how to think in the LISP language. . . an inexpensive, enjoyable introduction." -- Gregg Williams, Byte The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both "The Little Schemer" (formerly known as "The Little LISPer" ) and its new companion volume, "The Seasoned Schemer," apart from other books on LISP. The authors' enthusiasm for their subject is compelling as they present abstract concepts in a humorous and easy-to-grasp fashion. Together, these books will open new doors of thought to anyone who wants to find out what computing is really about. "The Little Schemer" introduces computing as an extension of arithmetic and algebra -- things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas. "The Seasoned Schemer" informs the reader about additional dimensions of computing: functions as values, change of state, and exceptional cases. "The Little LISPer" has been a popular introduction to LISP for many years. It had appeared in French and Japanese. "The Little Schemer" and "The SeasonedSchemer" are worthy successors and will prove equally popular as textbooks for Scheme courses as well as companion texts for any complete introductory course in Computer Science. Download DrScheme - a graphical environment for developing Scheme programs
Alexander A. Stepanov, Paul McJones
New techniques for building more secure, reliable, high-performance software, from the renowned creator of the C++ STL • • A truly foundational book on the discipline of generic programming: how to write better software by mastering the development of abstract components. • Based on Alexander Stepanov's breakthrough lectures to programmers at Adobe and throughout Silicon Valley. • For serious software developers, architects, and engineers, the perfect complement to Knuth's theory and Stoustrup's practice. Elements of Programming is the next breakthrough book for serious practitioners seeking ways to write better software. In this book, Alexander Stepanov - the legendary architect and creator of the C++ Standard Template Libraries - focuses on the discipline that offers the greatest potential for improving contemporary software: the proper development of abstract components. Drawing on his enormously popular lectures to programmers at Adobe and throughout Silicon Valley, Stepanov illuminates crucial techniques of generic programming, specifically focusing on abstraction as the key to secure, reliable, and high-performance software. Together with co-author and ACM Fellow Paul McJones, Stepanov shows programmers how to use mathematics to compose reliable algorithms from components, and to design effective interfaces between algorithms and data structures. Topics covered in Elements of Programming include: transformations, associative operations, linear orderings, ordered algebraic structures, iterators, coordinates and coordinate structures, copying algorithms, rearrangement, sorting, and much more. This book requires an understanding of mathematics, but is consistently focused on identifying superior solutions to practical programming problems. Stepanov and McJones illuminate their concepts and techniques with C++ code, but the techniques are equally applicable to a wide range of contemporary object-oriented languages.
Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises. In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.
Kees Doets, Jan van Eijck, Jan Eijck
Long ago, when Alexander the Great asked the mathematician Menaechmus for a crash course in geometry, he got the famous reply There is no royal road to mathematics. Where there was no shortcut for Alexander, there is no shortcut for us. Still, the fact that we have access to computers and mature programming languages means that there are avenues for us that were denied to the kings and emperors of yore. The purpose of this book is to teach logic and mathematical reasoning in practice, and to connect logical reasoning with computer programming in Haskell. Haskell emerged in the 1990s as a standard for lazy functional programming, a programming style where arguments are evaluated only when the value is actually needed. Haskell is a marvelous demonstration tool for logic and maths because its functional character allows implementations to remain very close to the concepts that get implemented, while the laziness permits smooth handling of infinite data structures. This book does not assume the reader to have previous experience with either programming or construction of formal proofs, but acquaintance with mathematical notation, at the level of secondary school mathematics is presumed. Everything one needs to know about mathematical reasoning or programming is explained as we go along. After proper digestion of the material in this book, the reader will be able to write interesting programs, reason about their correctness, and document them in a clear fashion. The reader will also have learned how to set up mathematical proofs in a structured way, and how to read and digest mathematical proofs written by others. This is the updated, expanded, and corrected second edition of a much-acclaimed textbook. Praise for the first edition: Doets and van Eijck s The Haskell Road to Logic, Maths and Programming is an astonishingly extensive and accessible textbook on logic, maths, and Haskell. Ralf Laemmel, Professor of Computer Science, University of Koblenz-Landau
Antonio Cisternino, Adam Granicz, Don Syme
In this book, the world's foremost experts in F# show you how to program in F# the way they do. Written by F#'s inventor and two major contributors to its development, Expert F# is the authoritative, comprehensive, and in-depth guide to the language and its use. Designed to help others become experts, the first part of the book quickly yet carefully describes the F# language. The second part then carefully shows how to elegantly use F# for a wide variety of practical programming tasks. This comprehensive reference of F# concepts, syntax, and features offers a treasury of expert techniques.
Daniel P. Friedman, Matthias Felleisen
"drawings by Duane Bibby" foreword and afterword by Guy L. Steele Jr. "I learned more about LISP from this book than I have from any of the other LISP books I've read over the years. . . . While other books will tell you the mechanics of LISP, they can leave you largely uninformed on the style of problem-solving for which LISP is optimized. The Little LISPer teaches you how to think in the LISP language. . . an inexpensive, enjoyable introduction." -- Gregg Williams, Byte The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both "The Little Schemer" (formerly known as "The Little LISPer" ) and its new companion volume, "The Seasoned Schemer," apart from other books on LISP. The authors' enthusiasm for their subject is compelling as they present abstract concepts in a humorous and easy-to-grasp fashion. Together, these books will open new doors of thought to anyone who wants to find out what computing is really about. "The Little Schemer" introduces computing as an extension of arithmetic and algebra -- things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas. "The Seasoned Schemer" informs the reader about additional dimensions of computing: functions as values, change of state, and exceptional cases. "The Little LISPer" has been a popular introduction to LISP for many years. It had appeared in French and Japanese. "The Little Schemer" and"The Seasoned Schemer" are worthy successors and will prove equally popular as textbooks for Scheme courses as well as companion texts for any complete introductory course in Computer Science. Download DrScheme - a graphical environment for developing Scheme programs
Harold Abelson, Gerald Jay Sussman, Julie Sussman
"Structure and Interpretation of Computer Programs" has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises. In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.
After the success of the first EDITION, Introduction to Functional Programming using Haskell has been thoroughly updated and revised to provide a complete grounding in the principles and techniques of programming with functions. The second EDITION uses the popular language Haskell to express functional programs. There are new chapters on program optimisation, abstract datatypes in a functional setting, and programming in a monadic style. There are complete new case studies, and many new exercises. As in the first EDITION, there is an emphasis on the fundamental techniques for reasoning about functional programs, and for deriving them systematically from their specifications. The book is self-contained, assuming no prior knowledge of programming and is suitable as an introductory undergraduate text for first- or second-year students.
This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills -- critical reading, analytical thinking, creative synthesis, and attention to detail -- that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks.All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects.
John Chambers turns his attention to R, the enormously successful open-source system based on the S language. His book guides the reader through programming with R, beginning with simple interactive use and progressing by gradual stages, starting with simple functions. More advanced programming techniques can be added as needed, allowing users to grow into software contributors, benefiting their careers and the community. R packages provide a powerful mechanism for contributions to be organized and communicated. This is the only advanced programming book on R, written by the author of the S language from which R evolved.
Lisp is often thought of as an academic language, but it need not be. This is the first book that introduces Lisp as a language for the real world. Practical Common Lisp presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples, such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.
Richard M. Fujimoto
A state-of-the-art guide for the implementation of distributed simulation technology. The rapid expansion of the Internet and commodity parallel computers has made parallel and distributed simulation (PADS) a hot technology indeed. Applications abound not only in the analysis of complex systems such as transportation or the next-generation Internet, but also in computer-generated virtual worlds for military and professional training, interactive computer games, and the entertainment industry. In this book, PADS expert Richard M. Fujimoto provides software developers with cutting-edge techniques for speeding up the execution of simulations across multiple processors and dealing with data distribution over wide area networks ,including the Internet. With an emphasis on parallel and distributed discrete event simulation technologies, Dr. Fujimoto compiles and consolidates research results in the field spanning the last twenty years, discussing the use of parallel and distributed computers in both the modeling and analysis of system behavior and the creation of distributed virtual environments. While other books on PADS concentrate on applications, Parallel and Distributed Simulation Systems clearly shows how to implement the technology. It explains in detail the synchronization algorithms needed to properly realize the simulations, including an in-depth discussion of time warp and advanced optimistic techniques. Finally, the book is richly supplemented with references, tables and illustrations, and examples of contemporary systems such as the Department of Defense's High Level Architecture (HLA), which has become the standard architecture for defense programs in the United States.
What is this book about? This compact, relevant, updated version reflects recent changes in the XSLT specification and developments in XSLT parsers. The material on tools and implementations has been revised; so too have all the examples. It also includes a new chapter on writing extension functions. XML has firmly established itself as the universal standard for managing data for the web and is now being implemented on a wide scale. XSL (eXtensible Stylesheet Language), a vital companion to XML, is used for two main purposes: to format or style XML data so that it can be displayed in a browser and to transform XML data (XSLT). When you transform an XML document, you manipulate the data into a new structure, for example, re–ordering the data. This enables the same data store to be used in an unlimited number of ways. XSLT is a flexible, customizable, and cross–platform language. XSLT is a notoriously difficult language to understand, but this book, while being a complete reference to the recommendation, will also give code examples showing how it all ties together and can be effectively employed in a real–world development scenario. What does this book cover? In this book, you′ll find the following topics covered: The rationale behind XSLT: What is it for? The XSLT processing model Design patterns and stylesheet structure A full reference to the XPath and XSLT languages The use of XSLT with worked examplesCurrently available XSLT processors – updated to reflect recent advances in XSLT parser technology Coverage of proposed specification enhancements Who is this book for? This book is for programmers already using XML to organize their data in applications and for those who want to use the power and compatibility of XSLT to improve the display of their data. The book is in three parts: a detailed introduction to the concepts of the language, a reference section giving comprehensive specifications and working examples of every feature, and an exploitation guide giving advice and case studies for the advanced user.
"This work strikes a balance between the pure functional aspects of F# and the object-oriented and imperative features that make it so useful in practice, enable .NET integration, and make large-scale data processing possible." —Thore Graepel, PhD, Researcher, Microsoft Research Ltd. Over the next five years, F# is expected to become one of the world's most popular functional programming languages for scientists of all disciplines working on the Windows platform. F# is free and, unlike MATLAB® and other software with numerical/scientific origins, is a full-fledged programming language. Developed in consultation with Don Syme of Microsoft Research Ltd.—who wrote the language—F# for Scientists explains and demonstrates the powerful features of this important new programming language. The book assumes no prior experience and guides the reader from the basics of computer programming to the implementation of state-of-the-art algorithms. F# for Scientists begins with coverage of introductory material in the areas of functional programming, .NET, and scientific computing, and goes on to explore: Program structure Optimization Data structures Libraries Numerical analysis Databases Input and output Interoperability Visualization Screenshots of development using Visual Studio are used to illustrate compilation, debugging, and interactive use, while complete examples of a few whole programs are included to give readers a complete view of F#'s capabilities. Written in a clear and concise style, F# for Scientists is well suited for researchers, scientists, and developers who want to program under the Windows platform. It also serves as an ideal supplemental text for advanced undergraduate and graduate students with a background in science or engineering.