<?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>Forem: Pedro Moreira Santos</title>
    <description>The latest articles on Forem by Pedro Moreira Santos (@pedromsantos).</description>
    <link>https://forem.com/pedromsantos</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%2F64057%2F84bb1e97-1cde-4339-8f61-fef360297442.png</url>
      <title>Forem: Pedro Moreira Santos</title>
      <link>https://forem.com/pedromsantos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pedromsantos"/>
    <language>en</language>
    <item>
      <title>What is this book about?</title>
      <dc:creator>Pedro Moreira Santos</dc:creator>
      <pubDate>Thu, 13 Dec 2018 12:21:42 +0000</pubDate>
      <link>https://forem.com/pedromsantos/what-is-this-book-about-4o2k</link>
      <guid>https://forem.com/pedromsantos/what-is-this-book-about-4o2k</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.amazonaws.com%2Ftitlepages.leanpub.com%2Fagiletechnicalpracticesdistilled%2Fhero%3F1535555570" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.amazonaws.com%2Ftitlepages.leanpub.com%2Fagiletechnicalpracticesdistilled%2Fhero%3F1535555570" alt="Agile technical practices distilled book cover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This week we released the latest section of our book. It was such a joy to be surrounded by friends and family sharing this moment. Thank you for being there with us.&lt;/p&gt;

&lt;p&gt;This book does not contain any new information we merely put together information that has been scattered in books, blog posts, articles and conversations. If you are looking for new information, this book is probably not for you. So what does this book brings? It offers a path for learning agile technical practices and object-oriented design. &lt;/p&gt;

&lt;p&gt;For the past 5 years, we have been working as agile technical practices coaches. We coached/mentored/taught hundreds of developers, and in that process, we tried many alternatives, learned and adapted. What works, what doesn't, what is the best sequence to learn these practices, what exercises work best, what feedback helps the most. In this book, we share our experience and present a path others can follow.&lt;/p&gt;

&lt;p&gt;We know sometimes learning can feel like venturing into a dense and unknown forest, fear not we created a path. Use it to help you learn practices such as TDD, pair programming, outside in TDD, refactoring. Some of the principles behind object-oriented design such as SOLID, Cohesion, Coupling, Connascence, the four elements of simple design, code smells.  &lt;/p&gt;

&lt;p&gt;Our book can be found &lt;a href="https://leanpub.com/agiletechnicalpracticesdistilled" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the book
&lt;/h2&gt;

&lt;p&gt;Learning on your own can work, but you are missing a critical piece. Feedback! This is why we put together a community so you can learn and share with others. We are in the community, providing feedback advice and learning :). Join us &lt;a href="https://discourse.agiletechpraxis.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>practices</category>
      <category>design</category>
      <category>agile</category>
      <category>learn</category>
    </item>
    <item>
      <title>Learning a new language</title>
      <dc:creator>Pedro Moreira Santos</dc:creator>
      <pubDate>Mon, 02 Apr 2018 15:10:37 +0000</pubDate>
      <link>https://forem.com/pedromsantos/learning-a-new-language-2k97</link>
      <guid>https://forem.com/pedromsantos/learning-a-new-language-2k97</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9id7m7krqpju1z17cgzc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9id7m7krqpju1z17cgzc.jpg" alt="Music score" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I try to learn or relearn a programming language every 2/3 years. In 2015 I decided to learn a functional language since I knew very little about this programming paradigm. I tried a few languages like OCaml, Haskell, Clojure and F# and finally, I decided to learn F#.&lt;/p&gt;

&lt;p&gt;Learning a new language is a slow process, you learn the syntax and start to write some simple code in that language. In the beginning, you use the new language syntax, but you are still not coding in that language idiom. For this first stage, I usually use coding katas, because of their simplicity. I did a few katas in F# until I felt I had understood the language and its idiom, how to write tests, how to manage dependencies and how to create and build simple projects. If you are interested my F# katas are &lt;a href="https://github.com/pedromsantos/FSharpKatas" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With time you start to program in the language syntax and idiom. When I reach this point I move away from code katas and into a pet project with enough size to push me into really learning the language and the ecosystem around it. I try to choose a pet project that keeps me motivated. For F# I decided to write a music theory and guitar library I named it &lt;a href="https://github.com/pedromsantos/vaughan" rel="noopener noreferrer"&gt;Vaughan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My process to select and learn a new programming language:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decide on what programming paradigm I want to learn or improve

&lt;ul&gt;
&lt;li&gt;Some examples

&lt;ul&gt;
&lt;li&gt;Object-Oriented (Java, C#, ...)&lt;/li&gt;
&lt;li&gt;Functional (Haskell, F#, Clojure, ...)&lt;/li&gt;
&lt;li&gt;Logic (Prolog, ...)&lt;/li&gt;
&lt;li&gt;Procedural (C, Pascal, ...)&lt;/li&gt;
&lt;li&gt;Declarative (SQL, ...)&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Decide what type of applications I would like to build

&lt;ul&gt;
&lt;li&gt;Some examples

&lt;ul&gt;
&lt;li&gt;LOB applications (websites and web apps, mobile apps, enterprise applications)&lt;/li&gt;
&lt;li&gt;System (web servers, operating system, network, low-level stuff :) )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Try a few languages that match the paradigm and the type of application

&lt;ul&gt;
&lt;li&gt;I usually spend a few weeks/months researching matching languages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select the language and start learning it

&lt;ul&gt;
&lt;li&gt;Get recommendations for a starting book or other learning resource&lt;/li&gt;
&lt;li&gt;Find others interested in learning with you and learn together&lt;/li&gt;
&lt;li&gt;Find a mentor to guide you

&lt;ul&gt;
&lt;li&gt;For F# I had my friend and awesome person &lt;a href="https://noodlesandwich.com/" rel="noopener noreferrer"&gt;Samir Talwar&lt;/a&gt; guiding me into the world of functional programming&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use code katas to learn the language (syntax mainly) and ecosystem fundamentals

&lt;ul&gt;
&lt;li&gt;Single abstraction kata examples

&lt;ul&gt;
&lt;li&gt;Fizzbuzz&lt;/li&gt;
&lt;li&gt;LeapYear&lt;/li&gt;
&lt;li&gt;Roman numerals&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Simple multiple abstraction kata examples

&lt;ul&gt;
&lt;li&gt;Bowling&lt;/li&gt;
&lt;li&gt;Tic tac toe&lt;/li&gt;
&lt;li&gt;Game of life&lt;/li&gt;
&lt;li&gt;Mars Rover&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Build a pet project with the new language&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Building &lt;a href="https://github.com/pedromsantos/vaughan/wiki/Documentation" rel="noopener noreferrer"&gt;Vaughan&lt;/a&gt; and learning F# has been a remarkable experience. If you are interested in music and/or guitar check it out.&lt;/p&gt;

&lt;p&gt;Before F# I learned the Swift language and scratched the surface with iOS.&lt;/p&gt;

&lt;p&gt;At the moment I'm again in the process of selecting a language to learn. This time I decided to learn a systems language. I'm undecided between learning Rust or relearning C++ specifically the new C++11/14/17 standards. I did a lot of C++ in the 90's early 2000's but mostly forgot about it. Both languages look exciting.&lt;br&gt;
I already did a few of the mentioned katas in C++ &lt;a href="https://github.com/pedromsantos/cppkatas" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>music</category>
      <category>guitar</category>
      <category>fsharp</category>
    </item>
    <item>
      <title>Should code have an expiry date?</title>
      <dc:creator>Pedro Moreira Santos</dc:creator>
      <pubDate>Sat, 24 Mar 2018 19:37:09 +0000</pubDate>
      <link>https://forem.com/pedromsantos/should-code-have-an-expiry-date-4i0p</link>
      <guid>https://forem.com/pedromsantos/should-code-have-an-expiry-date-4i0p</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Frj9m6w4w3auilfuj2vc3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Frj9m6w4w3auilfuj2vc3.jpg" alt="Expired"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a conversation with a fellow software developer, he stated that all code should have an expiry date. I must say, I like the idea of setting an expiry date for code I write. &lt;/p&gt;

&lt;p&gt;The author(s) perceived quality of code should determine its expiry date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some example questions to consider:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How stable, complete, and validated were/are the requirements (functional and non-functional)&lt;/li&gt;
&lt;li&gt;Was the code rushed to production? Or was it developed with care and attention to detail?&lt;/li&gt;
&lt;li&gt;Is it using an antiquated or experimental technology or exotic/experimental/not widely used programming language?&lt;/li&gt;
&lt;li&gt;Does it have tests?&lt;/li&gt;
&lt;li&gt;Was the code written after the tests?&lt;/li&gt;
&lt;li&gt;Was it reviewed and/or pair programmed?&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answers to the above example questions and others can help determine until what date code is supposed to be used. By stamping the code with an expiry date, a developer or a team makes a statement on the quality practices used to produce it.&lt;/p&gt;

&lt;p&gt;Another question is: who should set the expiry date? The developer? The code reviewer? Some other stakeholder? A combination of all?&lt;/p&gt;

&lt;p&gt;I must say that there is some perversion in this. The expiry date makes anyone using a piece of code after that date responsible for their actions. Like eating yoghurt after the expiry date. You decide if you want to risk eating it or not.&lt;/p&gt;

&lt;p&gt;Thye expiry date should be dynamic, if the code gets revisited, refactored this should have an impact on the expiry date.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

</description>
      <category>code</category>
      <category>codequality</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
