Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pop Culture, The Pendulum and Progress

Pop Culture, The Pendulum and Progress

How does software progress? What does progression even mean in the context of software? There is no shortage of change, but how do you tell if something is better, or simply newer? To find answers we'll look at pop culture, the scientific research process, and some very old ideas in computing.

Jamison Dance

September 16, 2016
Tweet

More Decks by Jamison Dance

Other Decks in Programming

Transcript

  1. A view of science wrong and dumb people had ideas

    smart person discovers the truth beginning of time now
  2. –Thomas S. Kuhn “The successive transition from one paradigm to

    another via revolution is the usual developmental pattern of mature science.”
  3. –Tommy Kuhn “The successive transition from one paradigm to another

    via revolution is the usual developmental pattern of mature science.”
  4. Programming R. Morris Techniques Editor On the Criteria To Be

    Used in Decomposing Systems into Modules D.L. Parnas Carnegie-Mellon University This paper discusses modularization as a mechanism for improving the flexibility and comprehensibility of a system while allowing the shortening of its development time. The effectiveness of a "modularization" is dependent upon the criteria used in dividing the system into modules. A system design problem is presented and both a conventional and unconventional decomposition are described. It is shown that the unconventional decompositions have distinct advantages for the goals outlined. The criteria used in arriving at the decom- positions are discussed. The unconventional decomposi- tion, if implemented with the conventional assumption that a module consists of one or more subroutines, will be less efficient in most cases. An alternative approach to implementation which does not have this effect is sketched. Key Words and Phrases: software, modules, modularity, software engineering, KWIC index, software design CR Categories: 4.0 Introduction A lucid statement of the philosophy of modular programming can be found in a 1970 textbook on the design of system programs by Gouthier and Pont [1, ¶I0.23], which we quote below: 1 A well-defined segmentation of the project effort ensures system modularity. Each task forms a separate, distinct program module. At implementation time each module and its inputs and outputs are well-defined, there is no confusion in the intended interface with other system modules. At checkout time the in- tegrity of the module is tested independently; there are few sche- duling problems in synchronizing the completion of several tasks before checkout can begin. Finally, the system is maintained in modular fashion; system errors and deficiencies can be traced to specific system modules, thus limiting the scope of detailed error searching. Usually nothing is said about the criteria to be used in dividing the system into modules. This paper will discuss that issue and, by means of examples, suggest some criteria which can be used in decomposing a system into modules. Copyright @ 1972, Association for Computing Machinery, Inc. General permission to republish, but not for profit, all or part of this material is granted, provided that reference is made to this publication, to its date of issue, and to the fact that reprinting privileges were granted by permission of the Association for Com- puting Machinery. Author's address: Department of Computer Science, Carnegie- Mellon University, Pittsburgh, PA 15213. 1053 A Brief Status Report The major advancement in the area of modular programming has been the development of coding techniques and assemblers which (l) allow one module to be written with little knowledge of the code in another module, and (2) allow modules to be reas- sembled and replaced without reassembly of the whole system. This facility is extremely valuable for the production of large pieces of code, but the systems most often used as examples of problem systems are highly- modularized programs and make use of the techniques mentioned above. 1 Reprinted by permission of Prentice-Hall, Englewood Cliffs, N.J. Communications December 1972 of Volume 15 the ACM Number 12
  5. “The KWIC index system accepts a list of lines, and

    each line is a list of words. Any line may be "circularly shifted" by repeatedly removing the first word and appending it at the end of the line. The KWIC index system outputs a listing of all circular shifts of all lines in alphabetical order.
  6. This is a small system. Except under extreme circumstances (huge

    data base, no supporting software), such a system could be produced by a good programmer within a week or two.”
  7. function KWIC(lines) { return lines.map(circularShift) .reduce(function(m, lines) { return m.concat(lines)

    }, []) .sort() } function circularShift(l) { return l.split(' ').reduce(function(m, _, i, words) { if (!m.words) m.words = words m.words.push(m.words.shift()) m.res.push(m.words.join(' ')) return m }, {res: []}).res }
  8. - “[Computing is] complete pop culture. [P]op culture holds a

    disdain for history. Pop culture is all about identity and feeling like you're participating. It has nothing to do with cooperation, the past or the future — it's living in the present. I think the same is true of most people who write code for money. They have no idea where [their culture came from] — and the Internet was done so well that most people think of it as a natural resource like the Pacific Ocean, rather than something that was man-made. When was the last time a technology with a scale like that was so error-free? The Web, in comparison, is a joke. The Web was done by amateurs.”
  9. - “[I]n the old days, if you reinvented the wheel,

    you would get your wrist slapped for not reading. But nowadays people are reinventing the flat tire. I'd personally be happy if they reinvented the wheel, because at least we'd be moving forward.”
  10. –Why “I’ll be straight with you. I want you to

    cry. To weep. To whimper sweetly. This book is a poignant guide to Ruby. That means code so beautiful that tears are shed. That means gallant tales and somber truths that have you waking up the next morning in the arms of this book. Hugging it tightly to you all the day long. If necessary, fashion a makeshift hip holster for Why’s (Poignant) Guide to Ruby, so you can always have this book’s tender companionship.”
  11. References • https://github.com/FormidableLabs/react-game-kit • http://www.repl-electric.com/ • http://www.drdobbs.com/architecture-and-design/interview-with-alan-kay/240003442 • https://www.instagram.com/hedgehog_azuki/ •

    http://poignant.guide/ • https://bitquabit.com/post/the-more-things-change/ • https://www.nngroup.com/articles/law-of-bandwidth/ • https://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf • https://www.levelframes.com/collections/amanda-glosson-collection/bonsai • https://www.amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/0226458083 • http://worrydream.com/EarlyHistoryOfSmalltalk/ • http://www.ams.org/journals/tran/1969-146-00/S0002-9947-1969-0253905-6/S0002-9947-1969-0253905-6.pdf