<?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[All The Code Blog]]></title>
        <description><![CDATA[All The Code Blog]]></description>
        <link>https://allthecode.co</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Sun, 12 Apr 2026 13:38:40 GMT</lastBuildDate>
        <atom:link href="https://allthecode.co/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Top 5 Udemy Courses]]></title>
            <description><![CDATA[<h2>1. <a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.1565838&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fthe-complete-web-development-bootcamp%2F">The Complete 2022 Web Development Bootcamp</a></h2><div class="w-full flex flex-row justify-center"><a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.1565838&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fthe-complete-web-development-bootcamp%2F" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:300px;height:166px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fangela.png&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fangela.png&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fangela.png&amp;w=640&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><h2>2. <a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.857010&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Flearn-ethical-hacking-from-scratch%2F">Learn Ethical Hacking From Scratch</a></h2><div class="w-full flex flex-row justify-center"><a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.857010&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Flearn-ethical-hacking-from-scratch%2F" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:300px;height:166px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fethical%20hacking.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fethical%20hacking.jpg&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fethical%20hacking.jpg&amp;w=640&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><h2>3. <a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.793796&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fmicrosoft-excel-2013-from-beginner-to-advanced-and-beyond%2F">Microsoft Excel - Excel from Beginner to Advanced</a></h2><div class="w-full flex flex-row justify-center"><a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.793796&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fmicrosoft-excel-2013-from-beginner-to-advanced-and-beyond%2F" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:300px;height:166px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fexcel.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fexcel.jpg&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fexcel.jpg&amp;w=640&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><h2>4. <a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.950390&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fmachinelearning%2F">Machine Learning A-Z: Hands-On Python &amp; R In Data Science</a></h2><div class="w-full flex flex-row justify-center"><a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.950390&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fmachinelearning%2F" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:300px;height:166px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2FML.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2FML.jpg&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2FML.jpg&amp;w=640&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><h2>5. <a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.567828&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fcomplete-python-bootcamp%2F">2022 Complete Python Bootcamp From Zero to Hero in Python</a></h2><div class="w-full flex flex-row justify-center"><a href="https://click.linksynergy.com/link?id=ZsVWotymlGs&amp;offerid=1060092.567828&amp;type=2&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fcomplete-python-bootcamp%2F" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:300px;height:166px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fpython.png&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fpython.png&amp;w=640&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fpython.png&amp;w=640&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>Links to these courses are affiliate links and so I may receive a small commission if you purchase one</p>]]></description>
            <link>https://allthecode.co/blog/post/top-5-udemy-courses</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/top-5-udemy-courses</guid>
            <pubDate>Thu, 17 Nov 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[SSG vs SSR vs SPA: What Does It All Mean?]]></title>
            <description><![CDATA[<p>Learning web development isn&#x27;t just about HTML, CSS and JavaScript.</p><p>No, it&#x27;s also about understanding how the web works and, to a certain extent what got us here.</p><p>There has been a real push in the last couple of years to bring back and rely on some older, core technologies of the web. We are hearing a lot of discussion of technologies that seem new but are really just a fantastic modern implementation of tried and tested approaches that have been around for a long time.</p><p>In this post we are going to explore static sites, server side rendered sites and single page applications and how they fit together in the coming years.</p><h2>Browsing the web</h2><p>When you type a url into your browser address bar you are saying “hey, whatever thing lives here …. I want it”</p><p>What is returned is a stream of data with some clues to tell your browser “what” it’s being sent so that it knows what to do with it.</p><p>Once that data is received your browser will show you it in the best way possible for that content type.</p><p>An HTML file will be rendered as a web page, a JSON object will be displayed as text and a directory of files will look like a file explorer.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p>You can see this yourself by opening a web browser and typing the path to a folder on your computer into the address bar.</p><p><code>file:///Users/simon/Developer/</code></p><p>This path on my machine shows me a list of all my developer projects as a folder tree ... but in my browser!</p></div><h2>Static Content</h2><p>In the early days of the web it was just files on computers that other computers could look at. Your browser would request an HTML file in a specific directory on a remote computer, and that computer would serve that request. Hence the name server. It’s just a fancy word for “another computer that will listen to me and send me stuff”.</p><p>These files were just HTML text that your browser would render as a webpage. If the owner of the files wanted to change anything they would need to edit the relevant HTML file and save it.</p><p>Hence the name static, if the file never changed, then you would get the same content every time. This was a Static Site. There are now tools to help us generate all these files in a more manageable way and the concept is called Static Site Generation …. But I’m jumping ahead.</p><h2>Server Side Rendering (SSR)</h2><p>The problem with static sites is that content can’t be customised in anyway to the user and all content needs to be in a file. Well a server is just a computer, so we realised that rather than sending a request for an HTML file, we could instead send a request to program/application that creates HTML on the fly and sends it back to your browser.</p><p>As far as your browser knows, it has been sent HTML so it knows to render it as a web page BUT the server now runs a small program (written in PHP, Java or, more recently, Python or JavaScript) that creates the HTML. This app can be as simple as a templating system, where it grabs some HTML for the header, some HTML for the footer and then inserts the content the user actually want in the middle OR it can be as full featured as Facebook or Amazon.</p><p>Suddenly the web could be a whole lot more dynamic as we were rendering our HTML on the server on a per request basis and sending it back to the client AS IF they had just requested a static web page.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p>The initial frameworks to help developers make SSR sites was <a href="https://www.djangoproject.com/">Django</a> for Python, <a href="https://symfony.com/">Symfony</a> for PHP and <a href="https://rubyonrails.org/">Ruby on Rails</a> for Ruby.</p></div><p>This was the start of the modern web, but we needed one more thing to really bring on the Web2.0 revolution.</p><h2>AJAX</h2><p>Probably one of the coolest acronyms in the tech industry, it stands for, Asynchronous JavaScript and XML. Forget about the XML bit for the purposes of this discussion, and focus on Asynchronous JavaScript as it was a GAME CHANGER.</p><p>We already had JavaScript and it was able to do some interesting and fun things on an HTML web page, but it’s capabilities were pretty limited.</p><p>Up to now, that HTML page we’ve been talking about that your browser receives (static or server rendered) would come with links to other files that the browser needed to fetch as well. And those links might include JavaScript files that your browser would request form the server, receive and then execute.</p><p>But what that JavaScript could do was constrained to just your browser.</p><p>Until AJAX.</p><p>This technology allowed developers to write JavaScript that could request content from the server WITHOUT having to refresh the webpage you were on.</p><p>This meant you could click a button and instead of causing a page navigation, it would instead send a request to the server for some data. When that data came back the JavaScript that sent the request could process the data and update the webpage …. without a page refresh.</p><p>Initially it was clunky and limited BUT finally web pages could function like desktop apps … The age of the web app was born.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p><a href="https://jquery.com/">JQuery</a> was the core framework/library to do all of this back in the day.</p></div><h2>Single Page Application (SPA)</h2><p>As we built upon AJAX and worked out the kinks, we started to realise that if JavaScript could make requests to a server AND it has access to the full browser page the user is looking at …. then why don’t we get JavaScript to render webpages for us, in the browser?</p><p>And this is exactly what React, Angular and Vue do for us. When you go to a webpage for a site using one of these you are sent a single HTML file that tells the browser to get a single (usually quite large) JavaScript file.</p><p>When that JavaScript file is received the browser executes it and then it gets VERY busy.</p><p>That JavaScript file starts requesting data from the server and telling the browser to render different bits of HTML as the data streams in. When you click a button that same JavaScript captures the click event, does what it needs to do and then updates the HTML on the page as required.</p><p>In fact, when you click a link on these sites you don’t actually do a page navigation, the JavaScript usually captures this event, requests the data it needs from the server and then renders the correct HTML so it looks like a new page.</p><p>“BUT Simon!” I hear you say, “the address bar changes so I must be on a new page”</p><p>Yeh, the JavaScript rewrites that so it looks like you navigated to a new page, you didn’t really!</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p><a href="https://reactjs.org/">React</a>, <a href="https://angular.io/">Angular</a> and <a href="https://vuejs.org/guide/introduction.html">Vue</a> are frameworks that help you make SPAs.</p></div><h2>Bringing it home</h2><p>So that’s the history of the web, where does this leave us now?</p><p>Well static sites are incredibly fast, but they have limited interaction and updating the content can be a pain. There is also no concept of “logged in” with a static site, the content is freely available to the whole internet.</p><p>Server side rendered apps solve the dynamic problem holding static sites back AND they can have the concept of user accounts and not making everything public, BUT they can be clunky to navigate around and page loads are a pain.</p><p>Single page applications solve the problem of page loads and also have the concept of user accounts and making sure content isn’t completely public BUT that initial JavaScript load can be really big, very slow and pretty bad for search engine optimisation.</p><h2>What is to be done?</h2><p>Enter the full stack JavaScript framework.</p><p>Full stack JavaScript frameworks aim to combine all of the benefits of the above three concepts into a single framework with great developer and user experience.</p><ul><li>They can combine aspects of Static Site Generation (SSG) for the parts of your site that are public and need to be FAST.</li><li>They offer Server Side Rendering (SSR) for initial page loads that require data from a database or from another service.</li><li>They the then drive the browser side interactions and data fetching with the Single Page Application (SPA) technology of React to make sure it feels modern and interactive like people have come to expect.</li></ul><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p>The main full stack JavaScript frameworks currently are <a href="https://nextjs.org/">NextJS</a>, <a href="https://redwoodjs.com/">ReadwoodJS</a>, <a href="https://blitzjs.com/">BlitzJS</a> and <a href="https://www.gatsbyjs.com/">Gatsby</a></p></div><h2>Learning path</h2><p>These technologies will drive the future of the web, but first you need to learn the underlying concepts of HTML, CSS, JavaScript.</p><p>So if you’re still learning then stay the path on those.</p><p>Don’t worry if you didn’t understand all of the above, this is a very high level (which is a fancy way of saying vague 🤣) explanation aimed at raising your awareness so that when you hear these terms you understand how they fit into the bigger web development picture.</p><p>90% of being a good web developer is knowing something exists so you can deep dive on it when you need to.</p><h2>Project</h2><p>If you’re looking for a project where you can see many of these concepts in action and build a page up from scratch, add functionality in JavaScript and then start interacting with APIs and third part services then my link tree series is for you. We build up a social media link tree from HTML and CSS, adding JavaScript, integrating with Mailchimp, Stripe and Supabase and then wrapping up with deployment to Vercel for hosting!</p><p>Part 1 is on YouTube 😀</p><div class="mt-4 mx-auto"><div class="video-responsive"><iframe width="853" height="480" src="https://www.youtube.com/embed/8zxMadB8qxE" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded youtube"></iframe></div></div>]]></description>
            <link>https://allthecode.co/blog/post/ssr-vs-ssg-vs-spa-what-does-it-all-mean</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/ssr-vs-ssg-vs-spa-what-does-it-all-mean</guid>
            <pubDate>Fri, 17 Jun 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Setting Up WeatherKit REST API In NodeJS]]></title>
            <description><![CDATA[<div class="mt-4 mx-auto"><div class="video-responsive"><iframe width="853" height="480" src="https://www.youtube.com/embed/7mg42_Fix9k" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded youtube"></iframe></div></div><p><a href="https://developer.apple.com/weatherkit/get-started/">WeatherKit</a> is Apple&#x27;s new weather data service, announced at WWDC 2022 it is the their answer to privacy focussed weather data. Not only have they created this for use in native iOS Swift apps but they have also created a REST API so that web developers are able to access it as well.</p><p>In fact, it&#x27;s where this widget is getting its weather data from - if you reload the page it might change depending on how turbulent London&#x27;s weather is right now.</p><div class="container max-w-3xl mx-auto"><div class="warm-card max-w-md mx-auto gap-y-4 rounded flex flex-col p-8"><div class="text-xl font-bold text-center">Current Weather: London</div><div class="text-7xl font-black text-center text-sky-500">12<span class="font-thin">℃</span></div><div class="flex flex-row justify-between"><div class="flex flex-col text-center w-1/3"><div id="wind" class="text-3xl font-bold">15</div><div class="text-3xl">Wind</div></div><div class="flex flex-col text-center w-1/3"><div class="text-3xl font-bold">2</div><div class="text-3xl">UV</div></div><div class="flex flex-col text-center w-1/3"><div class="text-3xl font-bold">50%</div><div class="text-3xl">Cloud</div></div></div><div class="text-center text-sm mt-4">Weather data provided by <a href="https://weather-data.apple.com/legal-attribution.html">Apple WeatherKit</a></div></div></div><p>The <a href="https://developer.apple.com/documentation/weatherkitrestapi">WeatherKit REST API Documentation</a> is fairly limited on how to get this set up so here is a guide to get up you up and running with Apple&#x27;s WeatherKit. In fact, I had a labs call with two Apple engineers to get this working which was pretty cool. We will build a simple ExpressJS server and a index.html page to display weather for a set location.</p><p>UPDATE: Apple have since updated their documentation on this topic including adding a page on the <a href="https://developer.apple.com/documentation/weatherkitrestapi/request_authentication_for_weatherkit_rest_api">JWT creation</a> that was such a pain before.</p><h2>WeatherKit REST API setup</h2><p>The REST API requires a signed JWT to be attached to each request. To set this up you need:</p><ul><li>A paid developer account</li><li>An App Identifier</li><li>A key</li></ul><p>You can set up an App Identifier on the <a href="https://developer.apple.com/account/resources/identifiers/list">Identifiers</a> page of your developer account. You need to create a new <code>App ID</code> of type App, give it a <code>Bundle ID</code> in reverse-domain name style, so <code>com.myapp.weather</code> or similar, and then make sure you select WeatherKit from the App Services tab. This App Identifier can take about 30 minutes to propagate through Apple&#x27;s systems.</p><p>For the key you go to the <a href="https://developer.apple.com/account/resources/authkeys/list">Keys</a> page in your developer account and add a new key with WeatherKit selected. Remember to download the key file you get at the end!</p><h2>WeatherKit REST API JWT</h2><p>Now you have your key and App Identifier we can create a server to sign that key. You will be signing the JWT yourself so you will need a backend/server where you can execute your code, as always <strong>do not expose your key to the browser or client</strong></p><p>So, let&#x27;s create a little ExpressJS server. Comments in the code explain what is going on. I&#x27;m assuming you know how to use <a href="https://expressjs.com/">ExpressJS</a> already.</p><pre><code class="language-javascript">const express = require(&quot;express&quot;);
const axios = require(&quot;axios&quot;);
const fs = require(&quot;fs&quot;);
const jwt = require(&quot;jsonwebtoken&quot;);
var cors = require(&quot;cors&quot;);

const app = express();
const port = 3000;

app.use(cors());

app.get(&quot;/&quot;, async (req, res) =&gt; {
  // This is the key file you downloaded from Apple
  var privateKey = fs.readFileSync(&quot;YOUR KEY FILE FROM DEVELOPER CENTER.p8&quot;);

  // Creating the signed token needs specific data
  var token = jwt.sign(
    {
      sub: &quot;APP ID&quot;, // the reverse URL App Id you made above
    },
    privateKey,
    {
      issuer: &quot;TEAM ID&quot;, // find your TeamID in your developer account
      expiresIn: &quot;1h&quot;, // give it 1 hour of validity
      keyid: &quot;KEY ID&quot;, // this is the ID for the key you created
      algorithm: &quot;ES256&quot;, // this is the algorithm Apple used
      header: {
        // see details below for this
        id: &quot;YOUR TEAM ID.YOUR APP ID&quot;,
      },
    }
  );

  // log your token so you can decode it and manually check it&#x27;s ok, more below on this
  //console.log(token);

  const url =
    &quot;https://weatherkit.apple.com/api/v1/weather/en/51.677612/-2.937941?dataSets=currentWeather&amp;timezone=Europe/London&quot;;

  // add the token to your headers
  const config = {
    headers: { Authorization: `Bearer ${token}` },
  };

  // get the data
  const { data: weatherData } = await axios.get(url, config);

  // prove we have data
  //console.log(weatherData);

  // return the data to your front end
  res.json(weatherData);
});

app.listen(port, () =&gt; {
  console.log(`Example app listening on port ${port}`);
});
</code></pre><p>Your decoded JWT needs to look like this:</p><pre><code class="language-javascript">{
  &quot;header&quot;: {
    &quot;alg&quot;: &quot;ES256&quot;,
    &quot;typ&quot;: &quot;JWT&quot;,
    &quot;kid&quot;: &quot;KEY_ID&quot;,
    &quot;id&quot;: &quot;TEAM_ID.APP_ID&quot; // this is the bit that has been tricking people up
  },
  &quot;payload&quot;: {
    &quot;subj&quot;: &quot;APP_ID&quot;,
    &quot;iat&quot;: 1654823790,
    &quot;exp&quot;: 1654827390,
    &quot;iss&quot;: &quot;TEAM_ID&quot;,
  },
  &quot;signature&quot;: &quot;D108jNki1tXX3mSYOAPp-Wpds8kEbGJ-lhKPtasdfSqoDyiJ2WbeI6U73UWCYWQgISlDOzaXdI5rSrSFcrg5g&quot;
}
</code></pre><p>To get <code>id</code> in the header I needed to set it manually when creating the JWT, Apple is looking for <code>id</code> in the header and depending on your JWT signing library of choice that may not (probably won&#x27;t) be there by default.</p><pre><code class="language-javascript"> header: {
    id: &quot;YOUR TEAM ID.YOUR APP ID&quot;, // see details below for this
},
</code></pre><h2>WeatherKit REST API Front end</h2><p>To call the serve end point you can use the code below in an <code>index.html</code> to make a simple front end that starts with default data and then adds in the data from weather kit.</p><p>I&#x27;ve included <a href="https://axios-http.com/docs/intro">Axios</a> with a CDN link on line 5 and then line 11 pulls in <a href="https://tailwindcss.com/">TailwindCSS</a> via a CDN as well for quick and easy styling and explains why the HTML tags have so many classes on them.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot; /&gt;
    &lt;script
      src=&quot;https://cdnjs.cloudflare.com/ajax/libs/axios/1.0.0-alpha.1/axios.min.js&quot;
      integrity=&quot;sha512-xIPqqrfvUAc/Cspuj7Bq0UtHNo/5qkdyngx6Vwt+tmbvTLDszzXM0G6c91LXmGrRx8KEPulT+AfOOez+TeVylg==&quot;
      crossorigin=&quot;anonymous&quot;
      referrerpolicy=&quot;no-referrer&quot;
    &gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdn.tailwindcss.com&quot;&gt;&lt;/script&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;
    &lt;title&gt;Weather Kit Example&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class=&quot;container max-w-3xl mx-auto p-8&quot;&gt;
      &lt;h1 class=&quot;text-3xl text-center font-bold text-gray-700&quot;&gt;All The Code&lt;/h1&gt;
      &lt;div
        class=&quot;shadow-lg shadow-black/40 w-[400px] p-4 mx-auto mt-10 rounded flex flex-col gap-y-6&quot;
      &gt;
        &lt;h2 class=&quot;text-xl font-bold text-center&quot;&gt;Current Weather&lt;/h2&gt;
        &lt;div class=&quot;text-7xl font-black text-center&quot;&gt;
          &lt;span id=&quot;temperature&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;font-thin&quot;&gt;&amp;#8451;&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;flex flex-row justify-between&quot;&gt;
          &lt;div class=&quot;flex flex-col text-center w-1/3&quot;&gt;
            &lt;div id=&quot;wind&quot; class=&quot;text-3xl font-bold&quot;&gt;17.5&lt;/div&gt;
            &lt;div class=&quot;text-3xl&quot;&gt;Wind&lt;/div&gt;
          &lt;/div&gt;
          &lt;div class=&quot;flex flex-col text-center w-1/3&quot;&gt;
            &lt;div id=&quot;uv&quot; class=&quot;text-3xl font-bold&quot;&gt;0&lt;/div&gt;
            &lt;div class=&quot;text-3xl&quot;&gt;UV&lt;/div&gt;
          &lt;/div&gt;
          &lt;div class=&quot;flex flex-col text-center w-1/3&quot;&gt;
            &lt;div class=&quot;text-3xl font-bold&quot;&gt;&lt;span id=&quot;cloud&quot;&gt;81&lt;/span&gt;%&lt;/div&gt;
            &lt;div class=&quot;text-3xl&quot;&gt;Cloud&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;text-center mt-10&quot;&gt;
        Weather data provided by
        &lt;a href=&quot;https://weather-data.apple.com/legal-attribution.html&quot;
          &gt;Apple WeatherKit&lt;/a
        &gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;

  &lt;script&gt;
    // add the below script in here
  &lt;/script&gt;
&lt;/html&gt;
</code></pre><p>The JavaScript to get the data</p><pre><code class="language-javascript">axios
  .get(&quot;http://localhost:3000&quot;, {
    headers: { &quot;Access-Control-Allow-Origin&quot;: &quot;*&quot; },
  })
  .then((res) =&gt; {
    let temp = document.getElementById(&quot;temperature&quot;);

    temp.innerHTML = res.data.currentWeather.temperature;

    if (parseFloat(res.data.currentWeather.temperature) &lt; 15) {
      temp.classList.add(&quot;text-blue-500&quot;);
    } else {
      temp.classList.add(&quot;text-red-500&quot;);
    }

    document.getElementById(&quot;wind&quot;).innerHTML =
      res.data.currentWeather.windSpeed;
    document.getElementById(&quot;uv&quot;).innerHTML = res.data.currentWeather.uvIndex;
    document.getElementById(&quot;cloud&quot;).innerHTML =
      res.data.currentWeather.cloudCover * 100;
  });
</code></pre><p>When this page loads it will request weather data from Apple via your server with a sign JWT 😊</p>]]></description>
            <link>https://allthecode.co/blog/post/setting-up-weatherkit-rest-api-in-node-js</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/setting-up-weatherkit-rest-api-in-node-js</guid>
            <pubDate>Fri, 10 Jun 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Ultimate Web Developer Terminal Setup]]></title>
            <description><![CDATA[<div class="mt-4 mx-auto"><div class="video-responsive"><iframe width="853" height="480" src="https://www.youtube.com/embed/3pFlEtYru88" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded youtube"></iframe></div></div><p>As a web developer your terminal is a core part of you toolkit. I recently had to reformat my Mac and that meant I had to setup my terminal again from scratch. I could have pieced it together from a back up but I thought it would be a good opportunity to start over and see what&#x27;s changed in the years since I last did this.</p><p>This is what I got to, looks pretty nice right?</p><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:24.35483870967742%"></span><img alt="customized terminal for javascript development" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="customized terminal for javascript development" sizes="100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=640&amp;q=75 640w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=750&amp;q=75 750w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=828&amp;q=75 828w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=3840&amp;q=75 3840w" src="/_next/image?url=%2Fimages%2Fblog%2Fiterm2-look.png&amp;w=3840&amp;q=75" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span><p>Let&#x27;s look at that line, it tells me:</p><ul><li>All-The-Code-Website is the current working directory</li><li>on main tells me I&#x27;m on the main git branch</li><li>[$!+] tells me some git statuses, I have <code>$</code> stashed changes (that&#x27;s never good!), <code>!</code> unstaged changes and <code>+</code> uncommitted changes</li><li>on version 0.1.0 of the site</li><li>running node version 16.15.0</li></ul><p>Handy right? Let&#x27;s look at how I made this and at some key terms along the way.</p><h2>Terminal App</h2><p>I use two terminal apps:</p><ol><li><a href="https://www.iterm2.com/">iTerm2</a> - one of the most powerful and extendible terminal apps for the Mac</li><li>The one built into VSCode</li></ol><p>A terminal is the name given to an application that runs a shell - we will cover the shell next. There is one that comes with MacOS but it&#x27;s not great</p><p>So, go download <a href="https://www.iterm2.com/">iTerm2</a>.</p><div class="bg-red-100
  rounded-2xl
  border-2
  border-red-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-red-800
  prose-p:text-red-800
  prose-li:text-red-800
  prose-a:text-sky-600
  "><p>This is a fairly Mac specific post however it looks like a similar set up is possible on Windows if you use <a href="https://docs.microsoft.com/en-us/windows/wsl/install">WSL</a> and a terminal app like <a href="https://hyper.is/">Hyper</a> or <a href="https://tabby.sh/">Tabby</a>.</p></div><h2>Command Shell: ZSH</h2><p>The default command shell on MacOS is now ZSH. It used to be Bash but this changed with the release of MacOS Catalina. Both are different types of the same thing, a shell.</p><p>A shell is the interface you are using to interact with you computer within your terminal app. You type commands into the terminal and the shell executes the commands and displays the results to your terminal app.</p><h2>Oh My Zsh</h2><p><a href="https://github.com/ohmyzsh/ohmyzsh">Oh My ZSH</a> is a great tool that makes your ZSH shell much, much more powerful 🚀 and who wouldn&#x27;t want that? There are hundreds of <a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins">plugins</a> available for Oh My Zsh that make you a better developer.</p><p>Let&#x27;s get Oh My Zsh installed, open up iTerm2 and enter the following:</p><pre><code class="language-sh">sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&quot;
</code></pre><p>After a few seconds it will be installed ... welcome to having more power!</p><h3>.zshrc</h3><p>You should now have a new file in your home directory <code>.zshrc</code>. Find out by typing this in to your terminal:</p><pre><code class="language-sh">cd ~
ls -a
</code></pre><p>Line 1 takes you to your home directory, line 2 lists (<code>ls</code>) the contents of that directory and the <code>-a</code> flag makes sure you see all files, even hidden ones (which is what the <code>.</code> at the start of <code>.zshrc</code> does)</p><div class="bg-red-100
  rounded-2xl
  border-2
  border-red-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-red-800
  prose-p:text-red-800
  prose-li:text-red-800
  prose-a:text-sky-600
  "><p>If you don&#x27;t see a <code>.zshrc</code> file then create it with <code>touch .zshrc</code> and then open it with your favorite code editor (if you have VScode installed you can do <code>code .zshrc</code>). I can&#x27;t imagine this happening though as it should get created with the installation.</p></div><p>If you quit and restart your terminal app you should notice things look a littler different already.</p><h3>Plugins</h3><p>Let&#x27;s add some plugins to Oh My Zsh to step things up.</p><p>Find this line in your <code>.zshrc</code>:</p><pre><code class="language-sh">plugins=(git)
</code></pre><p>and change it to this:</p><pre><code class="language-sh">plugins=(git copypath dirhistory macos sudo common-aliases gitignore history)
</code></pre><p>As follows:</p><ul><li>git: handy git details right in your command prompt</li><li>copypath: simply type <code>copypath</code> and the current working directory is not in your clipboard</li><li>dirhistory: use <code>alt + up</code> and <code>alt + down</code> to navigate your directory structure</li><li>macos: handy Mac specific utilities</li><li>sudo: run a command that needs <code>sudo</code> at the start and you didn&#x27;t add it, hit esc twice and now you do, along with the command you tried to run</li><li>common-alias: does what it says on the tin</li><li>gitignore: no more searching online for <code>.gitignore</code> templates, type <code>gi list</code> to see all that are available</li><li>history: type <code>h</code> to see your command history</li></ul><p>Go check out the docs on all these. You can find them in the Oh My Zsh <a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins">plugins wiki</a>.</p><p>You need to tell ZSH to reread the <code>.zshrc</code> file, to do that type this into your terminal:</p><pre><code class="language-sh">source ~/.zshrc
</code></pre><h3>Themes</h3><p>The standard Oh My Zsh theme is ok but my favorite is one we need to install separately - SpaceShip 🚀 check out the <a href="https://github.com/spaceship-prompt/spaceship-prompt">SpaceShip theme GitHub repo</a> and then come back and we&#x27;ll install it!</p><p>We need to install <a href="https://github.com/powerline/fonts">PowerLine fonts</a> first. Enter the following in to your terminal:</p><pre><code class="language-sh">git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
cd ..
rm -rf fonts
</code></pre><p>Great, now we can install SpaceShip! Enter the following into your terminal to clone the repo and save it to the ZSH themes directory in one go:</p><pre><code class="language-sh">git clone https://github.com/spaceship-prompt/spaceship-prompt.git &quot;$ZSH_CUSTOM/themes/spaceship-prompt&quot; --depth=1
</code></pre><p>Then symlink it to your Oh My Zsh themes directory with this command:</p><pre><code class="language-sh">ln -s &quot;$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme&quot; &quot;$ZSH_CUSTOM/themes/spaceship.zsh-theme&quot;
</code></pre><p>Now set the theme in your <code>.zshrc</code> file <code>ZSH_THEME=&quot;spaceship&quot;</code></p><p>Finally to get the font set up correctly jump back to iTerm2, open preferences go to Profiles and then Text and choose the font you want. It needs to be one of the Powerline fonts for everything to look right.</p><span style="box-sizing:border-box;display:block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;padding-top:56.208530805687204%"></span><img alt="Iterm2 settings screen" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="responsive" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Iterm2 settings screen" sizes="100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=640&amp;q=75 640w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=750&amp;q=75 750w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=828&amp;q=75 828w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=3840&amp;q=75 3840w" src="/_next/image?url=%2Fimages%2Fblog%2Fiterm2-preferences.png&amp;w=3840&amp;q=75" decoding="async" data-nimg="responsive" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span><h4>VSCode</h4><p>To get fonts working in VSCode you will need to open up the settings file in JSON mode: <code>CMD + Shift + P</code> and select the JSON settings options. Then add these lines to the end of the settings file before the closing <code>}</code>.</p><pre><code class="language-json">&quot;terminal.integrated.defaultProfile.osx&quot;: &quot;zsh&quot;,
&quot;terminal.external.osxExec&quot;: &quot;iTerm2.app&quot;,
&quot;terminal.integrated.fontFamily&quot;: &quot;Fira Mono for Powerline&quot;,
&quot;terminal.integrated.fontSize&quot;: 12,
&quot;terminal.integrated.env.osx&quot;: {
    &quot;LC_ALL&quot;: &quot;C.UTF-8&quot;
}
</code></pre><p>That last list is to make sure emoji render properly in VSCode, it&#x27;s still hit and miss but it helps.</p><p>Again run <code>source ~/.zshrc</code> and checkout your beautiful new terminal 🚀🥳</p><h3>Wrap up</h3><p>So there you go, you&#x27;ve gone from a boring looking terminal to a modern, colorful one and learned some Linux commands along the way! This obviously isn&#x27;t the most important thing in the world, however your terminal is a key tool in your developer toolbox and having it as good as possible is nice.</p>]]></description>
            <link>https://allthecode.co/blog/post/ultimate-web-developer-developer-terminal</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/ultimate-web-developer-developer-terminal</guid>
            <pubDate>Thu, 02 Jun 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What is Docker?]]></title>
            <description><![CDATA[<div class="mt-4 mx-auto"><div class="video-responsive"><iframe width="853" height="480" src="https://www.youtube.com/embed/8HC55U8Op-s" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded youtube"></iframe></div></div><p>No matter where you are in your web development journey, there is a strong chance you have heard of Docker. Docker has grown from humble beginnings, as an internal tool for a web hosting company, to becoming a core tenant of modern web development. But, what is Docker?</p><p>In this post I will explain exactly what Docker is with a fun analogy. Then we will run through a small example to show you its power and why it&#x27;s worth your time to know. From keeping a consistent developer experience to making deployments easier there are a number of benefits to using it.</p><p>Now, let&#x27;s dive in.</p><h2>Contents</h2><ol><li><a href="#dockerExplained">Docker explanation and analogies</a></li><li><a href="#dockerExample">Example of NodeJS server in Docker container</a></li></ol><h2 id="dockerExplained">Docker Explained</h2><p>Put simply, Docker is a way for you to make sure your web application has all the things it needs to be able to run, no matter what computer you put it on. Docker means consistency.</p><p>If the computer in question has the Docker runtime installed, then it can run your app.</p><p>In fact, this idea has it&#x27;s own name:</p><p><strong>Containerisation</strong></p><p>Docker is just the most popular flavour of containerisation.</p><h3>So what is containerisation?</h3><p>When you write software, you rely on lots of other code. Even if you write everything yourself and pull in no libraries or frameworks, you are still relying on the operating system having everything you need to run your application.</p><p>This is true of all software. Be it an iPhone app or a server application running in the cloud. This is why you see descriptions in App Stores say they need at least iOS 15, or Windows 11.2. The code inside the application will be dependent on the operating system having certain capabilities that aren&#x27;t available on early versions.</p><p>When you are developing your own apps this sort of thing can become quite the pain in the ass, because not only is your software dependent on things in the operating system but also other things that you add into the mix, like environment variables and specific settings.</p><p>All these requirements can make it difficult to know exactly what setup is required to make an application run somewhere new. And unless you are making a little tool for yourself, your code will eventually need to run somewhere else!</p><h3>Containerisation makes all of these problems go away</h3><p>Let&#x27;s look at an analogy for containerisation</p><p>In my garage I am fortunate enough to have a pretty good home gym. Squat rack, barbells, pull up bar, dumbbells, all sorts of things. No matter the gym session I want to do I can go in there and have a great workout.</p><p>In no single session do I use all the equipment I have, in fact some things will go weeks between uses, they aren&#x27;t required for every session but eventually everything gets used.</p><p>In this example you can think of my garage as my own computer. Everything I need, no matter what I&#x27;m doing, customised in any number of ways that I can&#x27;t remember.</p><p>Now, let&#x27;s say I want to go and do a specific workout somewhere else. I&#x27;m going away with family and I want to be able to have a good workout everyday.</p><p>I don&#x27;t need every item in my gym to have a good workout, I just need certain items to take with me. So, I grab some kind of container, like a big box, and put inside it all the items I will need. Let&#x27;s grab</p><ul><li>two sets of dumbbells (heavy and light)</li><li>two resistance bands</li><li>a single weight plate</li><li>a skipping rope.</li></ul><p>Not much, but plenty for a good, specific workout, in fact I&#x27;m going to put a print out of a workout in the container as well. Also let&#x27;s write on the outside of the container where to start:</p><blockquote><p>Start workout with the first exercise in the instructions</p></blockquote><p>Now, so long as I have that container with me I can always do the workout in the box.</p><p>In fact, since all of the dependencies are in the container, anyone who knows how to open the box and read the instructions could do it, anywhere in the world, and they would have the same great workout as me.</p><p>Well, that&#x27;s exactly what Docker is.</p><p>In this analogy:</p><ul><li>The box is the Docker container</li><li>The workout items are the dependencies your code needs</li><li>The workout instruction are your code</li><li>The command on the outside of the box is the start command for your application</li><li>And the &quot;any person who can read&quot; is the equivalent to a computer with the docker runtime installed on it</li></ul><h2 id="dockerExample">Docker NodeJS Example</h2><p>Firstly we need a simple application to run. Let&#x27;s whip up a small NodeJS server really quickly. Create a new directory anywhere on your machine.</p><pre><code class="language-sh">mkdir dockerExample
</code></pre><p>Go into that directory and run.</p><pre><code class="language-sh">cd dockerExample
npm init
</code></pre><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><p>This example assumed you have NodeJS installed, if you don&#x27;t then head to the <a href="https://nodejs.org/">NodeJS website</a> and install the LTS version for your system.</p></div><p>Hit enter to set all the defaults.</p><p>We are going to make a simple server so we&#x27;ll use Express. Run:</p><pre><code class="language-sh">npm i express
</code></pre><p>Now create an index.js file in your project</p><p>And add the following code:</p><pre><code class="language-js">const express = require(&quot;express&quot;);
const app = express();
const port = 3001;

(async () =&gt; {
  app.get(&quot;/&quot;, async (req, res) =&gt; {
    res.send(&quot;Hello from Docker&quot;);
  });

  app.listen(port, () =&gt; {
    console.log(`Listening on port ${port}`);
  });
})();
</code></pre><p>You can now run this small server from your terminal with:</p><pre><code class="language-sh">node index.js
</code></pre><p>You will get a message in your terminal like the below:</p><pre><code class="language-sh">Listening on port 3001
</code></pre><p>and if you go to <a href="http://localhost:3001">http://localhost:3001</a> in a web browser you will see the following message:</p><blockquote><p>Hello from Docker</p></blockquote><p>Which is a bit of a lie because right now this is not yet in Docker.</p><h3>Adding Docker</h3><p>First thing we need to do is install Docker to your machine. Go to the <a href="https://docs.docker.com/get-docker/">Docker website</a> and select the correct choice for your operating systemm</p><p>Once downloaded and you&#x27;ve launched the Docker app we can get going.</p><h3>Docker file vs image vs container</h3><p>Now you have Docker running you can run Docker containers. Like I said above, these are little containers that run your code in a portable, isolated way.</p><p>But before you get to a container there are two other things you need to know about, a docker file and a docker image.</p><ul><li>A Docker file is what you write that lays out what you want your Docker container to be.</li><li>A Docker image is all the code bundled up ready to run whenever you need it. This is like any other application on your computer, Docker will grab this and turn it in to a running container when you want it.</li></ul><p>Let&#x27;s start with the file.</p><h3>Docker file</h3><p>Add a file to your project, in the same directory as index.js called <code>Dockerfile</code> (no extension, just <code>Dockerfile</code>) and add the following contents:</p><pre><code class="language-docker">FROM node:16.15.0

WORKDIR /var/www/

COPY . .

RUN npm install
RUN chown -R node:node .

USER node

CMD [ &quot;node&quot;, &quot;index.js&quot; ]
</code></pre><p>Don&#x27;t panic! I&#x27;m going to explain all this line by line.</p><ul><li>Line 1: here we are saying we want to use another image and then add to it. Docker has a big registry of other images that you can use as the basis to your image and then add to it. In this case we say that we want a specific version of the node image. What you will get is a Linux machine with Node version 16.15.0 installed on it.</li><li>Line 2: remember that this is a little virtual computer we are running here so it has a file structure just like your computer. Here we are setting the directory we want to work in as <code>/var/www</code>.</li><li>Line 5: when your container is running it won&#x27;t know anything about your computer, it&#x27;s totally isolated. However when turning you Dockerfile into an image it knows about your computer. In this case <code>COPY</code> is a Docker command that can copy files from your computer into the image. Here we say <code>COPY the contents of the current directory of my computer in to the current working directory of the image</code>. So if you are in <code>dockerExample</code> when you run this is will copy everything in that directory into <code>/var/www</code> in the Docker image. This is how your code gets into the container.</li><li>Line 7: The <code>RUN</code> command allows you to execute a command in the build process of the image, in this case we want to install any dependencies that our code has, just like we would locally to download Express.</li><li>Line 8: for improved security we will be changing from the root super user (which is what you are within that Docker image at the moment) to the node user, which has far few privileges. So we use the Linux command <code>chown</code> to give the node user privileges to run code in this directory.</li><li>Line 10: we use the <code>USER</code> command to switch to that node user.</li><li>Line 12: finally we specify the command that will be run when the container is launched. In this case we run the the command we were running on our local machine in the last section. This means that when the container comes to life it will launch our code automatically.</li></ul><p>With that saved to your Dockerfile you can now build the image.</p><p>In your terminal (making sure you are in the directory with the Dockerfile in it) run:</p><pre><code class="language-sh">docker build . -t example
</code></pre><p>This tells Docker to build an image based on the Dockerfile in the current directory (that&#x27;s what the <code>.</code> is for at the end). the <code>-t example</code> will be helpful in a minute, it tags the image with the word example.</p><p>You should see an output like this:</p><pre><code class="language-powershell">[+] Building 2.0s (10/10) FINISHED
 =&gt; [internal] load build definition from Dockerfile                                                                                                                      0.0s
 =&gt; =&gt; transferring dockerfile: 37B                                                                                                                                       0.0s
 =&gt; [internal] load .dockerignore                                                                                                                                         0.0s
 =&gt; =&gt; transferring context: 2B                                                                                                                                           0.0s
 =&gt; [internal] load metadata for docker.io/library/node:16.15.0                                                                                                           1.8s
 =&gt; [1/5] FROM docker.io/library/node:16.15.0@sha256:1817bb941c9a30fe2a6d75ff8675a8f6def408efe3d3ff43dbb006e2b534fa14                                                     0.0s
 =&gt; [internal] load build context                                                                                                                                         0.1s
 =&gt; =&gt; transferring context: 27.64kB                                                                                                                                      0.0s
 =&gt; CACHED [2/5] WORKDIR /var/www/                                                                                                                                        0.0s
 =&gt; CACHED [3/5] COPY . .                                                                                                                                                 0.0s
 =&gt; CACHED [4/5] RUN npm install                                                                                                                                          0.0s
 =&gt; CACHED [5/5] RUN chown -R node:node .                                                                                                                                 0.0s
 =&gt; exporting to image                                                                                                                                                    0.0s
 =&gt; =&gt; exporting layers                                                                                                                                                   0.0s
 =&gt; =&gt; writing image sha256:e263406aa4b0dee204b2043acclkjb7a890edf46f29dfe9b41af8bf2a0ebf8                                                                                0.0s
 =&gt; =&gt; naming to docker.io/library/example                                                                                                                                0.0s
</code></pre><p>Which means it worked! 🥳</p><p>So now you have and image that Docker can run.</p><h3>Docker image</h3><p>Go to your terminal and type:</p><pre><code class="language-powershell">docker image list
</code></pre><p>and you will see something list this:</p><pre><code class="language-powershell">REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
example      latest    e263406aa4b0   15 minutes ago   913MB
</code></pre><p>Look at the size! 913MB for a little server that replies with a string? Remember though that this is a version of Linux that has Node installed on it that als have your code. There are ways of reducing this size but for this introduction to Docker this is fine for now.</p><p>Notice also the <code>example</code> at the start as well, that&#x27;s what we named it with the <code>-t</code> above.</p><h3>Docker container</h3><p>We have an image now but this isn&#x27;t running. We need to &quot;spin up&quot; this into a container. So lets do it.</p><p>Remember above where I said that the container has no idea about your machine? Well that&#x27;s true, but like any computer you can open up network connections to it, and that&#x27;s what we are going to do here. Spin up this container we are going to tell it to open up a network port so we can send it messages from our browser.</p><p>In your terminal run this command:</p><pre><code class="language-sh">docker container run -p 3001:3001 example
</code></pre><p>Here we are telling docker to run a container with a link from our computers port 3001 to the containers port 3001. The final argument is the container name.</p><div class="bg-red-100
  rounded-2xl
  border-2
  border-red-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-red-800
  prose-p:text-red-800
  prose-li:text-red-800
  prose-a:text-sky-600
  "><p>If you get an error like this:</p><pre><code class="language-powershell">docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3001 -&gt; 0.0.0.0:0: listen tcp 0.0.0.0:3001: bind: address already in use.
</code></pre><p>It&#x27;s because you left your server running from when we were running this locally. Go to that terminal window and press <code>ctrl + c</code> to end the process and then rerun your docker build command.</p></div><p>All being well you should see:</p><pre><code class="language-powershell">Listening on port 3001
</code></pre><p>in your terminal. To test it visit <a href="http://localhost:3001">http://localhost:3001</a> in your web browser to see the output again. This time the hello really is from Docker 😊</p><h3>View running Docker containers</h3><p>To see this container running open a new terminal window and type:</p><pre><code class="language-powershell">docker container list
</code></pre><p>and you will get this:</p><pre><code class="language-powershell">CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                    NAMES
672d7e57f9ab   example   &quot;docker-entrypoint.s…&quot;   4 minutes ago   Up 4 minutes   0.0.0.0:3001-&gt;3001/tcp   epic_spence
</code></pre><p>and you can see you example image used for this container.</p><p>Want proof that this is really doing something? Copy the CONTAINER_ID from the output above and run this command in a terminal window:</p><pre><code class="language-powershell">docker stop 672d7e57f9ab
</code></pre><p>replacing the id I have above with whatever yours is. This will take a few seconds. Once done you can <code>run docker container</code> list again to see no containers running. Try that web address and it won&#x27;t work either.</p><p>To show you that it really is Docker running your code run this command:</p><pre><code class="language-powershell">docker container run -p 3002:3001 example
</code></pre><p>This will link you computers port 3002 to the Docker post 3001 (the one that your app is listening on).</p><p>The result message will still be <code>Listening on port 3001</code> because that message is from the Docker container now running.</p><p>Now go to <a href="http://localhost:3001">http://localhost:3001</a> in your browser. You won&#x27;t get anything. Now go to <a href="http://localhost:3002">http://localhost:3002</a> and you will see your &quot;Hello from Docker&quot; message.</p><h3>How to delete a Docker image</h3><p>Follow the steps above to stop the container, and then run:</p><pre><code class="language-sh">docker image rm example
</code></pre><p>to delete it and get back that 913MB of space.</p><div class="bg-red-100
  rounded-2xl
  border-2
  border-red-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-red-800
  prose-p:text-red-800
  prose-li:text-red-800
  prose-a:text-sky-600
  "><p>If it won&#x27;t delete then run this command:</p><pre><code class="language-sh">docker image rm example -f
</code></pre><p>The <code>-f</code> will force it to delete.</p></div><h3>What is Docker wrap up</h3><p>This was a very simple overview of Docker. It is incredibly powerful and while this example might seem a bit pointless I want you to imagine a more complicated application, with many dependencies, multiple build steps all wrapped up in a single image that you can put on any server or computer, run <code>docker container run imageName</code> and now it&#x27;s up and running doing it&#x27;s thing.</p><p>Really powerful and is the gateway to the world of DevOps and making deployments easier.</p><p>All the source code for this project can be found in the <a href="https://github.com/simonbarker/allthecode/tree/main/dockerExample">AllTheCode GitHub repo</a>.</p>]]></description>
            <link>https://allthecode.co/blog/post/what-is-docker</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/what-is-docker</guid>
            <pubDate>Fri, 27 May 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How Long To Learn Web Development?]]></title>
            <description><![CDATA[<p>&quot;How long to learn web development&quot; is a question I get asked a lot. </p><blockquote><p>In my view you can learn web development in 6 months.</p></blockquote><p>Of course it depends on your starting point and existing time commitments. But, with commitment and finding time each day it can be done, even for a complete beginner.</p><p>I learned to code 15 years ago. Back then the world of web dev much younger and less overwhelming to newbies. Sure, there was no <a href="https://www.stackoverflow.com/" target="_blank" rel="noopener noreferrer">Stack Overflow</a> but there also weren’t a million frameworks and languages vying for my attention either so I was able to focus on a few core areas.</p><p>Unfortunately many people have tried to get into web development and failed. So, let&#x27;s layout a clear and concise path to becoming a web developer in the next 6 months.</p><p>No fuss, no muss, just pure actionable steps.</p><h2>Right now web development is confusing, noisy and difficult to comprehend</h2><p>People struggle to get into web development through no fault of their own. Here are the primary culprits that stop people becoming a web developer:</p><ul><li>It&#x27;s fast paced and ever changing so it’s hard to know what to learn.</li><li>It&#x27;s an established industry with very few set best practices - because it’s so fast paced.</li><li>There&#x27;s a lot of bad and outdated advice floating around the internet. With plenty of abandoned tutorials guides that just stop as you’re about to get to the good bit.</li><li>People think they need to be a geek or &quot;good with computers&quot; and it puts them off.</li></ul><p>I&#x27;m going to explain how you can overcome all this and become a web developer.</p><p>Here&#x27;s how, step by step:</p><h2>Step 1: Pick the learning path that fits you best</h2><p>This is the most important part. People who commit to a path that suits their lifestyle and existing commitments are 10x more likely to see it though than those who over commit.</p><p>Your three main options are:</p><ul><li><p>Free YouTube courses like those from <a href="https://www.youtube.com/c/TraversyMedia" target="_blank" rel="noopener noreferrer">Brad Traversy</a>, <a href="https://www.youtube.com/c/AniaKub%C3%B3w" target="_blank" rel="noopener noreferrer">Ania Kubów</a>, or even my own <a href="/30-days-of-javascript">30 Days Of JavaScript course</a>.</p></li><li><p>A paid platform like <a href="https://academy.zerotomastery.io/a/aff_943g0w71/external?affcode=441520_ptemzeab" target="_blank" rel="noopener noreferrer">Zero To Mastery&#x27;s Web Developer Career Path Course</a> or <a href="https://www.codecademy.com/" target="_blank" rel="noopener noreferrer">CodeCademy</a> which have opinionated learning paths and a clear goal for you.</p></li><li><p>A paid full time bootcamp like <a href="https://flatironschool.com/" target="_blank" rel="noopener noreferrer">Flatiron School</a> or <a href="https://makers.tech/" target="_blank" rel="noopener noreferrer">Makers.tech</a></p></li></ul><p>My personal suggestion is the second one, a paid platform. The courses are excellent and focussed on taking you through a very practical path without you having to dedicate 3-6 months full time to it like a bootcamp.</p><p>Once you have chosen your path don’t try to do too much. If you only have 15 minutes a day then just do that. Don’t start at 3 hours a day and burn out after 4 days. </p><p>Slow and steady really does with the race here.</p><h2>Step 2: Build your own projects from day one</h2><p>Many people get stuck in tutorial hell. This is a phase where they feel like they can code but really they can only follow along with a tutorial. They are only able to take very minor detours from the happy path described by it.</p><p>If you can&#x27;t make a project on your own then, you&#x27;ll never make it as a developer. You need to get used to starting new projects regularly and feeling you way through it, like a real web developer does.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><h3>How to avoid tutorial hell</h3><p>From the very first day take what you learn and make your own version.</p><p>For a web developer course your first project will likely be an index.html page that displays the &quot;hello world&quot;.</p><p>So at at the end of day 1 make your own index.html page and change the words to your favorite motivational quote or a joke - it doesn’t really matter what it is, just not hello world.</p><p>Also, try changing the file name and see what happens.</p><p>These kind of small wins from early on will stop you ever entering tutorial hell, let alone getting stuck there.</p></div><h2>Step 3: Talk about what you&#x27;re learning on LinkedIn</h2><p>You&#x27;re learning to code to have a better life, most likely to get a good job with that sweet sweet developer money 😉</p><p>Getting a job is a lot easier with a network. <strong>So start building that network when you start learning.</strong></p><p>Share a post on LinkedIn about what you learnt in your first week, what you found hard and what you are looking forward to in the next week.</p><p>Here&#x27;s an example:</p><blockquote><p>Spent most of this week learning about responsive layouts with CSS. I looks like you can use flex and grid to force certain responsive behaviors - I never realized this about modern websites, I thought they loaded a different site for different screens. Next week I&#x27;ll be looking at how we can show different types of navigation depending on the screen size. Anything I should be on the look out for?</p></blockquote><p>Doing this every week, just a couple of hundred words, will attract comments of support and encouragement, often from senior developers who, when you are ready, will be able to help you get that first job.</p><p>Reply to every comment, ask questions and be consistent.</p><h2>Wrap up</h2><p>How long it takes to learn web development still depends on how much time you have to commit to it but, with a little bit of work everyday, you can lean web development in 6 to 12 months with the steps above. No step is more important than the other BUT each one builds upon the former, so follow the process, trust the process and get ready for a new career as a web developer!</p>]]></description>
            <link>https://allthecode.co/blog/post/how-long-to-learn-web-development</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-long-to-learn-web-development</guid>
            <pubDate>Fri, 13 May 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How Can I Learn To Code For Free?]]></title>
            <description><![CDATA[<p>There are lots of ways to learn to code for free. From local bootcamps that don&#x27;t charge you to online self paced courses. If you want to learn to code for free then here are my top 5 place to learn to code for free 😃</p><h2>1. <a href="https://www.theodinproject.com/" target="_blank" rel="noopener noreferrer">The Odin Project</a></h2><p>A long standing free and open source project that goes deep into the web development world.</p><div class="w-full flex flex-row justify-center"><a href="https://www.theodinproject.com/" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:387px;height:397px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="The Odin Project screenshot" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="The Odin Project screenshot" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fodinproject.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fodinproject.png&amp;w=828&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fodinproject.png&amp;w=828&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span></a></div><h2>2. <a href="https://www.freecodecamp.org/" target="_blank" rel="noopener noreferrer">Free Code Camp</a></h2><p>Completely free and full of thousands of hours of courses and tutorials.</p><div class="w-full flex flex-row justify-center"><a href="https://www.freecodecamp.org/" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:387px;height:610px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Free code camp screenshot" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Free code camp screenshot" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Ffreecodecamp.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Ffreecodecamp.png&amp;w=828&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Ffreecodecamp.png&amp;w=828&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span></a></div><h2>3. <a href="https://www.hackingwithswift.com/100" target="_blank" rel="noopener noreferrer">100 Days Of Swift</a></h2><p>Paul Hudson is a legend in the Swift world so if you&#x27;ve ever wanted to get into native iOS development then this is the course to get you started.</p><div class="w-full flex flex-row justify-center"><a href="https://www.hackingwithswift.com/100" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:385px;height:545px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="100 days of Swift UI screen shot" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="100 days of Swift UI screen shot" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2F100daysofswift.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2F100daysofswift.png&amp;w=828&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2F100daysofswift.png&amp;w=828&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span></a></div><h2>4. <a href="https://www.cs50.net" target="_blank" rel="noopener noreferrer">Harvards CS50</a></h2><p>This is the course I took when I first learnt to code and it&#x27;s amazing. Kept up to date each year this course takes you through the full software developer learning process from the ground up.</p><div class="w-full flex flex-row justify-center"><a href="https://www.cs50.net" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:385px;height:545px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="CS50.net screenshot" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="CS50.net screenshot" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcs50.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcs50.png&amp;w=828&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcs50.png&amp;w=828&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span></a></div><h2>5. <a href="https://www.codecademy.com" target="_blank" rel="noopener noreferrer">CodeCademy</a></h2><p>One of the most established online learn to code platforms, this is a great place to start your journey and a proven path for hundreds of thousands of developers.</p><div class="w-full flex flex-row justify-center"><a href="https://www.codecademy.com" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:385px;height:455px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="codecademy.com screenshot" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="codecademy.com screenshot" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcodecademy.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcodecademy.png&amp;w=828&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fcourses%2Fcodecademy.png&amp;w=828&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span></a></div><h2>Wrap Up</h2><p>There you have it, if you want a free place to learn to code then any of these 5 would be a great option. Of course if you are looking to learn JavaScript for free then check out my own <a href="/30-days-of-javascript">30 Days Of JavaScript</a> course right here at all the code 😃</p>]]></description>
            <link>https://allthecode.co/blog/post/free-coding-courses</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/free-coding-courses</guid>
            <pubDate>Thu, 05 May 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Software Engineer Personality: 5 Traits For A Great Career]]></title>
            <description><![CDATA[<p>You’ve decided you want to be a software engineer. You’re looking at languages, you&#x27;re thinking about courses and you&#x27;re excited about you future developer job and amazing career … the salary isn’t bad perk either 🤑</p><p>You&#x27;re wondering, though …</p><blockquote><p>Do I have what it takes to be a developer? 🤔</p></blockquote><p>Learning to code is 100% possible for anyone to do. Millions of developers who don&#x27;t a have a CS degree prove this. But you also need the right mindset to succeed long term. Here are the top 5 personality traits you need to work on to become a great software engineer.</p><h2>1. Software Engineer Personality Trait: Curiosity</h2><p>Curiosity is vital. Not just of technical topics but of the context your code runs in, the people it impacts and how it changes their world</p><p>Have a think about how curious are you. Could you be more curious about the work you do and the world around you?</p><p>It&#x27;s pretty important for software developers, because for your whole carer you will be learning new things, solving other people&#x27;s problems and investigating surprising and infuriating bugs.</p><p>Developing your curiosity is going to make the whole process, and your whole career, a lot more fun. Aim to be the most curious person in the room and the universe will pay you back in spades.</p><p>Read to the end to find out how I stay curious and learn about areas unrelated to software engineering.</p><h2>2. Software Engineer Personality Trait: Persistence</h2><p><strong>Learning to code is hard.</strong> Persistence is the only thing that will get you through.</p><p><strong>Debugging code is hard.</strong> 5 days into a bug hunt that feels like it’s going nowhere, you&#x27;re going to need to be persistent to get it solved.</p><p>Much of your career you will be working on problems that you don’t know the solution to. You will know that you can solve it eventually but when things get hard you don&#x27;t want to have to rely on motivation. Motivation is a fickle beast, instead persistence is the thing that will carry you.</p><p>If you couple this with curiosity, then rather than getting frustrated and annoyed you will simply see each obstacle as an opportunity to sate that curiosity and learn something new.</p><h3>Are you persistent?</h3><p>If you’re concerned you aren’t persistent enough to make it as a developer then I want you to take a look back at previous successes you’ve had. Look at the line of where you started to where you are now, see how much you have improved in some area. That improvement doesn’t happen by chance, it takes persistence to make a change and improve.</p><h3>Improving your persistence</h3><p>If you want to improve your persistence then take a leaf out of the weird and wonderful world of bodybuilding and weightlifting - two areas I am passionate about. Each session a weightlifter goes to the gym and works slightly harder than last session. They put a tiny amount more weight on the bar. Or they do a couple more repetitions of an exercise. Or even just do their reps a little slower. By doing this they incrementally improve every day and work toward their goals.</p><p>This process is called progressive overload and it takes patience and persistence.</p><p>You can apply it in your coding. Each day try to stick at a problem just little longer. Make a piece of UI slightly nicer or simply take some more time than usual to actively pursue making something better.</p><p>Doing this will improve your persistence and give you a positive feedback loop to keep going and keep growing as a software engineer.</p><h2>3. Software Engineer Personality Trait: Ability To Learn</h2><p>The ability to learn is vital for software engineers because once you&#x27;ve learnt to code that&#x27;s not the end of it. You&#x27;ll be learning new things for the rest of your career.</p><p>That&#x27;s a good thing though! It means your career will evolve and change without you even needing to try.</p><p>Most industries would love for that to be the case.</p><p>You&#x27;ll need to learn new skills every 2 to 5 years and there will be way more things to learn than you can ever learn. This means you get to choose where to take direct your studies.</p><p>If you get bored of making mobile apps you can jump into game development.</p><p>Bored of games? Get a job at a huge tech company and help solve the biggest scalability problems in the world.</p><p>Fed up of working for &quot;the man&quot;? Go freelance and pick and choose your projects.</p><p>Needing to keep up in software isn&#x27;t a bug, it&#x27;s a feature.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><h3>How to make time to learn as a busy software developer</h3><p>As your life changes and evolves it can be hard to make time to learn. Ideally you would block of time to make things with new technologies but the time investment is large and not always feasible. So, when I don&#x27;t have time to build I find other ways to stay on top of changes in web development and software.</p><p>My favorite way is with podcasts and YouTube videos. I’ll listen while I&#x27;m doing chores and running errands and watch whilst I&#x27;m eating breakfast or lunch.</p><p>Here are my top two of each for you to keep up on developments in software engineering when you’re stuck for time.</p><ol><li>🎙 <a href="https://syntax.fm/">Syntax</a> Wes and Scott with the tastiest web development treats</li><li>🎙 <a href="http://codingblocks.net/">CodingBlocks</a> Michael, Allen and JZ every two weeks deep diving into the most important topics in the software development world ... and keyboards .... and games ... and other fun stuff!</li><li>🎥 <a href="https://www.youtube.com/c/Fireship">Fireship</a> weekly explainers, tutorials and parodies about the web dev world</li><li>🎥 <a href="https://www.youtube.com/c/TheCoderCoder">CoderCoder</a> tutorials, mindset and explainers with Jessica Chan</li></ol><p>And of course my own <a href="https://allthecode.co/podcast">All The Code Podcast</a> and <a href="https://allthecode.co/youtube-channel">All The Code YouTube channel</a> 😉.</p></div><h2>4. Software Engineer Personality Trait: Focus</h2><p>Being able to block out distractions and hold complex models in your head is one of the key requirements of software engineering. One of the things you hear a lot about is the damage of context switching and how it causes productivity losses. The reason it’s so damaging to a software engineers productivity is that it takes time to build that mental model of your code work. If you get into a place where that model is stable in your head and you’re writing great code, then loosing focus is the last thing you want.</p><p>My ADHD tendencies mean that I’m very good at focussing for short bursts when I really care about a problem or topic. However if longer, sustained focus is needed then I need to start diving into my toolbox of tricks to keep me on task. Here&#x27;s what works for me:</p><ul><li>Walking on a desk treadmill occupies part of my brain for about 90 minutes of pure focus</li><li>Listening to music I know well can keep me in the zone</li><li>Moving to a new, ideally more comfortable location</li><li>Making the room darker</li><li>Leaving focus work to the end of the day when I’m just a little bit tired</li></ul><p>This are what work for me. For you it could be a very different. Maybe you like silence or lots of sunlight. Take the time to find out.</p><h2>5. Software Engineer Personality Traits: Pragmatism</h2><p>Every software engineer needs to learn where they fall on the pragmatist vs perfectionist spectrum. Are you a &quot;just solve the problem&quot; type? Or do you want to craft an artisanal solution to every problem factoring in all eventualities?</p><p>I lean heavily towards pragmatic solutions. I&#x27;d rather ship something that will need to be rewritten in 12 months time that make something perfect that never gets used to its full capabilities. My belief is that we can’t make a perfect system because software is a living thing, it changes and evolves as we learn the problem space. Therefore I don’t aim for perfect, I aim for “good and improvable”.</p><p>Others hate the idea of shipping something that can&#x27;t deal with all eventualities and might need rewriting in the future because something got missed.</p><p>We are ultimately paid to solve problems and ship software, so if you lean to the perfectionist end of the spectrum then make sure it&#x27;s not to the detriment of that goal.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><h3>Software engineering pragmatism framework</h3><p>The spectrum from pure pragmatism to pure perfectionism is large. To keep me on track I use a framework for dealing with the tensions between the two:</p><h4>1. How consequential is the code?</h4><p>If something goes wrong in the code could it cause injury or worse? If it&#x27;s medial equipment then aim for perfect. If it&#x27;s an app to add emojis to pictures then don&#x27;t worry so much.</p><h4>2️. Technical unknowns greater than business unknowns?</h4><p>If I know that there is market demand for the software then I can take more time to get it right. My technical unknowns are greater that my business ones. If it&#x27;s a new app in an untested market then my business unknowns are greater then I need to ship early so I can learn what the market wants.</p><h4>3. Easy to reverse?</h4><p>If I find myself quibbling over decisions that are easy to change or fix later, then I err to pragmatism. If making a change is months of effort and costly then I grudgingly lean to perfectionism!</p><h4>4. Lazy factor</h4><p>Pragmatists often loose out to perfectionists because it sounds like we want to cut corners. So, I always check in with myself: am I making this choice because I&#x27;ve applied the above questions and am happy with the answers, or am I just being lazy?</p><p>I won&#x27;t tell you how often number 4 is the catch in this framework so it’s a good point to have! 🤭</p></div><h2>Software Engineer Personality Traits Wrap Up</h2><p>Don’t worry if you feel like you have a long way to go on really refining these 5 traits. Most software developers do! Those who say they don’t are almost certainly fooling themselves. Take time to focus on improving where you can and remember, software engineering is a journey. We spend our whole careers looking for ways to solve problems and improve systems. Applying the same process to ourselves is perfectly natural.</p><div class="bg-blue-100
  rounded-2xl
  border-2
  border-blue-800/50
  px-6
  py-1
  prose-headings:mt-4
  prose-headings:text-blue-800
  prose-p:text-blue-800
  prose-li:text-blue-800
  prose-a:text-orange-500
  "><h3>How I Increase My Curiosity</h3><p>As promised at the start here are my favorite YouTube channels for increasing my curiosity that have nothing to do with software engineering.</p><ol><li><p>🎥 <a href="https://www.youtube.com/greymatter">CGPGrey</a>: If titles like &quot;Hexagons are the bestagons&quot; and &quot;How to be a pirate: Quartermaster Edition&quot; intrigue you then welcome to the Grey Universe.</p></li><li><p>🎥 <a href="https://www.youtube.com/c/veritasium">Veritasium</a>: Learn about &quot;The Man Who Accidentally Killed More People Than Anyone Else&quot; and how &quot;Most People Don&#x27;t Know How Bikes Work&quot;</p></li><li><p>🎥 <a href="https://www.youtube.com/c/RealLifeLore">Real Life Lore</a>: Mainly maps and interesting facts about the work. Like why over 90% of China live in the eastern 50% of the country</p></li><li><p>🎥 <a href="https://www.youtube.com/c/MarkRober">Mark Rober</a>: Ok this one <strong>is</strong> engineering and he sometimes writes code but he also makes mazes to challenge squirrels and the worlds largest domino mural</p></li><li><p>🎥 <a href="https://www.youtube.com/c/YesTheory">Yes Theory</a>: See some of the most obscure, challenging and interesting places on earth in stories like &quot;Inside the World&#x27;s Most Luxurious Abandoned City&quot; and &quot;Traveling to the Least Visited Country in the World&quot;</p></li></ol><p>Curiosity is vital as a software engineer so make sure you nurture it 😀</p></div>]]></description>
            <link>https://allthecode.co/blog/post/software-engineer-personality</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/software-engineer-personality</guid>
            <pubDate>Thu, 05 May 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How Long Does It Take To Get A Computer Science Degree?]]></title>
            <description><![CDATA[<p>A computer science degree is a great way to start a career in the tech industry. But with so many different programs and schools to choose from, how do you know which one is right for you and just how long will it take? And what are the alternatives?</p><p>Computer science degrees can be earned in a variety of different time lengths, depending on your needs and interests. The shortest would be 12 months and the longest 5 years.</p><h2>What is computer science?</h2><p>Computer science is the study of computer systems and their applications. It covers a broad range of topics, including software development, programming, computer security, and network administration. If you enjoy thinking about complex problems and how to create elegant solutions to them then you will feel right at home in this area.</p><h2>Why should you get a computer science degree</h2><p>Computer science is an excellent choice for those interested in a career in the computer industry. Graduates will find themselves in high demand by employers all over the world. Technology is a rapidly growing field, with new applications and technologies being developed all the time. You will have the skills to make fun apps like Instagram and Tinder whilst also be able to work on large an complex business problems for the worlds largest and most impactful companies. The choice on where to go really is yours!</p><h2>How long does it take to get a computer science degree?</h2><p>In order to get a computer science degree, you&#x27;ll need to have a strong foundation in math and science. Most degrees will require you to carry out coursework in programming languages such as Java, C++ and even primarily web technologies like JavaScript and Python. Given this they can take a long time to complete, typically four years, though some programs can be completed in as little as two years or even one if it&#x27;s a masters following on from a technical undergraduate degree.</p><p>Degree programs typically include a mix of coursework in theory and practice. In the first few years, you&#x27;ll take courses that cover the basics of computer programming, software development, and computer systems. In the later years, you&#x27;ll have the opportunity to specialize in a particular area of computer science, such as computer security or network administration.</p><h2>Tips on how to choose the right computer science degree program</h2><p><strong>1. Consider your interests:</strong> When choosing a computer science degree program, it&#x27;s important to consider your interests and what you want to get out of the program. Do you want to focus on software development, or are you interested in computer and network security? Or perhaps is the hardware aspect that really interests you so an electronics component would be crucial. Make sure the program you choose offers courses that align with your interests.</p><p><strong>2. Consider your career goals:</strong> What do you want to do after you graduate? If you&#x27;re not sure, that&#x27;s okay! Many graduates find careers in fields outside of computer science. But if you have a specific career in mind, such as iOS app developer or cyber security analyst, make sure the program you choose will help you achieve your goals.</p><p><strong>3. Consider the time commitment:</strong> Computer science degrees typically take four years to complete, and can cost a large amount of money. Make sure you are able to financially support yourself for that length of time.</p><p><strong>4. Do your research:</strong> When choosing a computer science degree program, it&#x27;s important to do your research and choose a program that&#x27;s right for you, speak to the schools that interest you and ask lots of questions. Find course alumni on LinkedIn and ask if they would recommend the course and school.</p><h2>Computer science degree alternatives</h2><p>If you&#x27;re not sure a degree is right for you, or if you don&#x27;t have the time to commit to a full four-year degree, there are a number of alternatives available.</p><h3>Shorter degree programmes</h3><p>One option is to get a computer science degree in a shorter time frame. Many schools offer accelerated programs that can be completed in as little as two years. Another option is to get a complete on online. Online degrees offer the same coursework as traditional on site degrees, but with the flexibility of being able to study from anywhere in the world.</p><h3>Coding Bootcamps</h3><p>Coding bootcamps are a great alternative to computer science degrees for students who want to learn how to code and become software developers. Bootcamps offer an immersive, accelerated learning experience that can teach you everything you need to know in just a few months. Coding bootcamps are also a great option if you&#x27;re not sure if is is the right field for you. Many bootcamps offer job placement assistance and can help you transition a successful career as well.</p><h3>Self taught</h3><p>There are a number of different ways to learn computer science without getting a degree. One option is to teach yourself using YouTube videos, online courses such as <a href="https://CS50.net">CS50.net</a>, or course platforms like <a href="https://academy.zerotomastery.io/a/aff_yr890dq0/external?affcode=441520_ptemzeab">Zero To Mastery</a> or <a href="https://www.udemy.com/course/100-days-of-code/?ranMID=39197&amp;ranEAID=ZsVWotymlGs&amp;ranSiteID=ZsVWotymlGs-mocbgN6yLE151UzptqE81w&amp;utm_source=aff-campaign&amp;LSNPUBID=ZsVWotymlGs&amp;utm_medium=udemyads">Udemy</a>. These resources can be a great way to learn the basics of the subject and software development.</p><h2>Conclusion</h2><p>A computer science degree can be earned in as little as 12 months, or up to five years depending on the program you choose. There are also a number of alternatives available if you&#x27;re not sure if computer science is right for you, or if you don&#x27;t have the time to commit to a full four-year degree. Whichever route you choose, make sure you do your research to find the best option for your needs!</p>]]></description>
            <link>https://allthecode.co/blog/post/how-long-does-it-take-to-get-a-computer-science-degree</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-long-does-it-take-to-get-a-computer-science-degree</guid>
            <pubDate>Sat, 23 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[8 Tips for Computer Science Graduates to Get Their First Job]]></title>
            <description><![CDATA[<p>Congratulations! You&#x27;ve completed your computer science degree, this is a huge accomplishment and you should be super proud of yourself. Now is the time to kick back, relax and let the job offers roll in, right?</p><p>Wrong, now is the time to start getting your name out there, especially if you&#x27;re struggling to stand out form the crowd of all the other computer science graduates! Not to mention those pesky self taught and coding bootcamp people.</p><p>Here is a list of all the steps you can take to rapidly get your first software developer job now that you&#x27;ve graduated.</p><ol><li><strong>Get a LinkedIn</strong> account and make sure your profile is up to date, include any side projects you&#x27;ve worked on as well as any experience you have in the industry, even if it&#x27;s just customer facing roles.</li><li><strong>Start writing</strong> short articles about your experiences as a computer science graduate, what obstacles you faced and how you overcame them. This will show that you are able to communicate your thoughts and experiences clearly as well as giving you a platform to share your work with potential employers. Share these on LinkedIn and reply to the comments you get.</li><li><strong>Start attending meetups,</strong> there are software developer meetups for almost every city and they&#x27;re a great way to network with like minded people who can give you advice and help you on your job hunt. There are also lots of online communities you can join from Facebook and LinkedIn groups to Discords and Slacks.</li><li><strong>Show you can build</strong>, computer science graduates have the great technical foundations to be software developers but you need to show that you can build real world projects that work. This means showing you can solve problems with code that is maintainable and scalable. The best way to do this is with side projects that can be found and used online.</li><li><strong>Get a GitHub account</strong> and populate it with some side projects, this will show employers that you are passionate about code and are constantly learning new things. Ideally you want to have an introduction page on your GitHub that highlights what technical skills you have and the type of work you like doing.</li><li><strong>Start speaking to recruiters!</strong> Recruiters can be a great way to learn about new opportunities as well as giving you insights into the job market. They can also be a great help in getting your resume in front of the right people, and sometimes they have access to jobs that aren&#x27;t advertised publicly. However, it&#x27;s important to remember that not all recruiters are created equal. Some are better than others, and they are rarely technical so make sure they understand what you are capable of.</li><li><strong>Put together an amazing portfolio</strong> that showcases your skills and experiences. This is one of the most important things you can do to get a job as a software developer. You need to show not only that you can make something but also why you choose the technologies and approaches you took. A short summary of each project and what you did will really help give people and idea of what you can do. Make sure each project is hosted online and can be used.</li><li><strong>Read all of this site!</strong> We have loads of content on how to get your first job from dozens of free blog articles to an 80 page book on the topic!</li></ol><p>There you have it, follow these steps and you&#x27;ll be on your way to getting your first software developer job in no time! Good luck!</p><p><em>P.S. Check out our blog post on <a href="https://allthecode.co/blog/post/skills-required-to-be-a-full-stack-developer-a-checklist">Skills required to be a full stack developer: a checklist</a> if you want to get into the thriving world of web development.</em></p><p><em>P.P.S. If you&#x27;re looking for a great software developer job, be sure to check out our <a href="/jobs">job board</a></em></p>]]></description>
            <link>https://allthecode.co/blog/post/tips-for-computer-science-graduates-to-get-their-first-job</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/tips-for-computer-science-graduates-to-get-their-first-job</guid>
            <pubDate>Sat, 23 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Can I Get A Job After Coding Bootcamp?]]></title>
            <description><![CDATA[<p>Congratulations you have completed your coding bootcamp. You&#x27;ve come a long way since you decided to learn to code all those months ago, you can now create a web or native app, solve complicated user interface issues and have even learned about this weird thing called Git!</p><p>Now that you have finished your coding bootcamp it&#x27;s time to start looking for a job.</p><p>If you went to a good bootcamp they should have dedicated some time to this part. Knowing how to code and knowing how to get a coding job are sadly slightly different skills. So ideally they will have taught you how to look for a developer job at companies that are open to hiring coding bootcamp graduates and they should have explained about how to showcase your skills in the best way possible, how to talk about the projects you have made and how to show these companies that you have the skills and experience they need.</p><p>If they didn&#x27;t cover that kind of thing or their advice isn&#x27;t working for you, then never fear, here are my top tips for coding bootcamp graduates to get a job after they graduate.</p><h2>1. Software Developer</h2><p>Stop using Junior, Aspiring or any other word to indicate you are new to the field, in your LinkedIn title or resume. It will be very obvious from your work history that you are new, so you don&#x27;t need to lead with it. You are a Software Developer, you may not have much experience yet but it&#x27;s not for you to pigeon hole yourself as junior, mid or senior. Don&#x27;t put yourself on the back foot from the first moment someone reads your profile.</p><h2>2. Coding Bootcamp Graduate Projects</h2><p>During your coding bootcamp you should have made at least one reasonable sized project. Let&#x27;s get that online, hosted at a domain in a state that is useable for someone to go and have a play with. It doesn&#x27;t matter if it&#x27;s not the most exciting app in the world. So long as it works and it was made by you then it shows you can code.</p><h2>3. More Projects</h2><p>One project from your coding bootcamp is great but ideally as a coding bootcamp graduate looking for a job, you should still be coding and making projects. If you&#x27;ve stopped then it&#x27;s time to roll your sleeves back up and keep honing those skills. You want at least one project up and running on a domain, or in an app store, that you made on your own after your coding bootcamp finished.</p><p>I have three rules for portfolio projects. They need to be small, complete and functional. Small doesn&#x27;t mean tiny, it should still have taken a few weeks to make. But it doesn&#x27;t need to be the start of the next great startup to come out of your country! It does also need to be functional. People need to be able to use it, to test it and play around with what you&#x27;ve made, screen shots don&#x27;t cut it I&#x27;m afraid. Finally it needs to be complete, no dead ends or obviously missing features, someone should be able to feel like they are using a small and useful tool/app.</p><h2>4. Projects First</h2><p>A company will hire you because they believe you can build useful software to solve their problems. Since you haven&#x27;t yet done that for any other company you need to lead with the next best thing, the software you have written for your portfolio projects! While you might be most proud of your education, or your previous work history, it&#x27;s not the thing that will get you the job. Showing you can code is what will do that. So put that first in a section called &quot;Relevant Projects&quot; and put a few bullet points about what each project is, how you made it and the technologies used. These should be front and center on your resume, your LinkedIn and your portfolio site. If you&#x27;re looking for project ideas here are <a href="https://allthecode.co/blog/post/30-developer-portfolio-project-ideas">30 developer portfolio project ideas</a> for you.</p><h2>5. Stop Remaking Your Portfolio Site</h2><p>As a new developer it&#x27;s tempting to make your own portfolio site. And then remake it, and then remake it again. Your portfolio site is not what will get you the job though. The projects on your portfolio site are. Unless you are an amazing designer it will almost certainly not be the best first impression so just use a pre-existing template and host it on Wordpress or Squarespace. Take the time you save here and make another project that shows you can use code to solve real problems.</p><h2>6. Start Blogging</h2><p>It doesn&#x27;t need to be much, just a short 500 word post each week shared on LinkedIn about what you learned that week or what you built. No one expects you to be an expert so don&#x27;t be afraid that it will make you look bad, quite the opposite in fact. People on LinkedIn will see consistent posts created by you and start to comment and help. Eventually you can ask this network for a job and you&#x27;ll quickly have people getting in touch.</p><p>Don&#x27;t believe me? Hear from Yusuf Chowdhury in <a href="https://share.transistor.fm/s/81fd32ee">this episode</a> of the <a href="https://allthecode.co/podcast">All The Code podcast</a> talk about how he used exactly this process to land his first 2 developer jobs without ever actually applying for them and instead being head hunted on LinkedIn, as a junior dev!</p><h2>7. Data Structures and Algorithms</h2><p>You leaned a lot on your coding bootcamp but one area you are likely to be weak on is your data structures and algorithms. These are taught extensively on computer science degrees but they can feel very abstract and lack direct applicability for a coding bootcamp to teach to the same level. You will have covered them to some extent but not to the depth that some employers need. It&#x27;s worth investing some time in this area and taking a couple of weeks out from building projects to fill in some gaps in this area. The two best resources here are <a href="https://educative.io">Educative.io</a> which has great courses targeting fundamentals like this and <a href="https://bigmachine.io/products/the-imposters-handbook/">The Imposters Handbook</a> which was specifically written by Rob to help fill in the technical blanks that self taught developers and coding bootcamp graduates often have.</p><h2>Conclusion</h2><p>Getting a job after a coding bootcamp can feel like an uphill battle at times. What you have to remember is that while you have learned the skills required to be a software developer, you need to take some time to present that to the world in a way that shows your future employer that you really can do that job.</p>]]></description>
            <link>https://allthecode.co/blog/post/can-i-get-a-job-after-coding-bootcamp</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/can-i-get-a-job-after-coding-bootcamp</guid>
            <pubDate>Tue, 19 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Best books for software developers]]></title>
            <description><![CDATA[<p>The best books for software developers is a hard list to write, there are so many excellent books for software developers across so many domains that it&#x27;s almost hard to find any bad books. That being said there are some clear standouts that people hold in very high regard and they are books that all software developers should read at least once, if not many times, in their career.</p><p>So, if you&#x27;re looking for top books for software developers to improve your skills and knowledge, no matter where you are in your career, then here are the 5 books that have had the most meaningful impact on my career as a software developer.</p><h2>1. <a href="https://amzn.to/3jPrUyc">The Phoenix Project</a></h2><div class="w-full flex flex-row justify-center"><a href="https://amzn.to/3jPrUyc" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:328px;height:490px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fphoenix.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fphoenix.jpg&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fphoenix.jpg&amp;w=750&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>Learn DevOps in this fun fiction book, it’s a really enjoyable book even before you consider all the great lessons it teaches around DevOps and how you modernize an old and failing system to become a positive force for a business.</p><p>Follow our intrepid new head of IT operations as he navigates a disastrous release, gets the teams work in progress under control and learns the 3 ways of DevOps from a strange, almost mystical outsider. 10/10, I have recommended it to many friends and colleagues and all have enjoyed it, even those that aren&#x27;t software developers.</p><h2>2. <a href="https://amzn.to/38SEpGR">Clean Code</a></h2><div class="w-full flex flex-row justify-center"><a href="https://amzn.to/38SEpGR" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:371px;height:490px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2FCC.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fbooks%2FCC.jpg&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2FCC.jpg&amp;w=750&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>As relevant today as the day it first came out learn about Bob Martin&#x27;s career and how he has improved his developer skills through multiple companies and projects. Some of these ideas are now mainstays in the software developer industry and many developers have adopted his practices to great success.</p><p>My particular favorite suggestion is having known sections of code that you can produce on demand that can be used as daily practice, he calls them Code Katas and they can help get you into the coding mood when you are perhaps struggling to get going.</p><h2>3. <a href="https://amzn.to/3ryc2Et">The Unicorn Project</a></h2><div class="w-full flex flex-row justify-center"><a href="https://amzn.to/3ryc2Et" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:330px;height:490px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Funicorn.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fbooks%2Funicorn.jpg&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Funicorn.jpg&amp;w=750&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>Sibling to The Phoenix Project that happens roughly in parallel. This focuses on how a developer, new to a failing project, begins to get a handle on things. Our senior developer uses automation, functional programming and strong team work and collaboration to set up new systems and upgrade legacy code to support the future growth of the company.</p><p>Software developers of any level will appreciate the problems that she has to deal with and some of it might ring a little too close to home. Another page turner, although much more specific to software development than The Phoenix Project.</p><h2>4. <a href="https://bigmachine.io/products/the-imposters-handbook/">The Imposters Handbook</a></h2><div class="w-full flex flex-row justify-center"><a href="https://bigmachine.io/products/the-imposters-handbook/" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:327px;height:490px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fimposters.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fimposters.jpg&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fimposters.jpg&amp;w=750&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>Delightful summaries of CS concepts for every level of software developer. I&#x27;m self taught and so, like every self taught software developer, I have some gaps in my knowledge that is considered standard for people who have done a computer science degree.</p><p>If you want to get a high level understanding of the concepts taught on a software developer focussed degree then this book can form the cornerstone of that. Written by a self taught developer who set out to fill in his own blanks, this is an enjoyable book that will make you a better software developer.</p><h2>5. <a href="https://amzn.to/38ZfYYt">The Pragmatic Programmer</a></h2><div class="w-full flex flex-row justify-center"><a href="https://amzn.to/38ZfYYt" target="_blank" rel="noopener noreferrer"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:375px;height:490px;background:none;opacity:1;border:0;margin:0;padding:0;position:relative"><img alt="Image alt" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="fixed" class="flex-item" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Image alt" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fpragmatic.jpg&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fpragmatic.jpg&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fbooks%2Fpragmatic.jpg&amp;w=750&amp;q=75" decoding="async" data-nimg="fixed" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="flex-item" loading="lazy"/></noscript></span></a></div><p>If you&#x27;ve ever heard the terms &quot;Rubber Ducking&quot; or &quot;DRY&quot; when talking to other software developers and wondered where those terms came from then this is the place. This book is probably one of the most famous and iconic books on software development. This book is a series of tips and examples collated together for you to dip in and out of throughout your career.</p><h2>Summary</h2><p>There we have it, the 5 books for software developers that have had the most impact on my career. If you are starting your journey to becoming a software developer or perhaps you are already in a software developer role and looking at how to get ahead then these books are the best places to set your career in the right direction.</p><p><em>Note: some of these links are affiliate links and if you purchase the book I may get a small commission, which is pretty awesome and a great way of supporting what I do at <a href="https://allthecode.co">All The Code</a>, joining my <a href="https://allthecode.co/newsletter">newsletter</a> is another great way to support me 😄</em></p>]]></description>
            <link>https://allthecode.co/blog/post/best-books-for-software-developers</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/best-books-for-software-developers</guid>
            <pubDate>Mon, 18 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How To Become A Software Engineer]]></title>
            <description><![CDATA[<h2>How do you become a software engineer?</h2><p>Software engineers are always needed, and are being hired by major companies across all industries. These jobs are not hard to find, but they do require a certain set of skills. Read on to learn what qualifications you will need to be considered for these positions.</p><h2>What is a software engineer?</h2><p>Software engineers are people who create, design and develop new computer programs. They also test their work to make sure it will run correctly. They tend to work as part of a team consisting of other software engineers, quality assurers and product focussed people.</p><p>Historically software engineers generally worked in an office setting, but they can also be found in the field or, ever increasingly as a full time remote worker at home or abroad. A software engineer is a person who specializes in the design, development, testing and maintenance of computer software. A software engineer&#x27;s work varies from programming and writing code to designing and developing new products.</p><p>Software engineers are responsible for the creation and use of software, as well as its performance, usability and quality. Software engineers take on many roles like system architects or database administrators. They can be found working in the technology, video game, medical device or any number of industries.</p><h2>Why become a software engineer?</h2><p>Software engineering role are in demand and it&#x27;s easy to see why. Software engineering is an exciting, challenging, and rewarding career that offers the opportunity to work on some of the most complex problems in the world. There are many paths to becoming a software engineer, from formal education to self-teaching.</p><p>The demand for software engineers is growing enormously and with a projected need of 5 million new engineers by 2030. This blog post will cover three ways you can make your way into this field: through university degree programs, through boot camps, or by teaching yourself.</p><h3>Software engineering university degree programs</h3><p>Software engineer degrees are offered at universities across the world. The largest and most famous universities have put many of their courses online for free so you can see what it&#x27;s like before committing to 4 years of study and a lot of cost to get that much sought after software engineering degree. Here are five free university courses that help you become a software engineer:</p><ol><li><a href="http://cs50.net/">Harvard CS50.net</a> - this is how I learned to code properly nearly 15 years ago, as good now as it was then this the gold standard in online free university courses.</li><li><a href="https://online.stanford.edu/courses/soe-ycscs101-sp-computer-science-101">Stanford CS101</a> - a close second is this course from the university at the beating heart of Silicon Valley.</li><li><a href="https://www.edx.org/course/introduction-to-computer-science-and-programming-7">MIT: Introduction to Computer Science and Programming Using Python</a> - MIT is known the world over as a hub of high flying technical innovation, learn from their professors.</li><li><a href="https://www.edx.org/course/how-to-code-simple-data">University of British Columbia: How to code Simple Data</a> - takes a unique approach to learning to code and focusses on deep fundamentals with clear practical application.</li><li><a href="https://online.umich.edu/series/python-for-everybody/">University of Michigan: Programming for everybody and Python</a> - uses the most popular beginner language to take you from no code to all the code.</li></ol><h3>Software engineer boot camps</h3><p>These have been growing in popularity for years and now there are hundreds of software engineering boot camps available in cities around the world or even 100% remote and online. Here are 5 software engineering boot camps:</p><ol><li><a href="https://flatironschool.com/?utm_source=allthecode&amp;utm_medium=blog&amp;utm_campaign=info_post">Flatiron</a></li><li><a href="https://careerfoundry.com/?utm_source=allthecode&amp;utm_medium=blog&amp;utm_campaign=info_post">Career Foundry</a></li><li><a href="https://boolean.co.uk/?utm_source=allthecode&amp;utm_medium=blog&amp;utm_campaign=info_post">Boolean</a></li><li><a href="https://www.lewagon.com/?utm_source=allthecode&amp;utm_medium=blog&amp;utm_campaign=info_post">LeWagon</a></li><li><a href="https://www.schoolofcode.co.uk/?utm_source=allthecode&amp;utm_medium=blog&amp;utm_campaign=info_post">School Of Code</a></li></ol><h3>Software engineer self taught paths</h3><p>There are so many resources online to learn software engineering now that self teaching is a very viable option [in fact it&#x27;s the path I took over 15 years ago). There are YouTube channels, free courses, paid one off courses and membership platforms that guide you through a well trodden path. Here are 5 resources to get you started on your self taught software engineer journey:</p><ol><li><a href="https://www.youtube.com/channel/UC29ju8bIPH5as8OGnQzwJyA">Brad Traversy YouTube channel</a></li><li><a href="https://academy.zerotomastery.io/a/aff_yr890dq0/external?affcode=441520_ptemzeab">Zero To Mastery learn to code platform</a></li><li><a href="https://click.linksynergy.com/fs-bin/click?id=ZsVWotymlGs&amp;offerid=1060092.19090&amp;type=3&amp;subid=0">Udemy course platform</a></li><li><a href="https://www.freecodecamp.org/">FreeCodeCamp.org</a></li><li><a href="https://www.theodinproject.com/">The Odin Project</a></li></ol><h2>How to become a software engineer summary</h2><p>Which ever route you choose to becoming a software engineer know that at the end there is a fulfilling a in demand career waiting for you.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-become-a-software-engineer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-become-a-software-engineer</guid>
            <pubDate>Sat, 09 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to learn new skills as a junior developer]]></title>
            <description><![CDATA[<p>Learning new skills as a junior developer is a key skill to have, and while you are a junior developer it’s a great time to “learn how to learn” new skills. Learning new developer skills like:</p><ul><li>new programming languages</li><li>new frameworks</li><li>new technologies</li></ul><p>is something you will need to do on a regular basis throughout your software developer career. Being able to learn new skills will help unlock pay rises, promotions and work on exciting projects.</p><p>The problem is that you can’t always take the same approach you did when you first learnt to code. Learning to code is a very “bottom up” learning activity. You need to learn fundamental concepts and spend a long time working though difficult and challenging things. This is why learning to code is So. Time. Consuming. Taking many months or even years.</p><p>You can’t set aside that amount of time whenever you need to learn a new framework or programming language. You need a quicker way to learn, something called “top down” learning. This is where you skim a topic to get a feel for it and then dive into the specific areas you need to learn whilst also working with it in an active project.</p><p>To achieve this, you need a framework!</p><p>This framework is designed to help you learn new software developer skills, it is not designed to help you learn how to code. If you don’t yet know how to code then you need a different approach to actually <a href="https://academy.zerotomastery.io/a/aff_kysptpjp/external?affcode=441520_ptemzeab">learn how to code</a>.</p><h2>Junior developer: Learn new skills framework</h2><p>Here’s a tried and tested way for software developers to learn new skills:</p><ul><li>Find a video explaining the concept.</li><li>Go through it at 2x speed to understand the broad 50,000 ft view. Take notes on things you don’t understand and draw parallels to things you do understand from previous learnings.</li><li>Take a look at the docs and skim through those, seeing if there’s any deviation from the video to make sure the video you watched was accurate.</li><li>Now that you have an all encompassing view of the subject, with notes about things you don’t understand, you can start diving into the subtopics until you’re comfortable with your level of understanding.</li><li>Take as much or as little time as you need to at this stage. Dive into the theory or reasoning behind why choices are made to the level that you feel you need. If you are only lightly working with something you may not need to go too deep, but if the skill is going make up a core part of your work then taking the time to go deeper, and understand the fundamentals is important.</li><li>Start to build something as early as possible, if they have a quick start project then spin that up. If you have a project you have inherited from another developer then start poking around with that by changing things and seeing what breaks. Start to mesh the theory you are learning, with the practical applications of the code you have in front of you.</li><li>As you start to gain more comfort with the project and the code you are dealing with, you can determine the best way to be guided. You can either methodically work through the documentation/learning plan or you can be guided by the project you are making and problems as they arise.</li></ul><h2>If you get stuck learning a new software developer skill</h2><p>If you get stuck when learning a new software developer skill or feel like you aren’t making any progress, then don’t force it. Sometimes you need to switch learning paths and have another go. This is perfectly natural so don’t let it demotivate you.</p><p>When learning a really big topic, or something quite different, then taking a more foundational approach can be quicker in the long run. For instance, if you have learnt JavaScript and suddenly find yourself needing to learn Rust, then a top down approach is going to be challenging because there are so many new concepts in learning Rust that you just won’t have covered in with JavaScript.</p><p>The trick is knowing if you are making progress or if you are spinning your wheels. This is why it’s important to have a project in active development when learning a new software developer skill. That way you can see the progress you are making and avoid getting stuck in tutorial hell instead of actually learning a new skill as a software developer.</p><p>Finally, A special thanks to <a href="https://twitter.com/AtSeansHandle">Sean</a> for providing the inspiration to this post, he’s awesome and you should go follow him on <a href="https://twitter.com/AtSeansHandle">Twitter</a>.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-learn-new-skills-as-a-junior-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-learn-new-skills-as-a-junior-developer</guid>
            <pubDate>Tue, 01 Mar 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Don’t let your past determine your future]]></title>
            <description><![CDATA[<p><strong>We often feel a debt to our past selves.</strong> We stay on a path because it’s the path we’ve always been on and changing course makes us feel like our past self was wrong.</p><p>If there is one thing that humans hate, it is the feeling of being wrong.</p><p>Just because you spent the first half of your life dedicated to being a biologist, physiotherapist or postman doesn’t mean that you can’t make a change.</p><p>Don’t let where you have been decide where you go next, if you want to change to being a developer then draw a line in the sand and realise that no time was wasted, you weren’t wrong for pursuing something else and now you’re making a change.</p><p>Take what you have learned in your previous career and apply that to tech, if you spent years working in a client facing role you’re going to be excellent at working with users on product improvement, if you spent years reading legal documents you’ll be great at whizzing through documentation and Grokking a new library quicker than other devs.</p><p>I have a PhD in electrical engineering and often feel I should be using it in some way. The truth is I am, just not the bits you would expect:</p><ul><li>✍️ I wrote the better part of 200,000 words over my PhD and now I write on the internet every day.</li><li>🎙 I have given dozens of presentations and now I have a <a href="https://allthecode.co/podcast">podcast</a>.</li><li>📊 I managed my own time and projects and now I run a business <a href="https://allthecode.co">teaching developers how to land early career jobs</a>.</li><li>👨‍💻 I taught myself to code and now I code everyday.</li></ul><p>Embrace your past and use it to spring into your new developer career.</p>]]></description>
            <link>https://allthecode.co/blog/post/codenewbies-dont-let-your-past-determine-your-future</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/codenewbies-dont-let-your-past-determine-your-future</guid>
            <pubDate>Sat, 22 Jan 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The best coding podcasts to listen to become a better developer]]></title>
            <description><![CDATA[<p>In our time starved lives it can be hard to find the time to study and practice programming every day. When you’ve got a day crammed full of chores, a long drive or you simply can’t face more time at the keyboard sit back, relax and get your daily does of coding from some of these amazing podcasts instead.</p><h3><a href="https://codingblocks.net" target="_blank" rel="noopener">1. CodingBlocks.net</a></h3><p>This is by far my favourite coding podcast, friendly hosts, diverse topics and extremely informative. CodingBlocks isn’t afraid to dive into the weeds on a topic and even spread it out over multiple episodes if needs be, these aren’t just quick hits and hot takes - they are in it for the long haul.</p><h3><a href="https://www.relay.fm/radar" target="_blank" rel="noopener">2. Under The Radar</a></h3><p>“A show about independent iOS app development” It’s been years since I released a native iOS app but the topics covered here are relevant to anyone interested in making iOS apps, be it with web technologies or Swift. Both of the hosts have had an active App Store presence since the first day of the store so, what they don’t know about iOS app development probably isn’t worth knowing!</p><h3><a href="https://www.codenewbie.org/podcast" target="_blank" rel="noopener">3. Code Newbie</a></h3><p>When taking your first steps into the world of code it’s nice to have a helping hand to guide your journey, hear stories from people just like you and how they navigated the early part of their careers with this excellent podcast. Running over 17 seasons there is plenty to get into.</p><h3><a href="https://www.htmlallthethings.com/podcast" target="\_blank" rel="noopener">4. HTML All The Things</a></h3><p>Much more than just HTML, this show covers topics for all levels and isn’t afraid to go against the grain, pushing back against the latest hotness in the JavaScript world where needed and stepping back with a more nuanced point of view.</p><h3><a href="https://tabsandspaces.io" target="_blank" rel="noopener">5. Tabs and Spaces</a></h3><p>This is a fun podcast that really feels like listening to three friends chatting at the pub, interviews and deep dives on topics that all developers care about, this is well worth putting into your rotation.</p><h3><a href="/podcast">6. All The Code</a></h3><p>Have you subscribed to the CSTC podcast yet? If not subscribe to hear interviews with amazing seasoned devs and those just starting out.</p>]]></description>
            <link>https://allthecode.co/blog/post/the-best-coding-podcasts-to-listen-to-become-a-better-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/the-best-coding-podcasts-to-listen-to-become-a-better-developer</guid>
            <pubDate>Wed, 22 Dec 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How To Learn Python]]></title>
            <description><![CDATA[<p>Learning Python is one of the best ways to get a job as a developer. Learning Python lets you write code for the web, machine learning, artificial intelligence and solve complex problems. Python is widely held as one of the best first languages to learn as it make the fundamentals easy to grasp but doesn&#x27;t limit what you can build and scales to the largest software projects in the world.</p><p>With the average US Python developer salary now over $100,000 per year it&#x27;s also a very profitable language to learn. So, what are the best ways to learn Python?</p><h2>1. Learn Python With CS50 (3 months)</h2><p>If you have no programming skills at all and have the time to start at the beginning then Harvard&#x27;s free online <a href="http://cs50.net/">CS50.net</a> class is a great place to start, it takes you through a couple of other languages first but you land up learning Python in the second half. This course is amazing but it has a time commitment as it starts with the fundamentals so is very much &quot;bottom up&quot; learning.</p><h2>2. Learn Python by Automating The Boring Stuff (6 weeks)</h2><p>This book &quot;<a href="https://automatetheboringstuff.com/">Automate the Boring Stuff with Python</a>&quot;, which is made available for free by the author, takes a practical approach to learning Python by showing you how to automate boring tasks like bulk file renaming and completing online forms. A great first primer on the language and it has been many peoples first introduction to coding.</p><h2>3. Learn Python The Hard Way (6 weeks)</h2><p><a href="https://shop.learncodethehardway.org/access/buy/9/">Learn Python &quot;The Hard Way&quot;</a> is more a branding term than anything else so don&#x27;t be put off! This just means that the author expects you to type out and execute all the code in the book so really learn the language. Version 2 of this book used to be free and this is how I learnt Python, version 3 is $29.99 and is widely regarded as worth the investment (in both money and time).</p><h2>4. Learn Python on Udemy: 100 Days of Code: The Complete Python Pro Bootcamp for 2022</h2><p>Already updated for 2022 the <a href="https://www.udemy.com/course/100-days-of-code/?ranMID=39197&amp;ranEAID=ZsVWotymlGs&amp;ranSiteID=ZsVWotymlGs-mocbgN6yLE151UzptqE81w&amp;utm_source=aff-campaign&amp;LSNPUBID=ZsVWotymlGs&amp;utm_medium=udemyads">100 Days of Code: The Complete Python Pro Bootcamp for 2022</a> course it&#x27;s the clear winner of Udemy Python courses. With 60 hours of content video this course takes you from having no Python to being able to build applications and solve problems with it. Udemy has sales on all the time so remember to never pay full price, just wait a week or two and they will have it on sale.</p><h2>5. Learn Python With a Youtube Crash Course (90 minutes)</h2><p>Brad Traversy has a jam packed <a href="https://www.youtube.com/watch?v=JJmcL1N2KQs">Python crash course</a> that goes through everything you need to know in 90 mins. Probably best for those of you with some programming knowledge but even for a complete beginner this will give you a broad overview and help decide if Python is for you.</p><h2>Learn Python Summary</h2><p>What ever way you decide to learn Python remember that learning is just the start, you need to build projects, solve problems and practice, practice, practice. For that there is no better list of sample projects than my post <a href="https://allthecode.co/blog/post/30-developer-portfolio-project-ideas">30 Developer Portfolio Project Ideas</a>.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-learn-python</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-learn-python</guid>
            <pubDate>Sun, 31 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Day In The Life Of A Software Developer]]></title>
            <description><![CDATA[<p>One of the most important things to consider when looking at a career switch to being a developer is what your typical day will look like. Software developer roles can all look the same from the outside but what your day consists of can vary significantly depending on the type of software development you are doing, the age and scale of the business and the type of work they do.</p><p>Below is an overview of the types of days to expect at different places, make sure to read to the end to see an overview of what will be common to all of them.</p><h2>Software developer at an agency</h2><p>Agencies deliver software projects for clients who don&#x27;t have in house developers, need more capacity for a short period of time or simply don&#x27;t have the skills in hose for a specific type of work. Agencies tend to have many projects underway at once and you will be assigned to one or two of them for a few months at a time. Your main focus will be on building the features required for your clients project with fairly strict deadlines, the client wants the software and your company want to make the client happy.</p><p>Agencies can be stressful to work at, you will need to work quickly, efficiently and be very good at keeping stakeholders up to date. Expect a few more calls each day that you typically get in other types of companies and the expectation that you will deliver.</p><p>The enormous positive is that you get to change projects every few months, which can feel like a whole new job, you get exposed to a wide variety of technologies and you spend little time maintaining legacy code and fixing bugs.</p><h2>Software developer at an established company</h2><p>Working for an older, more established business who&#x27;s main business focussed isn&#x27;t directly related to technology (like a manufacturing firm, retailer, bank, energy company etc) will see you working across internal projects that help the business achieve its primary aim. You will feel more in a supporting role where the work you do is less about &quot;cool tech&quot; and more about &quot;is this the best way to help us sell more widgets?&quot; (whatever those widgets might be).</p><p>There is less pressure than an agency however deadlines are still very much a thing and other departments will be relying on you to complete work for them, likewise you will also be reliant on other departments delivering on their promises to you and you could get held up waiting for marketing, finance etc to get back to you on something.</p><p>You will also have a lot of legacy code to manage and monitor. This will help you get used to working with a large code base and debugging weird issues far more than a new greenfield project.</p><p>Work will feel slower and you won&#x27;t feel like you achieve as much as you like many days but that&#x27;s to be expected and totally fine, you are not here to crank code, you are here to deliver on what the business needs, and bug fixes for users is very high on that list.</p><p>But there will most likely be good processes in place, the company will be stable and they will offer a lot more beyond just coding and an office full of bean bags. Larger established companies offer a career path, a sense of achievement and being part of something bigger than just a single deliverable.</p><h2>Software developer at a start up</h2><p>Start ups are cool, hip and fun. They inhabit the middle ground of the established company and an agency. There is legacy code but it&#x27;s not that old, there is pressure to deliver but there&#x27;s no external client impatiently jumping around and you will have to do a bit of support and bug fixing but it mostly feels like feature work so it&#x27;s not that draining.</p><p>Being a software developer at a start up is seen by many as the perfect balance, the enormous trade off is instability. The company might not have found product market fit yet, it might not have even launched and the founders are trying to raise money to keep the lights on, there will be minimal documentation and processes in place and the code base will be full of shortcuts and hacks.</p><p>The flip-side of this is that you can have a huge impact on your team and the organisation, if you join a company of 20 people then you are 5% of the company, that&#x27;s a huge opportunity to input on product direction, working practices and you might even get some equity.</p><h2>Software developer typical day</h2><p>Above are three examples of what a developer role can feel like at different companies that employ software developers, lets wrap this up with what a typical day might look like no matter where you are:</p><p>Morning:</p><ul><li>Stand up meeting with team, 15 minutes. Talk about the work you are doing, any blockers you have.</li><li>Development work on your current feature. This could be solo, paired with another developer or a mix of both.</li><li>Chat with user or product owner. If you need to clarify something about your work the quickest way is to talk to the person using it or the person in charge of the product.</li></ul><p>Afternoon:</p><ul><li>Team meeting to look over the backlog of work and plan how it will be tackled, group exercise in which everyone gets to have input on how the feature/solution will be implemented.</li><li>Investigate and fix a bug related to a support ticket, lots of looking through logs, talking to the user/support person and trying to recreate it.</li><li>Development work on your current feature, adding documentation.</li><li>Reviewing another team members code.</li></ul><h2>Software developer day summary</h2><p>Every company is different and one of the amazing things of being a software developer is that if you find you don&#x27;t like one style of work then there are thousands of other companies who work differently. Sometimes you can get into a regular pattern of work but it&#x27;s unusual to be just cranking out code each day for hours on end, from the outside it might look like we are just twiddling with computers all day but it&#x27;s a lot more than that!</p>]]></description>
            <link>https://allthecode.co/blog/post/day-in-the-life-of-a-software-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/day-in-the-life-of-a-software-developer</guid>
            <pubDate>Sat, 16 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How To Become A Better Developer Today: Quick Wins]]></title>
            <description><![CDATA[<p>Being a developer is about constant learning and improvement. The systems that developers build are complicated and the underlying technologies are constantly changing. Many developers think about improving as learning a new framework or programming language, when in fact some of the best improvements you can make are minor changes that can be build into you daily habits with minimal disruption.</p><p>Here are some common mistakes you might be making daily that are slowing you down, holding you back and building tech debt.</p><p>🧪 <strong>Not writing tests</strong>. Get used to writing these sooner rather than later. You don’t need to go full Test Driven Development (TDD) but at least be comfortable. I should have started earlier!</p><p>📄 <strong>Not documenting code</strong>. Coming back to old code is a nightmare without good docs, I can’t remember how code I wrote last week works so after 1 year I have no chance.</p><p>🧰 <strong>Not breaking out common code into a reusable library</strong>. Reusable code is your toolbox, it saves you time, effort and complexity. Start building your personal toolbox or your teams toolbox now.</p><p>🍱 <strong>Forgetting to split projects into smaller modules</strong>. Good organisation is the best way to keep a codebase sensible and manageable, it doesn’t come for free though so you have to work at it.</p><p>🏛 <strong>Not using external libraries</strong>. Build on other peoples code and don’t write everything from scratch, this lets you move faster, benefit from others work and you can focus on your core business logic.</p><p>💅 <strong>Not using an auto code formatter</strong>. Worrying about how to format and layout your code should be the last thing on your mind, get used to auto format on save and you will love it!</p><p>🤖 <strong>Not automating</strong>. There is a knack in knowing when to automate, too early in a process and you risk automating the wrong thing and having to change it, too late and you&#x27;ll have an overly complex process to automate that will take weeks to sort out. If you&#x27;ve done the same thing 3 times in a short period of time (measured in weeks) then it&#x27;s time to automate it.</p><h3>Summary</h3><p>None of these on their own will derail a software project but all of them can add friction to the development process and slow you down. Pick one and implement it in your current project today.</p><h3>One more win</h3><p>Join the mailing list below for regular tips and a FREE copy of the All The Code quick start guide 😀</p>]]></description>
            <link>https://allthecode.co/blog/post/become-a-better-developer-today-quick-wins</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/become-a-better-developer-today-quick-wins</guid>
            <pubDate>Thu, 09 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[6 Tips To Beat The Take Home Coding Test]]></title>
            <description><![CDATA[<p>Take home coding tests are seen by many as the ideal alternative to stressful in person live tests. While that may be true to a certain extent, it doesn&#x27;t mean that there aren&#x27;t pitfalls to be wary of, here are my 6 top tips for making sure you crack your next take home test:</p><ol><li>Make sure you know exactly when the test is due, they might be casual about it but see if you can nail them to a deadline. This would be expected in a job and so you should do the same here, it actually works in your favour as well, if they want it done in 24 hours and you had been thinking &quot;I&#x27;ll get to it at the weekend&quot; you can now re-asses.</li><li>Don’t be afraid to ask questions about it if you need to. It’s unlikely that they have covered off literally everything in the spec. If you are short on time and just want to get started then add a comment to the readme about an assumption you made that saved you asking a question.</li><li>Add a readme, explain your thinking and approach. At the end of the readme add some notes on what you found challenging and how you would improve it. Make sure the readme contains all steps required to get the project up and running so that they can run it locally if they want to.</li><li>Ideally host it as a Github repo and send them the link to it. Emailing projects with many files zipped up can be flaky.</li><li>If you go down the Github route and have passwords or API tokens in your code then highlight in the readme, or in a comment, that you know this is bad practice but for the purposes of the test you have included them. If the test specifically tells you not to do this then don’t, however that’s getting beyond what I think would be expected of in a reasonable take home test.</li><li>Don’t solve more than they ask for, the idea here is that you have been given a task to do to assess your coding skills and your ability to follow instructions. By all means do a good job but this isn’t the time to “express yourself”.</li></ol><p>There you have it, everything you need to make sure you next take home test.</p><p>Remember to sign up to the mailing list if you want more like this delivered straight to your inbox 😀</p>]]></description>
            <link>https://allthecode.co/blog/post/6-tips-to-beat-the-take-home-coding-test</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/6-tips-to-beat-the-take-home-coding-test</guid>
            <pubDate>Mon, 06 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to keep up in the expanding world of development]]></title>
            <description><![CDATA[<p>There is so much to learn and know in software development that it can be overwhelming. When you first set out to learn it&#x27;s like you&#x27;re a child in the middle of a huge field full of toys that you know are amazing but have no idea how to play with, or what they even do.</p><p>As you progress through your career this feeling subsides a little bit as you build the foundational skills that let you pick up a toy and think &quot;huh, this looks like that other toy I played with last week but it&#x27;s red and made from cork instead of plastic&quot; and you can muddle your way though.</p><h2>More technology to learn than time to learn it</h2><p>The problem that remains through all of our careers is that there is significantly more to learn than any one person can hope to cover in a life time. In fact I would go so far as to say that many developers already interact with enough different technologies each day that even learning all of those properly is a lifetimes work.</p><p>For example, gone are the days where a web developer could hold the entirety of that industry&#x27;s knowledge in their head. 20 years ago when the web was first taking on a form that would be recognizanble as what we have today, it was probably possible to know everything about how it worked. Now, that just isn&#x27;t the case, we have layer upon layer of abstraction running so deep that we&#x27;ve made a technological Mariana trench, and we are still digging!</p><h2>What to do as a code newbie?</h2><p>Depending on where you are in your career I see two options. If you are new to coding and still finding your feet, then focus on fundamentals. I&#x27;m not one of these militant people who says you must master data structures and algorithms before even looking at things like React or Django but I do think it&#x27;s important to know where you would like to work for the first portion of your career and focus on the fundamentals in that area to begin with.</p><p>If you want to be a front end web developer then HTML/CSS, JS and React are probably your best initial focusses. f you want to be an iOS developer then you want to learn Swift, UIKit and a smattering of SwiftUI.</p><p>Don&#x27;t hop around too much or get distracted by the new and the shiny, you will keep picking up and putting down toys and never really learn how to enjoy one fully. All those other technologies will be there to pick up in the future, and having good fundamentals in one area will actually transfer very well into other technologies - you are rarely starting from scratch again.</p><h2>What to do if you&#x27;re mid career?</h2><p>If you are mid career, like me, then you have probably already been through a few cycles of &quot;learn it all&quot; and &quot;I don&#x27;t want to touch a keyboard for a second longer than needed&quot; already. I have oscillated between fear of missing the next big thing and just wanting to go back to using JQuery many times already.</p><p>The thing that I have recently found that helps is to not force myself to learn everything new just because the whole world seems to be focussing on it. Instead look at what my current job, or the next job I want, actually need and then make something fun in that technology.</p><p>This is hard if the next thing I need to learn is a bit boring or specific to a larger scale application but if it&#x27;s a new flavour of database or front end tech then I will spin up an old project I know pretty well and reimplement some, or all, of it in said new technology. These projects are small, fun and useful to my life, so I usually quite enjoy pottering about with them because I don&#x27;t need to think through the business logic too much and can focus on the fun of learning a new thing.</p><h2>Summary</h2><p>Regardless of where you are on your coding journey you will feel pressure to learn and to keep up but don&#x27;t loose sight of the end goal, which is to make products and solve problems. With a few exceptions it doesn&#x27;t really matter what technology you use and hopping between them isn&#x27;t all that hard once you have a good grasp in one area. Find enjoyment in the learning process and don&#x27;t try to take on too much, focus on the smallest next unit of learning that can add value to your daily work.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-keep-up-in-the-expanding-world-of-development</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-keep-up-in-the-expanding-world-of-development</guid>
            <pubDate>Sun, 05 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to use the ternary statement sensibly in JavaScript]]></title>
            <description><![CDATA[<p>The way we choose to write our code is as important as what the code does, poorly structured, poorly name or plain old confusing code is hard to maintain. While the problems we solve are often mind bendingly difficult, the way we write our code does not have to be.</p><p>We have all opened up code that looks like this:</p><p><code>const fds = (fda + fdb)/gtr;</code></p><p>and wondered if the original author hated the universe, was a genuine genius or was somehow allergic to typing. There is nothing in that code to indicate what those variable relate to or how <code>fds</code> might be useful in the future.</p><p>The variable names are meaningless to our brain and remembering these letter groupings while tracing their use through the code adds a huge amount of cognitive load.</p><p>Fortunately we have, in the main, moved away from this type of variable naming. It was ripe in the Fortran and early C days but now we use more descriptive names that show the intent of the code and it is much easier follow along. If a variable is called <code>maxWidth</code> it is much easier to understand and remember than <code>mW</code>. It&#x27;s the different between holding a group of letters in your head vs the concept of what it represents, are brains are pretty terrible at the former but excellent at the latter.</p><h2>Ternaries and Destructuring</h2><p>Whilst we have clearly improved when it comes to naming variables there is an area of coding that we are going backwards in, and that is the desire for smaller and smaller files - even at the cost of legibility.</p><p>Small composable blocks of code is a great ideal to aim for, having 45 tabs open in a code editor isn&#x27;t always ideal but it probably is better than 3 files of 2,000+ lines each. However, I would rather have those 3 big files to wrangle than dozens or hundreds of the following:</p><pre><code class="language-js">const {
  data: {
    header: { personId, storeId, locationId, stockUnit },
  },
} = msg;
</code></pre><p>or</p><pre><code class="language-js">const result = isAdmin ? &quot;All Allowed&quot; : isManager ? &quot;Some Allowed&quot; : isAlien ? &quot;Run&quot; : &quot;Not Allowed&quot;;
</code></pre><p>In isolation the above examples are reasonably understandable (i&#x27;ve chosen fairly simple examples) however, amongst a full application, surrounded by other business logic and less straightforward variable names, both of these can be written in a longer, more understandable manner. Let&#x27;s take that ternary:</p><pre><code class="language-js">let result = &quot;Not Allowed&quot;;
if (isAdmin) {
  result = &quot;All Allowed&quot;;
}
if (isManager) {
  result = &quot;Some Allowed&quot;;
}
if (isAlien) {
  result = &quot;Run&quot;;
}
</code></pre><p>The above is considerably longer but much easier to read. The added vertical space is a more than worthwhile tradeoff in the aid of readability to me.</p><p>We should be striving to write code that is understandable to the newest and least experienced members of the team. Business logic is where the complexity should lie in code, not in the syntax itself. When a new developer or new team member is reading unfamiliar code they should be focussing all of their efforts on understanding the what the code does and not the exotic structures used to save a few lines.</p><h2>The rise of ternary</h2><p>Ternary operators have always been a bit of syntactic sugar to make very simple <code>if/else</code> statements shorter. I would agree that an <code>if/else</code> that takes up only 5 lines and is very simple should be simplified, however the rise in ternary in the Javascript world over the last decade is starting to get out of hand. I&#x27;m starting to see multi level ternaries with <code>map</code> and <code>find</code> in them where that all important <code>:</code> of the ternary becomes impossible to spot.</p><p>I think this has happened thanks to React, more specifically JSX, and it&#x27;s liberal use of ternary statements for conditional rendering. I don&#x27;t want this to become a rant on JSX (which at worst I would say I am ambivalent on) but let&#x27;s not let JSX practices bleed in to JS/TS and other best practice.</p><h2>Take Away</h2><p>Code for legibility and not brevity. We moved away from terse and incomprehensible variable names, let&#x27;s not regress with the equivalent with syntax.</p><p>If you want a selfish motivation then I ask: would you rather new team members just understand the code you wrote or spend the rest of your days in that company answering questions about it?</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-use-the-ternary-sensibly-in-javascript</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-use-the-ternary-sensibly-in-javascript</guid>
            <pubDate>Sat, 04 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[30 Developer Portfolio Project Ideas]]></title>
            <description><![CDATA[<p>It&#x27;s hard to know what projects to make when trying to flesh out your portfolio, often we get caught up thinking it needs to be something unique. Projects need to be small, complete and functional, making your own take on any of these well trodden paths would be a great project for your portfolio. Each idea has a suggested rough tech stack you could use but in reality you could make all of these in pretty much any technology.</p><ol><li>Straw Poll Web App - React, NestJS</li><li>Pokedex - Angular, <a href="http://PokeApi.co">PokeApi.co</a></li><li>Weather App - SwiftUI, <a href="http://openweathermap.org/api">openweathermap.org/api</a></li><li>Tweet Scheduler - JS/HTML/CSS and Supabase</li><li>Workout creator- Kotlin, Android</li><li>Timer Web App - React</li><li>Reminders text message - Vue, Twilio</li><li>Crypto Tracker - Angular, ExpressJS</li><li>Chat Web App - React, <a href="http://socket.io">socket.io</a>, NestJS</li><li>File Uploader Plugin - Angular, Ruby</li><li>IMDB Ratings Scraper - HTML/CSS, Python</li><li>Egg Timer - HTML/CSS, JS, CapacitorJS</li><li>Meme Maker - UIKit, Swift</li><li>Colour Picker App from Camera - Flutter, Dart</li><li>Tax Calculator - Angular</li><li>Slack Plugin - JS</li><li>Shopify Theme - NodeJS, React, GraphQL</li><li>Wordpress Plugin - HTML/CSS, JS, PHP</li><li>Instagram Post Maker - Kotlin, Android</li><li>Todo List CLI App - Python</li><li>Notes App - UIKit, AppKit</li><li>Flash Card App - SwiftUI</li><li>GitHub Timeline - Vue</li><li>Conway&#x27;s Game Of Life - HTML/CSS, JS</li><li>Expenses Tracker - React, Electron</li><li>Currency Converter - React</li><li>Clone an App - same tech</li><li>URL Shortener - HTML/CSS, JS, Lavarel</li><li>Mine Sweeper - PhaserJS</li><li>Habit Tracker - Swift, UIKIt</li></ol>]]></description>
            <link>https://allthecode.co/blog/post/30-developer-portfolio-project-ideas</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/30-developer-portfolio-project-ideas</guid>
            <pubDate>Fri, 03 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to get better at code reviews]]></title>
            <description><![CDATA[<p>It&#x27;s important to be open to code review requests but we&#x27;ve all been there. You&#x27;ve got comments on your code from a reviewer and it feels like you might as well rewrite everything from scratch. It&#x27;s demoralising and feels like a waste of time, especially since you know it works and fulfils the requirements of the task.</p><p>Situations like this can lead to you cherry picking your reviewers, having endless back and forths about a <code>forEach</code> vs a <code>for</code>, and generally feeling a bit fed up with the whole process.</p><p>Well, let me introduce you to a system that lets the reviewer express their thoughts in a manner that indicates exactly how important each comment is and how much attention you need to pay to it.</p><p>MoSCoW, taken from the world of project management is the name given to a list of requirements laid out as:</p><ul><li>Musts</li><li>Shoulds</li><li>Coulds</li><li>Woulds</li></ul><p>I won&#x27;t dwell on what they mean exactly in the world they originate from because it&#x27;s not relevant and the system is so self explanatory you&#x27;ve probably already worked out where I&#x27;m going.</p><h2>M/S/C/W</h2><p>Each comment should begin with <code>M:</code>, <code>S:</code>, <code>C</code> or <code>W:</code> and then the comment.</p><ul><li><strong>Must</strong>: this has to be changed to be approved. These are errors that either go against the coding standards of the team or are clearly just incorrect and will lead to a bug. These can&#x27;t be ignored.</li><li><strong>Should</strong>: these are things that would be an obvious and clear improvement. You have to give a reason to ignore this and the code reviewer has to agree. A third party can be brought in if needs be.</li><li><strong>Could</strong>: these are for niceties that the reviewer thinks would improve the codebase in some way but are probably going above and beyond what the task requires. If they have an idea for a slightly better function name or they want to leave a comment but aren&#x27;t all that bothered if you take the advice then this is the prefix to use. These can be ignored without a reason given.</li><li><strong>Would</strong>: these are reserved for the &quot;I wouldn&#x27;t have done it this way&quot; comments that require lots of rework but are 100% personal preference. These rarely get used because a would is really just the reviewer being given space to express their thoughts. An ideal usage of this is to educate a junior member of the team and perhaps follow up with a conversation around it post review.</li></ul><p>In the example above about a for loop I would say:</p><pre><code class="language-js">S: Use forEach here to avoid off by one errors and aid understanding of
loop conditions
</code></pre><p>or similar.</p><h2>Summary</h2><p>Introduce this at your next team meeting, get a clear understanding of your musts and a rough idea of some shoulds and you will see how liberating this is for everyone involved in the code review process.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-get-better-at-code-reviews</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-get-better-at-code-reviews</guid>
            <pubDate>Thu, 02 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How To Pass A Coding Interview]]></title>
            <description><![CDATA[<p>Coding interviews are universally considered pretty horrible. You have a set amount of time to complete a task that has little resemblance to the day to day job of being developer, in front of someone who knows the answer to the question and holds your fate in their hands.</p><p>It&#x27;s not wonder we don&#x27;t like them!</p><p>Whether you are a seasoned pro at coding interviews or a complete newbie who has only ever heard the horror stories we can all improve. Here are my tips to getting through your next test.</p><h2>1. Play the game</h2><p>We all know that you won&#x27;t have to reverse a linked list in the actual job, but during the interview you need to forget that. Whatever challenge they have you do, treat it like a real work task, that way when you get stuck and stressed your brain won&#x27;t be saying &quot;this is madness, the job won&#x27;t be like this!&quot; If you let those thoughts get in to your head you will get in a downward spiral that won&#x27;t do you any favours.</p><h2>2. Question and Clarify</h2><p>On the topic of making yourself believe this is a proper task, really treat it like one. This means you ask questions to clarify what is required and clear up any ambiguities there are in the task. If you don&#x27;t understand something the way it is written, don&#x27;t be afraid to speak up, it could have been written in such a way to make sure you ask questions. Often the most important parts of an interview happen outside the core test so asking questions, clarifying points and reiterating what they want you to do is vital because those are all things you will be expected to do in the actual job.</p><h2>3. Check the rules</h2><p>It&#x27;s no secret that Google is the main tool in a developers box and a good interviewer will allow for this. Don&#x27;t sweat through not being able to remember the syntax for <code>.reduce()</code> when you could Google it. Ask at the start of the interview if Googling is allowed and to what extent you can use it, if it&#x27;s a solved problem (like reversing a linked list) they will say not to Google that explicitly, but usually language syntax and standard library functions are fair game. Each company will vary slightly and asking what is and isn&#x27;t allowed is only a good thing.</p><h2>4. Talk, talk, talk</h2><p>Don&#x27;t code in silence, make sure you are verbalising your thoughts. This felt very alien to me the first time I did it so I would suggest practicing on a small problem yourself, get used to talking about what you are coding, tell them what you are thinking and the trade offs you are making. Don&#x27;t think in silence and then write code, the interviewer isn&#x27;t a mind reader so help them out. If you are making a trade off between two approaches ask for their input. For example &quot;do we want faster reads of writes do you think? I&#x27;m thinking the writes are more important but would love your input&quot;</p><h2>5. Tell them what you&#x27;re skipping</h2><p>If you are taking a short cut that you wouldn&#x27;t usually do then tell them and explain why. If you don&#x27;t want to waste 10 minutes setting up an automated test library and you normally would then let the interviewer know that. This goes hand in hand with talking about what you are doing and could subtly de-rail you if you skip over something without addressing it.</p><h2>6. Test as you go</h2><p>Don&#x27;t forget to run your code. Don&#x27;t code for 25 minutes and then run it for the first time! They want to see an iterative process, how you respond to errors and how you debug them. Don&#x27;t be afraid to debug with <code>console.log(&#x27;here&#x27;)</code> if that&#x27;s the best tool for the job, they want to see how you solve problems, how you deal with roadblocks and how you think.</p><h2>7. Be yourself and be honest</h2><p>Imposter syndrome is horrible, made worse by if you actually are one! Be yourself in the interview, code how you want to code and make your level clear. The last thing you want is to make out you know things you don&#x27;t, or have experience you don&#x27;t, only to get found out on the job. Don&#x27;t let the pressure of performing in an interview change who you are. If you code as you and don&#x27;t pretend to be smarter or more experienced than you are then you can go into that job imposter syndrome free 😀</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-pass-a-coding-interview</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-pass-a-coding-interview</guid>
            <pubDate>Wed, 01 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to successfully switch to a coding career]]></title>
            <description><![CDATA[<p>Are you sabotaging your coding career with lines like this?</p><p>&quot;Oh it doesn&#x27;t matter, I&#x27;m just playing at the moment&quot;</p><p>This is a sentence that gets my attention, and not for good reasons. When people say this it&#x27;s usually not after discussing something that would actually be considered &quot;play&quot;. No, it tends to be after mentioning something actually quite serious and important like investing, learning to code, starting to apply for jobs.</p><p>Describing your efforts in any of the above areas as &quot;playing&quot; is jarring to me and leads me to follow up with:</p><p>&quot;What do you mean?&quot;</p><p>At this point they usually get a little uncomfortable and say something like:</p><p>&quot;Well it&#x27;s ok if I don&#x27;t hear back from recruiters because I am just playing about before doing it properly in the future&quot;</p><p>Or some version of that.</p><p>Let me translate what they really mean:</p><p>&quot;I&#x27;m trying a new thing, I don&#x27;t really know anything about it because learning about how to do it properly is boring and uncomfortable and I think there is a reasonable chance that I may fail. As a result I am making out like it&#x27;s not that important to me and that I am almost expecting it to fail because then I won&#x27;t look or feel as stupid as if I conveyed to you that I really hope this works. I am pre-emptively admitting defeat so that the emotional fall I feel, should this fail, won&#x27;t hurt as much and I can say &quot;I didn&#x27;t really expect anything from this, I was just playing&quot; &quot;</p><p>Basically, they are setting themselves up for failure and absolving themselves of any real responsibility for that failure at the same time. Quite the mental gymnastics.</p><p>Instead what they should be saying:</p><p>&quot;I&#x27;m learning to code and starting to apply for jobs. It&#x27;s hard going and I&#x27;m not sure how it will pan out but I&#x27;m really keen to learn everything I can about this process and I&#x27;m really confident I can make it work. There&#x27;s a chance that it&#x27;s going to take a few attempts and that I might fail in the short term but I can take all of those learnings and redouble my efforts until I reach my goal&quot;</p><p>I don&#x27;t know about you but I&#x27;d rather bet on the second person than the first. No matter the odds or the size of the challenge they are tackling.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-successfully-switch-to-a-coding-career</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-successfully-switch-to-a-coding-career</guid>
            <pubDate>Tue, 31 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to avoid burnout]]></title>
            <description><![CDATA[<p>Avoiding burnout must be one of the most Googled work related terms of 2020 and 2021. As we all adjusted to the new world of enforced work from home, economic uncertainty and wide spread heath concerns due to the pandemic people were coming to terms of significant blurring of work and home life.</p><p>While some people initially thrived, as the months dragged on it eventually took a toll on all of us, I witnessed many of my friends let work engulf their life to the point where they were signing off WhatsApp messages with &quot;Kind Regards&quot; and suggesting agendas for Saturday Zoom calls with drinks - it would be funny if it weren&#x27;t so painfully a sign of poor mental health.</p><p>I started a new job in October 2020, leaving a wonderful company that was deeply impacted by COVID. I went to a consultancy building a product in arguably the fastest growing area of tech over the past few years. Greenfield project, lots of input on direction and near complete autonomy to implement parts of the system how I wanted in a very small team.</p><p>The problem? The business had no idea what they actually wanted us to build and we burned ourselves up in about 8 months flat. Coming out of that experience, thankfully in a new role elsewhere, I can look back and see where I could have done a much better job managing the situation and my mental health.</p><h2>Clarify roles, responsibilities and expectations</h2><p>No one knew where their roles and responsibilities started and ended. This meant many product level decisions were pushed down to dev and we spent a lot of time saying no. Saying no is an important skill as a developer but we were making calls on things that really should have been decided at a product level, you can only say no for so long before it wears on your soul and you start saying yes simply to lift your mood a bit. We would oscillate between saying no and then yes and then having to say no again mid feature because we had over committed.</p><p>If everyone in the team had a clear understanding of where key decisions should be made we wouldn&#x27;t have gotten in to this negative feedback loop.</p><h2>Time box meetings and have an aim</h2><p>Meetings with no set aim, no idea of what would be needed to make a decision and (as above) no idea who has the final say lead to endless meetings that achieved nothing. Meetings should have a clear purpose, a &quot;what do we want to get out of this time?&quot; to keep it on track and moving toward a conclusion. I would often look at a screen of faces discussing the same feature for the 4th hour that week and be amazed at the amount of wasted time and money having all these people stuck in an endless loop.</p><h2>Limit your projects</h2><p>The pressure to learn new technologies is huge, if you are learning masses during your day job working with new things then don&#x27;t also pile on with extra learning in the evening. If you do want to code for fun in the evening then make sure it really is fun. I have a new rule which is to limit myself to one learning project and one doing project at a time. If work is straightforward because I know the technologies then I will learn something new in my spare time, if work is all new then any coding I do in the evenings should be for fun and low mental effort.</p><h2>Vary your work types</h2><p>I got stuck in two modes in that job:</p><ol><li>Coding like my life depended on it</li><li>Endless calls talking about the product</li></ol><p>I should have given myself other ways to work during that time, like listening to documentation with Speechify rather than forcing myself to stare at the screen more. I should have suggested we try more interactive whiteboard sessions for calls rather than just talking endlessly. I should have gone for a walk whilst on morning standup to get some new perspective.</p><h2>Push back against unreasonable deadlines</h2><p>We were given a list of features and a deadline that had had no technical input at all. We raised an eye brow at this initially but then just worked to hit it. Product encouraged us to skip writing tests, skip automating repetitive tasks and increase the number of points each sprint to hit the deadline. I used the term &quot;coding for my life&quot; above because that&#x27;s what it felt like.</p><p>We should have stuck to our guns, written tests, automated tasks and gained a real idea of the development velocity instead of simply aiming to deliver features come hell or high water. Development work isn&#x27;t like manufacturing work, you can&#x27;t just throw more time, more people and a faster cadence to get more done - things break, tech debt builds and quality suffers.</p><p>We should have descoped the project and found a happy medium between getting features out the door and building a reliable and scalable codebase at a sustainable pace.</p><h2>Pomodoro</h2><p>I would sometimes work for 5 hours straight without taking a break only to then be basically useless for the rest of the day. Breaking work up in to 50 minutes chunks with 10 minute breaks is a much more sustainable approach to the day and is what I now implement. Mental work doesn&#x27;t have the same pain and tiredness feedback of physical work and so it&#x27;s far harder to know when you need a break. On a building site it&#x27;s far easier to spot someone stagger because they&#x27;re too tired work more. To make up for that lack of feedback we need to automate our breaks and stick to them.</p><h2>Turn off notifications</h2><p>This one is huge, a constant stream of notifications through the day is death by a thousand cuts to your cognitive abilities. If anything is truly important enough your team will find a way to contact you, otherwise those Slack notifications can wait to the top of the hour. Either dedicate some time each day to triage emails and notifications or set a specific point each hour to check in, perhaps just after one of your 10 minute Pomodoro breaks.</p><h2>Sleep</h2><p>No matter how engrossed in that feature you are or how much you think scrolling on Instagram or Twitter for 5 more minuets will make you happy, neither will be as good for you as just going to sleep and getting in a solid 7-9 hours on the regular.</p><h2>Exercise 30-60 minutes a day</h2><p>Physically tiring yourself out, getting your body moving and releasing the hormones that come from exercise into your body will do wonders for your focus, sleep and overall mental health. It doesn&#x27;t need to be weights or running, it can be skipping or dancing or kicking a ball against a wall, just something that gets you a bit out of breath and breaks a sweat. If you can break up your work day with exercise even better.</p><h2>Summary</h2><p>That project ended in failure, the product was over featured in places that didn&#x27;t really matter and underserved in actually useful features. 100% of the dev team coincidentally handed their notice in on the same day and so the project was put on pause and the non-dev members repurposed to other projects.</p><p>I narrowly avoided burnout, more by luck than judgement but I am at a new place now that clearly promotes sustainable working practices which is much better for my mental health.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-avoid-burnout</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-avoid-burnout</guid>
            <pubDate>Mon, 30 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What are the main developer roles?]]></title>
            <description><![CDATA[<p>Developers have many options for where to focus their time, skills and career. These ares all share the similarity of writing to code to solve problems, however there are enough differences and technologies involved that if you specifically want to work in one area then it is worth guiding your learning and development in that direction sooner rather than later.</p><p>If you don&#x27;t have a specific area in mind then developing your strengths in the shared attributes should allow you to move discipline when you decide you want to.</p><h2>Web developer</h2><p>Loosely subdivided down into 3 categories of Frontend, Backend and Full-stack the world of web development is broad and ever changing.</p><p>Frontend work is concerned with the creation of the user interface and user experience (two fields in their own right that, while don’t concern themselves with coding, offer deep and interesting careers) and handling the interactions with other services such as third party remote APIs and the applications own backend.</p><p>The backend of the web is the 90% of the iceberg you can’t see. It’s where the majority of the web’s code lives and is responsible for handling requests, fetching data, running through business logic tasks and generally keeping the wheels on the bus. While there are many applications that are useful with only frontend code, there will come a time in nearly any project that some backend heft will need to be brought to the party.</p><p>Full-stack is the combination of both of these areas, people working in this category tend to have a preference one way or the other but the trade off for breadth is that their skills likely don&#x27;t run as deep in either end as someone focussed specifically on front or back. The trade off however is that you can get a whole system up and running with less people. I consider my self full stack and rely on specialists when things get tricky.</p><h2>DevOps</h2><p>DevOps is the name given to a reasonably recent field that has emerged to blur the lines between development (the building of software) and operations (the deployment and maintenance of software).</p><p>If this field is new to you I highly recommend reading the <a href="https://amzn.to/3dj3MRL">Phoenix Project</a> and the <a href="https://amzn.to/3dkweT1">Unicorn Project</a>, which are fictional stories that explain and reveal the concepts of DevOps through the trials and tribulations of a company called Parts Unlimited and their transformation from the older practices around software to embracing DevOps.</p><p>If you have recently learned to code then it is unlikely that this is the area you would want to go into, however it is very much in demand at the moment and if you have a love of &quot;tinkering&quot; with computers from a previous hobby or role, then this could be an excellent way to get into the industry.</p><h2>Data Science</h2><p>Data Science is all the rage at the moment and is in very high demand. Certainly, salaries in this discipline are leading the way and most large companies are adding a Data Scientist to every team and smaller companies are rapidly hiring data scientists now because they see the value of the data they have on their clients and customers.</p><p>Data Science has existed in many forms for 30 years or more, it is essentially using data to make informed decisions. It is often lumped together with Machine Learning and Artificial Intelligence and while these disciplines are different the lines are very blurred and they are more marketing terms than anything. The best description I have read, that I sadly can&#x27;t remember the origin for, is:</p><ul><li>Data Science: Analysing what has happened</li><li>Machine Learning: Predicting what will happen</li><li>Artificial Intelligence: Deciding what will happen</li></ul><p>Data is the foundation to all of them.</p><h2>Embedded Programming</h2><p>Embedded programmers don’t get the attention of web and app developers, but we interact with their work hundreds of times per day. Every time you use a microwave, TV remote, washing machine, drive a car, or swipe into a building with a key card, embedded code gets executed. Embedded code is often referred to as firmware, as it’s baked into the little black electronic chips you see on printed circuit boards and is considered “firm” as it may be hard or even impossible to change once flashed onto the host chip.</p><p>The best example of relatable firmware programming is <a href="https://www.arduino.cc/">Arduino</a>. Arduino uses a standard Atmel microcontroller on a nice board and has some magic instilled in it to massively reduce the barrier to entry for this field.</p><p>The first code I ever wrote “in anger” was embedded code for a little wireless microcontroller which I had made that could transmit a light sensor reading back to a laptop to be displayed on the screen. There is something equally amazing and terrifying about writing code to run on little tiny black squares on a circuit board. For some reason, nothing else in programming matches the joy of simply making an LED flash on and off.</p><h2>Native App Developer</h2><p>There are a few ways of making Apps.</p><ol><li>You can use the native languages for iOS and Android, which are Swift and Kotlin respectively</li><li>You can learn Javascript and use one of the many technologies that allow JS apps to run like a native app shipped via an app store like React Native and Ionic</li><li>You can learn Dart and the Flutter framework or C# and the Xamarin framework.</li></ol><p>All of them end up with apps running on a a smart phone distributed in the main from an App Store. The world of smart phone apps is one of the biggest social and technological changes we have experienced in last 20 years, and probably second only to the internet in the last 100 years. If you want to make apps then you need to decide on one of the above approaches.</p><h2>Others</h2><p>There are of course many sub categories to all of these and if you think any are large enough to warrant their own write up please chime in below. Industries like automotive sector use their own special languages and PLC programmers also have specific skills and knowledge as well.</p>]]></description>
            <link>https://allthecode.co/blog/post/what-are-the-main-developer-roles</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/what-are-the-main-developer-roles</guid>
            <pubDate>Sun, 29 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Should you work at a start up?]]></title>
            <description><![CDATA[<p>Everyone wants to work for a sexy, up and coming startup .... apparently! I&#x27;ve even seen people say that if your first job in tech isn&#x27;t at a start up or on a new team at one of the big tech companies then your tech career is basically a bust before you got out of the gate.</p><p>Setting aside the ridiculousness of that statement I want to look at the difference between working on greenfield projects and older, more established IT estates at companies for whom tech probably isn&#x27;t their primary focus. Is one better than the other?</p><h2>Start up / greenfield work</h2><p>Nearly everyone loves the first page of a new notebook, that sense of opportunity of what this book could be, the person you will become once you write your thoughts and ideas in it - there is something exciting about it. We all know after page 3 it will be full of scribbled notes from calls and reminders for tasks you need to do, but still, we hover the pen over the page just that bit longer on page one, like we&#x27;re stepping out in to the first fresh snowfall of the year not wanting to ruin it.</p><p>Starting a new codebase is similar, all those ideas and possibilities. Knowing that this time you will &quot;do it the right way&quot; is alluring, not having decades of technical debt to slow you down is freeing.</p><p>You will get to know more of the code, you have a hand in crafting many of the main areas, and so further changes and refinements are fast because you already know the code and the patterns employed. You don&#x27;t need to reference documentation all the time or go spelunking through layers of function calls because you already know the final DynamoDB document that the data you need ends up in.</p><p>Working on a greenfield project can make you feel like a coding god. You know what to do and where to do it. You deliver features quickly and you&#x27;re on top of your tech debt. It&#x27;s nice but short lived because all greenfield projects grow old, become complex and no one knows how it all works, not really any way.</p><h2>Brownfield</h2><p>Working on old IT estates is tedious, hard and boring. Nothing new happens and it&#x27;s all just maintenance!</p><p>This misconception is what startups and agencies want you to believe because it&#x27;s their best narrative to persuade you to come and work for them. At some companies it might be true, but that&#x27;s not an issue inherent with older codebases but instead organisations that are set up in such a way that this is how they view their IT systems. Funnily enough a boring company that isn&#x27;t really innovating will probably have boring IT projects that will feel like the above.</p><p>Companies that recognise the value in their IT department and are actively adding features and modernising their IT estate on the other hand, offer something equally fun and, I think, more challenging than greenfield projects.</p><ul><li>They teach you the ability to decipher how a system works without relying on knowledge you accrued from making it yourself. You become a better problem solver.</li><li>You are forced to become comfortable woking on a system you only partially understand.</li><li>You learn the value of tests, not because you are forced to write them but because you will loath previous developers who didn&#x27;t write any for the code you now have to change.</li><li>You will be given the chance to modernise an old system using best practices and compare new approaches to the &quot;old ways&quot; and see not only the benefits but also the downsides.</li></ul><h2>Greenfield vs Brownfield</h2><p>There is no right or wrong answer to which is better but I will say that I have seen developers come to existing IT projects, having only previously worked on greenfield projects, and flail for 6 months getting frustrated and annoyed at how slow everything feels because their expectations have been set unrealistically high from their experience to date. Most of the work with existing code bases is working out exactly what you have to change and where, rather than the change itself.</p><p>People who start their careers on old systems, adding features, fixing old bugs and generally ushering this creaky beast into more modern times don&#x27;t have this painful learning curve, and when they come to a greenfield project they are delighted and appreciative of this window of time where they can move fast and break things.</p>]]></description>
            <link>https://allthecode.co/blog/post/should-you-work-at-a-start-up</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/should-you-work-at-a-start-up</guid>
            <pubDate>Sat, 28 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Do I need a developer portfolio?]]></title>
            <description><![CDATA[<p>I had a fun chat with two people trying to address the same problem as I am yesterday, that is how to get new developers their first job. They have an amazing site called <a href="https://troopl.com/">Troopl</a>* and its primary focus is to help new developers create a portfolio as quickly and simply as possible.</p><p>The thing that both of us have found in our conversations with Bootcamps, recruiters, hiring managers and developers is that the single best way to get your foot in the interview door is to show off what you can do. The best way to do this is to:</p><ol><li>Make things</li><li>Add those things to a portfolio site</li></ol><h2>Skills don&#x27;t have a voice</h2><p>So many developers believe that their &quot;skills speak for themselves&quot; and believe simply listing their skills on a CV or resume is enough.</p><p>Well I&#x27;ve got news for you.</p><p>Putting your skills on your CV with no evidence isn&#x27;t your skills speaking for themselves. It&#x27;s you speaking for yourself and, quite frankly, the person reading that list of skills doesn&#x27;t know you from a hole in the ground or if they can trust you.</p><p>You know what is &quot;letting you skills speak for themselves?&quot; building projects and releasing them so people can actually see what you can make - literally letting your skills speak for themselves. Funnily enough, skills don&#x27;t have a voice of their own, they actually can&#x27;t speak, so your completed, functional projects are the voice they so desperately need.</p><h2>Go slow to go fast</h2><p>People think that taking 2 months to make a project or two will slow down their job search and that it&#x27;s a waste of time. Well, do you know what is a waste of time? Applying to 300 jobs and getting 10 interviews when you could have applied to 50 and got 20 interviews because the hiring managers could actually see your work.</p><p>In the end, making projects is time invested to make an asset that will serve you for years to come on every job hunt. One of my main projects on my portfolio is 10 years old, still working, still getting traffic and still showing off my skills.</p><h2>Don&#x27;t make you own portfolio site</h2><p>I&#x27;ve said it before and upset lots of front end devs but I&#x27;ll say it again. Don&#x27;t make your own portfolio site!</p><blockquote><p>[</p><p>View this post on Instagram</p><p>](<a href="https://www.instagram.com/p/CRWPN50D69a/?utm_source=ig_embed&amp;utm_campaign=loading">https://www.instagram.com/p/CRWPN50D69a/?utm_source=ig_embed&amp;utm_campaign=loading</a>)</p><p><a href="https://www.instagram.com/p/CRWPN50D69a/?utm_source=ig_embed&amp;utm_campaign=loading">A post shared by Simon Barker | Web Developer (@allthecode)</a></p></blockquote><p><a href="//www.instagram.com/embed.js">//www.instagram.com/embed.js</a></p><p>You don&#x27;t have to use Troopl, you can use <a href="https://squarespace.com/">Squarespace</a> or <a href="http://wix.com">Wix</a> or whatever but, the expectation on websites is so high now that spending weeks trying to match what out of the box platforms can do is pointless. You are much better off spending that time making your take on a todo list app or <a href="https://troopl.com/challenges/playlist-generator">Spotify Playlist maker</a> and showing you can solve tricky business logic problems than you are do an ok but not great job at parallax.</p><p>Painters don&#x27;t make their own frames, developers shouldn&#x27;t make their own portfolio site.</p><h2>Summary</h2><ol><li>Make small, functional and complete projects.</li><li>Release them in to the world.</li><li>Put together a turnkey portfolio site to show your work off.</li><li>Get more interviews.</li></ol><ul><li>this isn&#x27;t an ad, they didn&#x27;t ask me to write about them, they didn&#x27;t pay me, they don&#x27;t know I&#x27;m writing this. I just like the guys and think what they are making is cool. If I were going to write an advertisement I would do it for my own stuff 🤣</li></ul>]]></description>
            <link>https://allthecode.co/blog/post/do-I-need-a-developer-portfolio</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/do-I-need-a-developer-portfolio</guid>
            <pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to use a journal as a software developer]]></title>
            <description><![CDATA[<p>&quot;Do you know how to get rid of this weird <em>primodials</em> issue?&quot; I was asked across the office once.</p><p>Something about it sounded familiar so I did a quick search through my work journal and sure enough unearthed a note from 3 months earlier where I had seen this issue myself and jotted down the solution.</p><p>&quot;You&#x27;re running the wrong node version for that application&quot; I confidently reply.</p><p>I looked like a super hero for remembering, when in fact all I did was look back through my external store of knowledge where I jot things down every day and regurgitate it. It helped in this case that the issue had a cool name in it (which is why I use this as my main example) but if it was something I had come across in my career, pretty much any relevant search term would work.</p><p>The value in keeping a work journal is huge, here&#x27;s why.</p><h2>It&#x27;s not for you to read</h2><p>It&#x27;s tempting to think that a journal is for you to go back and read. In reality it&#x27;s not, it&#x27;s a searchable store of knowledge where one of the pieces of information is the date it happened on. Don&#x27;t worry about making it interesting to read or feel like a story, it&#x27;s a series of notes, events, error messages and solutions from your day that could be useful in the future.</p><h2>It&#x27;s a database</h2><p>It&#x27;s really a database, a loosely structured, highly searchable database that enables the value of your developer experience to compound over time. The more you put into it the more valuable it becomes because of how bad our memories are. Each nugget of information makes connections to other morsels of information highlighting links you may have missed. Searching for <code>.htaccess</code> in my database brings up rewrite rules for old projects, reminds me of old projects I had forgotten about and highlights bits of tangential information that can unearth memories, like the terror of ftp&#x27;ing on to a live server and hot fixing a PHP bug without a <code>git commit</code> or line of yaml insight, good times!</p><h2>It gives you confidence</h2><p>We often forget how far we have come, we focus on our current point in space and time, rather than the line and trajectory we are on. Having a store of knowledge, no matter how disorganized and seemingly disparate, lets us see how far we have come, how many problems we have solved and struggles we have overcome.</p><p>As digital creators much of our work is invisible 🙁</p><p>When my wife sees a car from particularly high end sports car company drive past she is reminded of the work she put into that car&#x27;s development, when my friend drives over certain bridges he can see the physical manifestation of his work.</p><p>I on the other hand don&#x27;t see the database migrations or api rewrite that took months of my time at my first job. I can, however look at my journal and see the things I learned, techniques I mastered and best practices I applied during that work because I noted it all down.</p><h2>Anything will do</h2><p>Don&#x27;t sweat the tool you use, text files work fine if you have a good way to search them. <a href="https://notion.so">Notion</a> is my favorite app of choice at the moment. <a href="https://evernote.com">Evernote</a> was all the rage for a few years there and now <a href="https://obsidian.md">Obsidian</a> is the new king in town. So long as it&#x27;s quick to jot something down, has good search and doesn&#x27;t get in your way then it&#x27;s good enough to get going with!</p><p>So, go forth and journal!!</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-use-a-journal-as-a-software-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-use-a-journal-as-a-software-developer</guid>
            <pubDate>Wed, 25 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to get your dream developer job: mistakes to avoid]]></title>
            <description><![CDATA[<p>Are you committing these job application sins? If you&#x27;re applying for lots of roles and not hearing anything back then make sure that you&#x27;re not making any of these mistakes. Each of them is easy to make but fortunately easy to fix, take a few minutes to make sure that your job applications are giving you the best chance to land the job.</p><h2>1. Starting with &quot;Dear Sirs/Madam&quot;😩</h2><p>When I hired people this would be a massive black mark against the candidate from the start. It shows they didn&#x27;t even go to the About Us page on our website, they are just applying to as many roles as possible with no thought. I didn&#x27;t expect applicants to only be applying to us but I did expect them to at least look at what we do and take a minute or two to find a name.</p><p>Many people say they can&#x27;t find a name to address the application. This may have been valid 30 years ago but now there is always a name you can find, ring reception and ask, look on LinkedIn for someone in the hiring department or head of HR, heck put the CEO&#x27;s name down if you need to, just something to show you have a clue who you&#x27;re applying to.</p><h2>2. Don&#x27;t use LinkedIn Easy Apply 🤦‍♂️</h2><p>I&#x27;ve written about this before, <a href="https://allthecode.co/blog/post/should-i-use-linkedin-easy-apply">LinkedIn EasyApply</a> is there to make LinkedIn look good, not to make you look good. It increases the &quot;applications per listing&quot; and so a company thinks they are getting good value for money when hiring through LinkedIn. In reality it makes it so quick for you, and everyone else, to apply with a generic CV, that the company is inundated and they simply delete half the applications at the start. If they can find a good candidate in 200 they can probably find one in just 100 and save 50% of the time!</p><h2>3. Not tailoring your resume/CV 🤷‍♀️</h2><p>Each application doesn&#x27;t need to be a hand crafted work of art, this would take far too long, but each one should be tailored slightly to the role you are applying for. If it&#x27;s more backend focussed move relevant bullet points up, maybe take out three of the five frontend examples and instead highlight that one time you worked on a CI/CD deployment pipeline instead. Little tweaks go a long way to helping the recruiter or hiring manager pattern match you to the job the vacancy they have.</p><h2>4. Listing every job you&#x27;ve ever had 📜</h2><p>No one wants to see every job you have had, especially if it&#x27;s the surf shop at your local beach for 6 months after university. If you are really thin on the ground for experience then put those jobs in an &quot;Other Employment&quot; section and only highlight the parts of those roles that carry over to software development. Listing 12 roles is a waste of space that would be better spent highlighting a few great examples from your most relevant and recent roles or projects.</p><h2>5. Not linking to your portfolio or Github ☠️</h2><p>You spent all that time making these wonderful projects and then at the last minute, when they really matter, you pull the punch and drop the link from your CV. I get it, it&#x27;s scary showing someone what you have made, but I would rather see someone shipped something simple and went through the process of finishing a project than nothing at all. Portfolio projects don&#x27;t need to be innovative start up ideas, just your take on a todo list app is fine. Just show them you have shipped something once, ever.</p><h2>6. Not highlighting where your skills match the job 🤯</h2><p>This goes hand in hand with tailoring your resume/CV but is actually even easier. When I say highlight, I literally mean to <strong>highlight</strong> the technologies you have worked with, if you have written an app in <strong>SwiftUI</strong> or a backend in <strong>NodeJS</strong> then make that names pop slightly. This makes it easy for the hiring manager to pattern match you to the job and their required skills. It&#x27;s all about making their life <strong>easier</strong>, so make things <strong>obvious</strong>.</p><h2>7. Only applying if you 100% match the job spec 😢</h2><p>Job ads are wish lists, very few people match them completely. If you wait until you match every requirement on a job advert your will never apply. Some people say you want to hit 80%, I personally believe 50% is fine to put an application in, especially if you are a career switcher and have experience in the industry or are a seasoned dev who likewise has industry relevant experience. So long as you don&#x27;t lie, you can be confident that if they think you are a good fit they will hire you anyway, while you might not have worked in their specific database technology, it&#x27;s not like your previous database knowledge is suddenly useless.</p><h2>Summary</h2><p>There you have it, the most common mistakes that are holding back your job search and preventing you from landing you first job or you next well earned step up the ladder 😀</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-get-your-dream-developer-job</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-get-your-dream-developer-job</guid>
            <pubDate>Tue, 24 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to be a good remote junior developer]]></title>
            <description><![CDATA[<p>Working remote has traditionally been seen as a nice goal to attain at some point during a developer career. Once you are confident and trusted by your company then hopefully they allow you to work from home, or better yet, you join a fully remote team and live that true digital lifestyle.</p><p>To do that as a junior? For your first role? Impossible .... until COVID poured lighter fluid on the digital transformation that businesses have been laggardly working through over the past 25 years. Now everyone is remote, including junior developers, a role that actually really benefits from in person work.</p><p>So, how do you succeed in this new world being a remote junior developer? If you think back to my post <a href="https://allthecode.co/blog/post/what-is-a-junior-developer">Expectations on Junior Developers are not what you think</a> you will understand that you&#x27;re not expected to be a genius cranking out amazing code from the get go. In fact the expectation is often that your coding ability will be pretty low. It will be expected you can code simple solutions to simple isolated problems but after that your main priorities are to:</p><ul><li>That you will listen and learn</li><li>That you will help where you can</li><li>You are keen no matter the technology</li></ul><p>Let&#x27;s form a strategy to make sure you crush these goals and also make the most of your time as a junior.</p><h2>Communication as a remote junior developer</h2><p>Your team would rather hear from you on a regular basis than wonder what you&#x27;re doing and have to come asking. We are taught from a young age though to not interrupt, you need to forget this. In remote work you will always feel like you are interrupting someone, because you likely are! You don&#x27;t know what they are doing when you message or call them and you&#x27;ll need to get comfortable with this otherwise you&#x27;ll sit and stew on a problem for hours longer than you should.</p><p>So people know what you&#x27;re up to you give very short status updates in the team group channel or if you have found something interesting in the last half a day then pop it as well. If you get your first ticket done then mention it in that same channel, also ask for code review at the same time. Basically tell people what you&#x27;re up to.</p><p>This might seem overly communicative but it makes up for the chit chat in the kitchen or overheard conversations when in the office. When you share an office with people it&#x27;s impossible to not get an idea of what everyone is doing and how they are getting on, that is all stripped away in remote work so replicating that with little messages here and there brings the context back in.</p><h2>A good junior developer is inquisitive</h2><p>You&#x27;re going to be left to your own devices much more than in person working, so go exploring. You should have access to the company wiki (if not, ask for it) from day one. Spending time at the end of each day looking through it and asking a couple of questions will broaden your knowledge very quickly and get you used to reading documentation.</p><p>Go spelunking through the database. Run some select queries or browse through some documents by yourself. Data drives all applications and knowing what your company&#x27;s data looks like, where it lives and how&#x27;s its structured will enable you to form great questions when the time comes.</p><p>If you see something interesting then ask about it in the group chat. Even if you feel stupid asking the question it doesn&#x27;t matter, it&#x27;s all about learning and gathering information. Get into the mindset that you would <strong>rather look stupid than actually be stupid.</strong></p><p>In fact say this to your team, tell them you may ask a lot of questions but it&#x27;s because you want to learn and be as helpful as possible as soon as possible. So long as <a href="https://allthecode.co/blog/post/how-to-ask-good-questions-as-a-developer">you are asking good questions</a> they wont&#x27; mind.</p><h2>Being a junior developer requires openness</h2><p>Be open about your skill level, what you find challenging, what you find straight forward and what you have worked with before. Pretending you know something when you don&#x27;t is a quick way to loose the trust of your team and start to feel isolated. In daily stand up talk about what you have accomplished but also what is holding you back, where you struggled and ask for suggestions on where to look to improve.</p><p>It is much easier in person for people to pick up the body language and vocal queues that you might not fully understand something and so you can be saved the embarrassment of outright saying you&#x27;re confused. So you need to be proactive and clear in what you get and don&#x27;t get.</p><h2>Journalling your junior developer experience</h2><p>I&#x27;m not a big one for keeping a daily journal about my feelings, however I am a big proponent of keeping a daily work journal about what I did, what problems I had, how I solved them and any interesting things I learned. It doesn&#x27;t need to be anything fancy, mine is just a new notion page for each day in &quot;YYYY-MM-DD DayName&quot; format and a list of bullet points, screenshots, links and code snippets that I can refer back to.</p><p>This is to solidify your learning and give you something to go back to in the future when you remember something you once looked at but aren&#x27;t quite sure. I also keep a note of the Jira tickets I work on each day to help when searching.</p><h2>Dealing with barriers as a junior developer</h2><p>Working remotely adds a barrier that none of us can get round, even sitting on an open Skype call when working all day (which I personally hate) can&#x27;t make up for being in the same office as the rest of your team. Once you are settled in your career this is just another one of those minor work inconveniences that you navigate and handle, but as a junior this barrier can exacerbate all the fear and anxieties you have.</p><p>So be pro-active about reducing the impact of that barrier. Be a bit more interactive on Slack than you might otherwise like, be clear and open about what you are doing, ask questions that come off the back of your own research on the code base and find out what other developers are working on.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-be-a-good-remote-junior-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-be-a-good-remote-junior-developer</guid>
            <pubDate>Sat, 21 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Mastering this single technology makes you employable for life]]></title>
            <description><![CDATA[<p>Technology moves at a frighteningly fast pace and for developers it can feel like we have managed to grab on to a tigers tail and are now barely holding on whilst flying across the open plains of this technological continent we have made.</p><p>From DevOps and Infra-as-code to React and serverless, there is an enormous array of technologies to learn and master, with new ones being released all the time. So, how can I possibly say that there is one to learn that will make you forever employable?</p><p>What magical technology is so foundational and ubiquitous that it could possibly be considered valuable enough for a developer to learn to give employability security for life? This magical technology is old, it&#x27;s older than Javascript, older than Python and basically the same age as C!</p><h2>Is it a bird? Is it a plane?</h2><p>Some say it&#x27;s a programming language, others say it&#x27;s not, but it meets the modern trend of being declarative and also being cross platform. It powers some of the largest websites in the world whilst also being light enough to run in little phone apps.</p><p>The technology I am talking about is SQL, which stands for Structured Query Language and is a relational database technology that has been, and will continue to be, a core foundational technology of the web. If you are a web developer who doesn&#x27;t know SQL you need to bump it to the top of your &quot;To Learn&quot; list today.</p><p>It might not get the press that NoSQL does, it might not be as hot as MongoDB or ElasticSearch and it might feel a bit too much like IT and not Dev&#x27;ing, but SQL is pervasive and is much better at solving many problems still than NoSQL.</p><p>NoSQL is powerful and amazing. The schema-less design approach allows you to feel very free and unconstrained, however when you want to start managing relationships and keeping duplicated data in sync across many documents you start to feel the trade off for that write time freedom.</p><p>Want to grab related data in SQL? Well it&#x27;s just a <code>LEFT JOIN</code> away</p><h2>Where to learn SQL</h2><p>You can start to learn basic SQL concepts and follow along with a <a href="https://www.udemy.com/topic/sql/">Udemy course</a> or searching for SQL on <a href="https://www.freecodecamp.org/news/search/?query=sql">FreeCodeCamp.org</a> however another good resource is the SQL murder mystery site:</p><ul><li><a href="https://mystery.knightlab.com/walkthrough.html">Walkthrough for beginners</a></li><li><a href="https://selectstarsql.com/">Interactive Book</a></li><li><a href="https://mystery.knightlab.com/">SQL Murder Mystery</a></li></ul><h2>Installing SQL</h2><p>There are a number of free flavours of SQL like <a href="https://www.mysql.com/">MySQL</a> and <a href="https://www.postgresql.org/download/">PostgreSQL</a>, either one is fine — people do have opinions on which is better, at this learning stage it really doesn&#x27;t matter though.</p><p>You can get MySQL as part of a one click <a href="https://www.mamp.info/en/mamp/mac/">MAMP</a>, <a href="https://www.wampserver.com/en/">WAMP</a> or <a href="https://www.apachefriends.org/index.html">XAMPP</a> installation, you can install them directly onto your system or you can run them in a Docker container if that&#x27;s your preference.</p><h2>Getting data for learning SQL</h2><p>Database technologies can be hard to get really good at without some real data. Inserting small amounts of data in a tutorial like songs and albums is good for the basics but when you land in a job with a SQL database with 1,000 tables that is 15 years old you&#x27;re going to find yourself wishing for more experience that that. Here are a couple:</p><ul><li><a href="https://www.imdb.com/interfaces/">IMDB Database</a></li><li><a href="http://ergast.com/mrd/db/">F1 Data</a></li></ul><h2>Summary</h2><p>SQL might not be the new hotness but it&#x27;s also not going anywhere, it is a manifestation of relational algebra and has been used to build much of the web.</p><p>The idea that if you write Javascript you should use NoSQL is nonsense. You should use the best database technology for the data needs your project has. Most large systems will use multiple database and storage technologies including both SQL and NoSQL. SQL has been around for 50 years now and its relevance is only growing, especially with the growing importance of Data Science.</p><p>So, when you are burnt out on learning your 15th Javascript frame work and want to work on something stable you will be very happy you have SQL to underpin your career and skills.</p>]]></description>
            <link>https://allthecode.co/blog/post/mastering-this-single-technology-makes-you-employable-for-life</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/mastering-this-single-technology-makes-you-employable-for-life</guid>
            <pubDate>Sat, 21 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What is Agile?]]></title>
            <description><![CDATA[<h2>Agile is the modern way of making software</h2><p>You will see this term a lot on job specs, to clarify it isn’t agile the adjective with a lowercase &#x27;a&#x27;, it is Agile the noun, the name of a specific way of working that is very common in software development. If you see a job that doesn’t mention it, it may instead mention Scrum. This is a more opinionated derivative of Agile with a few extra rules and specifics.</p><p>Agile is a whole industry, there are conferences, books and qualifications and you can make a whole career as an Agile Coach or in one of the specific roles laid out in Scrum. While being an expert in the topic isn&#x27;t vital to an early career software developer having un understanding of the rough process and terminology is important. This is one of those scenarios where a bit of knowledge can go a long way and allow you to talk with more confidence in interviews and set you apart from other junior developers.</p><h2>The Agile Manifesto</h2><p>The Agile manifesto is short enough that I’m just going to note it down below:</p><blockquote><p><em>We are uncovering better ways of developing software by doing it and helping others do it.</em></p><p><em>Through this work we have come to value:</em></p><p><strong><em>Individuals and interactions</em></strong> <em>over processes and tools</em></p><p><strong><em>Working software</em></strong> <em>over comprehensive documentation</em></p><p><strong><em>Customer collaboration</em></strong> <em>over contract negotiation</em></p><p><strong><em>Responding to change</em></strong> <em>over following a plan</em></p><p><em>That is, while there is value in the items on the right, we value the items on the left more.</em></p></blockquote><h2>What does the Agile Manifesto mean to a developer?</h2><p>The simplest way I can summarize this is that teams of developers should aim to make the smallest amount of useful, functional software that provides value to a user, show it to them, get feedback and then improve or expand what they have made.</p><p>Rather than getting an enormous shopping list of features and then spending 18 months building it only to find that it’s not really what the user/customer wanted, we instead build little and often and get feedback so we can course correct as we go.</p><h2>Scrum</h2><p>Scrum goes further than this and defines:</p><ul><li>working in short blocks of time called <strong>sprints</strong> (often two weeks, but sometimes delightfully 3)</li><li>that will tackle a fixed <strong>iteration</strong> of work</li><li>having a <strong>review</strong> of the work at the end of the sprint to show users what was made</li><li>regularly looking over a <strong>backlog</strong> of tasks</li><li>and <strong>planning</strong> which ones to bring into the next sprint based on user needs and how much capacity the team has.</li><li>Each piece of work is called a <strong>user story</strong> and a number is assigned to it during the planning sessions to indicate how complex the work will be to complete</li><li>the numbers are called <strong>story points</strong> and follow the fibonacci sequence (1, 2, 3, 5, 8, 13, 21, ...). They follow the fibonacci sequence to limit the options that can be chosen and stop team members squabbling over whether something is a 6 or 7, pick 8 and move on.</li></ul><p>That’s more than you’ll be expected to know in your first job, if you want to really get it then I suggest you read the <a href="https://www.scrum.org/resources/scrum-guide">Scrum guide</a>, it’s delightfully short and quite interesting.</p><p>You will also often hear people say &quot;as defined in the Scrum guide&quot;, if you&#x27;ve read it you will find realise that many of these people haven&#x27;t read the guide. In fact much of what is in the bullets above isn&#x27;t in the Scrum guide, it&#x27;s just how people have taken the concepts and developed them over the years to become the industry norm.</p>]]></description>
            <link>https://allthecode.co/blog/post/what-is-agile</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/what-is-agile</guid>
            <pubDate>Fri, 20 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to spot a toxic workplace]]></title>
            <description><![CDATA[<h2>Spotting a toxic work place is easy right?</h2><ul><li>Crumby offices ✅</li><li>Beige walls ✅</li><li>Boring industry ✅</li><li>PHP ✅</li><li>No MacBooks ✅</li></ul><p>Wrong, wrong, wrong, wrong and wrong.</p><p>Some of the most interesting work you can do as a developer is at &quot;non-tech&quot; companies, in established industries on an older tech stack, perhaps in PHP on industrial estate somewhere. Why? Because those businesses have enough legacy and foundation to generate interesting problems.</p><p>So, if the above aren&#x27;t the signs of a toxic workplace, then what are?</p><h2>Toxic workplace sign 1️⃣ Immovable deadlines</h2><p>This shows that the company don&#x27;t realise how hard it is to estimate technical work and has no appreciation of the ways that unforeseen complexity can delay a well run project no matter the quality of the dev team. This doesn&#x27;t mean that there should be no deadlines, that would be absurd as well, but a business that can&#x27;t be flexible and accommodate the unforeseen and either move the deadline or descope the work is not a healthy place to be. Often they will move deadlines for finance and marketing but not for technical work, if you see this - run! 🏃‍♀️</p><h2>Toxic workplace sign 2️⃣ Feature lists decided without technical input</h2><p>Product people are amazing, and good ones know that dev work is like an iceberg, the bit above the water that you can see (the UI) is likely less than 30% of the work. A bad product person will set features without this in mind and massively over burden a project, or block of work because &quot;it&#x27;s just clicking a button&quot;. Never mind that that button might kick off several parallel jobs, run deployments and spin up scalable infrastructure. If your product people aren&#x27;t working hand in hand with your technical management and team then when it comes to crunch time it&#x27;s going to hurt ... you.</p><h2>Toxic workplace sign 3️⃣ Pressure to complete all work every sprint</h2><p>Agile is about fast feedback, short blocks of work and getting a <strong>rough</strong> idea of a teams rate of delivery. Product managers who expect the sprint velocity (delivery rate) to go up each sprint &quot;because you are getting more accustomed to the code base&quot; are really just forcing you to work harder and faster so that they can look good. Some sprints your team might deliver 80 points and other 65, the second sprint isn&#x27;t a failure, its a reflection that no matter how much Agile coaches try to make dev work like a factory production line, it isn&#x27;t.</p><h2>Toxic workplace sign 4️⃣ Pair programming is banned</h2><p>True pair programming, where two devs work on the same feature and deliver it together is great for onboarding, up-skilling and increasing organisational knowhow. It can be slower in the short term but, occasional to regular pairing is a good example of &quot;go slow to go fast&quot; because in the long run the overall level of the team is higher and they can operate quicker. Banning this for short term gain is a sign of misaligned priorities in the company.</p><h2>Toxic workplace sign 5️⃣ Pressure to skip tests and QA processes</h2><p>This is the ultimate symptom of a broken system and team, I&#x27;ve been here and it’s horrible. Pressure to deliver is so hight that things that sound like they&#x27;re &quot;not adding customer value&quot; get pushed to the wayside. This is another example of short term gain for masses of long term loss and eventually drowning in tech debt. As a developer it is your responsibility to test what you wrote and know it works, the work isn&#x27;t done until it&#x27;s tested.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-spot-a-toxic-workplace</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-spot-a-toxic-workplace</guid>
            <pubDate>Wed, 18 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Big Tech Broke Tech Hiring]]></title>
            <description><![CDATA[<p>The hiring process is broken, companies find it incredibly difficult to hire the technical talent they need to do the job. There simply aren’t enough skilled developers out there to work on the perfect magical systems that the collective genius of even a mid rate regional tech firm has made. In fact it’s so unlikely that you have the technical skills required to meet their high bar that you probably won’t get hired. So don’t apply.</p><p>Seriously, don’t apply to companies who think the rubbish I just wrote. Or that copy the hiring practices of those companies because they think it&#x27;s what they should do.</p><p>The truth is that very few tech companies need the level of technical perfection that they think they need. The reason they find it “so hard to hire good talent” is because they have multiple rounds of interview that absorb hours of your personal time and brain space requiring you to solve puzzles and do backflips all while dealing with the stress of an interview and where one miss-step blacklists you!</p><p>So stop applying to these companies, it’s a waste of everyone’s time.</p><h2>Big Tech Broke Tech Hiring</h2><p>The tech hiring process is broken because Big Tech broke it:</p><ul><li>take home tests</li><li>technical deep dives</li><li>presentations</li><li>pair programming sessions (that are really just more technical tests in disguise)</li><li>and follow up call after follow up call</li></ul><p>&quot;But that&#x27;s what companies need to do!&quot; I hear you cry! How else will they find the right people?</p><p>Well, I’ve been through 11 interview processes in the last 2 years, receiving 10 job offers, and only one required me to do more than 3 rounds. Some, including my current role at an EduTech startup, didn&#x27;t require a coding test at all.</p><p>The one long interview process I went through was 5 rounds across 7 hours and ended with a follow up call from the recruiter where they said &quot;it was a really tough call but your solution on test 4 wasn&#x27;t as elegant as the interviewer would have liked&quot; he did then chuckle and say that the final interviewer asked if they had seen the same candidate because I &quot;smashed it&quot; and &quot;I think this will be our loss&quot;.</p><p>If after 7 hours of tests a role isn&#x27;t offered simply because in 60 minutes someone couldn&#x27;t write Conway&#x27;s Game Of Life as elegantly as possible but everyone else thought they were a good fit for the role then the problem isn&#x27;t &quot;lack of tech talent&quot;, it&#x27;s their hiring processes.</p><h2>What&#x27;s the developer hiring process alternative?</h2><p>The reason only one required me to go through more than 3 rounds is because I actively avoid applying to places that require more than 3. I made an exception in this case because I have used the company&#x27;s product a lot and have a genuine affinity for it. Otherwise I wouldn&#x27;t have bothered.</p><p>Multi stage interview processes where one person can kill your chance of getting the job are a waste of your time. Stop playing their game and start applying to companies who actually understand that not every developer on staff needs 20 years experience and a PhD in Computer Engineering from Stanford, and instead realise that people come from a variety of backgrounds, with a range of skills and most of what you do each day can be learned on the job as and when required.</p><p>Find that local digital agency who struggle to find developers and want to grow their client base. Or, that regional e-commerce retailer with a home grown order management system that they need modernised who will appreciate you and your time.</p><p>Most developers never work in big tech. Not working for Apple or Facebook or Google isn&#x27;t a bug, in fact it could be considered a feature for many companies. You can have a wonderful, interesting and fruitful career without being bounced from pillar to post going through the hoops that jumped up Big Tech bros put up for you.</p><p>Ask how many rounds of interview there will be at the start, if it&#x27;s more than 3 and they&#x27;re not paying you for your time then &quot;regretfully pass on their process&quot; and move on. If we all stop playing their stupid game, they will have to adapt.</p>]]></description>
            <link>https://allthecode.co/blog/post/big-tech-broke-tech-hiring</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/big-tech-broke-tech-hiring</guid>
            <pubDate>Tue, 17 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Skills required to be a full stack developer: a checklist]]></title>
            <description><![CDATA[<p>The skills list required to be a full stack developer is long and it can be hard to know exactly what skills you need and to what level before you starting looking for a job. The often shared online resource for this kind of thing is <a href="https://roadmap.sh">roadmap.sh</a> but, while I am sure the authors mean well, I actually think the amount covered here is too much to be helpful to new developers. So, I have my own list, it’s a bare minimum required skills list and it looks like this:</p><ul><li><strong>A basic understanding of how the internet works and HTTP requests</strong> (GET, POST, PUT, PATCH and DELETE) and the basic response codes (200, 404, 500)<ul><li><a href="https://httpstatuses.com/">httpstatuses.com</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL">What is a URL?</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods">HTTP request methods</a></li></ul></li><li><strong>HTML</strong> - <a href="https://www.w3schools.com/html/default.asp">W3Schools HTML</a></li><li><strong>CSS</strong> - <a href="https://www.w3schools.com/css/default.asp">W3Schools CSS</a></li><li>A CSS frameworks like <a href="https://tailwindcss.com/">Tailwind</a> or <a href="https://getbootstrap.com/">Bootstrap</a></li><li><strong>JavaScript</strong> - <a href="https://www.w3schools.com/js/default.asp">W3Schools JS</a> - yes just one language, it’s the only viable option for frontend so just use it on the backend as well.</li><li><strong>Package manager like npm</strong> - <a href="https://www.instagram.com/p/CHO-LyGsyDG/">@allthecode npm overview</a></li><li><strong>NodeJS</strong> - <a href="https://www.w3schools.com/nodejs/default.asp">W3Schools NodeJS</a> and <a href="https://expressjs.com/">ExpressJS</a></li><li><a href="https://web.dev/react/"><strong>React</strong></a></li><li>React Component library like <a href="https://material-ui.com/">MaterialUI</a></li><li><strong>Git</strong> version control - <a href="https://www.w3schools.com/git/default.asp">W3Schools Git</a></li><li>Know enough about security to know that you don’t know enough about security (CORS, HTTPS, Content Security Policy) - <a href="https://web.dev/secure/#i18n.paths.secure.topics.understand_security_basics">Web Dev Security Basics</a></li><li><strong>A database technology</strong> (pick a or b)<ol><li>a) MySQL is a great started RDBMS - <a href="https://www.w3schools.com/sql/default.asp">W3Schools SQL</a></li><li>b) MongoDB is the primary NoSQL database technology - <a href="https://university.mongodb.com/">University Mongodb</a></li></ol></li><li><strong>How to make a REST API in NodeJS and Express</strong></li><li>Docker and containerization - this is a more advanced topic however having an awareness of Docker and the basics of a Docker file would be a big ✅</li><li>Awareness of testing with <a href="https://jestjs.io/">Jest</a> for Javascript.</li><li>Understanding of Linux commands and some basic OS principles.</li></ul><p>Absolutely required items are in bold.</p><p>Being full stack is not about being an expert in all of these, it is about knowing enough to get a system up and running, being able to search for the right things on Google and have a sensible conversation with someone who is an expert in their respective areas. You need to be a good, well rounded developer but you don’t need to be expert in every field!</p>]]></description>
            <link>https://allthecode.co/blog/post/skills-required-to-be-a-full-stack-developer-a-checklist</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/skills-required-to-be-a-full-stack-developer-a-checklist</guid>
            <pubDate>Mon, 16 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[One tip to be a better developer]]></title>
            <description><![CDATA[<p>There are thousands of articles, videos and guides with tips on how to be a better developer. Ways you can make your code cleaner, how you can estimate work better or communicate well with non-technical colleagues. Rather than cover any of those I am going to give you the single best thing you can adopt to improve your career and your life.</p><h3>DO WHAT YOU SAY YOU’RE GOING TO DO</h3><p>Seriously, so many people don’t keep their word that just simply making sure you follow through and are reliable will put you head and shoulders above everyone else.</p><p>This sounds like obvious advice, surely everyone keeps their word? Well, take a moment and think about it ... how often have your broken your word? Not just to others but to yourself as well.</p><p>How many times did you set out to learn to code? How many times have you said you&#x27;ll get up at 6 AM, only to change your mind at 6:01 AM? How many times have you said you&#x27;ll follow up and email someone and just haven&#x27;t? Eat healthier and then the next day eaten a family sized bag of Doritos?</p><p>We tend to think about &quot;Our Word&quot; as commitments to big and important stuff, like not cheating on our spouse or picking a parent up from the airport in mid-winter. But our word is pervasive, it is about all aspects in our life, from getting up when we say we will to updating a Jira ticket and completing a code review by the end of the day like we promised.</p><p>Think about how many times someone has broken their word to you. How did that make you feel? How did they manage the situation? Imagine if you NEVER broke yours?</p><p>You would almost certainly make less commitments but people would learn that when you say you will do something, it will get done. You become a person who can be relied on, who can be trusted and promoted above others.</p><p>If you know that something is going to slip, that you are going to have to break your word then it&#x27;s your responsibility to tell the person relying on you. Propose a mitigation &quot;I can&#x27;t do that PR today but I have asked Brian to do it and he promises it will get done&quot; or a new time frame &quot;This work was bigger than I thought, I need another day, does that work for you? If not then we need to form a plan to fix this and make sure it doesn&#x27;t happen again&quot;</p><p>Give your word and mean it.</p><p>Own your word and protect it.</p><p>What if your word was iron? Sheeesh, then you’d be dangerous!</p>]]></description>
            <link>https://allthecode.co/blog/post/one-tip-to-be-a-better-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/one-tip-to-be-a-better-developer</guid>
            <pubDate>Sun, 15 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What is a junior developer]]></title>
            <description><![CDATA[<p>As a junior developer your first day is gong to be scary, not because <em>being</em> a junior dev is scary but because the first day of any job is scary. Meeting new people, seeing a new code base, expectations that you can and will write code and deliver is on time, all of these combine to be quite stressful.</p><p>I have a secret to tell you, the expectations on junior developers is pretty low and that&#x27;s because the job of being a developer is different from simply &quot;knowing how to code&quot;.</p><ul><li>Communicating with none technical people</li><li>Estimated how long something will take</li><li>Learning the existing code base and data structures</li><li>Working with git in a team</li><li>Debugging live applications</li></ul><p>All of these are core skills of being a developer that can really only be learned &quot;on the job&quot;, with this being your first job no one expects you to know all these things.</p><p>So what do they expect from you?</p><ol><li><strong>That you can code simple solutions to simple problems</strong>. Don&#x27;t get fancy, your code will likely not be the best structured and so 3 levels of ternary on one line isn&#x27;t going to impress anyone if they can&#x27;t understand it. Use simpler constructs with good variable and function names and focus on expressing your codes intention as clearly as possible.</li><li><strong>That you will listen</strong>. You might come in with a few projects under your belt but in the grand scheme of things you just haven&#x27;t been coding long enough to not be able to learn something from everyone on the team. Right now, the best thing you can do is learn about the code base, learn about the business needs and absorb as much as you can on all aspects of developer life. This also applies to feedback, don&#x27;t be defensive about your code, accept code review comments and make changes as suggested.</li><li><strong>That you are keen no matter the technology.</strong> Companies that have existing code will have a lot of different technologies across their IT estate. If you know React and server-less but get asked to work on some crusty old PHP and JQuery app then just dive in. Take it as an opportunity to learn something and increase your future employability. If you want a long fruitful career in tech then you will be changing language and technology often, at this stage working on older stuff is just as valuable as new stuff.</li><li><strong>That you help</strong>. Don&#x27;t just stick to your work and ignore what&#x27;s going on around you. If a deployment has gone wrong, find out if you can help - it might just be monitoring a stream of logs but it&#x27;s helping the team. If the database has gone down and customers are sending support requests faster than they can be closed, then see if you can help answer them. If someone is stuck, even if they are a senior, ask if they can explain it to you, often giving them someone to talk it though with leads to a solution due to the new perspective they gain.</li></ol><p>Following these 4 tips will put you head and shoulders above many new developers and show you are in the career to develop both technically and as a professional.</p>]]></description>
            <link>https://allthecode.co/blog/post/what-is-a-junior-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/what-is-a-junior-developer</guid>
            <pubDate>Sat, 14 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[You don't want to be un-fireable]]></title>
            <description><![CDATA[<p>I saw this tweet the other day and it made me sad.</p><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Junior tech question of the topic of &quot;Gatekeeping&quot;: 🌈🧙‍♂️<br/><br/>Sometimes there are people that behave in a Gatekeeping manner, for example:<br/><br/>A) Not passing the knowledge they possess<br/>B) Believing that advanced stuff is just for a selected few<br/><br/>My solution 👇<a href="https://twitter.com/hashtag/TechNewbieTips?src=hash&amp;ref_src=twsrc%5Etfw">#TechNewbieTips</a></p>— Alegarciy 🇨🇷 SWE looking for internship (@alegarciy) <a href="https://twitter.com/alegarciy/status/1420934359947874306?ref_src=twsrc%5Etfw">July 30, 2021</a></blockquote><p>Because...</p><h2>Software development is a team sport</h2><p>Unless you are flying solo like Marco Arment on <a href="https://overcast.fm/">Overcast</a> or <a href="https://www.david-smith.org/">David Smith</a> with his many wonderful apps, then chances are you will be working as part of a team. As is common in a team there are people with varying experience levels and skills. For the team to work at its best, knowledge needs to be shared.</p><p>Sadly, some team members choose to indulge in &quot;Empire Building&quot; where rather than share their skills and knowledge they would rather become vital. The hero. The only person with enough knowledge in certain areas that can fix issues.</p><p>These people don&#x27;t like to share.</p><p>They were probably the kid in kindergarten who hid the red fire truck at the end of every recess so that only they got to play with it.</p><h2>Gatekeepers are building their own cell</h2><p>Before talking about how to avoid becoming a gate keeper I want to speculate on why some people so readily indulge in this behavior and why, from their point of view, it is reasonable.</p><p>You see, these people are terrified of being replaced.</p><p>They are scared that new people coming in will know more, work harder and cheaper than them, so they build a little empire of secrets and infrastructure that only they understand. They are protecting for downside risk and in doing so a reinforcing side effect kicks in that solidifies their belief that they are just a new hire away from obsolescence .... <strong>they never get promoted</strong>.</p><p>The reason they never get promoted is because they are made themselves too important in one area and are quite literally irreplaceable. The problem with being irreplaceable is that they are also un-promotable, so they fall into this toxic positive feedback loop where they feel more vulnerable to they hoard more which makes them less likely to be promoted reaffirming their fears. They have protected themselves from downside risk so well that they have entirely removed all upside risk, they trapped themselves.</p><p>They have become the gate keeper that <a href="https://twitter.com/alegarciy">@alegarciy</a> talks about above.</p><h2>How to not become a gatekeeper</h2><p>While being un-fireable might sound great, the reality is less so, as highlighted. So, how do you avoid becoming so yourself?</p><ol><li>Remember that a key part of being a senior developer is getting the most out of other members of the team, you should be a multiplying factor. A force for good. So get used to this from early on. Openly explain your code to other people, grab 10 minutes with someone during a piece of work and tell them what you&#x27;re doing, ask for their thoughts. Get used to being open about your code.</li><li>Invite people from other teams to review your code. We all fall into the trap of inviting the same few people to review our pull requests. Break the pattern once in a while and add someone new to the mix. They will be exposed to more of what other teams are doing and you will get fresh input.</li><li>Write documentation. I know it&#x27;s dull but it&#x27;s vital for a healthy team and codebase. Docs increases organisational knowledge, reduces your inbound requests for help and improves your communication skills. It can even catch bugs because it forces you to look at your code from a new perspective.</li><li>Stay up to date. This doesn&#x27;t mean doing 10 <a href="https://www.udemy.com/">Udemy</a> courses a year but at least keep abreast of new frameworks and carve out some time each year to try a new technology in work or as a side project. This will keep you employable and stop that fear of &quot;being replaced&quot; building up.</li></ol><p>The trend here is transparency. If you are transparent and proud of your work you will beat back the negative, gate keeper tendencies that can build as you move through your career.</p><p>Let your code thrive in an open museum, not locked away in a private collection.</p>]]></description>
            <link>https://allthecode.co/blog/post/you-dont-want-to-be-un-fireable</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/you-dont-want-to-be-un-fireable</guid>
            <pubDate>Fri, 13 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What do you need to start learning to code?]]></title>
            <description><![CDATA[<p>It&#x27;s easy to see all the amazing pictures of developer setups on Instagram and the beautiful backdrops that YouTube streamers and Udemy instructors have and feel like you need all that to be a real developer as well. It’s also easy to hear about what people learned on their computer science degree and feel like you’ve missed the boat or that your career as a marketing lead or firefighter leaves you short of the technical creds needed to be a developer.</p><p>The truth is you need very little to start learning to code and become a developer, it is potentially the most accessible well paying career in history. Before we cover off the things you do need, let&#x27;s look at the things you definitely don&#x27;t need.</p><ol><li><strong>A degree</strong>. You thought this was just going to a be a silly list of gadgets didn&#x27;t you? Nope, we are tackling the big stuff here. You really don&#x27;t need a degree to learn to code, the demand for developers is so high at the moment that anyone from any background can learn to code and get a developer job if they have the right skills. Need proof? Just listen to every episode of the <a href="/podcast">All The Code podcast</a> to hear people say that demand is sky high!</li><li><strong>Lots of money</strong>. With the obvious exception of having access to a computer and the internet you don&#x27;t need much else. Enough money to be able to get by day to day and have food, shelter and power and you&#x27;re good to go. Sadly this isn&#x27;t a given for all of the world but, if you are here reading this then you probably pass the bar.</li><li><strong>Lots of time</strong>. Eventually you are going to need a decent chunk of time to learn to code but, to get started and make significant gains you only need <strong>15-30 minutes a day</strong>. Doesn&#x27;t sound like much does it? I know, but if you multiply that out across a full year that is <strong>91 to 182 hours</strong>. Imagine how much you can learn in that time. YouTube videos while the kettle boils, blog article when waiting for the bus, 10 minutes on <a href="https://www.codecademy.com">CodeCademy</a> at the end of the day. It all adds up!</li><li><strong>To be good at maths</strong>. I&#x27;m not terrible at maths but I&#x27;m also not all that good at it, I can get by. Most programming tasks can be accomplished with simple arithmetic and decent logical thinking, it’s more important you can imagine a process or flow of information than it is that you can do partial differential equations (I certainly can&#x27;t!)</li><li><strong>Gadgets</strong>. Tech Instagram and YouTube is full of LEDs, mechanical keyboards, fancy mice, Apple stuff and fancy chairs. You don&#x27;t need any of it to learn to code and change your life, all of that is a distraction to gain more attention on social media.</li></ol><h2>What do you need to start learning to code?</h2><ol><li><strong>A modern-ish computer</strong>. You don&#x27;t need a top of the line MacBook or Razer gaming machine, you need something with 4 or 8GB of RAM, a sensible storage drive (100GB+) and a processor released sometime in the last 5 years. If you are really tight on money then speak to your local repair shop, they might be able to put something together for you from spares. It doesn&#x27;t need to be a laptop, if you go for a desktop then you will also need to factor in a monitor so don’t get fooled by the cheaper price.</li><li><strong>An internet connection</strong>. You will need access to the internet to realistically learn to code. This wasn&#x27;t the case in the past, and some purists may still argue this with me. Even if you can learn everything with sporadic internet access and books, you will still need to develop the skill of &quot;Googling&quot; at some point because it is key to a developers problem solving tool box.</li><li><strong>A basic grasp of English</strong>. I have the huge privilege of being a native English speaker so I can&#x27;t exactly say to what level you will need but, given the world’s most common programming languages use English based keywords it&#x27;s a given you will need to know the meaning of at least those words.</li></ol><p>That&#x27;s it, everything else is a nice to have. I didn&#x27;t even use a desk when I learned to code. I sat on a second hand sofa in a house that I couldn&#x27;t afford to run the heating in, wrapped in two blankets on a 5 year old computer.</p>]]></description>
            <link>https://allthecode.co/blog/post/what-do-you-need-to-start-learning-to-code</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/what-do-you-need-to-start-learning-to-code</guid>
            <pubDate>Thu, 12 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to ask good questions as a developer]]></title>
            <description><![CDATA[<p>Part of being a good developer is knowing how to ask good questions to other developers when you are stuck. As a junior developer you are going to have more questions than at any other time in your career and you could probably do with someone on your shoulder all day long to help you out.</p><p>This of course is unrealistic and constantly pinging other developers on Slack, Zoom or in person is a quick way to “not make friends”. So, how can you ask the number of questions you need to without feeling like you are a burden on the team or worse, getting a black mark against your name?</p><p>There are a few rules I like to stick to before speaking to someone, these might sound like they will slow you down, and in the short term they will. In the long term you will learn more, ask better questions and move faster.</p><h3>5 rules to check before asking a question</h3><ul><li><strong>Double check for simple typos</strong>: Go look at the git diff viewer that your text editor or IDE has so you can easily see what changes you have made since the last commit and see if you’ve missed a semicolon, miss-spelt a variable or something else simple.</li><li><strong>Go and read the project/repo Readme</strong>: If you missed a bit of config or setup then the answer could lie in there.</li><li><strong>Google any and all error messages</strong>: Find the last call in the stack trace that is from your code, copy that error and paste it into Google, most errors have been seen before and posted online. It might not exactly solve your issue but could get you close.</li><li><strong>Reread the task/ticker you have been given</strong>: This will remind you of your starting point and might make you rethink the approach that has lead you to this point, the main question here being “Am I even on the right path?”</li><li><strong>Check your input data</strong>: As the old saying goes “Garbage in, garbage out”. If you are working with bad data then your code won’t be able to operate correctly and could well explain why you are having problems.</li></ul><h3>Speak to a rubber duck</h3><p>Ask a rubber duck?</p><p>It’s really not as silly as it sounds, many developers have one on their desk 🦆</p><p>If you have been through all of the above and still have no solution then it’s time to speak to a rubber duck before speaking to a person as a practise run. Tell the duck what you are trying to do and where you are stuck, often the answer will materialise in your mind as if the duck is an oracle. And if the answer still alludes you?</p><h3>Still stuck?</h3><p>If you are still stuck after doing all of the above and speaking to a duck then it’s time to find a team member to speak to. Unsurprisingly there are 5 rules to this as well, although just aim to follow at least one - doing all 5 every time is likely to bore people 😀</p><ul><li><strong>Tell them what you tried</strong>: You should have already practiced this with the duck, basically just rattle through the 5 rules above in order. This shows you didn’t just give up at the first hurdle and lets them skip over some simple things to save time.</li><li><strong>Suggest something you might have missed</strong>: This is great for showing that while you are stuck you might have some idea of the direction you should go in, it could be as simple as “Is there some gap in my knowledge that is an obvious place to check next?” to as specific as “I notice this call to the ServiceAPI, is it possible the problem lies there?”</li><li><strong>Ask if they’ve seen something like this before</strong>: This is a quick and simple one and can jog their memory that yes, they saw this 6 months ago and that’s a good place to start.</li><li><strong>Ask if there are any docs that cover this area I can look at</strong>: This shows a willingness to carry on looking at this independently and that you aren’t just relying on them to do the work for you.</li><li><strong>Ask for a next step rather than a full solution</strong>: Sometimes people want to help you the whole way through but really you just need a next step. This again shows a willingness to take the burden of the work and not absorb too much of their time. It also helps your learning as too much help can sometimes make you brain switch off and information just washes over you.</li></ul><p>Using the above rules and steps you will be able to ask as many questions as you like because your team will know you have covered off the basics and aren’t just looking for them to do the work for you</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-ask-good-questions-as-a-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-ask-good-questions-as-a-developer</guid>
            <pubDate>Wed, 11 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Should I use LinkedIn easy apply?]]></title>
            <description><![CDATA[<p>LinkedIn Easy Apply wasn’t made to help you get a job, it was made to make LinkedIn look better to people paying them for job listings. The number one metric for any job board is “Applications per ad”, which sounds sensible doesn’t it? You put a job advert out in to the world and you want as many applicants as possible to give you the best chance of finding the right person.</p><p>This sounds sensible, but it’s wrong. Too many applications is almost as bad as no applications.</p><h3>Your Easy Apply application:</h3><ul><li>will look like everyone else’s Easy Apply application, you won’t stand out at all.</li><li>won’t be tailored to the role.</li><li>could easily get caught in the “delete 50% of these because there are too many applications”.</li><li>will trick you into thinking you are making lots of good applications because “LinkedIn made this feature, it must work and be great”.</li></ul><p>In the case of a post with many vacancies, like Amazon warehouse operators then this <em>could</em> be a valid strategy, however for the roles we care about in software development, this is rarely the case, usually it’s one or two vacancies.</p><p>In this situation it’s more effective for everyone involved to have a small number of applicants who are all a great fit for the role, rather than 100s, many of whom are not suitable.</p><h2>Why did LinkedIn make Easy Apply?</h2><p>This is one of those classic cases where the incentives for LinkedIn, their users (you) and their customers (the hiring companies) don’t align:</p><ol><li>LinkedIn want to show a customer that they got “great value for money” by getting lots of applicants.</li><li>Users want to apply to as few jobs as possible to get a job.</li><li>Companies want a small number of high quality applications.</li></ol><p>It looks like the users and the companies have he most aligned incentives so why did LinkedIn make the feature?</p><p>LinkedIn made Easy Apply because they control the platform and they call the shots, they say “we’ll find you great candidates” the subtext they don’t say is that they will also find you hundreds of bad candidates by making it so easy to apply.</p><h2>What you should do instead</h2><p>Next time you find yourself hovering on Easy Apply, don’t!</p><p>Instead apply directly to the company with a slightly tailored CV/Resume that highlights where your skills and experience align with the job specification and cover email that does the same with a few sentences and a couple of bullet points highlighting the most relevant bits from your CV.</p>]]></description>
            <link>https://allthecode.co/blog/post/should-i-use-linkedin-easy-apply</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/should-i-use-linkedin-easy-apply</guid>
            <pubDate>Tue, 10 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How do I find a coding mentor?]]></title>
            <description><![CDATA[<p>How to find a coding mentor is one of the most common questions I see asked by early stage developers and career switchers. It&#x27;s not surprising since getting a mentor is a common piece of advice given to people in all careers: &quot;finding a mentor will hugely help you progress to the next stage&quot;</p><p>We even hear successful people talk about their mentors and the amazing influence they had on them.</p><p>If only you could find a mentor, right? You&#x27;d be set!</p><p>So, back to the original question:</p><h2>How to find a coding mentor to help my career?</h2><p>It sounds like a big ask doesn&#x27;t in? Saying to someone:</p><p>&quot;Hey, would you mind helping me progress in my career while I have nothing to offer in return?&quot;</p><p>Well I have a secret to tell you.</p><p>You don&#x27;t have to ask someone to be your mentor, you can just decide to be their mentee and start being mentored. It really is that simple.</p><h2>What does a mentor do?</h2><p>You see, a mentor is just someone you can ask questions to and get answers that will hopefully help you on your journey. Which, if you think about it, sounds an awful lot like a conversation where one person is a bit more experienced in one area than the other.</p><p>In fact, because of this one simple fact finding a mentor is so easy and simple I can sum it up with a Tweet:</p><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27360%27%20height=%27360%27/%3e"/></span><img alt="image of a tweet explaining why you don&#x27;t need to ask someone to be your mentor" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="image of a tweet explaining why you don&#x27;t need to ask someone to be your mentor" srcSet="/_next/image?url=%2Fimages%2Fblog%2Fmentor-tweet.png&amp;w=384&amp;q=75 1x, /_next/image?url=%2Fimages%2Fblog%2Fmentor-tweet.png&amp;w=750&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fblog%2Fmentor-tweet.png&amp;w=750&amp;q=75" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" loading="lazy"/></noscript></span><p>The most important bit is that last bit, don&#x27;t treat them like your personal problem solver and make sure you give back in some way: buy them a coffee, buy their book, send them flowers ... whatever, just something to show you appreciate them.</p><p>We have built up such an aura around this idea of a mentor that we forget that &quot;getting a mentor&quot; isn&#x27;t a silver bullet for success anyway, they don&#x27;t do the work for you, they don&#x27;t magic away your obstacles, the simply offer informal guidance when asked.</p><h2>How can I ask someone to be my mentor?</h2><p>Is there someone in your life you have being trying to ask to be your mentor and you&#x27;re stressing about how to ask them?</p><p>Well, don&#x27;t ask them! You don&#x27;t need to!</p><p>Pretend you did and they they said yes, and then skip to the questions you really want answered and start having a conversation from that point.</p><p>Heck, you could already have a mentor and not realise it!</p>]]></description>
            <link>https://allthecode.co/blog/post/how-do-i-find-a-coding-mentor</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-do-i-find-a-coding-mentor</guid>
            <pubDate>Tue, 03 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Coder vs developer vs software engineer]]></title>
            <description><![CDATA[<p>One of the most confusing things to understand when you start learning to code is all the names and job titles in the industry. You’ll hear terms like coder, developer, software engineer and even the odd ninja - although that trend has thankfully abated!</p><p>There is so much jargon in the coding and software development world that it can be hard to even know what to call what you do!</p><p>So when are you a coder, a developer or an engineer? Is there any difference? If there is, does it matter? It comes down to where you are writing code.</p><h3>Coder - Individual</h3><ul><li>Knows one or more programming languages</li><li>Solves problems with code</li><li>Works independently</li><li>Understands relevant infrastructure/systems for application deployments</li><li>Uses version control</li><li>Writes tests for personal confidence in codebase</li></ul><h3>Developer - Team member</h3><ul><li>Works in a team</li><li>Writes tests for team and business confidence in code base</li><li>Understands and engages with Agile/project management principles</li><li>Works with project owner/manager/customer/client at the feature level</li><li>Cognisant of business needs and tradeoffs</li><li>Writes documentation for current and future team members</li></ul><h3>Software Engineer - Broadest scope</h3><ul><li>Designs overall architecture of a system</li><li>Works closely with stake holders at the system level</li><li>Implements working practices to maximize team delivery</li><li>Makes far reaching technology decisions that has lasting impact for the code base</li></ul><p>Neither is better than the other. These are all about the mode of work you find yourself in and all good developers will find themselves moving fluidly between the roles throughout the career.</p><p>In reality the difference is minimal and while you’re learning to code you shouldn’t worry about titles like this. There is no difference in the learning path between the them so stick to your plan and don’t be thrown off course because you think one might be different (or better) than the other.</p><p>Remember, every developer is a coder. So, learn to code, solve problems and build things.</p>]]></description>
            <link>https://allthecode.co/blog/post/coder-vs-developer-vs-software-engineer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/coder-vs-developer-vs-software-engineer</guid>
            <pubDate>Sat, 24 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to ask good interview questions]]></title>
            <description><![CDATA[<p>Do you have any questions for us are seven words that strike fear into the hearts of many a junior, or even seasoned, developer when going through interviews. We all know that asking good interview questions is important but what determines a good question.</p><ul><li>&quot;What will my hours be?&quot;</li><li>&quot;Can I use my own keyboard?&quot;</li><li>&quot;Mac or PC?&quot;</li></ul><p>These are all valid questions, but are they good? If we&#x27;re being honest ... no.</p><p>So, how do you come up with good questions?</p><p>Part of your preparation for an interview is to get <strong>at least</strong> three questions together that you can deploy when asked the above. The framework I use is:</p><ul><li>One question unique to the person you are talking to</li><li>One that is unique to the company</li><li>One that is quite generic</li></ul><p>Let’s looks at an example set for AirBNB:</p><ol><li>As a team lead at AirBNB how do you oversee workload and make sure that the team is delivering at a good pace whilst also being sustainable?</li><li>How has the recent IPO changed the culture in the company?</li><li>What would success look like in the first three months of this role?</li></ol><p>Once you have the answers to these you can then finish up with &quot;just a couple more quick ones&quot; and ask about the hours, keyboard and flavour of hardware or whatever else you need to know.</p><p>Here are some more examples of developer interview questions I have used over the years:</p><ol><li>What’s the feature lifecycle process? Is it primarily driven by user feedback or strategic road map or a mix of both? Who owns features and how does it move from concept through to release?</li><li>In the job description you have specified and ability to write concise code? What does this mean?</li><li>What does the process look like from committing my last line of code to it running in production?</li><li>What’s the balance of pair programming to individual coding?</li><li>If I wanted to propose a new way of working how would I go about bringing that the to team? is there a formal process?</li><li>Are you profitable yet? If not how long is your current runway and what are you doing to extend it?</li><li>What’s you approach to in-house development beyond just development skills? I’m self taught and will be coding all the time so I’m more concerned about making sure my soft skills develop successfully especially given the added problems of remote work.</li><li>If you use open source technologies do you have anything in place to give back to the community?</li></ol>]]></description>
            <link>https://allthecode.co/blog/post/how-to-ask-good-interview-questions</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-ask-good-interview-questions</guid>
            <pubDate>Wed, 21 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Which programming language should I learn first?]]></title>
            <description><![CDATA[<p>There are so many programming languages, so many platforms and so many ways to learn. Even knowing how to get started can be stressful.</p><p>“What if I choose the wrong language?”</p><p>“What if it doesn’t do what I need it to?”</p><p>The truth is there is no wrong first language. You will hear strong voices in favor or against every language under the digital sun, most of them will have valid points however, all of them will miss one key thing.</p><p>Learning to program is different from learning a programming language.</p><p>Programming languages are a tool that enable you to learn how to write code and solve problems. Most languages share similar underlying concepts, so concepts learned with one will apply to most of the others.</p><p>You don’t want to hear me waffle on about ideological aspects of programming vs programming languages though, you want an answer!</p><p><strong>Learn Javascript first.</strong></p><p>It’s the only language that is natively supported in web browsers, it can run on servers, it can run locally on your computer and you can even build mobile applications for iOS and Android with it. At this point, Javascript is the universal language. So, as a starting point, it’s perfect.</p><p>Once you have a good understanding of Javascript you can then move on to other languages that are more specific, if you want.</p><p>Your first language is not your last language, no language is wrong but Javascript has the broadest application.</p>]]></description>
            <link>https://allthecode.co/blog/post/which-programming-language-should-i-learn-first</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/which-programming-language-should-i-learn-first</guid>
            <pubDate>Fri, 16 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to be a great junior developer]]></title>
            <description><![CDATA[<p>Well done getting your first developer job! Now, what should you do to be amazing? I could give you lots of hand-wavy advice on “meet targets”, “fulfill expectations”, “be a good communicator” but that is all useless. So here is the number one best way to stand out as a junior and make a name for yourself.</p><p>Great junior developer Solve Problems.</p><p>Not just solve them but find them and fix them.</p><p>You will find yourself speaking to lots of non-technical people in the business and all of them will have their own little bugbears about something in the app or the system that bothers them or doesn’t work. It could be tiny things like a list being ordered by date ascending rather than date descending, or a typo on one obscure button that they see a lot.</p><p>Write them all down, create a backlog item in your ticketing system and ask your manager if you can pull it into the next sprint as professional development work. Don’t tell the user you are working on it, just fix it, ship it and then let them know that it’s fixed.</p><p>Do this a few times and people will think you are a superstar because you are one!</p><p>If you don’t have any access to users then speak to your developer team and fix the little things that they hate but don’t have time to work on.</p><p>My favorite on that I did was reversing a list for someone, she had to scroll through years of deliveries multiple times per day so she could select the one she had just added. This wasn’t all that time-consuming but it was very annoying, I was able to fix this in about 10 minutes when I got back to my desk after meeting her for the first time and 3 days later it was released.</p><p>She was delighted.</p>]]></description>
            <link>https://allthecode.co/blog/post/how-to-be-a-great-junior-developer</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-to-be-a-great-junior-developer</guid>
            <pubDate>Fri, 09 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How long does it take to learn to code?]]></title>
            <description><![CDATA[<p>How long does it take to learn to code is the number one question I get asked when people hear I am a self-taught software developer, I always give the same answer: <strong>9 months</strong>.</p><p>This is 9 months of decent daily effort at about 2-3 hours most days. If your schedule means you can’t make that work then aim for a little bit every day. The daily consistency is more important than the raw amount.</p><p>The truth is that learning to code is a unique journey for everyone, it&#x27;s not simply learning the syntax and knowing how to &quot;speak&quot; a programming language. It&#x27;s a way of thinking, that comes very naturally to some and not so naturally to others. Part of learning to code is hooking up that wiring in your brain to think through how to break a <a href="https://allthecode.co/blog/post/to-be-a-coder-is-to-be-a-problem-solver">problem down into small chunks</a> and how to express those solutions in code.</p><p>Also, it takes time to learn something. You can&#x27;t just force a concept into your brain and &quot;know it&quot;, some annoying people can but they are very rare. How many times in school did we cram for a test, pass, and then forget it all a week later? That knowledge wasn&#x27;t ever really set in our brains, we just held it long enough to repeat it under set conditions.</p><p>9 months is a realistic time frame regardless of the field you want to get into, be it app development, backend programming, frontend web development, embedded programming, or even the latest booming industry, data science.</p><p>So, how good will you be after 9 months?</p><p>You&#x27;ll be ok, you&#x27;ll be able to implement any solution in code, you&#x27;ll still be Googling and searching Stackoverflow a lot but that&#x27;s fine, I&#x27;ve been doing this for 13 years and I still Google and search Stackoverflow a lot. Your design patterns might be a bit iffy, your tests might be fragile (if you are even writing any) and you&#x27;ll write some horribly slow spaghetti code at times but all those things will improve with time.</p><p>So, if you&#x27;re sat thinking that learning to code is an impossible mountain that will take years to climb ... stop, pick a highly rated course on Udemy or anything on Freecodecamp.org and just start, do a few hours every day, and in 9 months you will know how to code.</p><p>How to get the most from those 9 months is a post for another day!</p>]]></description>
            <link>https://allthecode.co/blog/post/how-long-does-it-take-to-learn-to-code</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/how-long-does-it-take-to-learn-to-code</guid>
            <pubDate>Mon, 05 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[To be a coder is to be a problem solver]]></title>
            <description><![CDATA[<p>Developers are at heart, problem solvers. We use code to solve problems for our users, our employer, and even other developers! To be a coder is to be a problem solver. To solve those problems our most important skill isn’t our ability to write code, it is our ability to fully understand the problem we are presented with and implement a solution to make it go away.</p><p>It could be writing a parts management app for a regional mechanic, reducing the checkout process from 4 steps to 2 for an e-commerce site, or making a Github action for your team that publishes to your Slack each time a build fails.</p><p>These are all quite big problems and you might be thinking “Simon, I’m new to programming, it would take me forever to make one of those!”</p><p>That’s fine, because really these are groupings of smaller problems, which are themselves groupings of smaller problems, until we get right the way down to the building blocks of our code.</p><p><strong>Each line of code we write solves a little problem.</strong></p><p>It is the smallest instruction required to accomplishes the task at hand so that the next line of code has what it needs to solve its part of the problem.</p><p>You see, code at its heart a set of very specific instructions that tell a computer how to solve a problem for a user. Having a good understanding of that problem is the key first step to building great software. Let’s take one of the above examples and break it down into some smaller chunks: writing a parts management app for a mechanics:</p><ol><li>Some way for a garage to record that they have taken delivery of some parts</li><li>A place to record what stock each garage has</li><li>Some way for a mechanic to subtract 1 or more items from their locations total when they use a part</li><li>A method to correct the amount of stock a location has for loss, breakages, or prior human error</li><li>Some kind of warning system that tells the central purchasing manager that a location is down to the minimum number in stock</li><li>A way for the purchasing manager to request one location send stock to another location</li><li>Some method for the purchasing manager to place an order with the supplier</li></ol><p>Suddenly this feels a whole lot more manageable doesn’t it? (The last problem sounds general enough we could probably hook into an existing service that already offers that kind of functionality)</p><p>To prove the point a bit more let’s take the first of those and drill in further: “Some way for a garage to record that they have taken delivery of some parts”. Let’s look at it as a user flow:</p><ol><li>The user opens the delivery screen on the stock manager app</li><li>They tap a “Take delivery” button</li><li>They search for and select the item from the global list</li><li>They set the quantity</li><li>They select if it is a new order (maybe even enter the purchase order number), or if it’s from another store and select a transfer order number</li><li>They click save</li><li>They are asked to double-check and confirm the entry is correct</li><li>The app saves this to the central database</li></ol><p>We’ll stop there but you can see that we are quickly breaking this problem down into smaller and smaller chunks without writing a line of code. Once you fully understand the solution to the problem you can present this back to users to make sure you’re correct and then start writing code making sure to get feedback from users at every step of the way.</p><p>When you find yourself in an interview and the question of “tell me about a time you solved a problem and tell me the approach you took” it’s this kind of answer they are looking for, breaking down a large problem into smaller and small chunks.</p><p>This is one of the many topics covered in the <a href="https://allthecode.co/products/coding-unicorn-book">Coding Unicorn E-Book</a>.</p><p><strong>One final note:</strong></p><p>Many of the small problems above are common to many, if not all software projects, so breaking your problem down and identifying the generic problems will allow you to find pre-made solutions that are industry standard, so you can focus on adding user value and not reinventing the wheel. Things like databases, UI frameworks,  libraries to make network requests are all common tasks and there is no point in writing that stuff yourself from scratch.</p>]]></description>
            <link>https://allthecode.co/blog/post/to-be-a-coder-is-to-be-a-problem-solver</link>
            <guid isPermaLink="true">https://allthecode.co/blog/post/to-be-a-coder-is-to-be-a-problem-solver</guid>
            <pubDate>Thu, 01 Jul 2021 00:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>