Those Who Know History are Doomed to Watch Others Repeat It

2,353 views
2,148 views

Published on

Mark Twain said that history doesn't repeat but that it often rhymes. This is true not only of the history of civilization but also of software development.

The history of computing, like anything, has recurring patterns, cycles, and trends. Some of them are quite large, others are tiny. Some are significant and others merely amusing. In this session we will look at some of these from the early days of ENIAC all the way to modern mobile phones. We will plot them out over the decades, observe their cycles, and come to understand them. Then, grounded in that history, we will explore some possible outcomes for the next few years and wax poetic about what the more distant future might bring.

If you want to know history and are willing to risk predicting the future, come and join us.

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

  • Be the first to like this

No Downloads
Views
Total views
2,353
On SlideShare
0
From Embeds
0
Number of Embeds
293
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Where I workWhat I doBackground - COBOL through Ruby - C++, Java, & JavaScript
  • There’s no proof that Mark Twain said this… but so what!He who doesn’t know history is doomed to repeat it Not if you do x then y happens, so don’t do x Instead it given us insight into the present I’ve seen this movie before storyImma show you some instances of history rhyming that I have encountered in my careerAnd like Mark Twain, I might offend you with the truth.
  • This might seem a bit offensive if you’re a Java developer. After all..
  • COBOL is not well regarded in general
  • …and is openly mocked. Of course, this is true of Java as well…
  • Of course, this is true of Java as well.
  • But, they are used by the same customers
  • And the companies that own them view them in the same way
  • But, they have a similar architecture as well, at least in as much as how they are implemented. Let’s look at a simple problem. Validate contact information including name, address, home, and cell phone numbers.
  • Java has classes - typically written as something that ends in –er or –or - typically has a single entry point (execute, run, invoke, doIt) - subdivided into private helper method
  • COBOL has programs - single entry point - args in, args out - subdivided into paragraphs
  • Data is typically represented in java using beans
  • Data is represented using a hierarchical notation and stored in copybooksHard to build a diagram for this, easier to show the codeBut the structure is the same, with a little redundancyHowever…
  • The COBOL code, know for it’s verbosity is actually shorter.
  • Observations – Java and COBOL code are about the same size COBOL code has a smidgeon or redundancyOtherwise, they are pretty much the same
  • I know this is procedural code. There are better ways to write Java. But, this is how most Java is written and, in all fairness, it’s a useful metaphor.After all, what are we automating? Business processes. What did we do before we had automation?Papers moved about.
  • Node is cool. Wicked fast Uses JavaScript Scales like crazy How does it do that?
  • Typical environments are multi-threaded… like Java-- often blocked waiting on IO and shared memory-- thread are managed in pools-- some threads are blocked waiting on threads from the pool-- and don’t forget shared memory
  • Node has one thread, just oneDoesn’t block on IO, does it asynchronouslyEvents are propagated when the IO completes, or when the user fires oneThis makes one-thread really busy but eliminates all shared memory and all the overheadThere is another platform that worked this way…
  • Windows was famously single-processed single-threadedAt the core of windows is an event loop, just like in NodeApplications responded to these events and triggered code, blocking other applicationsThere was even a wonderful shared memory space.. Which was a lot of fun since apps were written in C and memory leaks/buffer overruns were a problemWordPerfect could crash Minesweeper
  • First off, I don’t think we are aware we’re doing it, at least not all of us, I think it just happens.What I mean is, why can’t we see that we’ve ripped of the past?Arrogance & Ignorance
  • Our culture, our era, our generation are enlightened It’s easy to call someone foolish for thinking the earth is flat, the sun circles the earth, and you’ll never need more than 640k of memory. But, given the time period those were reasonable conclusions earth looks flat suns looks like it circles the earth and 640k… well that was stupid People in past has the same brain as you, I tell my son that we are cave men
  • Want a cure for that, read Meditations by Marcus Aurelius
  • 2nd Century BCOr read Polybius’s Histories… in there is both a cure for arrogance and I description of ignorance
  • Built upon ideas by Plato AristotleTri-state cycleAristocracy is made up of the wise folksUltimately, 1 some or all
  • People forget A by the time they get to C…-- except for that old man who everyone ignores
  • Prediction:Swarming is gonna be a thing…
  • This one’s a little different but it still has the three statesClient – all computers, islands of dataClient Server – Some of the computers, share that dataServer – one computer, all the data’s in one placeTechnology snaps to client computing when hardware/cost inovation makes something possible -> Moore’s law in effectThe hardware is interesting in this one so I wanted to explore this one more so I made chart
  • Look at the bottom…. Dollars,size, trendLearn the arduino, the pi, and stuff like that…What’s the point?
  • Mark Twain did actually say thisIt’s a lost cause… history will move where it moves because humans are broken, fallen creaturesTurns out, the title of this talk isn’t just crass, it’s also true
  • I don’t believe that we can change these trends, they are bigger than us and they come from us in aggregate.But, we can see them coming and position ourselves well so that we can survive and thrive.
  • Where I workWhat I doBackground - COBOL through Ruby - C++, Java, & JavaScript
  • Those Who Know History are Doomed to Watch Others Repeat It

    1. 1. Those Who Know History Are Doomed to Watch Others Repeat It
    2. 2. Who Is This Guy? Guy Royse, Consultant Pillar Technology guy@guyroyse.com @guyroyse
    3. 3. “History doesn’t repeat itself, but it often rhymes” —Mark Twain
    4. 4. Java is the New COBOL
    5. 5. Completely Obsolete Business Oriented Language
    6. 6. A Simple Problem
    7. 7. Java Class Diagram AddressValidator booleanvalidate(Address) ContactValidator booleanvalidate(Contact) PhoneValidator booleanvalidate(Phone)
    8. 8. COBOL System Diagram ADDRESS-VALIDATOR CONTACT-VALIDATOR PHONE-VALIDATOR
    9. 9. Java Data Structures Phone String areaCode String exchange String number Contact String name Address address Phone cell Phone home Address String street String city String state String zipCode
    10. 10. COBOL Data Structures 01 10 CN-CONTACT. 05 CN-NAME PIC 05 CN-ADDRESS. 10 CN-ADDR-STREET PIC 10 CN-ADDR-CITY PIC 10 CN-ADDR-STATE PIC 10 CN-ADDR-ZIP-CODE PIC 05 CN-HOME-PHONE. 10 CN-HOME-AREA-CD PIC 10 CN-HOME-EXCHANGE PIC 10 CN-HOME-NUMBER PIC 05 CN-CELL-PHONE. CN-CELL-AREA-CD PIC 9(3). 10 CN-CELL-EXCHANGE PIC 10 CN-CELL-NUMBER PIC X(40). X(30). X(20). X(2). X(5). 9(3). 9(3). 9(4). 9(3). 9(4).
    11. 11. public class Contact { private String name; private Phone home; private Phone cell; private Address address; 01 05 10 CN-CONTACT. 05 CN-NAME PIC CN-ADDRESS. 10 CN-ADDR-STREET PIC 10 CN-ADDR-CITY PIC 10 CN-ADDR-STATE PIC 10 CN-ADDR-ZIP-CODE PIC 05 CN-HOME-PHONE. 10 CN-HOME-AREA-CD PIC 10 CN-HOME-EXCHANGE PIC 10 CN-HOME-NUMBER PIC 05 CN-CELL-PHONE. CN-CELL-AREA-CD PIC 9(3). 10 CN-CELL-EXCHANGE PIC 10 CN-CELL-NUMBER PIC X(40). X(30). X(20). X(2). X(5). 9(3). 9(3). 9(4). public String getName() { return name; } public void setName(String name) { this.name = name; } ... more setters and getters here ... } public class Phone { private String areaCode; private String exchange; private String number; ... setters and getters here ... 9(3). 9(4). } public class Address { private String street; private String city; private String state; private String zipCode; ... setters and getters here ... }
    12. 12. IDENTIFICATION DIVISION. PROGRAM-ID. CONTACT-VALIDATOR. public class ContactValidator { private PhoneValidatorphoneValidator = new PhoneValidator(); private AddressValidatoraddrValidator = new AddressValidator(); PROCEDURE DIVISION USING CN-IS-VALID, CN-CONTACT. MAIN-LINE. PERFORM VALIDATE-NAME. CALL ADDRESS-VALIDATOR USING CN-ADDRESS, WS-ADDRESS-IS-VALID. CALL PHONE-VALIDATOR USING CN-HOME-PHONE, WS-HOME-PH-IS-VALID CALL PHONE-VALIDATOR USING CN-CELL-PHONE, WS-CELL-PH-IS-VALID. PERFORM DETERMINE-IF-VALID. GOBACK. VALIDATE-NAME. MOVE ‘Y’ TO WS-NAME-IS-VALID. IF CN-NAME IS SPACES MOVE ‘N’ TO WS-NAME-IS-VALID. public booleanvalidate(Contactcntct) { boolean valid = validateName(cntct.getName()); valid &= addrValidator.validate( cntct.getAddress()); valid &= phoneValidator.validate( cntct.getHome()); valid &= phoneValidator.validate( cntct.getCell()); return valid; DETERMINE-IF-VALID. MOVE ‘N’ to CN-IS-VALID. IF WS-NAME-IS-VALID IS ‘Y’ AND WS-HOME-PH-IS-VALID IS ‘Y’ AND WS-CELL-PH-IS-VALID IS ‘Y’ AND WS-ADDRESS-IS-VALID IS ‘Y’ MOVE ‘Y’ TO CN-IS-VALID. } private void validateName(String name) { return !StringUtils.isEmpty(name); } }
    13. 13. Automating the Process
    14. 14. Node is Single-Threaded
    15. 15. So Why Do We Keep Reinventing the Past and Calling it the Future?
    16. 16. People in the Past Were Dumb
    17. 17. “I’m just a cave man. Your world frightens and confuses me.”
    18. 18. “Look back over the past, with its changing empires that rose and fell, and you can foresee the future too.” ― Marcus Aurelius, Meditations
    19. 19. “If history is deprived of the Truth, we are left with nothing but an idle, unprofitable tale.” ― Polybius, The Rise of the Roman Empire
    20. 20. Anacyclosis Autocracy Democracy Aristocracy
    21. 21. Basic Cycle A C B
    22. 22. How Projects Run Single Manager Whole Team Leadership Team
    23. 23. How We Code Solo Coder Swarm Pairing
    24. 24. How We Design Applications Client Server Client Server
    25. 25. The 40s and 50s
    26. 26. Computing Timeline 40s & 50s 60s & 70s 80s 90s Server-side UNIVAC Z3 Mark 1 ENIAC Client-side 2000s 2010s ???
    27. 27. The 60s and 70s
    28. 28. Computing Timeline 40s & 50s 60s & 70s 80s 90s Server-side CICS Terminals Teletypes Mainframes UNIX UNIVAC Z3 Mark 1 ENIAC Client-side 2000s 2010s ???
    29. 29. The Late 70s
    30. 30. Computing Timeline 40s & 50s 60s & 70s 80s 90s Server-side CICS Terminals Teletypes Mainframes UNIX UNIVAC Z3 Mark 1 Early PCs ENIAC Client-side 2000s 2010s ???
    31. 31. The 80s
    32. 32. Computing Timeline 40s & 50s 60s & 70s 80s 90s Server-side CICS Terminals Teletypes Mainframes UNIX UNIVAC Z3 Mark 1 ENIAC Early PCs PCs Client-side 2000s 2010s ???
    33. 33. The 90s
    34. 34. Computing Timeline 40s & 50s 60s & 70s 80s 90s Server-side Browser CICS Terminals Teletypes Mainframes UNIX Internet Client Server UNIVAC Z3 Mark 1 ENIAC Early PCs PCs Client-side 2000s 2010s ???
    35. 35. In The Year 2000
    36. 36. Computing Timeline 40s & 50s 60s & 70s 80s 90s 2000s Server-side Browser CICS Terminals Teletypes Mainframes UNIX Internet Client Server UNIVAC Z3 Mark 1 ENIAC AJAX Early PCs Mobile PCs Client-side 2010s ???
    37. 37. 2010s
    38. 38. Computing Timeline 40s & 50s 60s & 70s 80s 90s 2000s 2010s Server-side Cloud Browser CICS Terminals Teletypes HTML5 Mainframes UNIX Internet Client Server UNIVAC Z3 Mark 1 ENIAC AJAX Pi Early PCs Mobile PCs Client-side ???
    39. 39. Computing Timeline 40s & 50s 60s & 70s 80s 90s 2000s 2010s ??? Server-side Cloud Browser CICS Terminals Teletypes HTML5 Mainframes UNIX Internet Client Server UNIVAC Z3 Mark 1 ENIAC AJAX Pi Early PCs Mobile PCs ? Client-side
    40. 40. “It is not worthwhile to try to keep history from repeating itself, for man's character will always make the preventing of the repetitions impossible.” — Mark Twain
    41. 41. Guy Royse, Consultant Pillar Technology guy@guyroyse.com @guyroyse

    ×