Your SlideShare is downloading. ×
0
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Spoiling The Youth With Ruby (Euruko 2010)

4,309

Published on

Slides from EURUKO 2010 talk about sharing experiences from teaching introductory courses to programming.

Slides from EURUKO 2010 talk about sharing experiences from teaching introductory courses to programming.

Published in: Technology
1 Comment
8 Likes
Statistics
Notes
  • Liked the quotes given too
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
4,309
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
Comments
1
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Spoiling The Youth With Ruby EURUKO 2010 Karel Minařík
  2. Karel Minařík → Independent web designer and developer („Have Ruby — Will Travel“) → Ruby, Rails, Git and CouchDB propagandista in .cz → Previously: Flash Developer; Art Director; Information Architect;… (see LinkedIn) → @karmiq at Twitter → karmi.cz Spoiling the Youth With Ruby
  3. I have spent couple of last years introducing spoiling humanities students to with the basics of PR0GR4MM1NG. (As a PhD student) I’d like to share why and how I did it. And what I myself have learned in the process. Spoiling the Youth With Ruby
  4. I don’t know if I’m right. Spoiling the Youth With Ruby
  5. But a bunch of n00bz was able to: ‣ Do simple quantitative text analysis (count number of pages, etc) ‣ Follow the development of a simple Wiki web application and write code on their own ‣ Understand what $ curl ‐i ‐v http://example.com does ‣ And were quite enthusiastic about it 5 in 10 have „some experience“ with HTML 1 in 10 have „at last minimal experience“ with programming (PHP, C, …) Spoiling the Youth With Ruby
  6. ΓΝΩΘΙ ΣΕΑΥΤΟN Socrates
  7. Socrates is guilty of spoling the youth (ἀδικεῖν τούϛ τε νέουϛ διαφθείροντα) and not acknowledging the gods that the city does, but some other new divinities (ἓτερα δὲ δαιμόνια καινά). — Plato, Apology, 24b9 Spoiling the Youth With Ruby
  8. Some of our city DAIMONIA: Students should learn C or Java or Lisp… Web is for hobbyists… You should write your own implementation of quick sort… Project management is for „managers“… UML is mightier than Zeus… Design patterns are mightier than UML… Test-driven development is some other new divinity… Ruby on Rails is some other new divinity… NoSQL databases are some other new divinities… (etc ad nauseam) Spoiling the Youth With Ruby
  9. Programming is a specific way of thinking. Spoiling the Youth With Ruby
  10. 1 Why Teach Programming (to non-programmers)? Spoiling the Youth With Ruby
  11. „To use a tool on a computer, you need do little more than point and click; to create a tool, you must understand the arcane art of computer programming“ — John Maeda, Creative Code Spoiling the Youth With Ruby
  12. Literacy (reading and writing) Spoiling the Youth With Ruby
  13. Spoiling the Youth With Ruby
  14. Spoiling the Youth With Ruby
  15. Complexity
  16. „Hack“
  17. Literacy To most of my students, this: File.read('pride_and_prejudice.txt'). split(' '). sort. uniq is an ultimate, OMG this is soooooo cool hack Although it really does not „work“ that well. That’s part of the explanation. Spoiling the Youth With Ruby
  18. 2 Ruby as an „Ideal” Programming Language? Spoiling the Youth With Ruby
  19. There are only two hard things in Computer Science: cache invalidation and naming things. — Phil Karlton Spoiling the Youth With Ruby
  20. The limits of my language mean the limits of my world (Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt) — Ludwig Wittgenstein, Tractatus Logico-Philosophicus 5.6 Spoiling the Youth With Ruby
  21. Ruby as an „Ideal” Programming Language? We use Ruby because it’s… Expressive Flexible and dynamic Not tied to a specific paradigm Well designed (cf. Enumerable) Powerful (etc ad nauseam) Spoiling the Youth With Ruby
  22. All those reasons are valid for didactic purposes as well. Spoiling the Youth With Ruby
  23. Ruby as an „Ideal” Programming Language? Of course… not only Ruby… Spoiling the Youth With Ruby
  24. Ruby as an „Ideal” Programming Language? www.headfirstlabs.com/books/hfprog/ Spoiling the Youth With Ruby
  25. www.ericschmiedl.com/hacks/large-256.html http://mit.edu/6.01 http://news.ycombinator.com/item?id=530605
  26. Ruby as an „Ideal” Programming Language? 5.times do   print "Hello. " end Spoiling the Youth With Ruby
  27. Ruby as an „Ideal” Programming Language? Let’s start with the basics... Spoiling the Youth With Ruby
  28. An algorithm is a sequence of well defined and finite instructions. It starts from an initial state and terminates in an end state. — Wikipedia Spoiling the Youth With Ruby
  29. Algorithms and kitchen recipes 1. Pour oil in the pan 2. Light the gas 3. Take some eggs 4. ... Spoiling the Youth With Ruby
  30. SIMPLE ALGORITHM EXAMPLE Finding the largest number from unordered list 1. Let’s assume, that the first number in the list is the largest. 2. Let’s look on every other number in the list, in succession. If it’s larger then previous number, let’s write it down. 3. When we have stepped through all the numbers, the last number written down is the largest one. http://en.wikipedia.org/wiki/Algorithm#Example Spoiling the Youth With Ruby
  31. Finding the largest number from unordered list FORMAL DESCRIPTION IN ENGLISH Input: A non‐empty list of numbers L Output: The largest number in the list L largest ← L0 for each item in the list L≥1, do   if the item > largest, then     largest ← the item return largest Spoiling the Youth With Ruby
  32. Finding the largest number from unordered list DESCRIPTION IN PROGRAMMING LANGUAGE C 1 #include <stdio.h> 2 #define SIZE 11 3 int main() 4 { 5   int input[SIZE] = {1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19}; 6   int largest = input[0]; 7   int i; 8   for (i = 1; i < SIZE; i++) { 9     if (input[i] > largest) 10       largest = input[i]; 11   } 12   printf("Largest number is: %dn", largest); 13   return 0; 14 } Spoiling the Youth With Ruby
  33. Finding the largest number from unordered list DESCRIPTION IN PROGRAMMING LANGUAGE Java 1 class MaxApp { 2   public static void main (String args[]) { 3     int[] input = {1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19}; 4     int largest = input[0]; 5     for (int i = 0; i < input.length; i++) { 6       if (input[i] > largest) 7         largest = input[i]; 8     } 9     System.out.println("Largest number is: " + largest + "n"); 10   } 11 } Spoiling the Youth With Ruby
  34. Finding the largest number from unordered list DESCRIPTION IN PROGRAMMING LANGUAGE Ruby 1 input = [1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19] 2 largest = input.first 3 input.each do |i| 4   largest = i if i > largest 5 end 6 print "Largest number is: #{largest} n" Spoiling the Youth With Ruby
  35. Finding the largest number from unordered list 1 input = [1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19] 2 largest = input.first 3 input.each do |i| 4   largest = i if i > largest 5 end 6 print "Largest number is: #{largest} n" largest ← L0 for each item in the list L≥1, do if the item > largest, then largest ← the item return largest Spoiling the Youth With Ruby
  36. What can we explain with this example? ‣ Input / Output ‣ Variable ‣ Basic composite data type: an array (a list of items) ‣ Iterating over collection ‣ Block syntax ‣ Conditions # find_largest_number.rb ‣ String interpolation input = [3, 6, 9, 1] largest = input.shift input.each do |i| largest = i if i > largest end print "Largest number is: #{largest} n" Spoiling the Youth With Ruby
  37. That’s... well, basic... Spoiling the Youth With Ruby
  38. BUT, YOU CAN EXPLAIN ALSO… The concept of a function (method)…   # Function definition:   def max(input)     largest = input.shift     input.each do |i|       largest = i if i > largest     end     return largest   end   # Usage:   puts max( [3, 6, 9, 1] )   # => 9 Spoiling the Youth With Ruby
  39. BUT, YOU CAN EXPLAIN ALSO… … the concept of polymorphy def max(*input)   largest = input.shift   input.each do |i|     largest = i if i > largest   end   return largest end # Usage puts max( 4, 3, 1 ) puts max( 'lorem', 'ipsum', 'dolor' ) puts max( Time.mktime(2010, 1, 1),           Time.now,           Time.mktime(1970, 1, 1) ) puts max( Time.now, 999 ) #=> (ArgumentError: comparison of Fixnum with Time failed) Spoiling the Youth With Ruby
  40. BUT, YOU CAN EXPLAIN ALSO… … that you’re doing it wrong — most of the time :) # Enumerable#max puts [3, 6, 9, 1].max Spoiling the Youth With Ruby
  41. WHAT I HAVE LEARNED Pick an example and stick with it Switching contexts is distracting What’s the difference between “ and ‘ quote? What does the @ mean in a @variable ? „OMG what is a class and an object?“ Spoiling the Youth With Ruby
  42. Interactive Ruby console at http://tryruby.org "hello".reverse [1, 14, 7, 3].max ["banana", "lemon", "ananas"].size ["banana", "lemon", "ananas"].sort ["banana", "lemon", "ananas"].sort.last ["banana", "lemon", "ananas"].sort.last.capitalize 5.times do   print "Hello. " end Spoiling the Youth With Ruby
  43. Great „one-click“  installer for Windows Spoiling the Youth With Ruby
  44. Great resources, available for free www.pine.fm/LearnToProgram (first edition) Spoiling the Youth With Ruby
  45. Like, tooootaly excited! Why’s (Poignant) Guide To Ruby Spoiling the Youth With Ruby
  46. Ruby will grow with you („The Evolution of a Ruby Programmer“) 1 def sum(list) total = 0 4 def sum(list) total = 0 for i in 0..list.size-1 list.each{|i| total += i} total = total + list[i] total end end total end 5 def sum(list) list.inject(0){|a,b| a+b} 2 def sum(list) end total = 0 list.each do |item| 6 class Array total += item def sum end inject{|a,b| a+b} total end end end 3 def test_sum_empty sum([]) == 0 7 describe "Enumerable objects should sum themselve end it 'should sum arrays of floats' do [1.0, 2.0, 3.0].sum.should == 6.0 # ... end # ... end # ... www.entish.org/wordpress/?p=707 Spoiling the Youth With Ruby
  47. WHAT I HAVE LEARNED If you’re teaching/training, try to learn something you’re really bad at. ‣ Playing a musical instrument ‣ Drawing ‣ Dancing ‣ Martial arts ‣ … It gives you the beginner’s perspective Spoiling the Youth With Ruby
  48. 3 Web as a Platform Spoiling the Youth With Ruby
  49. 20 09 www.shoooes.net
  50. 20 09 R.I.P. www.shoooes.net
  51. But wait! Almost all of us are doing web applications today. Spoiling the Youth With Ruby
  52. Why web is a great platform? Transparent: view-source all the way Simple to understand Simple and free development tools Low barrier of entry Extensive documentation Rich platform (HTML5, „jQuery“, …) Advanced development platforms (Rails, Django, …) Ubiquitous (etc ad nauseam) Spoiling the Youth With Ruby
  53. All those reasons are valid for didactic purposes as well. Spoiling the Youth With Ruby
  54. CODED LIVE IN CLASS, THEN CLEANED UP AND PUT ON GITHUB http://github.com/stunome/kiwi/ Spoiling the Youth With Ruby
  55. Why a Wiki? Well known and understood piece of software with minimal and well defined feature set (www.c2.com/cgi/wiki?WikiPrinciples) Used on a daily basis (Wikipedia) Feature set could be expanded based on individual skills Spoiling the Youth With Ruby
  56. 20 10 Sinatra.rb www.sinatrarb.com Spoiling the Youth With Ruby
  57. Sinatra.rb Why choose Sinatra? Expose HTTP! GET / → get("/") { ... } Simple to install and run $ ruby myapp.rb Simple to write „Hello World“ applications Spoiling the Youth With Ruby
  58. Expose HTTP $ curl --include --verbose http://www.example.com * About to connect() to example.com port 80 (#0) * Trying 192.0.32.10... connected * Connected to example.com (192.0.32.10) port 80 (#0) > GET / HTTP/1.1 ... < HTTP/1.1 200 OK ... < <HTML> <HEAD> <TITLE>Example Web Page</TITLE> ... * Closing connection #0 Spoiling the Youth With Ruby
  59. Expose HTTP # my_first_web_application.rb require 'rubygems' require 'sinatra' get '/' do "Hello, World!" end get '/time' do Time.now.to_s end Spoiling the Youth With Ruby
  60. First „real code“ — saving pages  .gitignore       |    2 ++  application.rb   |   22 ++++++++++++++++++++++  views/form.erb   |    9 +++++++++  views/layout.erb |   12 ++++++++++++  4 files changed, 45 insertions(+), 0 deletions(‐) http://github.com/stunome/kiwi/commit/33fb87 Spoiling the Youth With Ruby
  61. Refactoring code to OOP (Page class)  application.rb |    4 +++‐  kiwi.rb        |    7 +++++++  2 files changed, 10 insertions(+), 1 deletions(‐) http://github.com/stunome/kiwi/commit/33fb87 Spoiling the Youth With Ruby
  62. Teaching real-world processes and tools www.pivotaltracker.com/projects/74202 Spoiling the Youth With Ruby
  63. Teaching real-world processes and tools http://github.com/stunome/kiwi/ Spoiling the Youth With Ruby
  64. The difference between theory and practice is bigger in practice then in theory. (Jan L. A. van de Snepscheut or Yogi Berra, paraphrase) Spoiling the Youth With Ruby
  65. What I had no time to cover (alas) Automated testing and test-driven development Cucumber Deployment (Heroku.com) Spoiling the Youth With Ruby
  66. What would be great to have A common curriculum for teaching Ruby (for inspiration, adaptation, discussion, …) Code shared on GitHub TeachingRuby (RailsBridge) (http://teachingkids.railsbridge.org) Try Camping (http://github.com/judofyr/try-camping) http://testfirst.org ? Spoiling the Youth With Ruby
  67. Questions! 

×