Demo-driven research in Lugano

643 views

Published on

I used this set of slides for a lecture I gave for the PhD students from the University of Lugano on how to do research.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
643
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Demo-driven research in Lugano

  1. 1. Yogi Berra You’ve got to be careful if you do not know where you are going, because you might not get there.
  2. 2. demo- driven research www.tudorgirba.com
  3. 3. demo- driven research www.tudorgirba.com challenge design demo listen enable
  4. 4. research?
  5. 5. research improves the status quo
  6. 6. the status quo?
  7. 7. the status quo the existing state of affairs
  8. 8. Picture by _FXR
  9. 9. Picture by _FXR
  10. 10. Picture by _FXR F = m a.
  11. 11. E = m c. 2 Picture by _FXR
  12. 12. post-it
  13. 13. the status quo the existing state of affairs
  14. 14. the status quo the sum of our assumptions
  15. 15. Tom de Marco It’s not what you don’t know that kills you, it’s what you know that isn’t so
  16. 16. the status quo the sum of our assumptions
  17. 17. research revealing what no one revealed before
  18. 18. demo- driven research www.tudorgirba.com challenge
  19. 19. demo- driven research www.tudorgirba.com challenge design
  20. 20. demo- driven research www.tudorgirba.com challenge design
  21. 21. demo- driven research www.tudorgirba.com challenge design present
  22. 22. to Understand Software Evolution Modeling History vorgelegt von Tudor Gîrba von Rumänien Inauguraldissertation der Philosophisch-naturwissenschaftlichen Fakultät der Universität Bern Leiter der Arbeit: Prof. Dr. Stéphane Ducasse Prof. Dr. Oscar Nierstrasz Institut für Informatik und angewandte Mathematik
  23. 23. To provide a generic meta-model for expressing software evolution analyses, we need to recognize evolution as an explicit phenomenon and model it as a first class entity. to Understand Software Evolution Modeling History vorgelegt von Tudor Gîrba von Rumänien Inauguraldissertation der Philosophisch-naturwissenschaftlichen Fakultät der Universität Bern Leiter der Arbeit: Prof. Dr. Stéphane Ducasse Prof. Dr. Oscar Nierstrasz Institut für Informatik und angewandte Mathematik
  24. 24. tudorgirba.com/blog blog.duarte.com thebackofthenapkin.com
  25. 25. www.ted.com
  26. 26. content
  27. 27. content form
  28. 28. content form
  29. 29. content form
  30. 30. yesterday’s weather
  31. 31. 30%
  32. 32. 30% 90%
  33. 33. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1). yesterdayWeatherHits := 0. (2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'. previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i). previousVersionsTopHistories := OrderedCollection new. x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0. previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ]. last2VersionsTopHistories := OrderedCollection new. last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i).
  34. 34. valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ]. last2VersionsTopHistories := OrderedCollection new. last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories selectFromReferenceVersionCollection: last2Versions) sortBy: [:a :b | a value getWENM >= b value getWENM]. x := last2HistoriesSortedByENM first value getENM. valuesCount := 0. last2HistoriesSortedByENM do: [ :each | (each value getENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getENM]. (valuesCount < topCurrentENM) ifTrue: [ last2VersionsTopHistories addLast: each] ]. previousVersionsTopHistoriesNames := previousVersionsTopHistories collect: [ :each | each value name]. over := false. last2VersionsTopHistories do: [:each | ((previousVersionsTopHistoriesNames includes: (each value name)) and: [over not]) ifTrue: [ yesterdayWeatherHits := yesterdayWeatherHits + 1. over := true]. ]. ]. ^yesterdayWeatherHits/(self size - 1) asFloat.
  35. 35. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1). yesterdayWeatherHits := 0. (2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'. previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i). previousVersionsTopHistories := OrderedCollection new. x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0. previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ]. last2VersionsTopHistories := OrderedCollection new. last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i).
  36. 36. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1). yesterdayWeatherHits := 0. (2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'. previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i). previousVersionsTopHistories := OrderedCollection new. x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0. previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ]. last2VersionsTopHistories := OrderedCollection new. last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i).
  37. 37. present
  38. 38. present past
  39. 39. present past future
  40. 40. present past future
  41. 41. present past future
  42. 42. present past future prediction hit
  43. 43. present past future YesterdayWeatherHit(present): past:=all.topChanged(beginning, present) future:=all.topChanged(present, end) past.intersect(future).notEmpty() prediction hit
  44. 44. hit hit hit YW = 3 / 8 = 37% hit hit hit hit hit hit hit YW = 7 / 8 = 87%
  45. 45. yWFor: yesterdayCheck for: tomorrowCheck | hits | hits := (self detailedYWFor: yesterdayCheck for: tomorrowCheck) sum: [ :each | each isEmpty ifTrue: [0] ifFalse: [1]]. ^ hits / (self versions size - 2) yWFor: yesterdayCheck for: tomorrowCheck ^ ( 3 to: self versions size ) collect: [ :i | | yesterday tomorrow | yesterday := self selectByExpression: yesterdayCheck appliedFromVersionIndex: 1 toVersionIndexAndPresentInIt: i - 1. tomorrow := self selectByExpression: tomorrowCheck appliedFromVersionIndexAndPresentInIt: i - 1 toVersionIndex: self versions size. yesterday intersectWith: tomorrow ]
  46. 46. content form
  47. 47. content form
  48. 48. demo- driven research www.tudorgirba.com challenge design present
  49. 49. demo- driven research www.tudorgirba.com challenge design demo
  50. 50. demo- driven research www.tudorgirba.com challenge design demo
  51. 51. demo- driven research www.tudorgirba.com challenge design demo listen
  52. 52. Reviewers are never stupid
  53. 53. demo- driven research www.tudorgirba.com challenge design demo listen
  54. 54. demo- driven research www.tudorgirba.com challenge design demo listen enable
  55. 55. it’s not Lupus
  56. 56. established
  57. 57. established
  58. 58. disruptive established
  59. 59. What Where When Who How
  60. 60. What Where When Who How Why
  61. 61. demo- driven research www.tudorgirba.com challenge design demo listen enable
  62. 62. Tudor Gîrba www.tudorgirba.com creativecommons.org/licenses/by/3.0/

×