{"id":993,"date":"2019-12-01T09:00:00","date_gmt":"2019-12-01T08:00:00","guid":{"rendered":"http:\/\/cmagazine.test\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/"},"modified":"2021-12-23T15:32:08","modified_gmt":"2021-12-23T14:32:08","slug":"concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/","title":{"rendered":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today"},"content":{"rendered":"<p><strong><span id=\"urn:batch-analysis-85e99c12-9d61-42d2-a65e-abfa4c7d0296\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/douglas_crockford\">Douglas Crockford<\/span><\/strong> describes himself as <strong>the Godfather of <span id=\"urn:batch-analysis-ce3c71be-5f5e-4fe9-8dfc-bd3cf830c502\" class=\"textannotation disambiguated wl-no-link wl-creative work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">JavaScript<\/span><\/strong>. When I saw he was giving the main keynote at <strong>Codemotion Amsterdam<\/strong>, I knew we were in for an interesting talk, and I wasn\u2019t disappointed. Rather than talk about <span id=\"urn:batch-analysis-bfc50bba-5174-464b-a0c5-2574f20c8070\" class=\"textannotation disambiguated wl-no-link wl-creative work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">JavaScript<\/span>, Douglas chose to concentrate on a more fundamental aspect of coding, namely <strong>modularity<\/strong>.<\/p>\n<p>Douglas began by taking us back in time to October 1968 and the NATO Software Engineering Conference, held in Garmisch, Germany. This was notable as it was the first use of \u2018<a href=\"https:\/\/www.codemotion.com\/magazine\/interview-with-dave-farley-4849\">software engineering<\/a>\u2019. In the conference report, they identified a key problem, which they dubbed the Software Crisis.<\/p>\n<p>According to <span id=\"urn:batch-analysis-63c87f1a-0e6e-4375-b86c-77665b5719cc\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/wikipedia\">Wikipedia<\/span>, this crisis was characterised by:<\/p>\n<ul>\n<li><span id=\"urn:batch-analysis-5411e98f-cbfe-4657-bf6b-cfb577a3e886\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">Projects<\/span> running over-budget<\/li>\n<li><span id=\"urn:batch-analysis-659f1165-888f-40f4-9311-1fc995a6122f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">Projects<\/span> running over-time<\/li>\n<li><span id=\"urn:batch-analysis-fabab858-29d2-4caa-b67d-d70e18d6f4a6\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">Software<\/span> was very inefficient<\/li>\n<li><span id=\"urn:batch-analysis-dd4e7690-842c-4fc2-a2e4-e25a7b5b9fb7\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">Software<\/span> was of low quality<\/li>\n<li>Software often did not meet requirements<\/li>\n<li>Projects were unmanageable and code difficult to maintain<\/li>\n<li><span id=\"urn:batch-analysis-ee737bfa-7595-4a77-85bd-3d532e83c2da\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">Software<\/span> was never delivered<\/li>\n<\/ul>\n<p>Although it\u2019s no longer used as a term, a show of hands proved that we still suffer from the same problems today. As Robert M. Graham said in his talk at the \u201968 NATO conference:<\/p>\n<p>\u201cWe build systems like the Wright brothers built airplanes \u2013 build the whole thing, push it off the cliff, let it crash, and start over again.\u201d<\/p>\n<h2>Why modularity helps<\/h2>\n<p>The problem is, <span id=\"urn:batch-analysis-0e04bfba-37f0-47e5-951d-3e695433f53f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span> isn\u2019t like other forms of <span id=\"urn:batch-analysis-6a18587e-76e9-4503-b7c7-a2b8f6adba0f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/engineering\">engineering<\/span>. One simple bug can be catastrophic for a piece of <span id=\"urn:batch-analysis-555856f2-3549-4a17-b2b5-4a8b1522d3bb\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span>. As a result, creating working <span id=\"urn:batch-analysis-19a50da3-70a4-4388-b8f9-42c1ceb0423e\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span> tends to be an iterative process. Which brings us on to the main subject of the talk, modularity. If you are creating large, complex systems, it is sensible to treat them as a series of smaller modules. Modularity is good because it allows:<\/p>\n<ul>\n<li>Confinement of errors. An error inside one module (shouldn\u2019t) break the whole system.<\/li>\n<li>More efficient development with large <span id=\"urn:batch-analysis-5dbe033f-871f-4d1e-92aa-cfba5e9d537a\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">teams<\/span>.<\/li>\n<li>Simpler (and more effective) testing since modules can be tested individually.<\/li>\n<li>Portability of modules between <span id=\"urn:batch-analysis-3b5dd64a-ec84-47e0-a722-6213416bdb9a\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">projects<\/span> and code reuse.<\/li>\n<li>Secure boundaries between modules.<\/li>\n<\/ul>\n<p>But what makes a good module? To answer that, Douglas presented us with: <b><i>The Lost Wisdom of the Seventies<\/i><\/b>.<\/p>\n<h2>Cohesion and Coupling of modules<\/h2>\n<p>One of the key aspects behind modularity is <strong>information hiding<\/strong> (first described by David Parnas in 1972). Information hiding is about hiding design decisions taken inside a module. This idea was expanded on by Glenford Myers and Larry L. Constantine. They came up with two measures for how good the modularity of a system is. Cohesion and Coupling.<\/p>\n<p><b>Cohesion<\/b>, or relatedness, is a measure of whether a given module should exist. This starts with coincidental \u2013 it\u2019s purely a coincidence that a piece of code emulates the functionality of another piece. This is a bad reason to create a module. At the other end of the scale, you get functional relatedness. If two pieces of code are genuinely the same functionality, then you should make a module (this is why functional <span id=\"urn:batch-analysis-39df40f3-9139-4b37-b72d-24da4525f2f0\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> is so powerful as a concept).<\/p>\n<p><b>Coupling<\/b>, or connectedness, is how tightly modules are related to each other. Tight coupling is bad. Fortunately, modern compilers prevent the worst form of coupling (namely content coupling.<\/p>\n<h2>Object-oriented Programming<\/h2>\n<p>One of the early attempts to enforce modularity in <span id=\"urn:batch-analysis-0e805896-4cee-4419-85cc-8765d8c08a17\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span> was Alan Kay\u2019s <strong>Smalltalk<\/strong> language. This introduced the concept of object-oriented <span id=\"urn:batch-analysis-d305d947-e3b4-4a36-85a3-e47d05abeff0\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">programming<\/span>. In the ideal OOP, everything is an object and objects communicate by passing messages. Sadly, modern object-oriented <span id=\"urn:batch-analysis-77b5d46e-3862-479f-9d95-d883b6a902a8\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming languages<\/span> have distorted this: everything is a class and classes communicate through members. This has created several new forms of coupling. These are:<\/p>\n<ul>\n<li>Exception coupling.<\/li>\n<li>\u201cBanana\u201d coupling (you want to use the banana, but you inherit the gorilla that is holding it along with the whole forest!).<\/li>\n<li>Inheritance coupling.<\/li>\n<li>Member coupling.<\/li>\n<li>Getter\/setter coupling.<\/li>\n<li>Type coupling.<\/li>\n<\/ul>\n<p>\u201cUnfortunately, inheritance\u2013though an incredibly powerful technique\u2013has turned out to be very difficult for novices (and even professionals) to deal with.\u201d Alan Kay, 1993.<\/p>\n<h2>Levels of modularity<\/h2>\n<p>The next attempt to improve modularity was <strong>Scheme<\/strong>, Guy L. Steele and Gerald Jay Sussman\u2019s attempt to capture Carl Hewitt\u2019s <strong>Actor Model<\/strong>. The key thing here was the idea of levels of modularity:<\/p>\n<ul>\n<li>Subroutines (procedures, methods and functions).<\/li>\n<li>Objects.<\/li>\n<li>Packages (external files, libraries and frameworks).<\/li>\n<li>Processes (Unix pipe tools).<\/li>\n<li>Services (key in today\u2019s *aaS world).<\/li>\n<\/ul>\n<h2>How to deliver good services<\/h2>\n<p>In the world of everything as a service, services have become the new modules. So how can we deliver good services?<\/p>\n<ul>\n<li>Services should be organised as actors.<\/li>\n<li>They should have strong functional cohesion.<\/li>\n<li>They should be loosely coupled.<\/li>\n<li>&nbsp;Services should pass messages securely, using <span id=\"urn:batch-analysis-6d3d6851-281a-47e3-8edd-b297396fcfb0\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/json\">JSON<\/span> over TCP\/IP (note, not over <span id=\"urn:batch-analysis-7554795b-a7e1-4466-86a9-9c3d06f1def5\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/post_http\">HTTPS<\/span>!).<\/li>\n<li>Services can include secure service addresses in their messages.<\/li>\n<\/ul>\n<h2>Solving today\u2019s software crisis<\/h2>\n<p>So, how can we actually solve today\u2019s software crisis? Well, the key thing is to resolve the conflict between avoiding mid-project design changes and avoiding making unwanted <span id=\"urn:batch-analysis-3c1bc744-88b7-4866-99f8-de4ab3422165\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span>. <strong>Agile<\/strong> methodologies help here, but Douglas suggested that increasing the empathy of developers for their users is also important. This could include annual team sprints, where the developers are embedded alongside the actual end-users of their <span id=\"urn:batch-analysis-29915376-fb8b-4a3d-81d3-75aedd936c3e\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span>. As Douglas said at the end of his talk:<\/p>\n<blockquote><p>\u201cMake <span id=\"urn:batch-analysis-68278a4a-140f-43c0-952d-502641253825\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cogito_software\">software<\/span> for real people, not fictional characters.\u201d<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Douglas Crockford describes himself as the Godfather of JavaScript. When I saw he was giving the main keynote at Codemotion Amsterdam, I knew we were in for an interesting talk, and I wasn\u2019t disappointed. Rather than talk about JavaScript, Douglas chose to concentrate on a more fundamental aspect of coding, namely modularity. Douglas began by&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\">Read more<\/a><\/p>\n","protected":false},"author":7,"featured_media":189,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[8],"tags":[77],"collections":[],"class_list":{"0":"post-993","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-javascript","8":"tag-codemotion-amsterdam","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today\" \/>\n<meta property=\"og:description\" content=\"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-01T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T14:32:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1013\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Toby Moncaster\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@tobym76\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Toby Moncaster\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\"},\"author\":{\"name\":\"Toby Moncaster\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b\"},\"headline\":\"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today\",\"datePublished\":\"2019-12-01T08:00:00+00:00\",\"dateModified\":\"2021-12-23T14:32:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\"},\"wordCount\":858,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg\",\"keywords\":[\"Codemotion Amsterdam\"],\"articleSection\":[\"JavaScript\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\",\"name\":\"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg\",\"datePublished\":\"2019-12-01T08:00:00+00:00\",\"dateModified\":\"2021-12-23T14:32:08+00:00\",\"description\":\"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg\",\"width\":1013,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Web Developer\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/web-developer\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b\",\"name\":\"Toby Moncaster\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"caption\":\"Toby Moncaster\"},\"description\":\"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/tobymoncaster\/\",\"https:\/\/x.com\/tobym76\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today - Codemotion Magazine","description":"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/","og_locale":"en_US","og_type":"article","og_title":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today","og_description":"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-12-01T08:00:00+00:00","article_modified_time":"2021-12-23T14:32:08+00:00","og_image":[{"width":1013,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg","type":"image\/jpeg"}],"author":"Toby Moncaster","twitter_card":"summary_large_image","twitter_creator":"@tobym76","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Toby Moncaster","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/"},"author":{"name":"Toby Moncaster","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b"},"headline":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today","datePublished":"2019-12-01T08:00:00+00:00","dateModified":"2021-12-23T14:32:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/"},"wordCount":858,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg","keywords":["Codemotion Amsterdam"],"articleSection":["JavaScript"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/","name":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg","datePublished":"2019-12-01T08:00:00+00:00","dateModified":"2021-12-23T14:32:08+00:00","description":"In Codemotion Amsterdam 2019, Javascripts Godfather Douglas Crockford delivered a keynote about the importance of modularity (not just in Javascript).","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg","width":1013,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/concerning-modules-how-the-lost-wisdom-of-the-70s-helps-us-today\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/"},{"@type":"ListItem","position":3,"name":"Web Developer","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/web-developer\/"},{"@type":"ListItem","position":4,"name":"Concerning Modules \u2013 how the lost wisdom of the \u201870s helps us today"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b","name":"Toby Moncaster","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","caption":"Toby Moncaster"},"description":"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.","sameAs":["https:\/\/www.linkedin.com\/in\/tobymoncaster\/","https:\/\/x.com\/tobym76"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-600x600.jpg","author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg",1013,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg",1013,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg",1013,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg",1013,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/crockford-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_comment_info":0,"uagb_excerpt":"Douglas Crockford describes himself as the Godfather of JavaScript. When I saw he was giving the main keynote at Codemotion Amsterdam, I knew we were in for an interesting talk, and I wasn\u2019t disappointed. Rather than talk about JavaScript, Douglas chose to concentrate on a more fundamental aspect of coding, namely modularity. Douglas began by&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=993"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/993\/revisions"}],"predecessor-version":[{"id":3181,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/993\/revisions\/3181"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/189"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=993"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}