ورود به حساب

نام کاربری گذرواژه

گذرواژه را فراموش کردید؟ کلیک کنید

حساب کاربری ندارید؟ ساخت حساب

ساخت حساب کاربری

نام نام کاربری ایمیل شماره موبایل گذرواژه

برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید


09117307688
09117179751

در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید

دسترسی نامحدود

برای کاربرانی که ثبت نام کرده اند

ضمانت بازگشت وجه

درصورت عدم همخوانی توضیحات با کتاب

پشتیبانی

از ساعت 7 صبح تا 10 شب

دانلود کتاب Grokking Simplicity: Taming complex software with functional thinking

دانلود کتاب Grokking Simplicity: رام کردن نرم افزارهای پیچیده با تفکر کاربردی

Grokking Simplicity: Taming complex software with functional thinking

مشخصات کتاب

Grokking Simplicity: Taming complex software with functional thinking

ویرایش:  
نویسندگان:   
سری:  
ISBN (شابک) : 9781617296208 
ناشر: Manning Publications Co. 
سال نشر: 2021 
تعداد صفحات: 0 
زبان: English 
فرمت فایل : EPUB (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) 
حجم فایل: 19 مگابایت 

قیمت کتاب (تومان) : 31,000



ثبت امتیاز به این کتاب

میانگین امتیاز به این کتاب :
       تعداد امتیاز دهندگان : 16


در صورت تبدیل فایل کتاب Grokking Simplicity: Taming complex software with functional thinking به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.

توجه داشته باشید کتاب Grokking Simplicity: رام کردن نرم افزارهای پیچیده با تفکر کاربردی نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.


توضیحاتی درمورد کتاب به خارجی



فهرست مطالب

foreword
	preface
	acknowledgments
	about this book
	about the author
Welcome to Grokking Simplicity
	What is functional programming?
	The problems with the definition for practical use
	The definition of FP confuses managers
	We treat functional programming as a set of skills and concepts
	Distinguishing actions, calculations, and data
	Functional programmers distinguish code that matters when you call it
	Functional programmers distinguishinert data from code that does work
	Functional programmers seeactions, calculations, and data
	The three categories of code in FP
	How does distinguishingactions, calculations, and data help us?
	Why is this book different from other FP books?
	What is functional thinking?
	Ground rules for ideas and skills in this book
	Conclusion
	Summary
	Up next . . .
Functional thinking in action
	Welcome to Toni’s Pizza
	Part 1: Distinguishing actions, calculations, and data
	Organizing code by “rate of change”
	Part 2: First-class abstractions
	Timelines visualize distributed systems
	Multiple timelines can execute in different orderings
	Hard-won lessons about distributed systems
	Cutting the timeline:Making the robots wait for each other
	Positive lessons learned about timelines
	Conclusion
	Summary
	Up next . . .
Distinguishing actions, calculations, and data
	Actions, calculations, and data
	Actions, calculations, and data apply to any situation
	Lessons from our shopping process
	Deep dive: Data
	Applying functional thinking to new code
	Drawing the coupon email process
	Implementing the coupon email process
	Applying functional thinking to existing code
	Actions spread through code
	Actions can take many forms
	Deep dive: Actions
	Conclusion
	Summary
	Up next . . .
Extracting calculations from actions
	Welcome to MegaMart.com!
	Calculating free shipping
	Calculating tax
	We need to make it more testable
	We need to make it more reusable
	Distinguishing actions, calculations, and data
	Functions have inputs and outputs
	Testing and reuse relate to inputs and outputs
	Extracting a calculation from an action
	Extracting another calculation from an action
	Let’s see all of our code in one place
	Conclusion
	Summary
	Up next . . .
Improving the design of actions
	Aligning design with business requirements
	Aligning the function with business requirements
	Principle:Minimize implicit inputs and outputs
	Reducing implicit inputs and outputs
	Giving the code a once-over
	Categorizing our calculations
	Principle:Design is about pulling things apart
	Improving the design by pulling add_item() apart
	Extracting a copy-on-write pattern
	Using add_item()
	Categorizing our calculations
	Smaller functions and more calculations
	Conclusion
	Summary
	Up next . . .
Staying immutablein a mutable language
	Can immutability be applied everywhere?
	Categorizing operations into reads, writes, or both
	The three steps of the copy-on-write discipline
	Converting a write to a read with copy-on-write
	Complete diff from mutating to copy-on-write
	These copy-on-write operations are generalizable
	JavaScript arrays at a glance
	What to do if an operation is a read and a write
	Splitting a function that does a read and write
	Returning two values from one function
	Reads to immutable data structures are calculations
	Applications have state that changes over time
	Immutable data structures are fast enough
	Copy-on-write operations on objects
	JavaScript objects at a glance
	Converting nested writes to reads
	What gets copied?
	Visualizing shallow copies and structural sharing
	Conclusion
	Summary
	Up next . . .
Staying immutable with untrusted code
	Immutability with legacy code
	Our copy-on-write code has to interact with untrusted code
	Defensive copying defends the immutable original
	Implementing defensive copies
	The rules of defensive copying
	Wrapping untrusted code
	Defensive copying you may be familiar with
	Copy-on-write and defensive copying compared
	Deep copies are more expensive than shallow copies
	Implementing deep copy in JavaScript is difficult
	A dialogue between copy-on-write and defensive copying
	Conclusion
	Summary
	Up next . . .
Stratified design:Part 1
	What is software design?
	What is stratified design?
	Developing our design sense
	Patterns of stratified design
	Pattern 1: Straightforward implementations
	Three different zoom levels
	Extracting the for loop
	Pattern 1 Review: Straightforward implementation
	Conclusion
	Summary
	Up next . . .
Stratified design: Part 2
	Patterns of stratified design
	Pattern 2: Abstraction barrier
	Abstraction barriers hide implementations
	Ignoring details is symmetrical
	Swapping the shopping cart’s data structure
	Re-implementing the shopping cart as an object
	The abstraction barrier lets us ignore details
	When to use (and when not to use!) abstraction barriers
	Pattern 2 Review: Abstraction barrier
	Our code is more straightforward
	Pattern 3: Minimal interface
	Pattern 3 Review: Minimal interface
	Pattern 4: Comfortable layers
	Patterns of stratified design
	What does the graph show us about our code?
	Code at the top of the graph is easier to change
	Testing code at the bottom is more important
	Code at the bottom is more reusable
	Summary: What the graph shows us about our code
	Conclusion
	Summary
	Up next . . .
First-class functions: Part 1
	Marketing still needs to coordinate with dev
	Code smell: Implicit argument in function name
	Refactoring: Express implicit argument
	Recognize what is and what isn’t first-class
	Will field names as strings lead to more bugs?
	Will first-class fields make the API hard to change?
	We will use a lot of objects and arrays
	First-class functions can replace any syntax
	For loop example: Eating and cleaning up
	Refactoring: Replace body with callback
	What is this syntax?
	Why are we wrapping the code in a function?
	Conclusion
	Summary
	Up next . . .
First-class functions: Part 2
	One code smell and two refactorings
	Refactoring copy-on-write
	Refactoring copy-on-write for arrays
	Returning functions from functions
	Conclusion
	Summary
	Up next . . .
Functional iteration
	One code smell and two refactorings
	MegaMart is creating a communications team
	Deriving map() from examples
	Functional tool: map()
	Three ways to pass a function
	Example: Email addresses of all customers
	Deriving filter() from examples
	Functional tool: filter()
	Example: Customers with zero purchases
	Deriving reduce() from examples
	Functional tool: reduce()
	Example: Concatenating strings
	Things you can do with reduce()
	Three functional tools compared
	Conclusion
	Summary
	Up next . . .
Chaining functional tools
	The customer communications team continues
	Clarifying chains, method 1: Name the steps
	Clarifying chains, method 2: Naming the callbacks
	Clarifying chains: Two methods compared
	Example: Emails of customers who have made one purchase
	Refactoring existing for loops to functional tools
	Tip 1: Make data
	Tip 2: Operate on whole array at once
	Tip 3: Take many small steps
	Tip 3: Take many small steps
	Comparing functional to imperative code
	Summary of chaining tips
	Debugging tips for chaining
	Many other functional tools
	reduce() for building values
	Getting creative with data representation
	Line up those dots
	Conclusion
	Summary
	Up next . . .
Functional tools for nested data
	Higher-order functions for values in objects
	Making the field name explicit
	Deriving update()
	Using update() to modify values
	Refactoring: Replace get, modify, set with update()
	Functional tool: update()
	Visualizing values in objects
	Visualizing nested updates
	Applying update() to nested data
	Deriving updateOption()
	Deriving update2()
	Visualizing update2() on nested objects
	Writing incrementSizeByName() four ways
	Deriving update3()
	Deriving nestedUpdate()
	The anatomy of safe recursion
	Visualizing nestedUpdate()
	The superpower of recursion
	Design considerations with deep nesting
	Abstraction barriers on deeply nested data
	A summary of our use of higher-order functions
	Conclusion
	Summary
	Up next . . .
Isolating timelines
	There’s a bug!
	Now we can try to click twice fast
	The timeline diagram shows what happens over time
	The two fundamentals of timeline diagrams
	Two tricky details about the order of actions
	Drawing the add-to-cart timeline: Step 1
	Asynchronous calls require new timelines
	Different languages, different threading models
	Building the timeline step-by-step
	Drawing the add-to-cart timeline: Step 2
	Timeline diagrams capture the two kinds of sequential code
	Timeline diagrams capture the uncertain ordering of parallel code
	Principles of working with timelines
	JavaScript’s single-thread
	JavaScript’s asynchronous queue
	AJAX and the event queue
	A complete asynchronous example
	Simplifying the timeline
	Reading our finished timeline
	Simplifying the add-to-cart timeline diagram: Step 3
	Review: Drawing the timeline (steps 1–3)
	Summary: Drawing timeline diagrams
	Timeline diagrams side-by-side can reveal problems
	Two slow clicks get the right result
	Two fast clicks can get the wrong result
	Timelines that share resources can cause problems
	Converting a global variable to a local one
	Converting a global variable to an argument
	Making our code more reusable
	Principle: In an asynchronous context, we use a final callback instead of a return value as our explicit output
	Conclusion
	Summary
	Up next . . .
Sharing resources between timelines
	Principles of working with timelines
	The shopping cart still has a bug
	We need to guarantee the order of the DOM updates
	Building a queue in JavaScript
	Principle:Use real-world sharing as inspiration
	Making the queue reusable
	Analyzing the timeline
	Principle:Analyze the timeline diagram to know if there will be problems
	Making the queue skip
	Conclusion
	Summary
	Up next . . .
Coordinating timelines
	Principles of working with timelines
	There’s a bug!
	How the code was changed
	Identify actions: Step 1
	Draw each action: Step 2
	Simplify the diagram: Step 3
	Possible ordering analysis
	Why this timeline is faster
	Waiting for both parallel callbacks
	A concurrency primitive for cutting timelines
	Using Cut() in our code
	Uncertain ordering analysis
	Parallel execution analysis
	Multiple-click analysis
	A primitive to call something just once
	Implicit versus explicit model of time
	Summary: Manipulating timelines
	Conclusion
	Summary
	Up next . . .
Reactive and onion architectures
	Two separate architectural patterns
	Coupling of causes and effects of changes
	What is reactive architecture?
	Tradeoffs of the reactive architecture
	Cells are first-class state
	We can make ValueCells reactive
	We can update shipping icons when the cell changes
	FormulaCells calculate derived values
	Mutable state in functional programming
	How reactive architecture reconfigures systems
	Decouples effects from their causes
	Decoupling manages a center of cause and effect
	Treat series of steps as pipelines
	Flexibility in your timeline
	Two separate architectural patterns
	What is the onion architecture?
	Review: Actions, calculations, and data
	Review: Stratified design
	Traditional layered architecture
	A functional architecture
	Facilitating change and reuse
	Examine the terms used to place the rule in a layer
	Analyze readability and awkwardness
	Conclusion
	Summary
	Up next . . .
The functional journey ahead
	A plan for the chapter
	We have learned the skills of professionals
	Big takeaways
	The ups and downs of skill acquisition
	Parallel tracks to mastery
	Sandbox: Start a side project
	Sandbox: Practice exercises
	Production: Eliminate a bug today
	Production: Incrementally improve the design
	Popular functional languages
	Functional languages with the most jobs
	Functional languages by platform
	Functional languages by learning opportunity
	Get mathy
	Further reading
	Conclusion
	Summary
	Up next . . .
		index




نظرات کاربران