<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jorge Manrubia</title>
    <description>The latest articles on DEV Community by Jorge Manrubia (@jorgemanrubia).</description>
    <link>https://dev.to/jorgemanrubia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F226041%2Fb27a9d0d-7789-459c-a984-3f03a0bb06bf.png</url>
      <title>DEV Community: Jorge Manrubia</title>
      <link>https://dev.to/jorgemanrubia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jorgemanrubia"/>
    <language>en</language>
    <item>
      <title>On software development metaphors, programmers and engineers</title>
      <dc:creator>Jorge Manrubia</dc:creator>
      <pubDate>Sun, 29 Sep 2019 15:43:49 +0000</pubDate>
      <link>https://dev.to/jorgemanrubia/on-software-development-metaphors-programmers-and-engineers-2jol</link>
      <guid>https://dev.to/jorgemanrubia/on-software-development-metaphors-programmers-and-engineers-2jol</guid>
      <description>&lt;p&gt;A &lt;a href="https://twitter.com/CPITIA/status/1172801299886333953"&gt;tweet about how engineers should not write code (Spanish)&lt;/a&gt; made me revisit a subject I used to enjoy: metaphors of what software development is about. There are only one million articles about this, so let's add a new one.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;software is like engineering&lt;/em&gt; metaphor did more harm than good years ago. My favorite take on its problems is &lt;a href="https://www.martinfowler.com/articles/newMethodology.html#PredictiveVersusAdaptive"&gt;this article by Martin Fowler&lt;/a&gt;. Another great one is the &lt;a href="https://www.artima.com/intv/garden.html"&gt;&lt;em&gt;gardening&lt;/em&gt; metaphor&lt;/a&gt; by the pragmatic programmers. Aiming for designs that make software construction predictable doesn't fly, and that is precisely what the term &lt;em&gt;software engineering&lt;/em&gt; evoked back in the day.&lt;/p&gt;

&lt;p&gt;I don't think this misconception is prevalent today, but there are still many believers in the old engineering metaphor. I saw a large government agency organize its whole development process based on this metaphor in 2013, which, not surprisingly, turned out being a very costly horror story.&lt;/p&gt;

&lt;p&gt;A related discussion is about &lt;strong&gt;titles&lt;/strong&gt;: programmers, developers, engineers, architects, etc. As it often happens with fuzzy terms, different people assign different meanings to each, so they become useless. For example, &lt;a href="https://github.com"&gt;Github&lt;/a&gt; has engineers, &lt;a href="https://basecamp.com"&gt;Basecamp&lt;/a&gt; has programmers and &lt;a href="https://www.shopify.com"&gt;Shopify&lt;/a&gt; has developers. Do they employ disjoint groups of people? Or are they just using different terms for the same role?&lt;/p&gt;

&lt;p&gt;If we all agreed on precise meaning for each term, they might be useful, but the thing is that we don't. I think a much saner approach is to &lt;strong&gt;consider them all synonyms and focus on skills, background, and experience&lt;/strong&gt; as much more relevant indicators. This way, we also prevent people from using titles like badges of honor that magically separate ones from others. E.g., an &lt;em&gt;architect&lt;/em&gt; makes high level technical decisions, mere &lt;em&gt;programmers&lt;/em&gt; can't.&lt;/p&gt;

&lt;p&gt;On a more constructive note, &lt;a href="https://www.youtube.com/watch?v=9LfmrkyP81M"&gt;David Heinemeier Hansson differentiated&lt;/a&gt; between creating information systems (writing metaphor) and building the infrastructure that supports them (engineering/hard science). I loved the &lt;em&gt;writing&lt;/em&gt; software metaphor, as writing things down has many similarities with coding. Also, I bet many &lt;em&gt;I-am-an-engineer-not-a-programmer&lt;/em&gt; developers would find it shocking to hear Rails creator rather identify with a software writer 😂.&lt;/p&gt;

&lt;p&gt;Finally, while I like metaphors and the insight they provide, I have come to appreciate considering &lt;a href="https://www.computerworld.com/article/2574010/the-roots-of-failure-in-software-development-management.html?page=3"&gt;software development like... software development&lt;/a&gt;. It highlights the unique aspect of what we do as a discipline, and it helps to avoid digging ourselves into holes for taking metaphors too far.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Given the staggering quantity of data we have on software projects of all sizes and varieties, we can state categorically that software development is like software development. Period.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>culture</category>
      <category>opinion</category>
      <category>development</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Programming quotes that blew my mind</title>
      <dc:creator>Jorge Manrubia</dc:creator>
      <pubDate>Thu, 19 Sep 2019 14:42:31 +0000</pubDate>
      <link>https://dev.to/jorgemanrubia/programming-quotes-that-blew-my-mind-53o0</link>
      <guid>https://dev.to/jorgemanrubia/programming-quotes-that-blew-my-mind-53o0</guid>
      <description>&lt;p&gt;I love ideas that turn my world around. They typically come via books, articles, and talks but, in some rare occasions, it is just a simple quote that produces that effect.&lt;/p&gt;

&lt;p&gt;The impact of such quotes highly depends on your background and context. Here are three examples that, in hindsight, had a huge impact on me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming habits
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;
I’m not a great programmer; I’m just a good programmer with great habits.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By &lt;a href="https://martinfowler.com/books/refactoring.html"&gt;Kent Beck, quoted by Martin Fowler in Refactoring (1st ed), June 1999&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I read the Refactoring book in the early 2000s, this quote strongly caught my attention. In a time where you could often hear that programming was a second-class activity for a real engineer™ (&lt;a href="https://twitter.com/CPITIA/status/1172801299886333953"&gt;foolishness that some still perpetuate today&lt;/a&gt;), books like this one, &lt;a href="https://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416"&gt;XP Explained&lt;/a&gt;, or &lt;a href="https://pragprog.com/book/tpp/the-pragmatic-programmer"&gt;The Pragmatic Programmer&lt;/a&gt;, placed the focus on practices for writing better and more robust code. And this quote made me want to learn about those: automated testing, the importance of readable code, implementation patterns, refactoring, continuous integration, etc.&lt;/p&gt;

&lt;p&gt;Above all, this quote made me respect the craft of writing code. In those days, I had professors who told us that our job should be drawing comprehensive diagrams and writing long documents that &lt;em&gt;others&lt;/em&gt; would code. Imagine having paid attention to those! I still carry a subtle and unjustified aversion to the term &lt;em&gt;engineer&lt;/em&gt; from those times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback loop
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;
As an engineer, you should constantly work to make your feedback loops shorter in time and/or wider in scope
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/kentbeck/status/531964254946328576"&gt;Kent Beck, November 2014&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This sentence put a name to a concept that wasn't even on my radar: &lt;em&gt;feedback loop&lt;/em&gt;. Today, I believe it is a key factor in developer happiness. It refers to the cycle of writing some code and validating its effects. You are going through that cycle countless times while coding anything, so you better pay attention to how it unfolds.&lt;/p&gt;

&lt;p&gt;The feedback loop is often associated with automated testing. You want your tests to be fast (shorter in time) and &lt;a href="https://www.jorgemanrubia.com/2018/05/19/on-rails-testing/"&gt;test the real thing&lt;/a&gt; as much as possible (wider in scope), which are usually opposite attributes. Indeed, having an effective feedback loop is an excellent reason for writing a test, although that is not always possible or suitable. &lt;/p&gt;

&lt;p&gt;I think testing is just one side of the problem. Here are some assorted thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving the feedback loop is worth investing time. For example, I &lt;a href="https://www.jorgemanrubia.com/2019/07/07/invoke_the_interactive_brokers_api_from_ruby/"&gt;created this&lt;/a&gt; to avoid having to use JRuby because of its slow startup time. And also &lt;a href="https://www.jorgemanrubia.com/2017/11/26/testing-a-command-line-tool-with-plain-ruby/"&gt;this command-line tool&lt;/a&gt; for another system for the same reason. &lt;/li&gt;
&lt;li&gt;A fast load time is a crucial feature for users, but it is also essential for programming happiness. Apps that are slow to load can quickly drain your happiness at development time.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop"&gt;REPL shells&lt;/a&gt; are a terrific tool for experimenting and troubleshooting in many scenarios. Immediate responses make for a great feedback loop.&lt;/li&gt;
&lt;li&gt;When doing performance work, automate as much as possible whatever mechanism you are using. In some recent profiling work I did, just running the profiler and opening the generated report in the browser automatically with a keystroke improved my experience significantly.&lt;/li&gt;
&lt;li&gt;When it comes to user interfaces. Modern browsers dev tools offer wonderful mechanisms for manipulating HTML and CSS directly. &lt;a href="https://vue-loader.vuejs.org/guide/hot-reload.html"&gt;Hot reload&lt;/a&gt; in React and Vue is fantastic, as much as &lt;a href="https://medium.com/@jmanrubia/escaping-the-spa-rabbit-hole-with-turbolinks-903f942bf52c"&gt;I don't love the SPA scene&lt;/a&gt;. And &lt;a href="https://developer.apple.com/xcode/swiftui/"&gt;SwiftUI&lt;/a&gt; looks amazing. An immediate feedback loop is so convenient for UI work!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scope and deadlines
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;
“Fixed deadline, negotiable scope” has to be the most underrated pattern in product management. It’s the secret to shipping.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/rjs/status/650875194345697280"&gt;Ryan Singer, October 2015&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This idea just blew my mind when I first read it. Until then, I had come to consider deadlines in software as something negative. I had never thought of them as a mechanism for narrowing down scope. And it clicked because this solved two problems I was very familiar with: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing deadlines because finger-in-the-air estimations at the beginning of the cycle were always wrong, no matter how much you shortened the iteration.&lt;/li&gt;
&lt;li&gt;Not knowing when a project was &lt;em&gt;done&lt;/em&gt; since there were always pending refinements that looked so important.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://blog.codinghorror.com/development-is-inherently-wicked/"&gt;Programming is a wicked problem&lt;/a&gt;: you don't understand the problem until &lt;em&gt;after&lt;/em&gt; having solved it. If you are allowed to modify the scope, you can adapt the amount of pending work as you progress through the project and, that way, honor the deadline. And you also have a mechanism to decide when the project is good enough and ship.&lt;/p&gt;

&lt;p&gt;I think this is one of those ideas that, while simple, is hard to put in practice successfully. If you are interested, the book &lt;a href="https://basecamp.com/shapeup"&gt;Shape Up&lt;/a&gt; explains how they do it at Basecamp, and it is one of the best reads I have had in a long time.&lt;/p&gt;

&lt;p&gt;I would love to hear about similar quotes that impacted others.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>discuss</category>
      <category>ideas</category>
      <category>goodpractices</category>
    </item>
  </channel>
</rss>
