<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ian Cawood Blog]]></title><description><![CDATA[Ian Cawood Blog]]></description><link>https://blog.iancawood.com</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 04:07:23 GMT</lastBuildDate><atom:link href="https://blog.iancawood.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Delving into Paradigms]]></title><description><![CDATA[I won't go too much into the theory here because there are CS courses available online that cover these topics. However, here is a nice video on imperative vs functional programming. Mostly, I will focus on what I've learned in the course so far (imp...]]></description><link>https://blog.iancawood.com/delving-into-paradigms</link><guid isPermaLink="true">https://blog.iancawood.com/delving-into-paradigms</guid><category><![CDATA[programming languages]]></category><category><![CDATA[paradigm]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Ian Cawood]]></dc:creator><pubDate>Sat, 17 Aug 2024 19:35:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/XJXWbfSo2f0/upload/cd94a4e8dd6f53ebd356f31909786299.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I won't go too much into the theory here because there are CS courses available online that cover these topics. However, <a target="_blank" href="https://www.youtube.com/watch?v=sqV3pL5x8PI">here</a> is a nice video on imperative vs functional programming. Mostly, I will focus on what I've learned in the course so far (imperative, object-oriented, and functional). I also will not claim that there is a best programming paradigm but will admit that I have a bias towards functional programming.</p>
<p>During the courses, I learned all three paradigms in <a target="_blank" href="https://www.python.org">Python3</a>, even though it is not that well suited for functional programming. If you'd like to learn functional programming in a nice environment, I would suggest <a target="_blank" href="https://elixir-lang.org">Elixir</a>, and if you'd like to learn a "purer" functional language (and inflict some emotional damage), you can always try <a target="_blank" href="https://www.haskell.org">Haskell</a>.</p>
<p><img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeXA2YTJqOXI5MnMwb2EwMm5iM2VwcDR6cnlmem1qeDZvZTZ1dWEzcSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/WOYKaXG2xJsBO/giphy.gif" alt class="image--center mx-auto" /></p>
<h3 id="heading-imperative">Imperative</h3>
<p>I'll explain as simply as possible how I understand imperative programming. To be honest, the course goes through a subset of imperative programming in the form of procedural programming, but they both satisfy these conditions:</p>
<ul>
<li><p>Use statements that change the program's state.</p>
</li>
<li><p>The developer describes how the program should execute with code.</p>
</li>
</ul>
<p>One of the most popular imperative paradigms is procedural. Procedural code follows a recipe-like flow and is popular for algorithmic programming. Hence, it is used a lot for machine learning applications (this is why Python and R are used in machine learning).</p>
<h3 id="heading-object-oriented">Object Oriented</h3>
<p>The object-oriented paradigm works well in combination with other paradigms like imperative, procedural, and functional. I'm not sure if a pure object-oriented language exists since the imperative paradigm is almost required for object-oriented to work. Here are a couple of important aspects of the object-oriented paradigm:</p>
<ul>
<li><p>Objects consist of data (in the form of attributes) and code (in the form of methods/procedures). Objects interact with each other and can inherit behavior from each other.</p>
</li>
<li><p>Side effects are built into the core design of objects.</p>
</li>
<li><p>Many/most of the widely used languages today support object-oriented paradigms (Python, Java, C#, C++, TypeScript).</p>
</li>
</ul>
<h3 id="heading-functional">Functional</h3>
<p>With its design firmly rooted in academia, functional programming has a special place for anyone with a mathematical background. This is the only declarative paradigm we are looking at here. It focuses more on describing the logic of the end result rather than defining the program step by step as in imperative programming. Functional paradigms have these attributes:</p>
<ul>
<li><p>Functions are first-class citizens (meaning they can be combined, passed around as arguments, and returned from other functions).</p>
</li>
<li><p>Functions minimize or eliminate side effects.</p>
</li>
<li><p>Focuses on composing smaller functions together to achieve complex data manipulation, which makes it very testable.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>There really is no paradigm that can solve all your problems, which is why most languages are multi-paradigm. This should be a good indication that there is no one paradigm that can solve all your problems (well, technically you can, but only if you want more stress). Hopefully, this gives a nice overview with follow-up articles showing what kind of problems we can solve with these paradigms.</p>
]]></content:encoded></item><item><title><![CDATA[Building the foundation]]></title><description><![CDATA[I'm two months into my learning program for boot.dev. It's been a humbling and fun process so far, with me learning some new things about Python, Git, and the shell/terminal. The first couple of courses offered have been simple but also challenging e...]]></description><link>https://blog.iancawood.com/building-the-foundation</link><guid isPermaLink="true">https://blog.iancawood.com/building-the-foundation</guid><category><![CDATA[Python]]></category><category><![CDATA[Git]]></category><category><![CDATA[command line]]></category><category><![CDATA[backend]]></category><dc:creator><![CDATA[Ian Cawood]]></dc:creator><pubDate>Mon, 29 Jul 2024 13:00:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722099578119/ae716d7f-b118-471f-8102-fbb0f0d45c18.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I'm two months into my learning program for <a target="_blank" href="http://boot.dev">boot.dev</a>. It's been a humbling and fun process so far, with me learning some new things about Python, Git, and the shell/terminal. The first couple of courses offered have been simple but also challenging enough for me to learn a few new things. I'll share some of my findings so far, which should help experienced people realize the importance of keeping up to date with the tools they are using. I'm doing as much of the courses as I can during the week. Some weekdays I do nothing and some I can do two hours. Mostly the focus is on learning and having fun.</p>
<h3 id="heading-its-fun-coding-in-python">It's fun coding in Python</h3>
<p>I hadn't touched Python code for about 7 years. The last serious Python code I wrote was in university while taking some algorithms courses. Even then, I never really wrote Object-Oriented Python code. It was mostly focused on imperative and some functional Python code, mainly smaller programs implementing specific algorithms. Suffice it to say, I've never used Python for any full solutions, and so far I'm enjoying seeing what it's capable of. I'm excited to build out a full backend. But before I get there, I took some fundamental courses in Git and the command line where I picked up some new learnings.</p>
<h3 id="heading-command-line-tricks">Command line tricks</h3>
<p>Learning a couple of shortcuts for the command line has been the most rewarding part of the start of the course. From the start of my career, I've probably not spent enough time learning the intricacies of the command line. Mostly, I know enough to be dangerous and to write scripts that can automate repetitive tasks. A lot of command line functions have also been taken over by IDEs like Visual Studio Code, causing you to never really leave the IDE. Of course, working more in the operations space has forced me to learn more about multiple sets of command lines (none of them in great depth). Here are some things I learned during the course.</p>
<ul>
<li><p>A lot of the core shell programs are written to be very functional in a specific thing. Meaning that you can learn programs like <code>grep</code>, <code>find</code>, <code>curl</code>, <code>head</code>, and <code>tail</code> really well.</p>
</li>
<li><p>Learn your own package manager well. On top of this, it is good to know <code>apt</code> as you will encounter it at some point.</p>
</li>
<li><p>Command line tools are fast because they don't use a Graphical User Interface. You should leverage this when you can.</p>
</li>
<li><p>You can spend your whole life configuring your perfect <code>dotfiles</code>, but most likely someone has a pretty good one you can use already.</p>
</li>
<li><p>Shortcuts and aliases are nice, but be sure you know how to use the base tools. You won't always be using your own computer.</p>
</li>
</ul>
<h3 id="heading-gitting-into-it">Gitting into it</h3>
<p>I've used git since the start of my second job. At the beginning, I felt like I learned enough to be competent and understand the core concepts of git. Today, I have a working knowledge and know the core features and how it interacts with GitHub fairly well. I was surprised to learn some new things in the course nonetheless.</p>
<p>First, the course went into the details of the file structure in the .git folder and, more particularly, how git solves the issues of changes and multiple branches. In its design, git doesn't cater to large monorepos, which is why <a target="_blank" href="https://graphite.dev/blog/why-facebook-doesnt-use-git">Facebook</a> doesn't use it.</p>
<p>Second, I learned about the introduction of a safer command to <code>switch</code> between branches. I've always had to teach junior developers the pitfalls of using the <code>checkout</code> command and how it can do more than just switch branches. I won't go too much into the differences between <code>switch</code> and <code>checkout</code> because this <a target="_blank" href="https://graphite.dev/guides/git-checkout-vs-switch">article</a> already does a good job. While <code>checkout</code> is not deprecated yet and <code>switch</code> is an experimental command, I'll enjoy using <code>switch</code> for now knowing that it does exactly what it says.</p>
<h3 id="heading-whats-next">What's next?</h3>
<p>Next, I'll be diving into two core programming paradigms that I've reviewed recently. While I'm familiar with both Object-Oriented and functional programming from before, it's good to review that knowledge and make sure that I can still program effectively in both paradigms.</p>
]]></content:encoded></item><item><title><![CDATA[Realising that I need a fresh start]]></title><description><![CDATA[For the past couple of years, I have been fully focused on learning as much as possible about DevOps tooling. In doing so, my first love in software (programming) has atrophied a bit. Recently, I've started relearning backend software development usi...]]></description><link>https://blog.iancawood.com/fresh-start</link><guid isPermaLink="true">https://blog.iancawood.com/fresh-start</guid><category><![CDATA[Programming Blogs]]></category><category><![CDATA[backend]]></category><dc:creator><![CDATA[Ian Cawood]]></dc:creator><pubDate>Mon, 22 Jul 2024 17:31:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/-fRAIQHKcc0/upload/49af2c33089f32102ce976e95babacec.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the past couple of years, I have been fully focused on learning as much as possible about DevOps tooling. In doing so, my first love in software (programming) has atrophied a bit. Recently, I've started relearning backend software development using the <a target="_blank" href="https://www.boot.dev/">boot.dev</a> platform. The purpose of this series is to document what this process is like for someone already in the industry.</p>
<h3 id="heading-but-why">But why?</h3>
<p>I've been working as a software professional since early 2016, starting first as a software developer and transitioning to DevOps/Platform officially in 2020. I did so mainly because I realized I care more about developer experience than user experience. In doing this, I moved away from development completely and have started to miss that side of the process. So mainly, I want to do this for fun and to learn more about backend development specifically. Not only because it's fun, but also because it will help me become a more well-rounded software professional.</p>
<h3 id="heading-how">How?</h3>
<p>This seems like the easiest part to get to but has been painful to start. I found that the sheer number of courses available makes it difficult to choose which path to take. The first one that has consistently worked for me has been <a target="_blank" href="https://www.boot.dev/">boot.dev</a>. I think this comes down to the <a target="_blank" href="https://blog.boot.dev/about/">motivations</a> of the people who started <a target="_blank" href="https://www.boot.dev/">boot.dev</a>. I've found that the content is really engaging and challenging enough for beginners as well as experienced developers. Hence, I'm looking forward to doing more courses and learning things in more depth. On top of this, I'll be looking into completing 1-2 longer-term projects that I have been wanting to do to supplement other learning goals.</p>
<p>Starting off, I'm not following any specific study plan or allocating a set amount of time per week to any topic or course. When I have some free time, I will work on it as long as I can. For this, <a target="_blank" href="https://www.boot.dev/">boot.dev</a> has already been a good choice with small chunks that can be completed in about 10 minutes. Outside of the main courses, I will dedicate some time to YouTube videos and general documentation reviews. I'm relying on these articles to keep me accountable and maintain steady progress. What has worked well at the start is picking up some tasks when I find myself feeling bored outside of work hours. In short, I'm trying to keep it casual.</p>
<p><img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExM2Q3azIxaDlvZGx6ajVxYTg0aTg5MnNwYWdqM2oxMnRwNWQ1aHNkZiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/pYD6DRZXlSnY5grsm7/giphy.gif" alt class="image--center mx-auto" /></p>
<h3 id="heading-whats-next">What's next?</h3>
<p>I'm documenting the process. It might take 1-2 years in total, but I'm hoping to complete the core boot.dev courses within 12 months. By documenting this journey, I aim to reflect on what works for me and learn more. Maybe I can even help others find processes that work for them too. With the added bonus of sharpening up my writing skills. Any thoughts, constructive criticism, or requests for more details are most welcome.</p>
]]></content:encoded></item></channel></rss>