<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Chris Bertrand</title>
    <description>The latest articles on Forem by Chris Bertrand (@chris_bertrand).</description>
    <link>https://forem.com/chris_bertrand</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F30688%2Ff728f847-91ed-4424-901a-f4833051d0be.gif</url>
      <title>Forem: Chris Bertrand</title>
      <link>https://forem.com/chris_bertrand</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/chris_bertrand"/>
    <language>en</language>
    <item>
      <title>Don't believe the hype.</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Wed, 08 Jul 2020 22:49:53 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/don-t-believe-the-hype-4ccb</link>
      <guid>https://forem.com/chris_bertrand/don-t-believe-the-hype-4ccb</guid>
      <description>&lt;p&gt;I've been in this industry for over a decade now, and the one thing I've learnt is that you should never believe the hype.&lt;/p&gt;

&lt;p&gt;Technologies come and go, things get superceded, things improve. You just need to look at the technologies or frameworks that are no longer with us, such as Flash and those that are now barely used including the myriad of JS solutions we've used. Sure, sometimes you might want to ride the wave, it'll be fun, but you might not be left with much afterwards.&lt;/p&gt;

&lt;p&gt;Using what is cemented into the ecosystem and battle tested will mean you don't come across any horrible surprises. You have a myriad of documentation and stack overflow questions answered on the most superfluous of issues. Getting things done is easy, if not always elegant.&lt;/p&gt;

&lt;h2&gt;Selling you the dream.&lt;/h2&gt;

&lt;p&gt;Twitter, blog posts and conferences will sell you a reality that in most cases doesn't exist in the corporate world. That's the purpose of those mediums, they are trying to build and audience, create a market, get you interested in what is new. &lt;strong&gt;It's basic marketing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mircroservices, Macrofrontends, Unit tests, Static code analysis, Best practices, Containers, K8s, Serverless, Cloud, ai, big data, react, go, nosql, sass, PWAs, design systems, automation, agile.&lt;/p&gt;

&lt;p&gt;All these things are useful and important in the right circumstances, however if you think your company should be following all of these methodologies then you're being naive. Businesses have objectives and stakeholders to appease. They're not here for us to create the mecca of the technology world. Sure, some big businesses can afford to live the dream, but those are far and few between. &lt;/p&gt;

&lt;h2&gt;K.I.S.S.&lt;/h2&gt;

&lt;p&gt;There is nothing wrong with a &lt;strong&gt;well organised and structured monolith&lt;/strong&gt;. In fact for most of us, that's still the best way to go.&lt;/p&gt;

&lt;p&gt;All these things have been &lt;strong&gt;heralded &lt;/strong&gt;as the &lt;strong&gt;holy grail&lt;/strong&gt; and yet most businesses are using at most a couple of these idioms.&lt;/p&gt;

&lt;p&gt;Our new devs are lambasted with complicated tech stacks, overpriced hosting solutions and preachy beliefs that make all but the most simple hello world application a difficult and unsatisfying proposition.&lt;/p&gt;

&lt;h2&gt;The Fundamental Fallacy &lt;/h2&gt;

&lt;p&gt;Rather than looking at problems, &lt;strong&gt;we memorize &lt;/strong&gt;frameworks, syntax and convoluted ways to complete simple tasks. &lt;/p&gt;

&lt;p&gt;I'm sick of telling people that you can achieve things in a few lines of JavaScript. There is &lt;strong&gt;no need &lt;/strong&gt;for a complex SPA application written in React/Angular/Vue installing 37 dependencies to make an http request, or fill a simple form.&lt;/p&gt;

&lt;p&gt;I'm tired of reading countless blog posts on how to use Gatsby and React to create the most perfect blog site that you can host on Netlify or GitHub pages. &lt;strong&gt;If you want to blog, create some content,&lt;/strong&gt; don't spend 3 months creating a damn blog framework, there are hundreds out there already! Just use one! &lt;/p&gt;

&lt;p&gt;The internet and technology has been around for a long time, and people are always pining for what's new. It's understandable, it's new, it's shiny, it's cool. But it's not always necessary. Actually it's very rarely necessary.&lt;/p&gt;

&lt;p&gt;Sometimes a few lines of JQuery can do everything you need. Sometimes you don't need 100% code coverage across your codebase. Sometimes you just use WordPress to deploy your blog, and focus on the content you are trying to share. &lt;/p&gt;

&lt;p&gt;Sometimes you shouldn't believe the hype.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opinion</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Best Way to Improve &amp; Automate your Code Quality!</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 17 Mar 2020 18:22:02 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/the-secret-way-to-improve-automate-your-code-quality-2k08</link>
      <guid>https://forem.com/chris_bertrand/the-secret-way-to-improve-automate-your-code-quality-2k08</guid>
      <description>&lt;p&gt;I was recently on the &lt;a href="https://thefrontendpodcast.site/episodes/episode-3/" rel="noopener noreferrer"&gt;Front End Podcast (Listen to it here)&lt;/a&gt; with &lt;a href="http://twitter.com/kendalmintcode" rel="noopener noreferrer"&gt;Rob Kendall.&lt;/a&gt; We discussed something I'm quite passionate about. &lt;strong&gt;Making code better!&lt;/strong&gt; This means how to follow best practices and coding standards we have assigned and how we can do all this quickly, easily and&lt;em&gt; (most importantly)&lt;/em&gt; automatically. So what's the secret I hear you ask! What is this magic silver bullet! &lt;/p&gt;

&lt;h2&gt;&lt;strong&gt;The Secret? Use a Linter!&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;This&lt;strong&gt; Static Code Analysis&lt;/strong&gt; tool is a powerful way to keep your code in line with the latest standards and to keep a shared codebase following a set of chosen principles. We'll run through the &lt;strong&gt;what, how and why's&lt;/strong&gt; explaining how you should go about implementing this solution in your code today.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;The term "lint" is derived from the name of the undesirable bits of fibre and fluff found in sheep's wool.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbloximages.newyork1.vip.townnews.com%2Fnuvo.net%2Fcontent%2Ftncms%2Fassets%2Fv3%2Feditorial%2F2%2F7b%2F27b742c6-e46c-5c6c-a49b-0408aa63c752%2F58bddc32b3977.image.jpg%3Fresize%3D400%252C319" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbloximages.newyork1.vip.townnews.com%2Fnuvo.net%2Fcontent%2Ftncms%2Fassets%2Fv3%2Feditorial%2F2%2F7b%2F27b742c6-e46c-5c6c-a49b-0408aa63c752%2F58bddc32b3977.image.jpg%3Fresize%3D400%252C319" alt="Image result for lint image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;What is it?&lt;/h2&gt;

&lt;p&gt;Linting is the name for the process of checking your code against a set of pre-determined rules. Whether those are language dependant or specific to your project. &lt;strong&gt;Linting &lt;/strong&gt;will run a program or tool that will analyse the code for potential errors. It will make those warnings or errors clear to you and give you the option to fix them.&lt;/p&gt;

&lt;p&gt;Linting tools are especially useful for interpreted languages like JavaScript and Python. These languages lack a compiling phase that would usually throw errors prior to execution, and you can feel a big benefit when using it in these instances.&lt;/p&gt;

&lt;h3&gt;The Linting Tools Available to use.&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fclouds%2F2x%2Fhand-tools.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fclouds%2F2x%2Fhand-tools.png" alt="Image result for tools png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now we know what it is? How can we use it in our project? Surely we need a linter specific to each language! Well, you're right! But luckily, every major language already has linters available for them, and some are even language agnostic.&lt;/p&gt;

&lt;p&gt;You can find a detailed list here: &lt;a href="https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A nice curated list from the above would comprise &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;EsLint&lt;/strong&gt;&lt;/a&gt; this is a popular Linter for JavaScript which you may have heard of, or may already be using. &lt;a href="https://www.sonarqube.org/" rel="noopener noreferrer"&gt;SonarQube&lt;/a&gt; is a popular language-agnostic option that works from Java to PHP to Python. C# and .Net in general has &lt;a href="https://github.com/StyleCop/StyleCop" rel="noopener noreferrer"&gt;StyleCop&lt;/a&gt; and FxCop which are often used together.&lt;/p&gt;

&lt;p&gt;So, you might have heard of some of these already, but what are the benefits of using this, why should you invest your time to add these tools to your solutions?&lt;/p&gt;

&lt;p&gt;Some of you may be thinking... what about &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;? Prettier is not really a linter, as it doesn't check code per se. Prettier is an opinionated code formatter. It saves you time and energy and stops &lt;strong&gt;arguments &lt;/strong&gt;about line length, &lt;strong&gt;bracket placement&lt;/strong&gt; and most importantly, &lt;strong&gt;"Tabs vs Spaces"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FhXIFhglHONa0T40kCi%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FhXIFhglHONa0T40kCi%2Fgiphy.gif" alt="Image result for argument gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The best thing is you can tailor it to your needs. It can be run during development or added as a step when committing to your source code repository. It's flexible enough to work around your situation.&lt;/p&gt;

&lt;h2&gt;Why should I use it?&lt;/h2&gt;

&lt;p&gt;Everybody wants to write clean code, they want to follow best practices, they want to keep up to date with the latest and greatest ways to create code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linting&lt;/strong&gt; is important to reduce errors and improve the overall quality of your code. It also helps to make your code consistent over time, and across teams and individuals. It's great at catching problematic bits of code early on, and in most cases, lets you know how to fix them! Let's look at the pros and cons.&lt;/p&gt;

&lt;h3&gt;Linting Strengths.&lt;/h3&gt;

&lt;p&gt;Linting will flag up any &lt;strong&gt;unused variables&lt;/strong&gt; in your code. Any potentially &lt;strong&gt;unreachable &lt;/strong&gt;bits of code! (Did you test an if statement by changing the logic to a 1 == 1 comparison?) It can also help to find issues with &lt;strong&gt;indexing beyond&lt;/strong&gt; array lengths. &lt;/p&gt;

&lt;p&gt;It will catch errors early, we all know the best time to find a bug is during development. The longer a bug is left undetected and unresolved, the costlier it is to fix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn0.iconfinder.com%2Fdata%2Ficons%2Fleto-survey-rating%2F64%2F__rating_position_cons_pros-512.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn0.iconfinder.com%2Fdata%2Ficons%2Fleto-survey-rating%2F64%2F__rating_position_cons_pros-512.png" alt="Image result for pros sign png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Linting Weaknesses.&lt;/h3&gt;

&lt;p&gt;Linting can produce a lot of errors and warnings. Sometimes as many as there are lines of source code. This can lead to a lot of false positives and may deter you from fixing what is &lt;strong&gt;really important&lt;/strong&gt;. That's why setting up the rules, to begin with, is crucial.&lt;/p&gt;

&lt;p&gt;Linting will &lt;strong&gt;identify violations &lt;/strong&gt;of best practices. It &lt;strong&gt;won't teach&lt;/strong&gt; you those best practices. Developers can use linting to improve their code, but they might not replicate the standards that are advised.&lt;/p&gt;

&lt;p&gt;Linting is inexpensive in actual time and cost, &lt;strong&gt;but &lt;/strong&gt;it can decrease developer productivity, as they fix or alter the code to conform to these rules. &lt;/p&gt;

&lt;h2&gt;How to enforce it?&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fplasticine%2F2x%2Flaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fplasticine%2F2x%2Flaw.png" alt="Image result for law png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So this is the &lt;strong&gt;tricky &lt;/strong&gt;bit. As we can see, there are pros and cons to the notion of linting. Do you want to get your product shipped quickly or conforming with best practices that may speed up future work? There is always a &lt;strong&gt;trade-off, &lt;/strong&gt;and this is something to remember.&lt;/p&gt;

&lt;p&gt;Do you &lt;strong&gt;expect your team&lt;/strong&gt; to fix all the issues every time they change something? Should they just have to keep what they have changed tidy? Maybe you just want to inform them, hoping they make any relevant changes?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fplasticine%2F2x%2Fhigh-five.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.icons8.com%2Fplasticine%2F2x%2Fhigh-five.png" alt="Image result for high fivepng"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The Happy Medium&lt;/h3&gt;

&lt;p&gt;What I've found is that some level of linting is useful, especially in unison with a code review process. Having &lt;strong&gt;basic things fixed&lt;/strong&gt; before they go for code review means generic checks are no longer made by the human eye. It also allows us to &lt;strong&gt;focus on the important aspects,&lt;/strong&gt;rather than the subjective. &lt;/p&gt;

&lt;p&gt;We should check if we can refactor the code? Whether it would benefit from being split up, either into different files or functions? Is there sufficient documentation? Do we have tests covering important functionality? Is it scalable and secure?&lt;/p&gt;

&lt;p&gt;I like to think that we should all follow &lt;strong&gt;The Boy Scout Rule&lt;/strong&gt; - making sure to leave any code we touch code better than we found it, this means we will gradually remove any technical debt without having to do it all at once, or as specific tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2F95%2F5a%2F22%2F955a22ceda215f5b9e477b487670527e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2F95%2F5a%2F22%2F955a22ceda215f5b9e477b487670527e.png" alt="Image result for boy scout up png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Leave your code better than you found it.&lt;/p&gt;
&lt;cite&gt;The boy scout rule&lt;br&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;h3&gt;My JavaScript Setup - The Trifecta&lt;/h3&gt;

&lt;p&gt;As I mentioned above, JavaScript benefits greatly from the introduction of linting, but as the language is so open, putting in some guidelines is a necessity. Here is the configuration I add to my &lt;span&gt;&lt;b&gt;&lt;strong&gt;solution&lt;/strong&gt;&lt;/b&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt;to enforce linting during the development process.&lt;/p&gt;

&lt;p&gt;I use &lt;strong&gt;3 external libraries&lt;/strong&gt; to aid me in my endeavours.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; is the easy way to configure Git hooks. For those that do this manually, having it all set in the top-level config, standardises and simplifies the process massively.&lt;/li&gt;&lt;/ul&gt;





&lt;ul&gt;&lt;li&gt;The next is &lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;Lint Staged.&lt;/a&gt; As mentioned before, you want your developers to have a happy medium of what to fix. If they are working on a file, I think we should all follow the &lt;a href="https://deviq.com/boy-scout-rule/" rel="noopener noreferrer"&gt;Boy Scout Rule&lt;/a&gt;, meaning we clean up the code before resubmitting.&lt;/li&gt;&lt;/ul&gt;





&lt;ul&gt;&lt;li&gt;Last, but not least. &lt;a href="https://www.npmjs.com/package/pretty-quick" rel="noopener noreferrer"&gt;Pretty Quick&lt;/a&gt; will run your Prettier settings on all staged files. It's similar to &lt;strong&gt;Lint Staged&lt;/strong&gt; but taking care of the formatting instead.&lt;/li&gt;&lt;/ul&gt;





&lt;h3&gt;Install and Configure Packages&lt;/h3&gt;





&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi2.wp.com%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2020%2F03%2Fnpm-lint.png%3Ffit%3D1000%252C535" alt=""&gt;





&lt;p&gt;So anyway, once you've installed the three packages, you can add the following lines to your &lt;strong&gt;package.json&lt;/strong&gt;. This will lint all your JavaScript and TypeScript files if you're using any, and format your staged files before committing. If the linters throw any errors, we display them to the user and block them from proceeding!&lt;/p&gt;





&lt;h4&gt;The Configuration - Package.json&lt;/h4&gt;





&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi0.wp.com%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2020%2F03%2Fpackage-hooks.png%3Ffit%3D1000%252C751" alt=""&gt;





&lt;p&gt;The sections above add the tools installed into the Git pipelines. Husky is our middle-man and you can see that in its &lt;strong&gt;hooks&lt;/strong&gt; section the &lt;strong&gt;pre-commit hook &lt;/strong&gt;is configured&lt;strong&gt; &lt;/strong&gt;to run &lt;strong&gt;PrettyQuick &lt;/strong&gt;on our staged files and also the &lt;strong&gt;Lint-Staged&lt;/strong&gt; section afterwards. This runs &lt;strong&gt;eslint &lt;/strong&gt;and &lt;strong&gt;tslint &lt;/strong&gt;on the globs specified, which in this case are &lt;strong&gt;all staged .ts and .js files&lt;/strong&gt; it finds.&lt;/p&gt;





&lt;p&gt;Lastly, we must set up the rules, we want to use during this process. &lt;/p&gt;





&lt;h4&gt;TsLint Config&lt;/h4&gt;





&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi2.wp.com%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2020%2F03%2Ftslint-config.png%3Ffit%3D1000%252C640" alt='//tslint.json - BASE
{
  "extends": ["tslint:latest", "tslint-angular", "tslint-config-prettier"],
  "rulesDirectory": ["codelyzer"],
  "rules": {
    "array-type": false,
    "arrow-parens": false,
    "interface-name": false,
    "max-classes-per-file": false,
    "member-access": false,
    "no-consecutive-blank-lines": false,
    "deprecation": {
      "severity": "warning"
    }
  }
}'&gt;





&lt;p&gt;The important things here are the rule sets we are extending. &lt;strong&gt;tslint:latest and tslint-angular &lt;/strong&gt;are taking care of the fundamentals. We can overwrite any of these base rules below, and I would recommend finding that happy medium for yourself. I have left a couple of rules that make sense for me.&lt;/p&gt;





&lt;p&gt;&lt;strong&gt;tslint-config-prettier &lt;/strong&gt;is required so tslint &lt;strong&gt;does not&lt;/strong&gt; format our code, that is Prettiers job and where the prettier config comes into play.&lt;/p&gt;





&lt;h4&gt;Prettier Config&lt;/h4&gt;





&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2020%2F03%2Fprettier-config-2.png" alt=""&gt;





&lt;p&gt;The best place to put your prettier config is a .pretterrc file. I have shown a  simple set of rules to get you started. The &lt;a href="https://prettier.io/docs/en/configuration.html" rel="noopener noreferrer"&gt;Prettier Documentation of Configuration&lt;/a&gt; is the best place to look for tailoring the setup to your needs.&lt;/p&gt;





&lt;h3&gt;The outcome?&lt;/h3&gt;





&lt;p&gt;Here it is in action. You can see a &lt;strong&gt;git commit&lt;/strong&gt; kicking off husky which in turn runs our tools! First &lt;strong&gt;Prettier &lt;/strong&gt;fixes up any formatting, before &lt;strong&gt;eslint &lt;/strong&gt;changes the &lt;strong&gt;let to const&lt;/strong&gt; as it's never reassigned, and moves our class level declarations to the &lt;strong&gt;top of the file&lt;/strong&gt;! Pretty neat right!&lt;/p&gt;





&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2020%2F03%2FLinting-In-Action.gif" alt="Linting in Action Gif"&gt;





&lt;p&gt;So in conclusion, hopefully, you've understood what linting is, why to use it, and how to adapt it to your coding environment!&lt;/p&gt;





&lt;p&gt;&lt;strong&gt;I would love to hear of any other setup that works for you! There is always room for improvement. Please share your thoughts below!&lt;/strong&gt;&lt;/p&gt;





&lt;h2&gt;Sources and Further Reading&lt;/h2&gt;





&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Lint_(software)" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Lint_(software)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deviq.com/boy-scout-rule/" rel="noopener noreferrer"&gt;https://deviq.com/boy-scout-rule/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="https://stackoverflow.com/questions/8503559/what-is-linting" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/8503559/what-is-linting&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>3 Reasons to use a Clipboard Manager</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Mon, 25 Nov 2019 22:15:27 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/3-reasons-you-should-use-a-clipboard-manager-49dk</link>
      <guid>https://forem.com/chris_bertrand/3-reasons-you-should-use-a-clipboard-manager-49dk</guid>
      <description>&lt;p&gt;I bet you're reading this because you don't use a clipboard manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F9NLYiOUxnKAJLIycEv%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F9NLYiOUxnKAJLIycEv%2Fgiphy.gif" alt="Image result for shaking head gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of you may not even know what a clipboard manager is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/CiYImHHBivpAs/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/CiYImHHBivpAs/giphy.gif" alt="Image result for what gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a nutshell, a clipboard manager is a computer program that adds functionality to an operating system's clipboard. Many clipboards provide only one buffer for the "copy and paste" function, and it is overwritten by each new "copy" operation. &lt;/p&gt;

&lt;p&gt;Well, a clipboard manager extends this limit, making your items searchable and quicker to retrieve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.tenor.com%2Fimages%2F059c3dae1940ccb1583ce6cce7e931bb%2Ftenor.gif%3Fitemid%3D9694300" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.tenor.com%2Fimages%2F059c3dae1940ccb1583ce6cce7e931bb%2Ftenor.gif%3Fitemid%3D9694300" alt="Image result for it's simple gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the 3 reasons you should use one today.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You copied some data to the clipboard and then accidentally overwrote it. That's no longer a problem, it's still there!&lt;/li&gt;
&lt;li&gt;You need to copy a few bits of info from one app to another. Rather than hopping between them, copy them all first then paste them in the order required. Easy.&lt;/li&gt;
&lt;li&gt;Do you use several usernames and passwords? You no longer need to keep a spreadsheet with the info to delve into. It's all in your handy clipboard. Now really you should use a password manager, but if they aren't sensitive logins, this works just as well too. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;See I told you a clipboard manager is awesome!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2Fc0%2F87%2F17%2Fc0871716d04f73272ef0f3377e2ddd25.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2Fc0%2F87%2F17%2Fc0871716d04f73272ef0f3377e2ddd25.gif" alt="Image result for awesome gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are tonnes of other uses, but I bet you already know what reason you'd use one for, so what are you waiting for, download one today! Most are free so it won't do any harm trying one. They even have mobile versions too. Here are a few I'd recommend.&lt;/p&gt;

&lt;p&gt;The one I use on a regular basis and my personal favourite starts us off before I run through Mac, Android and IOS alternatives.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sourceforge.net/projects/ditto-cp/" rel="noopener noreferrer"&gt;Ditto - Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/gb/app/copyclip-clipboard-history/" rel="noopener noreferrer"&gt;CopyClip - Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=devdnua.clipboard&amp;amp;hl=en_GB" rel="noopener noreferrer"&gt;Clipboard Manager - Google Play Store - Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://copiedapp.com/" rel="noopener noreferrer"&gt;Copied - IOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What are your thoughts on clipboard managers? Do you use one already? If you have a personal favourite I'd love to hear it!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>software</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Are you using Void correctly?</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 05 Nov 2019 14:51:39 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/beware-avoid-4mnc</link>
      <guid>https://forem.com/chris_bertrand/beware-avoid-4mnc</guid>
      <description>&lt;p&gt;&lt;a href="https://www.guru99.com/vb-net-introduction-features.html" rel="noopener noreferrer"&gt;Vb.Net&lt;/a&gt; got something right. Its separation of the trusty &lt;strong&gt;function&lt;/strong&gt; and the &lt;strong&gt;sub&lt;/strong&gt;routine makes perfect sense. Unfortunately, that transition has not made its way to any other recent language. Delphi and Pascal also use this idiom, labelling them Procedures and Functions respectively.&lt;/p&gt;

&lt;p&gt;All other languages that omit a value from a method call, return a void type. By default, you will create your function and then decide whether to return something.&lt;/p&gt;

&lt;p&gt;Let's look at the purpose of a &lt;strong&gt;void&lt;/strong&gt; function or as I like to refer to them, a &lt;strong&gt;subroutine&lt;/strong&gt; and try to comprehend the utter confusion it can bring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Famericanreligioninamerica.files.wordpress.com%2F2014%2F03%2Fdirection_confusion.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Famericanreligioninamerica.files.wordpress.com%2F2014%2F03%2Fdirection_confusion.jpg" alt="Related image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Is there a correct usage of Void?&lt;/h2&gt;

&lt;p&gt;Isn't the purpose of a function to return something?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 times out of 10&lt;/strong&gt; a function will return something. Otherwise, it will do something. These two acts should be tangibly different, yet we group them together. This leads to horrific methods that are not pure, do multiple things and mutate global state, all under the watchful eye of Master Void.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.thoughtworks.com/insights/blog/how-programming-languages-have-evolved" rel="noopener noreferrer"&gt;Programming has come a long way&lt;/a&gt;, yet we stick to this archaic practice that confounds me to this day. Now I'm not against the notion of functions doing something; This is what we want; The issue is the misuse of the void mechanism specifically.&lt;/p&gt;

&lt;p&gt;When saving or deleting a record, is it better to return nothing, or should we return the object, boolean or an identifier of the record changed? Is explicitly checking for some value better than wrapping all that code in a try-catch block.&lt;/p&gt;

&lt;p&gt;One &lt;strong&gt;valid&lt;/strong&gt; use case is &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Log_file" rel="noopener noreferrer"&gt;Logging&lt;/a&gt;&lt;/strong&gt;; where information is captured about the application. Another is an entry point like the main function or task runner whose only job is to run a set of functions synchronously.&lt;/p&gt;

&lt;h2&gt;Why are you using Void?&lt;/h2&gt;

&lt;p&gt;Let's start with global properties. My ultimate bugbear with void functions is changing global state. It happens far too often. &lt;strong&gt;Don't do it!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The key design decision should be whether the function returns something? When creating a function ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it throw an exception if there is an error? &lt;/li&gt;
&lt;li&gt;Does it alter an object or some properties?&lt;/li&gt;
&lt;li&gt;Should we wrap code in a try-catch block?&lt;/li&gt;
&lt;li&gt;What happens when the function succeeds?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Do we care? Is more information better or worse?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's down to you, I guess what I'm trying to say is that &lt;strong&gt;using void functions can cause confusion. &lt;/strong&gt;It requires the developer to &lt;strong&gt;dig deeper&lt;/strong&gt; into code because externally the function doesn't disclose any information about its effects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I believe the only valid use case of a void function is a fire and forget call. So long as it didn't error, you don't care what it did.&lt;/p&gt;
&lt;cite&gt;Me, hater of the misused void.&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;A void call shouldn't stop the rest of the code running successfully. It's not required for the rest of the function to do its job.&lt;/p&gt;

&lt;h2&gt;Are you sure it doesn't do something you want to know about?&lt;/h2&gt;

&lt;p&gt;This is the first question I as myself when looking at a void function. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It should be yours too!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My aim is not to stop people from using void functions. They are an intrinsic part of how software is developed and consumed, I just urge you to use them when necessary. &lt;strong&gt;You wouldn't save a number into a string field.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Don't use void without first thinking about the consequences of doing so.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgflip.com%2F3fbwft.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgflip.com%2F3fbwft.jpg" alt="Roll Safe Think About It Meme | THINK... IS THIS REALLY A VOID FUNCTION? | image tagged in memes,roll safe think about it | made w/ Imgflip meme maker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your views on this, counter arguments are most welcome! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>rant</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Coding Concepts - Smart vs Dumb Components</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Thu, 25 Jul 2019 14:24:52 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/coding-concepts-smart-vs-dumb-components-112g</link>
      <guid>https://forem.com/chris_bertrand/coding-concepts-smart-vs-dumb-components-112g</guid>
      <description>&lt;p&gt;With JavaScript frameworks taking over our front end world, it's important to understand a few key principles that the major three frameworks push. When building a web-based application you'll be tasked with structuring how everything communicates.&lt;/p&gt;

&lt;p&gt;Most people will be aware that you should use different components to adhere to &lt;a href="https://en.wikipedia.org/wiki/SOLID"&gt;S.O.L.I.D principles&lt;/a&gt;, avoiding repetition in your application, making changes and additional features quicker and easier to integrate into the current solution. The actual creation and interaction between those components can be seperated in a number of ways but the simplest for me is considering them as Smart or Dumb.&lt;/p&gt;

&lt;h1&gt;
&lt;a href="https://dev.to/new#smart"&gt;&lt;/a&gt;Smart Components&lt;/h1&gt;

&lt;blockquote&gt;Contains dependencies that are application-specific. Services are injected in the constructor of these containers.&lt;/blockquote&gt;

&lt;p&gt;Also known as &lt;strong&gt;Controller&lt;/strong&gt; components or &lt;strong&gt;Container&lt;/strong&gt; components that can:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Manipulate Data&lt;/li&gt;
    &lt;li&gt;Call out to external resources (libraries, APIs)&lt;/li&gt;
    &lt;li&gt;Manage State&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In essence, these can be thought about as a container, page or section implementing a specific task of the user.&lt;/p&gt;

&lt;h1&gt;
&lt;a href="https://dev.to/new#dumb"&gt;&lt;/a&gt;Dumb Components&lt;/h1&gt;

&lt;blockquote&gt;Recieves data and displays the information.&lt;/blockquote&gt;

&lt;p&gt;Also, know as &lt;strong&gt;Presentation&lt;/strong&gt; components or &lt;strong&gt;Pure&lt;/strong&gt; components that can:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Allow for data to be passed in&lt;/li&gt;
    &lt;li&gt;Display that data in a specific format and style&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These can be thought of as where you create the final HTML and CSS for what something will look like on the screen. This is where you style your application and interact with the user.&lt;/p&gt;

&lt;h1&gt;
&lt;a href="https://dev.to/new#interaction"&gt;&lt;/a&gt;Interaction&lt;/h1&gt;

&lt;p&gt;A smart component will contain one or more dumb components within them. The smart components will pass the data they receive down into these presentation components which then render the data as required.&lt;/p&gt;

&lt;p&gt;If there is any interaction required between a smart and dumb component then a event will be fired back up to the smart component to deal with.&lt;/p&gt;

&lt;h1&gt;
&lt;a href="https://dev.to/new#purpose"&gt;&lt;/a&gt;Purpose&lt;/h1&gt;

&lt;p&gt;So why do we need to separate our application this way? Well as in any form of programming, following specific paradigms or approaches is not strictly enforced or required to allow and application to function, but will usually have a number of benefits down the line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt; is always heralded as a major benefit to most programming approaches. Following the D.R.Y principle of (Do)Not Repeating Yourself means that you can add the same functionality to different areas quickly and effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refactoring&lt;/strong&gt; a part or whole of an application only requires changes in a smaller number of places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Readability&lt;/strong&gt; It's easier to read component names to figure out what something does rather than having to dissect reams of HTML!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running Tests&lt;/strong&gt; Last but not least, testing smaller self-contained components makes creating and managing your suite of tests easier.&lt;/p&gt;

&lt;p&gt;Separating the concerns of your application across these two types of components, in whichever way you want to describe them should make the task of creating a web app in React, Vue or Angular a much nicer and easier process for all those involved.&lt;/p&gt;

&lt;p&gt;If you feel differently, as &lt;a href="https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0"&gt;Dan Abramov has recently done&lt;/a&gt; then please feel free with sharing your opinions below.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Coding Concepts - Hoisting</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Wed, 17 Jul 2019 08:38:20 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/coding-concepts-what-is-hoisting-5emg</link>
      <guid>https://forem.com/chris_bertrand/coding-concepts-what-is-hoisting-5emg</guid>
      <description>&lt;p&gt;Hoisting is the behavior of moving declarations to the top of the current scope. This is the default behavior in JavaScript when using the &lt;strong&gt;var &lt;/strong&gt;keyword but using the new &lt;strong&gt;let &lt;/strong&gt;and &lt;strong&gt;const &lt;/strong&gt;keywords means this does not occur.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fccscleaning.com%2Fwp-content%2Fuploads%2F2018%2F12%2Findustrial-cleaning-services-banner.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fccscleaning.com%2Fwp-content%2Fuploads%2F2018%2F12%2Findustrial-cleaning-services-banner.jpg" alt="Image result for window cleANER crane BANNER"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Hoisting in Action.&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/chrisbertrand/embed/yddNze?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here we can see that the variable is declared after it's been used, so how does this still work?&lt;/p&gt;

&lt;h2&gt;How and Why?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why does JavaScript do this?&lt;/strong&gt; &lt;em&gt;Hoisting&lt;/em&gt; is done during the interpreter's first run through the code. The JavaScript engine was designed in such a way that your code is run twice, the first time it runs through some syntax checking and anything that uses the global object methods. It then does some optimisation to improve performance, which is where hoisting comes in. The second pass is where your code gets run.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Hoisting will move all declarations to the top of the current scope (top of the current file or function).&lt;/p&gt;&lt;/blockquote&gt;

&lt;h2&gt;Initializations are Not Hoisted.&lt;/h2&gt;

&lt;p&gt;In this example, you can see that when declaring and initialising a variable in the same line the javascript engine does not optimise this block. As such you get an &lt;strong&gt;undefined&lt;/strong&gt; error when trying to access the variable.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/chrisbertrand/embed/yddeyx/?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;Let and Const behave differently&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/chrisbertrand/embed/qzzNjL?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;When changing the first example to use the &lt;strong&gt;let &lt;/strong&gt;or &lt;strong&gt;const &lt;/strong&gt;keywords instead of &lt;strong&gt;var&lt;/strong&gt; everything goes belly up. If you open your console window you will spot the JavaScript engine throwing exceptions (I've added images if you can't be bothered 😉 )&lt;/p&gt;

&lt;p&gt;You can see nothing is present in the results pane, that's because these new keywords behave differently. The errors below are easy enough to understand, a &lt;strong&gt;const&lt;/strong&gt; needs to be initialised when declared, whereas a &lt;strong&gt;let &lt;/strong&gt;gets checked during the first cycle of the interpreter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage-1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Put your declarations in scope.&lt;/h2&gt;

&lt;p&gt;Hoisting is pretty cool eh? It's great that JavaScript is so forgiving and allows things like this to work. Equally, it can mean that code works when you're not expecting it to. Going forward, it's probably best to keep all your declarations at the beginning of every scope though! With the introduction and mass adoption of the &lt;strong&gt;let&lt;/strong&gt; and &lt;strong&gt;const &lt;/strong&gt;keywords, it's important to know the differences, and know that simply changing all your &lt;strong&gt;vars &lt;/strong&gt;to &lt;strong&gt;lets &lt;/strong&gt;can cause problems in your application.&lt;/p&gt;

&lt;h2&gt;What about Functions&lt;/h2&gt;

&lt;p&gt;Hoisting also applies to &lt;em&gt;function declarations&lt;/em&gt;, which is why you can define your function after you call them! However, &lt;strong&gt;Function expressions/Anonymous methods&lt;/strong&gt; do not get hoisted in a similar fashion to let and const. Take a look at this last CodePen, we can see that the variable declarations get hoisted from the bottom, but the anonymous function call does not, which kills the engine throwing errors.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/chrisbertrand/embed/MMMedB?height=600&amp;amp;default-tab=js&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.designpuddle.com%2Fwp-content%2Fuploads%2F2019%2F07%2Fimage-2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, it's good to know that &lt;strong&gt;functions get hoisted before variables&lt;/strong&gt;! So when refactoring legacy code, remember to look at the scope of all your variables and think about how the interpreter will be parsing the code you are modifying.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The main reason for this is because let and const are block scoped. var on the other hand is not and therefore can be hoisted up to the global context (as long as 'use strict' is not present&lt;/p&gt;

&lt;p&gt;James - &lt;a href="https://dev.to/jamesthomson"&gt;https://dev.to/jamesthomson&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/js/js_hoisting.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/js/js_hoisting.asp&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/JavaScript_engine" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/JavaScript_engine&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://www.codingame.com/playgrounds/7974/understanding-hoisting-in-javascript" rel="noopener noreferrer"&gt;https://www.codingame.com/playgrounds/7974/understanding-hoisting-in-javascript&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://codeburst.io/javascript-what-is-hoisting-dfa84512dd28" rel="noopener noreferrer"&gt;https://codeburst.io/javascript-what-is-hoisting-dfa84512dd28&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>When to start looking for your next role?</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 02 Jul 2019 19:27:55 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/when-to-start-looking-for-your-next-role-3b8n</link>
      <guid>https://forem.com/chris_bertrand/when-to-start-looking-for-your-next-role-3b8n</guid>
      <description>&lt;p&gt;When is the right time to start looking for your next job?&lt;/p&gt;

&lt;p&gt;You’ve been at the same place for a one/five/ten years now. Have you progressed? Are you learning anything new? Do you feel undervalued by your current employer either financially or with your efforts not being recognised? What should you do?&lt;/p&gt;

&lt;p&gt;Are there any internal vacancies you can apply for? Have you raised any concerns with your boss? Do you feel comfortable doing so?&lt;/p&gt;

&lt;p&gt;Have you been keeping an eye out on the market? Is there anything that catches your eye? Do you have a preferred recruiter you can contact?&lt;/p&gt;

&lt;p&gt;Are you worried about moving on? Do you like the people you work with? Is the commute decent? There are many factors for staying where you are.&lt;/p&gt;

&lt;p&gt;Ultimately the decision is yours.&lt;/p&gt;

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

</description>
      <category>discuss</category>
      <category>healthydebate</category>
      <category>career</category>
      <category>help</category>
    </item>
    <item>
      <title>Code creation, try it!</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 25 Jun 2019 08:48:05 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/imagine-code-that-produces-code-good-code-pli</link>
      <guid>https://forem.com/chris_bertrand/imagine-code-that-produces-code-good-code-pli</guid>
      <description>&lt;p&gt;I think we should consider the option of &lt;strong&gt;writing code&lt;/strong&gt;, that writes code for us! Let me explain why.&lt;/p&gt;

&lt;p&gt;We love coding,  we try to write as much code as possible. LoC is the &lt;strong&gt;ultimate measurement&lt;/strong&gt; of your awesomeness. 😊 But how many of us write code that creates code for us?&lt;/p&gt;

&lt;p&gt;We love using tools/frameworks etc to aid our writing of course, but limit ourselves to writing these tools.&lt;/p&gt;

&lt;p&gt;I've recently been looking at &lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook &lt;/a&gt;to help automate the creation of a demo app for our UI library. Currently, this is a manual task creating pages and implementing the components and variations needed.&lt;/p&gt;

&lt;p&gt;I've been told that it's not difficult and doesn't take very long. My first thought was, well why haven't we automated it then?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fi.imgur.com%2FcPw6cAK.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fi.imgur.com%2FcPw6cAK.gif" alt="Related image"&gt;&lt;/a&gt;But I can sharpen pencils too&lt;/p&gt;

&lt;p&gt;Automation seems to have been swallowed by testing. Developers no longer use it as a tool in their arsenal. We’ll happily scaffold using AngularCLI or the alternative! &lt;strong&gt;Why not create the scaffolds&lt;/strong&gt;? Each codebase has a style, and each company does things their own way, so they should create tooling. Let’s end the notion of style guides and lengthy how to’s to follow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1hT23VteSYhRbOaUtCcuEg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1hT23VteSYhRbOaUtCcuEg.gif" alt="Image result for automation gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A component has a template and some inputs. You could create a simple config file, be that in JSON, YAML, JavaScript, hell any language you choose that could parse those inputs and create those pages dynamically.&lt;/p&gt;

&lt;h2&gt;&lt;strong&gt;Why do we want to do this ourselves?&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FKpACNEh8jXK2Q%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FKpACNEh8jXK2Q%2Fgiphy.gif" alt="Image result for code monkey gif"&gt;&lt;/a&gt;Anyone can do this!&lt;/p&gt;

&lt;p&gt;This sort of grunt work doesn't give us any satisfaction, but writing a tool to do this for us, packaging, styling and deploying it would be awesome. Maybe it's the inherent difference between a web developer and software engineer? I don't know, I've always thought these titles are interchangeable, is this not the case? Is it that JavaScript is not thought of in this way yet?&lt;/p&gt;

&lt;p&gt;Yes, &lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook &lt;/a&gt;gives us this functionality, and it seems to do a pretty good job at it too. I just worry that we expect everything built for us these days. We seem to have forgotten that we can build them ourselves, exactly as we want. Lightweight, customisable, geared specifically to our use case. Even if we do not, it's at least worth considering no?&lt;/p&gt;

&lt;p&gt;I guess this follows on slightly from Bens Post the other week.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ben" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1%2Ff451a206-11c8-4e3d-8936-143d0a7e65bb.png" alt="ben"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ben/invest-in-building-custom-tools-3430" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Invest in building custom tools&lt;/h2&gt;
      &lt;h3&gt;Ben Halpern ・ Jun 16 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;How many people do this currently? What are the main positives and negatives from this approach? Would you do it again?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Art of Debugging</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Mon, 17 Jun 2019 20:40:24 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/the-art-of-debugging-2nla</link>
      <guid>https://forem.com/chris_bertrand/the-art-of-debugging-2nla</guid>
      <description>&lt;p&gt;As a developer, a major part of your day-to-day responsibilities will entail needing to deal with bugs, finding a problem, replicating it, and fixing it. &lt;/p&gt;

&lt;p&gt;It's much easier to write code from scratch, &lt;strong&gt;looking &lt;/strong&gt;through old code, &lt;strong&gt;understanding &lt;/strong&gt;it and making it better is much more of a challenge. &lt;/p&gt;

&lt;p&gt;We have tutorials that teach us language best practices, how to use design patterns, dealing with code smells, writing lean, maintainable code; However, this crucial aspect of our duties is often overlooked.&lt;/p&gt;

&lt;p&gt;The purpose of this article is &lt;strong&gt;not to&lt;/strong&gt; tell you how to fix your bugs, it's &lt;strong&gt;describing the process &lt;/strong&gt;you will need to go through to find and diagnose the problem.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--DRHo_q19--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1207568119/fil7_normal.png" alt="Filipe Fortes profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Filipe Fortes
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/fortes"&gt;@fortes&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Debugging is like being the detective in a crime movie where you are also the murderer.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      00:57 AM - 10 Nov 2013
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=399339918213652480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=399339918213652480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=399339918213652480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;It's true, occasionally you will have written the code that has caused the bug in question! Time to investigate what went wrong! Now it's simpler if you wrote the code, as you'll know where to look. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what if you didn't?!&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Tip: Your mindset needs to be that of a detective. &lt;/p&gt;&lt;/blockquote&gt;

&lt;h2&gt;How to know where to start?&lt;/h2&gt;

&lt;p&gt;Yes, this is hard! Someone raises an issue or sends over a screenshot.  A stack trace drops into your Inbox! What does this all mean? How can you use this information to determine where the problem originated from? &lt;/p&gt;

&lt;p&gt;Let’s look at the &lt;strong&gt;steps &lt;/strong&gt;I would take.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3VwM0vo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://blog.designpuddle.com/wp-content/uploads/2019/06/Replicate-The-Issue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3VwM0vo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://blog.designpuddle.com/wp-content/uploads/2019/06/Replicate-The-Issue.png" alt="" width="724" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 1: Replicate the issue&lt;/h3&gt;

&lt;p&gt;The first thing you need to do is replicate the error. A &lt;strong&gt;LOT &lt;/strong&gt;of errors that get logged are down to incorrect configuration, network problems or browser related, so this is an integral part of debugging. &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Tip: Get all the configuration information you need before starting, and the steps to reproduce!&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Trying to fix a problem without replicating the error is a task of futility. Unless you can see it &lt;strong&gt;not&lt;/strong&gt; work, you will never know if the change you make will &lt;strong&gt;actually fix it!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Step 2: Find an entry point&lt;/h3&gt;

&lt;p&gt;With the information you have, try to find a way of using that to get into the code.&lt;/p&gt;

&lt;h4&gt;Problem: Form Error&lt;/h4&gt;

&lt;p&gt;Say you have a screenshot of a &lt;strong&gt;form &lt;/strong&gt;with and an &lt;strong&gt;error message&lt;/strong&gt; displayed. How can you use that to get you to where you need to be?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pUnjN0jc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.pinimg.com/originals/e6/67/ea/e667ea221cd32f8bc235f412796bf4f9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pUnjN0jc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.pinimg.com/originals/e6/67/ea/e667ea221cd32f8bc235f412796bf4f9.png" alt="Image result for form error screenshot" width="880" height="660"&gt;&lt;/a&gt;A generic login form error: &lt;a href="https://dribbble.com/emmabell"&gt;https://dribbble.com/emmabell&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;When investigating a problem, there will be two avenues that you will need to inquire of. Is there a problem on the &lt;strong&gt;client side &lt;/strong&gt;either in the JavaScript, CSS or HTML; or the problem is on the &lt;strong&gt;server side&lt;/strong&gt;; the backend code, where your data/database and infrastructure lives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cN603zxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i2.wp.com/blog.designpuddle.com/wp-content/uploads/2019/06/Rule-Out-Possibilities.png%3Ffit%3D1000%252C749" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cN603zxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i2.wp.com/blog.designpuddle.com/wp-content/uploads/2019/06/Rule-Out-Possibilities.png%3Ffit%3D1000%252C749" alt="" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 3: Rule out the possibilities&lt;/h3&gt;

&lt;p&gt;If you've ever played &lt;a href="https://www.amazon.co.uk/Hasbro-Gaming-Guess-Classic-Game/dp/B07G446J4V"&gt;Guess Who&lt;/a&gt; you'll have a good understanding of what I mean. You have your suspects, now it's time to whittle them down! &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Tip: It's all about taking a systematic approach.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Here, we'd probably want to start with the &lt;strong&gt;client side&lt;/strong&gt;, as that is our entry point, and where we can inspect how the error. We'd want to verify whether the form is doing the checking within the browser or sending some information to its pals on the other side!&lt;/p&gt;

&lt;p&gt;In comes developer tools, known to many as the magic &lt;strong&gt;F12&lt;/strong&gt; key! Here you can view and access the DOM, the underlying HTML, and JavaScript on the page.&lt;/p&gt;

&lt;p&gt;If you've never used Developer Tools before here are two great intros into what's available. Even if you know it, I'd highly recommend this first short video that gives a quick refresher of 12 tricks you may have missed.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nOEw9iiopwI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
A short run through 12 tricks you can use in Chrome Dev Tools



&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/x4q86IjJFag"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
A more detailed, longer run through all the features available.



&lt;blockquote&gt;&lt;p&gt;Tip: Note the &lt;strong&gt;Id&lt;/strong&gt; and &lt;strong&gt;CssClass &lt;/strong&gt;names of the suspected tags and find the files where they are in.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Using this approach will give you an avenue to check what was happening and where to focus your attention on next. Inspecting the tags and elements, extracting the &lt;strong&gt;Id&lt;/strong&gt; and &lt;strong&gt;CssClass &lt;/strong&gt;names will mean that you can delve into the source code at the precise location where the problem is occurring.&lt;/p&gt;

&lt;h3&gt;Generic client side gameplan&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Check the &lt;strong&gt;console &lt;/strong&gt;for errors&lt;/li&gt;
&lt;li&gt;Inspect page finding the &lt;strong&gt;handler &lt;/strong&gt;associated with the issue.&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;breakpoints &lt;/strong&gt;so you can view the parameters being passed, and view the call stack in case those values came from elsewhere&lt;/li&gt;
&lt;li&gt;Search in source for tags or handlers to be able to change the relevant files. Add &lt;strong&gt;log lines&lt;/strong&gt; in order to aid visibility. &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Test &lt;/strong&gt;your change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat &lt;/strong&gt;until done. &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;&lt;p&gt;Tip: If using Typescript or if your Js is bundled add a &lt;strong&gt;debugger;&lt;/strong&gt; line so that your browser will automatically break at that point when your code executes, this is a great way for finding where those files have been combined to.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;Step 4: Bad data in or bad data out.&lt;/h3&gt;

&lt;h4 id="mce_30"&gt;Problem: Data Display Error&lt;/h4&gt;

&lt;p&gt;If your problem is with data rather than validation, you will need to figure out whether the data is being &lt;strong&gt;saved incorrectly&lt;/strong&gt; or being &lt;strong&gt;displayed incorrectly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zq43L_Wl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://alison.dbsdataprojects.com/wp-content/uploads/sites/82/2016/04/cartoon-metadata.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zq43L_Wl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://alison.dbsdataprojects.com/wp-content/uploads/sites/82/2016/04/cartoon-metadata.png" alt="Image result for data in or data out" width="880" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If, for example, you have a &lt;strong&gt;label &lt;/strong&gt;on your page which should display your name, but it’s showing your age.  &lt;/p&gt;

&lt;p&gt;You need to find out whether you are using the &lt;strong&gt;wrong&lt;/strong&gt; field/value to display the label, or the value is being &lt;strong&gt;retrieved correctly &lt;/strong&gt;but &lt;strong&gt;saved incorrectly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A problem of this ilk can be harder to pinpoint, as you do not know where that data is coming from, similarly to our first example, &lt;strong&gt;find an entry point, &lt;/strong&gt;and follow the code up to where data is &lt;strong&gt;being&lt;/strong&gt; &lt;strong&gt;loaded&lt;/strong&gt;. Now you can check whether this data is incorrect at the source!&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt; Tip: This may be an application lifecycle hook such as Page &lt;strong&gt;Load&lt;/strong&gt; or &lt;strong&gt;Init&lt;/strong&gt;. &lt;/p&gt;&lt;/blockquote&gt;

&lt;h4&gt;Backend gameplan&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Find where the data is being retrieved from, which table, proc or function is being called to display that value.&lt;/li&gt;
&lt;li&gt;Query the database using any unique identifiers to filter down the results.&lt;/li&gt;
&lt;li&gt;Depending on the outcome, you will have two possible avenues. &lt;ul&gt;
&lt;li&gt;If your problem originates elsewhere; when the data is saved.&lt;/li&gt;
&lt;li&gt;Or when it's being displayed. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If displayed, circle back to the &lt;strong&gt;client side gameplan &lt;/strong&gt;else...&lt;/li&gt;
&lt;li&gt;Find&lt;strong&gt; all possible&lt;/strong&gt; routes to inserting data into that table/store, and whittle down which one is causing the problem.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id="mce_14"&gt;Problem: The Stack Trace&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aCkP8OJm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i1.wp.com/blog.designpuddle.com/wp-content/uploads/2019/06/Stack-Trace.png%3Ffit%3D1000%252C672" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aCkP8OJm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i1.wp.com/blog.designpuddle.com/wp-content/uploads/2019/06/Stack-Trace.png%3Ffit%3D1000%252C672" alt="" width="880" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;The Stack Trace&lt;/h2&gt;

&lt;p&gt;Sometimes you'll be presented with a giant wall of text also known as a Stack Trace. The stack trace &lt;strong&gt;looks &lt;/strong&gt;scary, initially comparable to that of a towering wave. But don't worry as there will be lots of information about libraries and binaries you don't care about, and probably never knew existed. In 99% of cases these will not be the problem, so &lt;strong&gt;find &lt;/strong&gt;the lines that equate to the &lt;strong&gt;code that's yours&lt;/strong&gt;! &lt;/p&gt;

&lt;p&gt; If you receive a stack trace, you are actually in a very strong position. It tells you that an error has occurred and &lt;strong&gt;exactly where&lt;/strong&gt; it was falling over. This makes your job much easier. Look for the &lt;strong&gt;method names&lt;/strong&gt; being called, the &lt;strong&gt;files &lt;/strong&gt;involved, and the &lt;strong&gt;line numbers&lt;/strong&gt; to find the source of the problem. Then, depending on the problem, follow the relevant game plans listed above. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tip: Find the first time your code was called, and start from there.&lt;/p&gt;
&lt;cite&gt;&lt;br&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's a great look into the intricacies of the stack trace and how to find the bits relevant to you! &lt;a href="https://alligator.io/js/stack-trace/"&gt;https://alligator.io/js/stack-trace/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GUBbtj9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://blog.designpuddle.com/wp-content/uploads/2019/06/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GUBbtj9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://blog.designpuddle.com/wp-content/uploads/2019/06/image.png" alt="" width="597" height="288"&gt;&lt;/a&gt; &lt;a href="https://alligator.io/js/stack-trace/"&gt;Stack courtesy of: &lt;/a&gt;&lt;a href="https://alligator.io/js/stack-trace/"&gt;https://alligator.io/js/stack-trace/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Not getting anywhere?&lt;/h2&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--VLm2P1sn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1071055431215276033/U9-RIlDs_normal.jpg" alt="I Am Devloper profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        I Am Devloper
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @iamdevloper
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Debugging is like an onion. There are multiple layers to it, and the more you peel them back, the more likely you're going to start crying at inappropriate times.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:51 PM - 15 Feb 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1096497253911547904" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1096497253911547904" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1096497253911547904" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;If you've already:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Replicated&lt;/strong&gt; the error?&lt;/li&gt;
&lt;li&gt;Used Google to&lt;strong&gt; rule out&lt;/strong&gt; any arbitrary problems?&lt;/li&gt;
&lt;li&gt;Found the source code you "&lt;strong&gt;think&lt;/strong&gt;" is causing the problem?&lt;/li&gt;
&lt;li&gt;Added in &lt;strong&gt;debug points, print statements, console.log&lt;/strong&gt; lines to confirm your assumptions?&lt;/li&gt;
&lt;li&gt;Made some &lt;strong&gt;changes&lt;/strong&gt;, and the bug still is occurring?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smashed&lt;/strong&gt; your &lt;strong&gt;head&lt;/strong&gt; against the desk &lt;strong&gt;multiple times&lt;/strong&gt;??&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ok, so it's probably time to&lt;strong&gt; pull someone in to help&lt;/strong&gt;. After spending an hour or so, if you're struggling to make progress find someone to talk the problem over with, sometimes just discussing the problem will give you new leads or a new road of inquiry.&lt;/p&gt;

&lt;h2&gt;Art comes with practice&lt;/h2&gt;

&lt;p&gt;As you can see, finding the root cause of an issue is hard, there are lots of potential routes, and quite often numerous red herrings or dead ends. Finding the optimal way of tackling each issue is a valuable skill in your arsenal. Over time, you will instinctively know where to start your search and save some time. Saying that, &lt;strong&gt;assumptions &lt;/strong&gt;are usually a bad thing when looking into the code, it's always best to see what is happening, rather than what you think is!&lt;/p&gt;

&lt;p&gt;I'd love to know if &lt;strong&gt;you have any tips&lt;/strong&gt; for your fellow developer? &lt;/p&gt;

&lt;p&gt;Alternatively, what's the biggest mistake you can make when starting out looking at a problem that is raised?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you write unit tests to cover every bug you encounter???&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Additional Reading&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://simpleprogrammer.com/effective-debugging/"&gt;https://simpleprogrammer.com/effective-debugging/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codementor.io/mattgoldspink/how-to-debug-code-efficiently-and-effectively-du107u9jh"&gt;https://www.codementor.io/mattgoldspink/how-to-debug-code-efficiently-and-effectively-du107u9jh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hackernoon.com/how-to-debug-any-problem-ac6f8a867fae"&gt;https://hackernoon.com/how-to-debug-any-problem-ac6f8a867fae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="https://alligator.io/js/stack-trace/"&gt;https://alligator.io/js/stack-trace/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Any Questions?</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 19 Mar 2019 10:32:27 +0000</pubDate>
      <link>https://forem.com/designpuddle/any-questions-368d</link>
      <guid>https://forem.com/designpuddle/any-questions-368d</guid>
      <description>&lt;p&gt;It's the end of a presentation and those famous words are spoken once again, having heard this numerous times, very often the speaker/you are met with silence. You've just spent a week, perhaps longer preparing a presentation, a post or a new tool for people to use, and nobody has any questions about what you've just displayed! Faces are blank, and people make a swift exit. Why is this?&lt;/p&gt;

&lt;p&gt;It's because &lt;strong&gt;you're doing it wrong!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;What do I mean by that? Let me explain.&lt;/p&gt;

&lt;p&gt;When you bring people into a room and tell them something new, they may be excited and intrigued, but first they'll feel doubtful, confused and defensive. You don't want to sound silly saying something that doesn't make sense, making you look bad, so most people say nothing at all.&lt;/p&gt;

&lt;h2&gt;How can we disarm the audience?&lt;/h2&gt;

&lt;p&gt;As our instincts are always on alert for dangers or threats, we're predisposed to be wary of change. Making sure your audience is relaxed and comfortable is an important first step. Throughout your talk, you will need to coax the audience into small acts of participation. Have you ever noticed, that once someone has spoken up during a presentation, they are inclined to speak up again further down the line, this is not a coincidence, it's  the participant becoming accustomed to the speaker and feeling safe and satisfied with how the last exchange went.&lt;/p&gt;

&lt;p&gt;I've just finished reading a book that was recommended to me - &lt;a href="https://www.amazon.co.uk/How-Get-People-Stuff-persuasion/dp/0321884507"&gt;How to get people to do stuff - by Susan Weinschenk.&lt;/a&gt; It's a great book going into the psychology of how people behave and react to your actions, words and cues. &lt;/p&gt;

&lt;blockquote class="wp-block-quote"&gt;&lt;p&gt;To get people to speak up you will need to follow a set of rules to help that happen.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Susan describes the best presentation she's been to, it was actually a performance by musician Bobby McFerrin; a master of music and in particular extensive audience participation. He does this by bonding the group and taking it slow. Sitting in a room full of strangers you won't want to look silly, but Bobby starts by getting you to sing a single note, he then builds upon that one act asking for a little more each time until everyone is freely participating. I've embedded a Ted talk showing him in action below. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ne6tB2KiZuk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Now I don't expect you to go to these lengths to get the audience to participate with you, but there are some specific things that could help gain traction in future talks.&lt;/p&gt;

&lt;h2&gt;7 Things you can do to improve audience participation&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;Be sure to let the audience know early on that questions can be asked throughout,  unless you specifically don't want them this will improve engagement throughout the talk. Anyone that speaks up during the talk, will have a much higher probability of asking one afterward too.&lt;/li&gt;&lt;/ul&gt;

&lt;blockquote class="wp-block-quote"&gt;
&lt;p&gt;Questions aren't to be feared. They’re to be embraced.  There’s no better way to connect with an audience than to allow them free rein to ask as many questions as they want.&lt;/p&gt;
&lt;cite&gt;&lt;br&gt; Joey Asher from &lt;a href="http://speechworks.net/wordpress/?p=588"&gt;Talking Points&lt;/a&gt; &lt;/cite&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt; Start slow, and try and get your group feeling safe. You can use humor to make people feel relaxed, but don’t make fun of people as a form of humor or they’ll start to feel unsafe. &lt;/li&gt;
&lt;li&gt;Keep your hands open with palms up when asking questions, this means you’re asking for something from the audience. Subconsciously the audience will recognise this and help you out.&lt;/li&gt;
&lt;li&gt;Ask the group to do one small activity before taking on anything more complex. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's a reason that ice breakers are so commonly used in group scenarios. When introducing a topic you could ask for a show of hands, or ask anyone if they are aware of what you will be defining. These little steps although minor will encourage people to be more vocal further down the line.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;When you ask people to do stuff, use nouns rather than verbs. By invoking a sense of belonging to a group, people are much more likely to comply with your request. Gregory Walton has published a great study into this that you can read fully &lt;a href="http://mindsetscholarsnetwork.org/wp-content/uploads/2015/11/NewScienceofWisePsychologicalInterventions.pdf"&gt;here.&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Take this as an example. &lt;/p&gt;

&lt;p&gt;When asking someone &lt;em&gt;&lt;strong&gt;“How important is it to you to be a voter in tomorrow’s election?”&lt;/strong&gt; &lt;/em&gt;rather than&lt;em&gt;&lt;strong&gt;"How important is it to you to vote in tomorrow’s election?”&lt;/strong&gt;&lt;/em&gt; , this simple phrase change was said to have had contributed an 11% increase into whether participants would actually vote!&lt;/p&gt;

&lt;p&gt;So perhaps rather than asking,"&lt;strong&gt;Does anyone have any questions?&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt; Try, 
"&lt;strong&gt;Do you have a question" &lt;/strong&gt;or "&lt;strong&gt;What are your thoughts&lt;/strong&gt;"? Speaking directly to the the individuals in the group?&lt;/p&gt;


&lt;li&gt;This still might not work, Nobody likes asking the first question, so how about asking it yourself. Prepare a question, discussing something you have may have not covered fully to engage the audience, and make them less self-conscious about asking something that may be off topic.&lt;/li&gt;


&lt;li&gt;Smile, Breathe and Relax! The audience can read your mood, and as such will be more open to you if you are feeling confident yourself. Speak with passion and enthusiasm, and the audience will be enthused themselves.&lt;/li&gt;

&lt;p&gt; Let us spin a positive light on this, most of us aren't well versed in speaking to large groups of people. Whilst creating an interesting and engaging presentation is hard enough already, having to think about audience participation seems like an afterthought. Next time a presentation is looming, try using some of the tips noted above when preparing for your talk and see how this changes the engagement with that final question.&lt;/p&gt;

&lt;p&gt;I'd love to hear of any great tips you may have, or any other books you know of that go into this topic further. Here are a few great posts I've found online, whilst writing this. Remember, being witty funny and getting the audience on board will get you a long way! &lt;/p&gt;

&lt;p&gt;Just ask Steve!&lt;/p&gt;




&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3NYleDiQUzY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://speakingaboutpresenting.com/audience/presentation-question-time/"&gt;Speaking About Presenting - Question Time&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www2.le.ac.uk/offices/ld/resources/presentations/delivering-presentation"&gt;University of Leicester - Delivering an effective presentation. &lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="https://medium.com/trailhead/the-best-presentation-ever-4709060aa8b9"&gt;Medium - Best Presentation Ever Post&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;/p&gt;


</description>
      <category>career</category>
      <category>publicspeaking</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why being a good programmer barely requires programming at all.</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Tue, 19 Feb 2019 09:22:06 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/why-being-a-good-programmer-barely-requires-programming-at-all-3ngf</link>
      <guid>https://forem.com/chris_bertrand/why-being-a-good-programmer-barely-requires-programming-at-all-3ngf</guid>
      <description>&lt;p&gt;Yes, you read that right. To be a good programmer you don’t need to be good at programming. &lt;/p&gt;

&lt;p&gt;I hear what you’re thinking, that makes no sense! Well hold on a second, hear me out.&lt;/p&gt;

&lt;p&gt;When you think of a good programmer you know, what’s the first trait that springs to your mind? Determined, smart, approachable? Calm, Quiet, or conscientious? Maybe it’s something else, but I can bet it wasn’t… a really good programmer. Why is that?&lt;/p&gt;

&lt;p&gt;Programmers require lots of skills in their day to day jobs. The discipline no longer consists of sitting in a dark basement on your own thrashing out some code. In fact interpersonal skills are some of the most important a good programmer can have. Agile methodologies require lots of communication between different departments and individuals. You’ll be required to check in at least once a day, be available for planning, refinement, retros; constantly communicating about struggles, improvements and things that are going well.&lt;/p&gt;

&lt;p&gt;The old days of getting your tasks and specifications up front, and being left to your own devices is long gone. You’ll probably be in contact with your users, asked difficult questions about your progress, and required to feed information back to your product owner/manager.&lt;/p&gt;

&lt;p&gt;You’ll need to talk through your design with your superior and team as most likely you won’t be working on this on your own. Testers will be asking for updates, questioning whether your unit tests are credible and sufficient, your issue tracker will need to be constantly updated keeping discussions available for all to see.&lt;/p&gt;

&lt;p&gt;You actually might be better off with a psychology degree than a computer science one to understand how to deal with all these different people.&lt;/p&gt;

&lt;p&gt;So yeah, programming is gonna be needed at some point, but in general the stuff that 90% of us will be doing won’t require any revolutionary coding expertise.&lt;/p&gt;

&lt;p&gt;In most cases the reason a project will fail is because requirements were not properly discussed and refined, or teams did not communicate properly about what was required from them. Rarely will it be because you weren’t a good enough coder.&lt;/p&gt;

&lt;p&gt;Do you share the same views? Or do you think I'm talking nonsense, I'd love to hear your opinions below.&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Dev.to has implemented Series! Series are cool! Coding Concepts is now a series! Cool!</title>
      <dc:creator>Chris Bertrand</dc:creator>
      <pubDate>Wed, 16 Jan 2019 14:31:27 +0000</pubDate>
      <link>https://forem.com/chris_bertrand/devto-has-implemented-series-series-are-cool-coding-concepts-is-now-a-series-cool-5g9f</link>
      <guid>https://forem.com/chris_bertrand/devto-has-implemented-series-series-are-cool-coding-concepts-is-now-a-series-cool-5g9f</guid>
      <description>&lt;p&gt;Afternoon all, I'm Chris and I started the Coding Concepts Series, writing about programming topics which I find interesting.&lt;/p&gt;

&lt;p&gt;As Dev.to now officially support 'Series' I thought I'd celebrate with a combination post!&lt;/p&gt;

&lt;p&gt;I've linked to each individual post, but at the &lt;b&gt;top&lt;/b&gt; and &lt;b&gt;bottom&lt;/b&gt; of the article you will now find cool little &lt;b&gt;circles&lt;/b&gt; linking to each post within a series, hopefully there will be a way to style them soon!&lt;/p&gt;

&lt;h1&gt;How to create Series&lt;/h1&gt;

&lt;p&gt;If you were wondering how to create a Series, you need to add&lt;br&gt;
&lt;/p&gt;
&lt;pre&gt;series: [series name]&lt;/pre&gt; to the front-matter part of your blog post header.

&lt;p&gt;See the editor guide below for more details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/p/editor_guide"&gt;Ref: Editor Guide&lt;/a&gt; &lt;/p&gt;

&lt;h1&gt;Series Posts&lt;/h1&gt;


&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;A term called Cargo Cult Programming and it really struck a chord with me. Read more about it above.&lt;/p&gt;





&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Cyclomatic complexity I feel is a very valuable tool in a developer's arsenal, read more about it above.




&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Reflection, what is it? What does it do? How to use it? Read more about it here




&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Anonymous methods (The FAT ARROW =&amp;gt;)&lt;/p&gt;





&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Generics can be hard to grasp, that's why I started the series writing about what they were, read more about them above. 

&lt;p&gt;Thanks to everyone that's read, and commented on the series. I hope you've found it useful, I'll be looking at expanding the series with more posts this year, if there is anything you think would make a great post, let me know in the comments below.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>webdev</category>
      <category>series</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
