SlideShare a Scribd company logo
1 of 17
Download to read offline
Search-driven
programming	

and how to design your
language for it
Search-driven
programming
• Get an error? Copy and paste the error
into Google. In milliseconds you often have
the answer to what you did wrong	

• SDP is very fast and flow-friendly	

• Everyone these days knows programming is
a pretty social and even collective activity	

• Surrender to the hive-mind!	

!
But actually are many
hive-minds	

• One hive per language / tool.	

• (To the extent that there is crossover
across languages and tools that’s mostly
called the standard CS curriculum.)
Community intelligence:
two measures
• The old way: μ (average knowledge)	

• Whoever was nearest to you to talk
about your problem	

• The SDP way: Σ (aggregate knowledge)	

• Google search sums the intelligence of a
community
A very big deal
• In my opinion this is the biggest thing in
human knowledge of the past 1000 years	

• But language designers haven’t noticed yet
• A community has some programmers’
mistakes documented in Google-searchable
space, often with solutions	

• No matter what you dumb thing you did
with Ruby on Rails, there is someone on a
blog or StackOverflow who already did it
and posted a decent answer about how to
fix it.
So, a big community is
one way to win
Implications for
language designers
Implications for
language designers
• Solved problems in Googledspace are part
of what your language has to offer	

• Arguably the most heavily used ‘feature’ 	

• More important than having a good
Emacs mode or whatnot	

• Sadly this helps the incumbent languages
• When you start your community will be
tiny. 	

• You need a community multiplier.
• Attract prolix programmers. Exhibitionist
hackers.	

• Your model here is mid 2000s Ruby
community. So many presentations, so
much blogging!	

• (Non-SDP benefit: the best lib wins
much faster in a prolix community.)	

• How? Set a culture that attracts them.
Write! Blog sloppily so that everyone feels
like dashing off a quick, underedited post is
'what we do here’.
What’s your dog whistle?
• Get your naming unique - both the language's
name and its libs	

• Maybe dream up a lib naming convention
that makes this very likely	

• Python is your model. Numpy, SciPy,
web.py, cherrypy, etc. Very Googeable.	

• Maybe have some misspelled prefix or
suffix that implies your language	

• ex.“Hypreactive” “Escarpmeant”
Design community boosting
into the language
• Or at least its tools	

• ex. when in ‘dev mode’, any error message /
stack trace includes a URL that creates a
blog post with that stack trace + context.
Paste in the code you changed to provide
the solution.	

• Or write something that can turn any git
commit in your language into a blog post	

• Post-commit hook?
• The iPython Notebook nbviewer is an early
example of such a tool. 	

• ex. http://nbviewer.ipython.org/gist/
fonnesbeck/2352771
• It might work to establish a culture where
the error message due to some bug that
you are getting should go into git commit
messages or pull request description.
GitHub hides long messages but they are in
the HTML :)	

• Here you are fighting the standards and
culture of git and GitHub
Less ambitious:	

cultural conventions
The 1000X community
multiplier dream
• The goal: EVERY time someone fixes their
bug, leave a trail in Googleable space that
others can follow	

• Whatever new language makes this happen
first is the new dominant language
Questions worth asking
• Why is there so much less sysadmin-ish
stuff blogged and StackOverflow-ed,
compared to programming-ish stuff?	

• (I think it’s cultural)	

• Could you make community tools first
class citizens in your language? 	

• If your editor is within a browser, you
probably could and should do this

More Related Content

Similar to Search-Driven Programming

2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdf2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdfColm Dunphy
 
An introduction to go programming language
An introduction to go programming languageAn introduction to go programming language
An introduction to go programming languageTechnology Parser
 
How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)SATOSHI TAGOMORI
 
How to get started in Open Source!
How to get started in Open Source!How to get started in Open Source!
How to get started in Open Source!Pradeep Singh
 
Welcome to the Brixton Library Technology Initiative
Welcome to the Brixton Library Technology InitiativeWelcome to the Brixton Library Technology Initiative
Welcome to the Brixton Library Technology InitiativeBasil Bibi
 
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...Matt Weaver
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Gozhubert
 
What is open source?
What is open source?What is open source?
What is open source?Ahmet Bulut
 
Everyone wants (someone else) to do it: writing documentation for open source...
Everyone wants (someone else) to do it: writing documentation for open source...Everyone wants (someone else) to do it: writing documentation for open source...
Everyone wants (someone else) to do it: writing documentation for open source...Jody Garnett
 
What would your own version of Ruby look like? (RubyKaigi)
What would your own version of Ruby look like? (RubyKaigi)What would your own version of Ruby look like? (RubyKaigi)
What would your own version of Ruby look like? (RubyKaigi)Hung Wu Lo
 
Create Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptCreate Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptRob Scaduto
 
Apresentação - Minicurso de Introdução a Python, Data Science e Machine Learning
Apresentação - Minicurso de Introdução a Python, Data Science e Machine LearningApresentação - Minicurso de Introdução a Python, Data Science e Machine Learning
Apresentação - Minicurso de Introdução a Python, Data Science e Machine LearningArthur Emanuel
 
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinalProf. Wim Van Criekinge
 
3.15.17 DSpace: How to Contribute Webinar Slides
3.15.17 DSpace: How to Contribute Webinar Slides3.15.17 DSpace: How to Contribute Webinar Slides
3.15.17 DSpace: How to Contribute Webinar SlidesDuraSpace
 
An Introduction To Python - Python, Print()
An Introduction To Python - Python, Print()An Introduction To Python - Python, Print()
An Introduction To Python - Python, Print()Blue Elephant Consulting
 
Linked Data: The Real Web 2.0 (from 2008)
Linked Data: The Real Web 2.0 (from 2008)Linked Data: The Real Web 2.0 (from 2008)
Linked Data: The Real Web 2.0 (from 2008)Uche Ogbuji
 
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundNDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundKarel Zikmund
 
Contributing to Open Source
Contributing to Open SourceContributing to Open Source
Contributing to Open SourceAmol A. Sale
 
We’re Going Mobile! Great! Wait… What Does That Mean?
We’re Going Mobile! Great! Wait… What Does That Mean?We’re Going Mobile! Great! Wait… What Does That Mean?
We’re Going Mobile! Great! Wait… What Does That Mean?STC-Philadelphia Metro Chapter
 

Similar to Search-Driven Programming (20)

2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdf2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdf
 
An introduction to go programming language
An introduction to go programming languageAn introduction to go programming language
An introduction to go programming language
 
How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)
 
How to get started in Open Source!
How to get started in Open Source!How to get started in Open Source!
How to get started in Open Source!
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to Coding
 
Welcome to the Brixton Library Technology Initiative
Welcome to the Brixton Library Technology InitiativeWelcome to the Brixton Library Technology Initiative
Welcome to the Brixton Library Technology Initiative
 
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...
Ebooks without Vendors: Using Open Source Software to Create and Share Meanin...
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Go
 
What is open source?
What is open source?What is open source?
What is open source?
 
Everyone wants (someone else) to do it: writing documentation for open source...
Everyone wants (someone else) to do it: writing documentation for open source...Everyone wants (someone else) to do it: writing documentation for open source...
Everyone wants (someone else) to do it: writing documentation for open source...
 
What would your own version of Ruby look like? (RubyKaigi)
What would your own version of Ruby look like? (RubyKaigi)What would your own version of Ruby look like? (RubyKaigi)
What would your own version of Ruby look like? (RubyKaigi)
 
Create Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptCreate Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScript
 
Apresentação - Minicurso de Introdução a Python, Data Science e Machine Learning
Apresentação - Minicurso de Introdução a Python, Data Science e Machine LearningApresentação - Minicurso de Introdução a Python, Data Science e Machine Learning
Apresentação - Minicurso de Introdução a Python, Data Science e Machine Learning
 
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
 
3.15.17 DSpace: How to Contribute Webinar Slides
3.15.17 DSpace: How to Contribute Webinar Slides3.15.17 DSpace: How to Contribute Webinar Slides
3.15.17 DSpace: How to Contribute Webinar Slides
 
An Introduction To Python - Python, Print()
An Introduction To Python - Python, Print()An Introduction To Python - Python, Print()
An Introduction To Python - Python, Print()
 
Linked Data: The Real Web 2.0 (from 2008)
Linked Data: The Real Web 2.0 (from 2008)Linked Data: The Real Web 2.0 (from 2008)
Linked Data: The Real Web 2.0 (from 2008)
 
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundNDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
 
Contributing to Open Source
Contributing to Open SourceContributing to Open Source
Contributing to Open Source
 
We’re Going Mobile! Great! Wait… What Does That Mean?
We’re Going Mobile! Great! Wait… What Does That Mean?We’re Going Mobile! Great! Wait… What Does That Mean?
We’re Going Mobile! Great! Wait… What Does That Mean?
 

Search-Driven Programming

  • 1. Search-driven programming and how to design your language for it
  • 2. Search-driven programming • Get an error? Copy and paste the error into Google. In milliseconds you often have the answer to what you did wrong • SDP is very fast and flow-friendly • Everyone these days knows programming is a pretty social and even collective activity • Surrender to the hive-mind! !
  • 3. But actually are many hive-minds • One hive per language / tool. • (To the extent that there is crossover across languages and tools that’s mostly called the standard CS curriculum.)
  • 4. Community intelligence: two measures • The old way: μ (average knowledge) • Whoever was nearest to you to talk about your problem • The SDP way: Σ (aggregate knowledge) • Google search sums the intelligence of a community
  • 5. A very big deal • In my opinion this is the biggest thing in human knowledge of the past 1000 years • But language designers haven’t noticed yet
  • 6. • A community has some programmers’ mistakes documented in Google-searchable space, often with solutions • No matter what you dumb thing you did with Ruby on Rails, there is someone on a blog or StackOverflow who already did it and posted a decent answer about how to fix it.
  • 7. So, a big community is one way to win
  • 9. Implications for language designers • Solved problems in Googledspace are part of what your language has to offer • Arguably the most heavily used ‘feature’ • More important than having a good Emacs mode or whatnot • Sadly this helps the incumbent languages
  • 10. • When you start your community will be tiny. • You need a community multiplier.
  • 11. • Attract prolix programmers. Exhibitionist hackers. • Your model here is mid 2000s Ruby community. So many presentations, so much blogging! • (Non-SDP benefit: the best lib wins much faster in a prolix community.) • How? Set a culture that attracts them. Write! Blog sloppily so that everyone feels like dashing off a quick, underedited post is 'what we do here’.
  • 12. What’s your dog whistle? • Get your naming unique - both the language's name and its libs • Maybe dream up a lib naming convention that makes this very likely • Python is your model. Numpy, SciPy, web.py, cherrypy, etc. Very Googeable. • Maybe have some misspelled prefix or suffix that implies your language • ex.“Hypreactive” “Escarpmeant”
  • 13. Design community boosting into the language • Or at least its tools • ex. when in ‘dev mode’, any error message / stack trace includes a URL that creates a blog post with that stack trace + context. Paste in the code you changed to provide the solution. • Or write something that can turn any git commit in your language into a blog post • Post-commit hook?
  • 14. • The iPython Notebook nbviewer is an early example of such a tool. • ex. http://nbviewer.ipython.org/gist/ fonnesbeck/2352771
  • 15. • It might work to establish a culture where the error message due to some bug that you are getting should go into git commit messages or pull request description. GitHub hides long messages but they are in the HTML :) • Here you are fighting the standards and culture of git and GitHub Less ambitious: cultural conventions
  • 16. The 1000X community multiplier dream • The goal: EVERY time someone fixes their bug, leave a trail in Googleable space that others can follow • Whatever new language makes this happen first is the new dominant language
  • 17. Questions worth asking • Why is there so much less sysadmin-ish stuff blogged and StackOverflow-ed, compared to programming-ish stuff? • (I think it’s cultural) • Could you make community tools first class citizens in your language? • If your editor is within a browser, you probably could and should do this