Muutke küpsiste eelistusi

E-raamat: Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming

  • Formaat - PDF+DRM
  • Hind: 97,49 €*
  • * hind on lõplik, st. muud allahindlused enam ei rakendu
  • Lisa ostukorvi
  • Lisa soovinimekirja
  • See e-raamat on mõeldud ainult isiklikuks kasutamiseks. E-raamatuid ei saa tagastada.

DRM piirangud

  • Kopeerimine (copy/paste):

    ei ole lubatud

  • Printimine:

    ei ole lubatud

  • Kasutamine:

    Digitaalõiguste kaitse (DRM)
    Kirjastus on väljastanud selle e-raamatu krüpteeritud kujul, mis tähendab, et selle lugemiseks peate installeerima spetsiaalse tarkvara. Samuti peate looma endale  Adobe ID Rohkem infot siin. E-raamatut saab lugeda 1 kasutaja ning alla laadida kuni 6'de seadmesse (kõik autoriseeritud sama Adobe ID-ga).

    Vajalik tarkvara
    Mobiilsetes seadmetes (telefon või tahvelarvuti) lugemiseks peate installeerima selle tasuta rakenduse: PocketBook Reader (iOS / Android)

    PC või Mac seadmes lugemiseks peate installima Adobe Digital Editionsi (Seeon tasuta rakendus spetsiaalselt e-raamatute lugemiseks. Seda ei tohi segamini ajada Adober Reader'iga, mis tõenäoliselt on juba teie arvutisse installeeritud )

    Seda e-raamatut ei saa lugeda Amazon Kindle's. 

“Havill's problem-driven approach introduces algorithmic concepts in context and motivates students with a wide range of interests and backgrounds.”

-- Janet Davis, Associate Professor and Microsoft Chair of Computer Science, Whitman College 

“This book looks really great and takes exactly the approach I think should be used for a CS 1 course. I think it really fills a need in the textbook landscape.”

-- Marie desJardins, Dean of the College of Organizational, Computational, and Information Sciences, Simmons University

Discovering Computer Science is a refreshing departure from introductory programming texts, offering students a much more sincere introduction to the breadth and complexity of this ever-growing field.”

-- James Deverick, Senior Lecturer, The College of William and Mary

"This unique introduction to the science of computing guides students through broad and universal approaches to problem solving in a variety of contexts and their ultimate implementation as computer programs.”

-- Daniel Kaplan, DeWitt Wallace Professor, Macalester College

Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming is a problem-oriented introduction to computational problem solving and programming in Python, appropriate for a first course for computer science majors, a more targeted disciplinary computing course or, at a slower pace, any introductory computer science course for a general audience.

Realizing that an organization around language features only resonates with a narrow audience, this textbook instead connects programming to students’ prior interests using a range of authentic problems from the natural and social sciences and the digital humanities.  The presentation begins with an introduction to the problem-solving process, contextualizing programming as an essential component.  Then, as the book progresses, each chapter guides students through solutions to increasingly complex problems, using a spiral approach to introduce Python language features.

The text also places programming in the context of fundamental computer science principles, such as abstraction, efficiency, testing, and algorithmic techniques, offering glimpses of topics that are traditionally put off until later courses.

30 well-developed independent projects that encourage students to explore questions across disciplinary boundaries, over 750 homework exercises, and 300 integrated reflection questions engage students in problem solving and active reading. 

The accompanying website — http://DiscoverCS.denison.edu — includes more advanced content, solutions to selected exercises, sample code and data files, and pointers for further exploration.

 

Arvustused

Havill's problem-driven approach introduces algorithmic concepts in context and motivates students with a wide range of interests and backgrounds.

-- Janet Davis, Associate Professor and Microsoft Chair of Computer Science, Whitman College

This book looks really great and takes exactly the approach I think should be used for a CS 1 course. I think it really fills a need in the textbook landscape.

-- Marie desJardins, Dean of the College of Organizational, Computational, and Information Sciences, Simmons University

Havill's broad and applications-driven introduction gives students a strong foundation as they begin to explore our field. Topics that students will study in more depth in later courses are introduced in context along a path of discovery for the fundamentals and breadth of computing. Problem solving paradigms and the structures to implement and test their results are presented as intuitive solutions to real-world problems like DNA sequencing and social network analysis, empowering the reader to understand why programming structures exist and how to use them to solve problems effectively and efficiently. Discovering Computer Science is a refreshing departure from introductory programming texts, offering students a much more sincere introduction to the breadth and complexity of this ever-growing field.

-- James Deverick, Senior Lecturer, The College of William and Mary

Programming is an essential skill of modern problem solving. But students can gain traction on authentic problems only when they have learned to model, decompose, approximate, and recompose real-world systems into a form suited to computing. This unique introduction to the science of computing guides students through broad and universal approaches to problem solving in a variety of contexts and their ultimate implementation as computer programs.

-- Daniel Kaplan, DeWitt Wallace Professor, Macalester College Havill's problem-driven approach introduces algorithmic concepts in context and motivates students with a wide range of interests and backgrounds.

-- Janet Davis, Associate Professor and Microsoft Chair of Computer Science, Whitman College

This book looks really great and takes exactly the approach I think should be used for a CS 1 course. I think it really fills a need in the textbook landscape.

-- Marie desJardins, Dean of the College of Organizational, Computational, and Information Sciences, Simmons University

Havill's broad and applications-driven introduction gives students a strong foundation as they begin to explore our field. Topics that students will study in more depth in later courses are introduced in context along a path of discovery for the fundamentals and breadth of computing. Problem solving paradigms and the structures to implement and test their results are presented as intuitive solutions to real-world problems like DNA sequencing and social network analysis, empowering the reader to understand why programming structures exist and how to use them to solve problems effectively and efficiently. Discovering Computer Science is a refreshing departure from introductory programming texts, offering students a much more sincere introduction to the breadth and complexity of this ever-growing field.

-- James Deverick, Senior Lecturer, The College of William and Mary

Programming is an essential skill of modern problem solving. But students can gain traction on authentic problems only when they have learned to model, decompose, approximate, and recompose real-world systems into a form suited to computing. This unique introduction to the science of computing guides students through broad and universal approaches to problem solving in a variety of contexts and their ultimate implementation as computer programs.

-- Daniel Kaplan, DeWitt Wallace Professor, Macalester College

Preface xv
Acknowledgments xxiii
About the author xxv
Chapter 1 How to Solve It
1(48)
1.1 Understand The Problem
3(3)
A first problem: computing reading level
4(1)
Functional abstraction
5(1)
1.2 Design An Algorithm
6(17)
Take it from the top
7(3)
Pseudocode
10(4)
Implement from the bottom
14(9)
1.3 Write A Program
23(13)
Welcome to the circus
23(5)
What's in a name?
28(3)
Interactive computing
31(1)
Looking ahead
32(4)
1.4 Look Back
36(9)
Testing
37(2)
Algorithm efficiency
39(6)
1.5 Summary And Further Discovery
45(4)
Chapter 2 "Visualizing Abstraction
49(58)
2.1 Data Abstraction
51(4)
Turtle graphics
53(2)
2.2 Drawing Flowers And Plotting Earthquakes
55(11)
Iteration
57(3)
Tangent 2.1 Defining colors
60(2)
Data visualization
62(4)
2.3 Functional Abstraction
66(11)
Function parameters
69(8)
2.4 Programming In Style
77(10)
Program structure
78(1)
Documentation
79(1)
Tangent 2.2 Global variables
80(3)
Self-documenting code
83(4)
2.5 A Return To Functions
87(10)
The math module
88(1)
Writing functions with return values
89(3)
Return vs. print
92(5)
2.6 Scope And Namespaces
97(8)
Local namespaces
98(3)
The global namespace
101(4)
2.7 Summary And Further Discovery
105(2)
Chapter 3 Inside a Computer
107(22)
3.1 Computers Are Dumb
108(4)
Tangent 3.1 High performance computing
109(2)
Machine language
111(1)
Tangent 3.2 Byte code
112(1)
3.2 Everything Is Bits
112(6)
Bits are switches
112(1)
Bits can represent anything
113(1)
Tangent 3.3 Hexadecimal notation
114(1)
Computing with bits
114(4)
3.3 Computer Arithmetic
118(6)
Limited precision
118(2)
Tangent 3.4 Floating point notation
120(1)
Error propagation
120(1)
Division
121(1)
Complex numbers
122(2)
3.4 Binary Arithmetic
More limited precision
Negative integers Designing an adder
Implementing an adder
3.5 The Universal Machine
124(2)
3.6 Summary And Further Discovery
126(3)
Chapter 4 Growth and Decay
129(36)
4.1 Accumulators
130(20)
Managing a fishing pond
130(6)
Measuring network value
136(3)
Organizing a concert
139(11)
4.2 Data Visualization
150(5)
4.3 Conditional Iteration
155(6)
When will the fish disappear?
155(2)
When will your nest egg double?
157(4)
4.4 Continuous Models
Difference equations
Radiocarbon dating
Tradeoffs between accuracy and time
Simulating an epidemic
4.5 Numerical Analysis
The harmonic series
Approximating π
Approximating square roots
4.6 Summing Up
161(3)
Tangent 4-1 Triangular numbers
163(1)
4.7 Further Discovery
164(1)
4.8 Projects
4.1 Parasitic relationships
4.2 Financial calculators
4.3 Market penetration
4.4 Wolves and moose
Chapter 5 Forks in the Road
165(56)
5.1 Random Walks
166(14)
Tangent 5.1 Interval notation
167(1)
One small step
167(4)
Monte Carlo simulation
171(9)
5.2 Pseudorandom Number Generators
Implementation Testing randomness
*5.3 Simulating Probability Distributions
The central limit theorem
5.4 Back To Booleans
180(19)
Predicate functions
182(1)
Short circuit evaluation
183(1)
DeMorgan's laws
184(3)
Thinking inside the box
187(5)
Many happy returns
192(7)
5.5 Defensive Programming
199(11)
Checking parameters
199(3)
Assertions
202(2)
Unit testing
204(1)
Tangent 5.2 Unit testing frameworks
205(2)
Testing floats
207(1)
Catching exceptions
207(3)
5.6 Guess My Number
210(9)
Ending the game nicely
212(1)
Friendly hints
213(1)
A proper win/lose message
214(5)
5.7 Summary And Further Discovery
219(2)
*5.8 Projects
5.1 The magic of polling
5.2 Escape!
Chapter 6 Text, Documents, and DNA
221(64)
6.1 First Steps
222(16)
Normalization
223(1)
Tangent 6.1 Natural language processing
224(4)
Tokenization
228(4)
Creating your own module
232(1)
Testing your module
233(5)
6.2 Text Documents
238(8)
Reading from text files
239(3)
Writing to text files
242(1)
Reading from the web
243(3)
6.3 Encoding Strings
246(10)
Computing checksums
246(1)
Unicode
247(3)
Tangent 6.2 Compressing text files
250(1)
Indexing and slicing
251(5)
6.4 A Concordance
256(10)
Finding a word
257(5)
A concordance entry
262(1)
A complete concordance
263(3)
6.5 Word Frequency Trends
266(6)
Finding the frequency of a word
268(1)
Getting the frequencies in slices
269(1)
Plotting the frequencies
270(2)
6.6 Comparing Texts
272(9)
Dot plots
274(7)
*6.7 Time Complexity
Best case vs. worst case
Asymptotic time complexity
*6.8 Computational Genomics
A genomics primer
Basic DNA analysis
Transforming sequences
Comparing sequences
Reading sequence files
6.9 Summary And Further Discovery
281(4)
6.10 Projects
6.1 Polarized politics
6.2 Finding genes
Chapter 7 Data Analysis
285(50)
7.1 Summary Statistics
286(7)
Mean and variance
286(2)
Minimum and maximum
288(5)
7.2 Wrangling Data
293(17)
Smoothing data
294(1)
A more efficient algorithm
295(2)
Modifying lists in place
297(5)
List operators and methods
302(3)
*List comprehensions
305(1)
Tangent 7.1 NumPy arrays
306(4)
7.3 Tallying Frequencies
310(15)
Word frequencies
310(1)
Dictionaries
311(4)
Tangent 7.2 Hash tables
315(1)
Finding the most frequent word
315(2)
Bigram frequencies
317(1)
Tangent 7.3 Sentiment analysis
318(7)
7.4 Reading Tabular Data
325(8)
Earthquakes
326(7)
*7.5 Designing Efficient Algorithms
Removing duplicates
A first algorithm
A more elegant algorithm
A more efficient algorithm
*7.6 Linear Regression
7.7 Data Clustering
Defining similarity
A simple example
Implementing A;-means clustering
Locating bicycle safety programs
7.8 Summary And Further Discovery
333(2)
Tangent 7.4 Privacy in the age of big data
334(1)
*7.9 Projects
7.1 Climate change
7.2 Does education influence unemployment?
7.3 Maximizing profit
7.4 Admissions
7.5 Preparing for a 100-year flood
7.6 Voting methods
7.7 Heuristics for traveling salespeople
Chapter 8 Flatland
335(30)
8.1 Tabular Data
335(7)
Reading a table of temperatures
336(3)
Tangent 8.1 Pandas
339(3)
8.2 The Game Of Life
342(11)
Creating a grid
344(1)
Initial configurations
345(1)
Surveying the neighborhood
346(1)
Performing one pass
347(2)
Tangent 8.2 NumPy arrays in two dimensions
349(1)
Updating the grid
349(4)
8.3 Digital Images
353(10)
Colors
353(1)
Tangent 8.3 Additive vs. subtractive color models
354(1)
Image filters
355(1)
Tangent 8.4 Image storage and compression
356(2)
Transforming images
358(5)
8.4 Summary And Further Discovery
363(2)
*8.5 Projects
8.1 Modeling segregation
8.2 Modeling ferromagnetism
8.3 Growing dendrites
8.4 Simulating an epidemic
Chapter 9 Self-similarity and Recursion
365(42)
9.1 Fractals
365(10)
Trees
367(2)
Snowflakes
369(6)
9.2 Recursion And Iteration
375(13)
Solving a problem recursively
379(1)
Palindromes
380(2)
Guessing passwords
382(6)
9.3 The Mythical Tower Of Hanoi
388(4)
*Is the end of the world nigh?
390(2)
9.4 Recursive Linear Search
392(4)
*Efficiency of recursive linear search
393(3)
9.5 Divide And Conquer
396(9)
Buy low, sell high
397(3)
Navigating a maze
400(5)
*9.6 Lindenmayer Systems
Formal grammars L-systems
Implementing L-systems
9.7 Summary And Further Discovery
405(2)
*9.8 Projects
9.1 Lindenmayer's beautiful plants
9.2 Gerrymandering
9.3 Percolation
Chapter 10 Organizing Data
407(36)
10.1 Binary Search
408(10)
Tangent 10.1 Databases
409(3)
Efficiency of iterative binary search
412(2)
A spelling checker
414(1)
Recursive binary search
415(1)
*Efficiency of recursive binary search
416(2)
10.2 Selection Sort
418(9)
Implementing selection sort
419(3)
Efficiency of selection sort
422(1)
Querying data
423(4)
10.3 Insertion Sort
427(6)
Implementing insertion sort
428(2)
Efficiency of insertion sort
430(3)
10.4 Efficient Sorting
433(8)
Merge sort
433(4)
Internal vs. external sorting
437(1)
Efficiency of merge sort
437(4)
*10.5 Tractable And Intractable Algorithms
Hard problems
10.6 Summary And Further Discovery
441(2)
*10.7 Projects
10.1 Creating a searchable database
10.2 Binary search trees
Chapter 11 Networks
443(26)
11.1 Modeling With Graphs
444(7)
Making friends
446(5)
11.2 Shortest Paths
451(7)
Breadth-first search
451(4)
Finding the actual paths
455(3)
11.3 It's A Small World
458(6)
Small world networks
458(1)
Clustering coefficients
459(2)
Scale-free networks
461(3)
11.4 Random Graphs
464(3)
11.5 Summary And Further Discovery
467(2)
*11.6 Projects
11.1 Diffusion of ideas and influence
11.2 Slowing an epidemic
11.3 The Oracle of Bacon
Chapter 12 Object-oriented Design
469(32)
12.1 Simulating An Epidemic
470(16)
Object design
471(1)
Person class
472(5)
Augmenting the Person class
477(2)
World class
479(2)
The simulation
481(5)
12.2 Operators And Polymorphism
486(13)
Designing a Pair ADT
487(1)
Pair class
488(1)
Arithmetic methods
489(2)
Special methods
491(2)
Comparison operators
493(1)
Indexing
494(5)
12.3 A Flocking Simulation
The World Boids
*12.4 A Stack Adt
Stack class
Reversing a string
Converting numbers to other bases
12.5 A Dictionary ADT
Hash tables
Implementing a hash table Indexing
ADTs vs. data structures
12.6 Summary And Further Discovery
499(2)
*12.7 Projects
12.1 Tracking GPS coordinates
12.2 Economic mobility
12.3 Slime mold aggregation
12.4 Boids in space
Bibliography 501(4)
Appendix A Python Library Reference
Appendix B Selected Exercise Solutions
Index 505
Jessen Havill is a Professor of Computer Science at Denison University. He has been teaching courses across the computer science curriculum for almost thirty years, and was awarded the College's highest teaching honor, the Charles A. Brickman Teaching Excellence Award, in 2013. Although his primary expertise is in the development and analysis of online algorithms, Dr. Havill has spent many years collaborating with colleagues across the curriculum to develop interdisciplinary academic opportunities for students. From 2016-2019, he became the founding Director of Denison University's interdisciplinary Data Analytics program. Dr. Havill earned his bachelor's degree from Bucknell University and his Ph.D. in computer science from The College of William and Mary.