Communication is a Technical Skill

1,571 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
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,571
On SlideShare
0
From Embeds
0
Number of Embeds
1,085
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×