SlideShare a Scribd company logo
1 of 22
Download to read offline
Let’s Code
Sameer Soni
@_sameersoni
–C.A.R. Hoare, The 1980 ACM Turing Award Lecture
“There are two ways of constructing a software
design: One way is to make it so simple that there
are obviously no deficiencies and the other way is to
make it so complicated that there are no obvious
deficiencies.”
– E. W. Dijkstra
“The computing scientist’s main challenge is not to
get confused by the complexities of his own
making.”
Kata
• is a Japanese word.
• are detailed choreographed patterns of
movements practised either solo or in
pairs.
• originally were teaching and training
methods by which successful combat
techniques were preserved and passed
on.
• Practicing kata allowed a company of
persons to engage in a struggle using a
systematic approach, rather than as
individuals in a disorderly manner.
• basic goal of kata is to preserve and
transmit proven techniques and to
practice self-defence.
• is a term used by some Software
Craftsmen, who write small snippets of
code to build muscle memory and
practise craft much like soldier, musician,
dancer or doctor.
- wiki
Ruby Functional Programming
Statement was incorrect until we were in school and
hadn’t been introduced to PROGRAMMING.
Expression is quite common in Imperative style of
programming.
But we don’t realise the side effects and pay heavy cost.
x = x + 1
Theory
Functional programming treats
computation as evolution of
mathematical functions and
avoids state and mutable data.
Promotes code with no side
effects, no change in value of
variables.
Discourages change of state.
Cleaner Code - Variables are not
modified once defined.
Referential transparency - Expressions
can be replaced by functions, as for
same input always gives same output.
Advantages
Benefits of RT:
1. Parallelization
2. Memoization
3. Modularization
4. Ease of debugging
Rules - Don’t update variables
No
• indexes = [1,2,3]
• indexes << 4
• indexes # [1,2,3,4]
Yes
• indexes = [1,2,3]
• all_indexes = indexes + [4] #[1,2,3,4]
Don’t append to arrays or strings
No
• hash = {a: 1, b: 2}
• hash[:c] = 3
• hash
Yes
• hash = {a: 1, b: 2}
• new_hash = hash.merge(c: 3)
Don’t update hashes
No
• string = “hello”
• string.gsub!(/l/, 'z')
• string # “hezzo
Yes
• string = "hello"
• new_string = string.gsub(/l/, 'z') # "hezzo"
Don’t use bang methods which modify in place
No
• number = gets
• number = number.to_i
Here, we are not updating number but overriding the old values,
which is as bad as updating.
Rule is: Once defined, its value should remain same in that scope
Yes
• number_string = gets
• number = number_string.to_i
Don’t reuse variables
Blocks as higher order functions
A block is an anonymous piece of code you can pass
around and execute at will.
No
• dogs = []
• ["milu", "rantanplan"].each do |name|
dogs << name.upcase
end
• dogs # => ["MILU", "RANTANPLAN"]
Yes
• dogs = ["milu", "rantanplan"].map do |name|
name.upcase
end # => ["MILU", "RANTANPLAN"]
init-empty + each + push = map
No
• dogs = []
• ["milu", "rantanplan"].each do |name|
if name.size == 4
dogs << name
end
end
• dogs # => [“milu"]
Yes
• dogs = ["milu", "rantanplan"].select do |name|
name.size == 4
end # => ["milu"]
init-empty + each + conditional push = select/reject
No
• length = 0
• ["milu", "rantanplan"].each do |dog_name|
length += dog_name.length
end
• length # 14
Yes
• length = ["milu", "rantanplan"].inject(0) do |accumulator, dog_name|
accumulator + dog_name.length
end # => 14
initialize + each + accumulate = inject
1st way:
hash = {}
input.each do |item|
hash[item] = process(item)
end
hash
How to create hash from an enumerable
2nd way:
Hash[input.map do |item|
[item, process(item)]
end]
input.inject({}) do |hash, item|
hash.merge(item => process(item))
end
# Way 1
if found_dog == our_dog
name = found_dog.name
message = "We found our dog #{name}!"
else
message = "No luck"
end
Everything is a expression
# Way 2
message = if (found_dog == my_dog)
name = found_dog.name
"We found our dog #{name}!"
else
"No luck"
end
Exercise
"What's the sum of the first 10 natural number
whose square value is divisible by 5?"
Ruby Functional way
Integer::natural.select { |x| x**2 % 5 == 0 }.take(10).inject(:+) #=> 275
Ruby Imperative way
n, num_elements, sum = 1, 0, 0
while num_elements < 10
if n**2 % 5 == 0
sum += n
num_elements += 1
end
n += 1
end
sum #=> 275
Source
• wikipedia.com
• code.google.com
Thanks

More Related Content

Similar to Let's Code

Programming in C by SONU KUMAR.pptx
Programming in C by SONU KUMAR.pptxProgramming in C by SONU KUMAR.pptx
Programming in C by SONU KUMAR.pptxSONU KUMAR
 
AmI 2015 - Python basics
AmI 2015 - Python basicsAmI 2015 - Python basics
AmI 2015 - Python basicsLuigi De Russis
 
Oz_Chap 2_M3_Lesson Slides_Variables.pptx
Oz_Chap 2_M3_Lesson Slides_Variables.pptxOz_Chap 2_M3_Lesson Slides_Variables.pptx
Oz_Chap 2_M3_Lesson Slides_Variables.pptxALEJANDROLEONGOVEA
 
Python lab basics
Python lab basicsPython lab basics
Python lab basicsAbi_Kasi
 
Automation Testing theory notes.pptx
Automation Testing theory notes.pptxAutomation Testing theory notes.pptx
Automation Testing theory notes.pptxNileshBorkar12
 
Ch02 primitive-data-definite-loops
Ch02 primitive-data-definite-loopsCh02 primitive-data-definite-loops
Ch02 primitive-data-definite-loopsJames Brotsos
 
Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Jared Roesch
 
Algorithm week2(technovation)
Algorithm week2(technovation)Algorithm week2(technovation)
Algorithm week2(technovation)than sare
 
Functions, List and String methods
Functions, List and String methodsFunctions, List and String methods
Functions, List and String methodsPranavSB
 
Tuples, Dicts and Exception Handling
Tuples, Dicts and Exception HandlingTuples, Dicts and Exception Handling
Tuples, Dicts and Exception HandlingPranavSB
 
Algorithms and Data Structures
Algorithms and Data StructuresAlgorithms and Data Structures
Algorithms and Data Structuressonykhan3
 
Concept of Algorithm.pptx
Concept of Algorithm.pptxConcept of Algorithm.pptx
Concept of Algorithm.pptxElProfesor14
 
Introduction of c_language
Introduction of c_languageIntroduction of c_language
Introduction of c_languageSINGH PROJECTS
 
Intro to Data Structure & Algorithms
Intro to Data Structure & AlgorithmsIntro to Data Structure & Algorithms
Intro to Data Structure & AlgorithmsAkhil Kaushik
 
Brixton Library Technology Initiative Week0 Recap
Brixton Library Technology Initiative Week0 RecapBrixton Library Technology Initiative Week0 Recap
Brixton Library Technology Initiative Week0 RecapBasil Bibi
 
Unit 1 Introduction Part 3.pptx
Unit 1 Introduction Part 3.pptxUnit 1 Introduction Part 3.pptx
Unit 1 Introduction Part 3.pptxNishaRohit6
 

Similar to Let's Code (20)

Programming in C by SONU KUMAR.pptx
Programming in C by SONU KUMAR.pptxProgramming in C by SONU KUMAR.pptx
Programming in C by SONU KUMAR.pptx
 
AmI 2015 - Python basics
AmI 2015 - Python basicsAmI 2015 - Python basics
AmI 2015 - Python basics
 
Oz_Chap 2_M3_Lesson Slides_Variables.pptx
Oz_Chap 2_M3_Lesson Slides_Variables.pptxOz_Chap 2_M3_Lesson Slides_Variables.pptx
Oz_Chap 2_M3_Lesson Slides_Variables.pptx
 
Python lab basics
Python lab basicsPython lab basics
Python lab basics
 
Automation Testing theory notes.pptx
Automation Testing theory notes.pptxAutomation Testing theory notes.pptx
Automation Testing theory notes.pptx
 
c-programming
c-programmingc-programming
c-programming
 
Python programming
Python programmingPython programming
Python programming
 
Ch02 primitive-data-definite-loops
Ch02 primitive-data-definite-loopsCh02 primitive-data-definite-loops
Ch02 primitive-data-definite-loops
 
Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Who go Types in my Systems Programing!
Who go Types in my Systems Programing!
 
Algorithm week2(technovation)
Algorithm week2(technovation)Algorithm week2(technovation)
Algorithm week2(technovation)
 
Functions, List and String methods
Functions, List and String methodsFunctions, List and String methods
Functions, List and String methods
 
Tuples, Dicts and Exception Handling
Tuples, Dicts and Exception HandlingTuples, Dicts and Exception Handling
Tuples, Dicts and Exception Handling
 
Algorithms and Data Structures
Algorithms and Data StructuresAlgorithms and Data Structures
Algorithms and Data Structures
 
Concept of Algorithm.pptx
Concept of Algorithm.pptxConcept of Algorithm.pptx
Concept of Algorithm.pptx
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
 
Java Tutorial
Java Tutorial Java Tutorial
Java Tutorial
 
Introduction of c_language
Introduction of c_languageIntroduction of c_language
Introduction of c_language
 
Intro to Data Structure & Algorithms
Intro to Data Structure & AlgorithmsIntro to Data Structure & Algorithms
Intro to Data Structure & Algorithms
 
Brixton Library Technology Initiative Week0 Recap
Brixton Library Technology Initiative Week0 RecapBrixton Library Technology Initiative Week0 Recap
Brixton Library Technology Initiative Week0 Recap
 
Unit 1 Introduction Part 3.pptx
Unit 1 Introduction Part 3.pptxUnit 1 Introduction Part 3.pptx
Unit 1 Introduction Part 3.pptx
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 

Let's Code

  • 2. –C.A.R. Hoare, The 1980 ACM Turing Award Lecture “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
  • 3. – E. W. Dijkstra “The computing scientist’s main challenge is not to get confused by the complexities of his own making.”
  • 4. Kata • is a Japanese word. • are detailed choreographed patterns of movements practised either solo or in pairs. • originally were teaching and training methods by which successful combat techniques were preserved and passed on. • Practicing kata allowed a company of persons to engage in a struggle using a systematic approach, rather than as individuals in a disorderly manner. • basic goal of kata is to preserve and transmit proven techniques and to practice self-defence. • is a term used by some Software Craftsmen, who write small snippets of code to build muscle memory and practise craft much like soldier, musician, dancer or doctor. - wiki
  • 5. Ruby Functional Programming Statement was incorrect until we were in school and hadn’t been introduced to PROGRAMMING. Expression is quite common in Imperative style of programming. But we don’t realise the side effects and pay heavy cost. x = x + 1
  • 6. Theory Functional programming treats computation as evolution of mathematical functions and avoids state and mutable data. Promotes code with no side effects, no change in value of variables. Discourages change of state. Cleaner Code - Variables are not modified once defined. Referential transparency - Expressions can be replaced by functions, as for same input always gives same output. Advantages Benefits of RT: 1. Parallelization 2. Memoization 3. Modularization 4. Ease of debugging
  • 7. Rules - Don’t update variables
  • 8. No • indexes = [1,2,3] • indexes << 4 • indexes # [1,2,3,4] Yes • indexes = [1,2,3] • all_indexes = indexes + [4] #[1,2,3,4] Don’t append to arrays or strings
  • 9. No • hash = {a: 1, b: 2} • hash[:c] = 3 • hash Yes • hash = {a: 1, b: 2} • new_hash = hash.merge(c: 3) Don’t update hashes
  • 10. No • string = “hello” • string.gsub!(/l/, 'z') • string # “hezzo Yes • string = "hello" • new_string = string.gsub(/l/, 'z') # "hezzo" Don’t use bang methods which modify in place
  • 11. No • number = gets • number = number.to_i Here, we are not updating number but overriding the old values, which is as bad as updating. Rule is: Once defined, its value should remain same in that scope Yes • number_string = gets • number = number_string.to_i Don’t reuse variables
  • 12. Blocks as higher order functions A block is an anonymous piece of code you can pass around and execute at will.
  • 13. No • dogs = [] • ["milu", "rantanplan"].each do |name| dogs << name.upcase end • dogs # => ["MILU", "RANTANPLAN"] Yes • dogs = ["milu", "rantanplan"].map do |name| name.upcase end # => ["MILU", "RANTANPLAN"] init-empty + each + push = map
  • 14. No • dogs = [] • ["milu", "rantanplan"].each do |name| if name.size == 4 dogs << name end end • dogs # => [“milu"] Yes • dogs = ["milu", "rantanplan"].select do |name| name.size == 4 end # => ["milu"] init-empty + each + conditional push = select/reject
  • 15. No • length = 0 • ["milu", "rantanplan"].each do |dog_name| length += dog_name.length end • length # 14 Yes • length = ["milu", "rantanplan"].inject(0) do |accumulator, dog_name| accumulator + dog_name.length end # => 14 initialize + each + accumulate = inject
  • 16. 1st way: hash = {} input.each do |item| hash[item] = process(item) end hash How to create hash from an enumerable 2nd way: Hash[input.map do |item| [item, process(item)] end] input.inject({}) do |hash, item| hash.merge(item => process(item)) end
  • 17. # Way 1 if found_dog == our_dog name = found_dog.name message = "We found our dog #{name}!" else message = "No luck" end Everything is a expression # Way 2 message = if (found_dog == my_dog) name = found_dog.name "We found our dog #{name}!" else "No luck" end
  • 18. Exercise "What's the sum of the first 10 natural number whose square value is divisible by 5?"
  • 19. Ruby Functional way Integer::natural.select { |x| x**2 % 5 == 0 }.take(10).inject(:+) #=> 275
  • 20. Ruby Imperative way n, num_elements, sum = 1, 0, 0 while num_elements < 10 if n**2 % 5 == 0 sum += n num_elements += 1 end n += 1 end sum #=> 275