Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
COMMUNICATION
IS A TECHNICAL SKILL
Sarah Allen

@ultrasaurus
MAKING SOFTWARE FUN
MAKING SOFTWARE FUN
EXAMPLESSOCIAL CHANGE
BUSINESS
OPEN SOURCE
COMMUNICATION PATTERNS
1. BIG VISION
2. CONCRETE STEP
3. THE PATH
SOCIAL CHANGE
BRIDGE FOUNDRY
Bridge Foundry
Workshops
DIVERSE TEAM
CHILDCARE
FOOD
INSTALLFEST
DAY OF CODING
Bridge Foundry
Workshops
DIVERSE TEAM
CHILDCARE
FOOD
INSTALLFEST
DAY OF CODING
Bridge Foundry
Workshops
DIVERSE TEAM
CHILDCARE
FOOD
INSTALLFEST
DAY OF CODING
Bridge Foundry
Workshops
DIVERSE TEAM
CHILDCARE
FOOD
INSTALLFEST
DAY OF CODING
Bridge Foundry
Workshops
DIVERSE TEAM
CHILDCARE
FOOD
INSTALLFEST
DAY OF CODING
Bridge Foundry
Workshops
MOVING THE NEEDLE: HOW SF RUBY GOT TO 18% — SARAH MEI
BUSINESS
FIREBASE
"HELP DEVELOPERS
BUILD BETTER APPS
AND GROW
SUCCESSFUL
BUSINESSES"
James Tamplin
FIFTEEN MINUTES
DEVELOPER PRODUCTIVITY
YOUR PRODUCT IS NOT JUST YOUR CODE
DOCUMENTATION, WEBSITE,
BLOG
GITHUB
STACK OVERFLOW
SOCIAL MEDIA
CONFERENCE TALKS, MEETU...
MAKE PEOPLE
FEEL POWERFUL
Judy Tuan presenting
Firebase app: Mobile Graffiti
OPEN SOURCE
RACK
CHRISTIAN NEUKIRCHEN
HTTP://CHNEUKIRCHEN.ORG/BLOG/ARCHIVE/2007/02/INTRODUCING-RACK.HTML
8 minutes on
Rack
based on a presentation by
Dan Webb (dan@danwebb.net)
@danwrong
http://slidesha.re/dan_on_rack
A Convention
If you have a
Ruby object...
that has a call method which takes
one argument...
app.call(env)
and that method returns an array
with 3 elements...
[200, { 'Content-Type' => 'text/plain' }, 'Hello World!']
then you can connect it to any web
server that supports Rack
	 	 require 'thin'
	 	 Rack::Handler::Thin.run(app, :Port => ...
and you've got
yourself a web
application
That's it.
For Example...
app = Proc.new do |env|
	 [200, { 'Content-Type' => 'text/plain' },
	 	 'Hello World!']
end
require 'rubygems'
require 'th...
class HelloWorld
	 def initialize(name)
	 @name = name
	 end
	 def call(env)
	 	 [200, { 'Content-Type' => 'text/plain' },...
def call(env)
{
	 "SERVER_NAME"=>"localhost",
	 "HTTP_ACCEPT_ENCODING"=>"gzip,deflate",
	 "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U;...
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
Status Code
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
HTTP Headers
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
Response Body
Response body can be any
object that respond_to?(:each)
	 	 file = File.new('myfile.xml')
	 	 [200, { 'Content-Type' => 'a...
For Example...
class StreamingFile
	 def initialize(file)
	 	 @file = file
	 end
	 def length
	 	 File.size(@file)
	 end
	 def last_modif...
[200, {
	 'Content-Type' => 'audio/mp3',
	 'Content-Length' => file.length.to_s
}, file]
Common interface
• Passenger
• Mongrel
• CGI
• SCGI
• FastCGI
• Thin
• Ebb
• Fuzed
• Webrick
• Litespeed
Write once,
serve however...
Michael Basial: Light Bulb
https://www.flickr.com/photos/basial/3010044632/
WHAT WE DOCOMMUNICATION
ADOPTION OF LANGUAGES WITH NEW POWERS
ERLANG
CLOJURE
SCALA
GO
RUST
SWIFT
ELIXIR
ELM
FUNCTIONAL
ELIXIR ERLANG VM (2012)
ELM JAVASCRIPT (2012)
SCALA JAVA VM (2003)
CLOJURE JAVAVM (2007)
SWIFTiOS/Mac/Linux (20...
LEARN A NEW LANGUAGE
LEARN A NEW LANGUAGE
MAKE A NEW LANGUAGE
CODE IS
COMMUNICATION
WHAT WILL
YOU SAY?
PHOTO CREDITS
▸ 13) Isaiah van Hunen: Face (original 1)

https://www.flickr.com/photos/isaiah115/7301506118 

https://creat...
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Communication is a Technical Skill
Upcoming SlideShare
Loading in …5
×

Communication is a Technical Skill

2,082 views

Published on

Rocky Mountain Ruby 9/30/2016
I share stories and examples from open source, business and community organizing: how communication about what we do is as important as the work itself. I'll also dive into coding as communication with an example of good API design highlighting the expressiveness of the Ruby language.

Published in: Software
  • Be the first to comment

Communication is a Technical Skill

  1. 1. COMMUNICATION IS A TECHNICAL SKILL Sarah Allen
 @ultrasaurus
  2. 2. MAKING SOFTWARE FUN
  3. 3. MAKING SOFTWARE FUN
  4. 4. EXAMPLESSOCIAL CHANGE BUSINESS OPEN SOURCE
  5. 5. COMMUNICATION PATTERNS 1. BIG VISION 2. CONCRETE STEP 3. THE PATH
  6. 6. SOCIAL CHANGE BRIDGE FOUNDRY
  7. 7. Bridge Foundry Workshops
  8. 8. DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
  9. 9. DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
  10. 10. DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
  11. 11. DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
  12. 12. DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
  13. 13. MOVING THE NEEDLE: HOW SF RUBY GOT TO 18% — SARAH MEI
  14. 14. BUSINESS FIREBASE
  15. 15. "HELP DEVELOPERS BUILD BETTER APPS AND GROW SUCCESSFUL BUSINESSES" James Tamplin
  16. 16. FIFTEEN MINUTES DEVELOPER PRODUCTIVITY
  17. 17. YOUR PRODUCT IS NOT JUST YOUR CODE DOCUMENTATION, WEBSITE, BLOG GITHUB STACK OVERFLOW SOCIAL MEDIA CONFERENCE TALKS, MEETUPS, HACKATHONS,
  18. 18. MAKE PEOPLE FEEL POWERFUL Judy Tuan presenting Firebase app: Mobile Graffiti
  19. 19. OPEN SOURCE RACK
  20. 20. CHRISTIAN NEUKIRCHEN HTTP://CHNEUKIRCHEN.ORG/BLOG/ARCHIVE/2007/02/INTRODUCING-RACK.HTML
  21. 21. 8 minutes on Rack based on a presentation by Dan Webb (dan@danwebb.net) @danwrong http://slidesha.re/dan_on_rack
  22. 22. A Convention
  23. 23. If you have a Ruby object...
  24. 24. that has a call method which takes one argument... app.call(env)
  25. 25. and that method returns an array with 3 elements... [200, { 'Content-Type' => 'text/plain' }, 'Hello World!']
  26. 26. then you can connect it to any web server that supports Rack require 'thin' Rack::Handler::Thin.run(app, :Port => 4000)
  27. 27. and you've got yourself a web application
  28. 28. That's it.
  29. 29. For Example...
  30. 30. app = Proc.new do |env| [200, { 'Content-Type' => 'text/plain' }, 'Hello World!'] end require 'rubygems' require 'thin' Rack::Handler::Thin.run(app, :Port => 4000)
  31. 31. class HelloWorld def initialize(name) @name = name end def call(env) [200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"] end end require 'rubygems' require 'rack' Rack::Handler::Mongrel.run(HelloWorld.new("Dan"), :Port => 4000)
  32. 32. def call(env)
  33. 33. { "SERVER_NAME"=>"localhost", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en- GB; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4", "PATH_INFO"=>"/", "SCRIPT_NAME"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "HTTP_ACCEPT_LANGUAGE"=>"en-gb,en;q=0.5", "HTTP_HOST"=>"localhost:4000", "REMOTE_ADDR"=>"127.0.0.1", "HTTP_KEEP_ALIVE"=>"300", "REQUEST_PATH"=>"/", "SERVER_SOFTWARE"=>"thin 0.8.2 codename Double Margarita", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_URI"=>"/", "SERVER_PORT"=>"4000", "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.2", "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "HTTP_CONNECTION"=>"keep-alive", "REQUEST_METHOD"=>"GET" }
  34. 34. [200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"] Status Code
  35. 35. [200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"] HTTP Headers
  36. 36. [200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"] Response Body
  37. 37. Response body can be any object that respond_to?(:each) file = File.new('myfile.xml') [200, { 'Content-Type' => 'application/xml' }, file]
  38. 38. For Example...
  39. 39. class StreamingFile def initialize(file) @file = file end def length File.size(@file) end def last_modified File.mtime(@file).rfc822 end def each File.open(@file, "rb") do |file| while part = file.read(8192) yield part end File.delete(@file) end end
  40. 40. [200, { 'Content-Type' => 'audio/mp3', 'Content-Length' => file.length.to_s }, file]
  41. 41. Common interface
  42. 42. • Passenger • Mongrel • CGI • SCGI • FastCGI • Thin • Ebb • Fuzed • Webrick • Litespeed
  43. 43. Write once, serve however...
  44. 44. Michael Basial: Light Bulb https://www.flickr.com/photos/basial/3010044632/
  45. 45. WHAT WE DOCOMMUNICATION
  46. 46. ADOPTION OF LANGUAGES WITH NEW POWERS ERLANG CLOJURE SCALA GO RUST SWIFT ELIXIR ELM
  47. 47. FUNCTIONAL ELIXIR ERLANG VM (2012) ELM JAVASCRIPT (2012) SCALA JAVA VM (2003) CLOJURE JAVAVM (2007) SWIFTiOS/Mac/Linux (2014) HASKELL - 1990 ERLANG - 1986 ML - 1973 LISP - 1958 C - 1972 COBOL - 1959 FORTRAN - 1956 GO (2009) JAVA - 1995 C++ - 1983OBJECTIVE C - 1984 SMALLTALK - 1972 JAVASCRIPT - 1995 RUBY - 1995 IMPERATIVEOBJECT-ORIENTED RUST (2010)
  48. 48. LEARN A NEW LANGUAGE
  49. 49. LEARN A NEW LANGUAGE MAKE A NEW LANGUAGE
  50. 50. CODE IS COMMUNICATION
  51. 51. WHAT WILL YOU SAY?
  52. 52. PHOTO CREDITS ▸ 13) Isaiah van Hunen: Face (original 1)
 https://www.flickr.com/photos/isaiah115/7301506118 
 https://creativecommons.org/licenses/by-sa/2.0/ ▸ 14) photo by Lee Lundrigan ▸ 32) https://firebase.googleblog.com/2013/05/firebase-at-angelhack-sf-2013.html ▸ 64) Michael Basial: Light Bulb https://www.flickr.com/photos/basial/3010044632/ ▸ 66) Wizard: http://mortal-affairs.wikia.com/wiki/Wizards

×