{"id":1596,"date":"2010-02-10T18:11:31","date_gmt":"2010-02-10T18:11:31","guid":{"rendered":"http:\/\/www.markwilson.co.uk\/blog\/?p=1596"},"modified":"2010-02-10T18:41:21","modified_gmt":"2010-02-10T18:41:21","slug":"writing-solid-code","status":"publish","type":"post","link":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm","title":{"rendered":"Writing SOLID code"},"content":{"rendered":"<p>I&#8217;m not a coder: the last time I wrote any functioning code was at Uni&#8217; in the early 1990s.\u00c2\u00a0 I can adapt other people&#8217;s scripts and, given enough time, write my own.\u00c2\u00a0I can knock up a bit of XHTML and CSS but writing real applications?\u00c2\u00a0 Nope.\u00c2\u00a0 Not my game.<\/p>\n<p>Every now and again though, I come up against a development topic and I do find them interesting, if a little baffling.\u00c2\u00a0 I guess that&#8217;s how devs feel when I talk infrastructure.<\/p>\n<p>From 2004 to 2005, I worked for a company called Conchango (<a href=\"http:\/\/uk.emc.com\/domains\/conchango\/index.htm\">who are now part of EMC Consulting<\/a>) &#8211; I had a great time there, but the company&#8217;s focus had shifted from infrastructure to web design agency and Java\/.NET development (which, by the way, they were rather good at &#8211; with an impressive client list).\u00c2\u00a0 Whilst I was there, it seemed that all I heard about was &#8220;agile&#8221; or &#8220;XP&#8221; (extreme programming&#8230; nothing to do with\u00c2\u00a0Windows XP) and these were approaches that were taking the programming world by storm at the time.<\/p>\n<p>Then, a few weeks ago, I had a similar experience at an <a href=\"http:\/\/edgeug.net\/\">Edge User Group<\/a> meeting, where <a href=\"http:\/\/codebetter.com\/blogs\/ian_cooper\/\">Ian Cooper<\/a> (a C# MVP) was talking about the SOLID principles.\u00c2\u00a0 Not being a coder, most of this went right over my head (I&#8217;m sure it would make perfect sense to my old mates from Uni&#8217; who did follow a programming route, like <a href=\"http:\/\/hackinghat.com\/\">Steve Knight<\/a>), but it was interesting nonetheless &#8211; and, in common with some of the stuff I heard about in my days at Conchango, I&#8217;m sure the basic principles of what can go wrong with software projects could be applied to my infrastructure projects (with a little tweaking perhaps):<\/p>\n<ul>\n<li>Rigidity &#8211; difficult to change.<\/li>\n<li>Fragility &#8211; change one thing, breaks something else.<\/li>\n<li>Immobility &#8211; e.g. one part of the solution is welded into the application.<\/li>\n<li>Viscosity &#8211; wading through treacle, maintaining someone else&#8217;s software.<\/li>\n<li>Needless complexity &#8211; why did we do it that way?<\/li>\n<li>Needless repetition &#8211; Ctrl+C Ctrl+V is not an ideal programming paradigm!<\/li>\n<li>Opacity &#8211; it made sense to original developer\u00e2\u20ac\u00a6 but not now!<\/li>\n<\/ul>\n<p>Because of these issues, maintenance quickly becomes an issue in software development and <a href=\"http:\/\/en.wikipedia.org\/wiki\/Robert_Cecil_Martin\">Robert C Martin<\/a>\u00c2\u00a0(<a href=\"http:\/\/twitter.com\/unclebobmartin\">@unclebobmartin<\/a> &#8211; who had previously led the group that created Agile software development from Extreme programming techniques) codified the SOLID principles in his\u00c2\u00a0<a href=\"http:\/\/www.amazon.co.uk\/gp\/product\/0131857258?ie=UTF8&amp;tag=marsweblo-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0131857258\">Agile Principles, Patterns and Practices in C#<\/a> book (there is also <a href=\"http:\/\/www.hanselminutes.com\/default.aspx?showID=168\">a Hanselminutes podcast where Scott Hanselman and &#8220;Uncle Bob&#8221; Martin discuss the SOLID principles<\/a>\u00c2\u00a0and\u00c2\u00a0<a href=\"http:\/\/www.hanselminutes.com\/default.aspx?showID=168\">a follow-up where they discuss the relevance of SOLID<\/a>).\u00c2\u00a0 These principles are:<\/p>\n<ul>\n<li><em>S<\/em>ingle responsibility principle<\/li>\n<li><em>O<\/em>pen\/closed principle<\/li>\n<li><em>L<\/em>iskov substitution principle<\/li>\n<li><em>I<\/em>nterface segregation principle<\/li>\n<li><em>D<\/em>ependency inversion principle<\/li>\n<\/ul>\n<p>This is the point where my brain starts to hurt, but please bear with me as I attempt to explain the rest of the contents of Ian&#8217;s presentation (or listen to the Hanselminutes podcast)!<\/p>\n<h3>The single responsibility principle<\/h3>\n<p>This principle states that\u00c2\u00a0<em>a class should have only one reason to change<\/em>.<\/p>\n<p>Each responsibility is an axis of change and, when the requirements change, that change will be manifested through a change in responsibility among the classes. If a class assumes more than one responsibility, that class will have more than one reason to change, hence single responsibility.<\/p>\n<p>Applying this principle\u00c2\u00a0gives a developer a single concept to code for (also known as separation of concerns) so, for example, instead of having a GUI to display a purchase order, this may be separated into GUI, controller, and purchase order: the controller&#8217;s function is to get the data from the appropriate place, the GUI is only concerned with displaying that data, and the purchase order is not concerned with how it is displayed.<\/p>\n<h3>The open\/closed principle<\/h3>\n<p>This principle states that <em>software entities (classes, modules, functions, etc.) should be open for extension but closed for modification<\/em>.<\/p>\n<p>The thinking here is that, when a single change to a program results in a cascade of changes to dependent modules, the design becomes rigid but, if the open\/closed principle is applied well, further changes are achieved by adding new code, not by changing old code that already works.<\/p>\n<p>Some may think that it&#8217;s impossible to be both open to extension and closed to change: the key here is abstraction and composing.<\/p>\n<p>For example, a financial model may have different rounding rules for different markets.\u00c2\u00a0 This can be implemented with local rounding rules rather than changing the model each time the model is applied to a different market.<\/p>\n<h3>The Liskov substitution principle<\/h3>\n<p>This principle (attributed to <a href=\"http:\/\/www.pmg.csail.mit.edu\/~liskov\/\">Barbara Liskov<\/a>) states that <em>subtypes most be substitutable for their base types<\/em>.\u00c2\u00a0 Unfortunately, attempts to fix Liskov substitution problems often result in violations of the open\/closed principle but, in essence, the validity of a model can be expressed only in terms of its clients so, for example, if there is a type called Bird (which has got wings and can fly), where what happens to penguin and emu when an attempt is made to implement the fly method? We need to be able to call fly for a penguin and handle it appropriately so there are effectively two solutions: change the type hierarchy; or refactor the type to express it differently &#8211; fly may become move, or we could have a flightless bird type and a running bird type.<\/p>\n<h3>The interface segregation principle<\/h3>\n<p>The interface segregation principle says that <em>clients should not be forced to depend on methods they do not use<\/em>.<\/p>\n<p>Effectively, this means that clients should not be affected by changes that don\u00e2\u20ac\u2122t concern them (i.e. fat types couple disparate parts of the application).\u00c2\u00a0 In essence,\u00c2\u00a0each\u00c2\u00a0interface should have smallest set of features that meet client requirements\u00c2\u00a0but this means it\u00c2\u00a0may be necessary to create multiple interfaces within a class.<\/p>\n<h3>The dependency inversion principle<\/h3>\n<p>The dependency inversion principle states that <em>high level models should not depend on low level models &#8211; both should depend on abstractions<\/em>. In addition,\u00c2\u00a0<em>abstractions should not depend on details. Details should depend upon abstractions<\/em>.\u00c2\u00a0\u00c2\u00a0This is sometimes known as the Hollywood principle (&#8220;Don&#8217;t call us, we&#8217;ll call you&#8221;).\u00c2\u00a0 So, where is the inversion?\u00c2\u00a0 If a class structure is considered as a tree with the classes at the leaves and abstraction at the trunk, we depend on the tree, not the leaves, effectively inverting the tree and grasping by the roots (inversion of control).<\/p>\n<h3>Summing it up<\/h3>\n<p>I hope I&#8217;ve understood Ian&#8217;s presentation enough to do it justice here but to sum it up: the SOLID principles help to match computer science concepts such as cohesion and polymorphism to actual development in practice. Or, for dummies like me, if you write your code according to these principles, it can avoid problems later when the inevitable changes need to be made.<\/p>\n<p>As an infrastructure guy, I don&#8217;t fully understand the details, but I can grasp the high level concepts and see that it&#8217;s not really so different to my world.\u00c2\u00a0 Look at a desktop delivery architecture for a large enterprise:<\/p>\n<ul>\n<li>We abstract data from user objects, applications, operating system and hardware (which is possibly virtualised) and this gives us flexibility to extend (or substitute) parts of the infrastructure (well, that&#8217;s the idea anyway).<\/li>\n<li>We only include those components that we actually want to use (no games, or other consumer functionality).\u00c2\u00a0<\/li>\n<li>We construct servers with redundancy then build layers of software to construct service platforms\u00c2\u00a0(which is a kind of dependency inversion).\u00c2\u00a0<\/li>\n<\/ul>\n<p>OK, so the infrastructure links may seem tenuous, but the principle is sound.\u00c2\u00a0 Sometimes it&#8217;s good for us infrastructure guys to take a look at how developers work&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m not a coder: the last time I wrote any functioning code was at Uni&#8217; in the early 1990s.\u00c2\u00a0 I can adapt other people&#8217;s scripts and, given enough time, write my own.\u00c2\u00a0I can knock up a bit of XHTML and CSS but writing real applications?\u00c2\u00a0 Nope.\u00c2\u00a0 Not my game. Every now and again though, I &hellip; <a href=\"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Writing SOLID code<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[],"tags":[198],"class_list":["post-1596","post","type-post","status-publish","format-standard","hentry","tag-application-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Writing SOLID code - markwilson.it<\/title>\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.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Writing SOLID code - markwilson.it\" \/>\n<meta property=\"og:description\" content=\"I&#8217;m not a coder: the last time I wrote any functioning code was at Uni&#8217; in the early 1990s.\u00c2\u00a0 I can adapt other people&#8217;s scripts and, given enough time, write my own.\u00c2\u00a0I can knock up a bit of XHTML and CSS but writing real applications?\u00c2\u00a0 Nope.\u00c2\u00a0 Not my game. Every now and again though, I &hellip; Continue reading Writing SOLID code\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm\" \/>\n<meta property=\"og:site_name\" content=\"markwilson.it\" \/>\n<meta property=\"article:published_time\" content=\"2010-02-10T18:11:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2010-02-10T18:41:21+00:00\" \/>\n<meta name=\"author\" content=\"Mark Wilson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@markwilsonit\" \/>\n<meta name=\"twitter:site\" content=\"@markwilsonit\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark Wilson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm\"},\"author\":{\"name\":\"Mark Wilson\",\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/98f61365e7c39d6be942174b8c4de468\"},\"headline\":\"Writing SOLID code\",\"datePublished\":\"2010-02-10T18:11:31+00:00\",\"dateModified\":\"2010-02-10T18:41:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm\"},\"wordCount\":1286,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/98f61365e7c39d6be942174b8c4de468\"},\"keywords\":[\"Application Development\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm\",\"url\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm\",\"name\":\"Writing SOLID code - markwilson.it\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#website\"},\"datePublished\":\"2010-02-10T18:11:31+00:00\",\"dateModified\":\"2010-02-10T18:41:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/2010\\\/02\\\/writing-solid-code.htm#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Writing SOLID code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/\",\"name\":\"markwilson.it\",\"description\":\"get-info -class technology | write-output &gt; \\\/dev\\\/web\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/98f61365e7c39d6be942174b8c4de468\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/98f61365e7c39d6be942174b8c4de468\",\"name\":\"Mark Wilson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/www.markwilson.co.uk\\\/blog\\\/uploads\\\/image-4.png?fit=800%2C800&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.markwilson.co.uk\\\/blog\\\/uploads\\\/image-4.png?fit=800%2C800&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/www.markwilson.co.uk\\\/blog\\\/uploads\\\/image-4.png?fit=800%2C800&ssl=1\",\"width\":800,\"height\":800,\"caption\":\"Mark Wilson\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/www.markwilson.co.uk\\\/blog\\\/uploads\\\/image-4.png?fit=800%2C800&ssl=1\"},\"description\":\"A Chartered IT Professional, with recent experience in technology leadership, IT strategy and practice management roles, Mark Wilson is an Enterprise Architect in the Advisory and Management Group at risual. During a career spanning more than two decades, Mark has gained widespread recognition as an expert in his field including both industry and national press exposure. In addition to certifications from Microsoft, VMware, Red Hat, The Open Group and Axelos, Mark held a Microsoft Most Valuable Professional (MVP) award for three years and is now part of the MVP Reconnect programme. Mark is also well-known on social media and maintains an award-winning blog.\",\"sameAs\":[\"http:\\\/\\\/www.markwilson.co.uk\\\/\",\"https:\\\/\\\/www.instagram.com\\\/markwilsonuk\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/markawilson\\\/\",\"https:\\\/\\\/x.com\\\/markwilsonit\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCWHlZCoHRTocdvtrOJ2IL4A\"],\"url\":\"https:\\\/\\\/www.markwilson.co.uk\\\/blog\\\/author\\\/mark-wilson\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Writing SOLID code - markwilson.it","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.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm","og_locale":"en_GB","og_type":"article","og_title":"Writing SOLID code - markwilson.it","og_description":"I&#8217;m not a coder: the last time I wrote any functioning code was at Uni&#8217; in the early 1990s.\u00c2\u00a0 I can adapt other people&#8217;s scripts and, given enough time, write my own.\u00c2\u00a0I can knock up a bit of XHTML and CSS but writing real applications?\u00c2\u00a0 Nope.\u00c2\u00a0 Not my game. Every now and again though, I &hellip; Continue reading Writing SOLID code","og_url":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm","og_site_name":"markwilson.it","article_published_time":"2010-02-10T18:11:31+00:00","article_modified_time":"2010-02-10T18:41:21+00:00","author":"Mark Wilson","twitter_card":"summary_large_image","twitter_creator":"@markwilsonit","twitter_site":"@markwilsonit","twitter_misc":{"Written by":"Mark Wilson","Estimated reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm#article","isPartOf":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm"},"author":{"name":"Mark Wilson","@id":"https:\/\/www.markwilson.co.uk\/blog\/#\/schema\/person\/98f61365e7c39d6be942174b8c4de468"},"headline":"Writing SOLID code","datePublished":"2010-02-10T18:11:31+00:00","dateModified":"2010-02-10T18:41:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm"},"wordCount":1286,"commentCount":2,"publisher":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/#\/schema\/person\/98f61365e7c39d6be942174b8c4de468"},"keywords":["Application Development"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm","url":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm","name":"Writing SOLID code - markwilson.it","isPartOf":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/#website"},"datePublished":"2010-02-10T18:11:31+00:00","dateModified":"2010-02-10T18:41:21+00:00","breadcrumb":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.markwilson.co.uk\/blog\/2010\/02\/writing-solid-code.htm#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.markwilson.co.uk\/blog"},{"@type":"ListItem","position":2,"name":"Writing SOLID code"}]},{"@type":"WebSite","@id":"https:\/\/www.markwilson.co.uk\/blog\/#website","url":"https:\/\/www.markwilson.co.uk\/blog\/","name":"markwilson.it","description":"get-info -class technology | write-output &gt; \/dev\/web","publisher":{"@id":"https:\/\/www.markwilson.co.uk\/blog\/#\/schema\/person\/98f61365e7c39d6be942174b8c4de468"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.markwilson.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.markwilson.co.uk\/blog\/#\/schema\/person\/98f61365e7c39d6be942174b8c4de468","name":"Mark Wilson","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/uploads\/image-4.png?fit=800%2C800&ssl=1","url":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/uploads\/image-4.png?fit=800%2C800&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/uploads\/image-4.png?fit=800%2C800&ssl=1","width":800,"height":800,"caption":"Mark Wilson"},"logo":{"@id":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/uploads\/image-4.png?fit=800%2C800&ssl=1"},"description":"A Chartered IT Professional, with recent experience in technology leadership, IT strategy and practice management roles, Mark Wilson is an Enterprise Architect in the Advisory and Management Group at risual. During a career spanning more than two decades, Mark has gained widespread recognition as an expert in his field including both industry and national press exposure. In addition to certifications from Microsoft, VMware, Red Hat, The Open Group and Axelos, Mark held a Microsoft Most Valuable Professional (MVP) award for three years and is now part of the MVP Reconnect programme. Mark is also well-known on social media and maintains an award-winning blog.","sameAs":["http:\/\/www.markwilson.co.uk\/","https:\/\/www.instagram.com\/markwilsonuk\/","https:\/\/www.linkedin.com\/in\/markawilson\/","https:\/\/x.com\/markwilsonit","https:\/\/www.youtube.com\/channel\/UCWHlZCoHRTocdvtrOJ2IL4A"],"url":"https:\/\/www.markwilson.co.uk\/blog\/author\/mark-wilson"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":6579,"url":"https:\/\/www.markwilson.co.uk\/blog\/2016\/09\/devops-organisation-ready.htm","url_meta":{"origin":1596,"position":0},"title":"What is DevOps? And is your organisation ready?","author":"Mark Wilson","date":"Wednesday 14 September 2016","format":false,"excerpt":"Like cloud a few years ago and then big data, DevOps is one of the buzzwords of the moment. So what does it actually mean? And is there more to it than hype? There are many definitions but most people will agree that, at its core, DevOps is about closer\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.markwilson.co.uk\/blog\/topic\/technology"},"img":{"alt_text":"DevOps in context","src":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/devops.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1409,"url":"https:\/\/www.markwilson.co.uk\/blog\/2009\/04\/so-what-exactly-is-windows-azure.htm","url_meta":{"origin":1596,"position":1},"title":"So, what exactly is Windows Azure?","author":"Mark Wilson","date":"Tuesday 7 April 2009","format":false,"excerpt":"At last year's Microsoft Professional Developers' Conference, Windows Azure was the big news. Finally, Microsoft had put its cards on the table and announced their strategy for cloud computing! But, since Ray Ozzie's keynote in LA last autumn, it's seemed pretty quiet on the Windows Azure front. That's understandable -\u2026","rel":"","context":"In \"Microsoft Azure\"","block_context":{"text":"Microsoft Azure","link":"https:\/\/www.markwilson.co.uk\/blog\/tag\/azure"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1515,"url":"https:\/\/www.markwilson.co.uk\/blog\/2009\/09\/moving-to-linux-from-solaris.htm","url_meta":{"origin":1596,"position":2},"title":"Moving to Linux from Solaris?","author":"Mark Wilson","date":"Thursday 10 September 2009","format":false,"excerpt":"Oracle's acquisition of Sun Microsystems has probably caused a few concerns for Sun customers and, today, Oracle reaffirmed their commitment to Sun's Solaris operating system and SPARC-based hardware with a statement from Oracle CEO, Larry Ellison, that tells customers they plan to invest in the Solaris and SPARC platforms, including\u2026","rel":"","context":"In \"Linux\"","block_context":{"text":"Linux","link":"https:\/\/www.markwilson.co.uk\/blog\/tag\/linux"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1263,"url":"https:\/\/www.markwilson.co.uk\/blog\/2008\/10\/cloud-computing-takes-centre-stage-with-windows-azure.htm","url_meta":{"origin":1596,"position":3},"title":"Cloud computing takes centre stage with Windows Azure","author":"Mark Wilson","date":"Monday 27 October 2008","format":false,"excerpt":"I wasn't planning any major PDC coverage on the blog this week (there will be plenty of that elsewhere) but I did catch the PDC keynote today. It was the first time I've seen Ray Ozzie\u00c2\u00a0present and I was impressed - none of the Ballmer madness, or the Gates geekiness.\u2026","rel":"","context":"In \"Microsoft Azure\"","block_context":{"text":"Microsoft Azure","link":"https:\/\/www.markwilson.co.uk\/blog\/tag\/azure"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4528,"url":"https:\/\/www.markwilson.co.uk\/blog\/2012\/11\/what-as-a-service.htm","url_meta":{"origin":1596,"position":4},"title":"What-as-a-service?","author":"Mark Wilson","date":"Tuesday 6 November 2012","format":false,"excerpt":"I've written previously about the \"cloud stack\" of -as-a-service models but\u00a0I recently saw Microsoft's Steve Plank\u00a0(@plankytronixx) give a great description of the differences between on-premise, \u00a0infrastructure as a service (IaaS), platform as a service (PaaS) and software as a service (SaaS). Of course, this is a Microsoft view of the\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.markwilson.co.uk\/blog\/topic\/technology"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/cloud-computing-landscape.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/cloud-computing-landscape.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.markwilson.co.uk\/blog\/images\/cloud-computing-landscape.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1154,"url":"https:\/\/www.markwilson.co.uk\/blog\/2008\/08\/so-you-want-to-be-an-infrastructure-architect.htm","url_meta":{"origin":1596,"position":5},"title":"So, you want to be an infrastructure architect?","author":"Mark Wilson","date":"Thursday 14 August 2008","format":false,"excerpt":"Over the years I've had various jobs which have been basically the same role but with different job titles. Officially, I've been a Consultant, Senior Consultant, Project Manager, Senior Technical Consultant, Senior Customer Solution Architect (which would have been a Principal Consultant in the same organisation a few years earlier\u2026","rel":"","context":"In \"Architecture\"","block_context":{"text":"Architecture","link":"https:\/\/www.markwilson.co.uk\/blog\/tag\/architecture"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=1596"}],"version-history":[{"count":7,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1596\/revisions"}],"predecessor-version":[{"id":1632,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1596\/revisions\/1632"}],"wp:attachment":[{"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=1596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=1596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.markwilson.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=1596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}