<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dan Silcox</title>
    <description>The latest articles on DEV Community by Dan Silcox (@dansilcox).</description>
    <link>https://dev.to/dansilcox</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%2F11914%2F232085bc-5708-4ac0-88be-019edf1341ee.png</url>
      <title>DEV Community: Dan Silcox</title>
      <link>https://dev.to/dansilcox</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dansilcox"/>
    <language>en</language>
    <item>
      <title>Sharing knowledge well</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Thu, 24 Oct 2024 10:48:16 +0000</pubDate>
      <link>https://dev.to/dansilcox/how-do-you-share-complicated-knowledge-well-44a4</link>
      <guid>https://dev.to/dansilcox/how-do-you-share-complicated-knowledge-well-44a4</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Over the years we all learn a lot of 'stuff' and some of it is more intricate than others. For many of the day to day things we may do at work, it is a good idea to automate them, or eliminate them by finding better solutions. Sometimes however, there are complex workflows that can't easily &lt;em&gt;be&lt;/em&gt; automated, or where the return on investment just doesn't justify the work to do so.&lt;/p&gt;

&lt;p&gt;At the same time, we all know how risky it can be for the individual and for the business when there are &lt;a href="https://en.wikipedia.org/wiki/Single_point_of_failure" rel="noopener noreferrer"&gt;SPOFs&lt;/a&gt; controlling or even hoarding knowledge, whether they do so intentionally or not.&lt;/p&gt;

&lt;p&gt;So in those cases, how can we ensure that the person with the complex workflow knowledge (including the 'why', not just the 'what') is not the &lt;em&gt;only&lt;/em&gt; person that can handle that task?&lt;/p&gt;

&lt;p&gt;This is as much a discussion topic as anything, but I'll put &lt;em&gt;an&lt;/em&gt; answer below, albeit an incomplete one...&lt;/p&gt;

&lt;h2&gt;
  
  
  Be a billboard, not a vault
&lt;/h2&gt;

&lt;p&gt;It may be a bit of a cheesy expression, but I feel that title encapsulates the thought behind what I'm trying to say quite well.&lt;/p&gt;

&lt;p&gt;In my experience, from the 'knowledge holder' perspective it can be difficult to let go at times, especially if you feel that others might not do the job "properly". But the best thing to do is trust your colleagues and let go. In most cases people will surprise you in the best way.&lt;/p&gt;

&lt;p&gt;I've had situations where I've held onto certain processes myself for far too long, only to find that when I &lt;em&gt;do&lt;/em&gt; hand them over, the other people actually do them far &lt;em&gt;better&lt;/em&gt; than I did and often think of things from different angles, ultimately improving the overall workflow.&lt;/p&gt;

&lt;p&gt;For example, I recently had a task to analyse a graph of metrics for the past 24 hours, to ensure the system health was at baseline and we had not missed any alerts. When I looked at it, I sort of mentally compared it to previous baselines and made a judgement call that it "looked about right".&lt;/p&gt;

&lt;p&gt;Someone new to the process did the same task the next day, and noticed that the graph was showing 'average' rather than 'maximum' for one of the metrics, meaning we were not getting a true reflection of the metric in the context we needed (CPU usage I think it was). Their fresh eyes unlocked a really important insight, much the way a code review uncovers bugs or flaws in 'perfectly fine' code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t wait, initiate
&lt;/h2&gt;

&lt;p&gt;From the other perspective, i.e. "the team member who doesn't have the knowledge but should", I have found that most people are only too &lt;em&gt;happy&lt;/em&gt; to share their workload, especially when it's for tedious work that needs doing, but nobody really wants to do!&lt;/p&gt;

&lt;p&gt;In cases where the knowledge holder does &lt;em&gt;not&lt;/em&gt; want to share this knowledge, they normally accept that they &lt;em&gt;should&lt;/em&gt; be doing so, and can normally be persuaded to do so, even if slightly begrudgingly. This is normally something that business leaders would be in favour of doing anyway, so if necessary can be escalated (though obviously tread lightly as this can be damaging to team relationships if not handled with care).&lt;/p&gt;

&lt;h2&gt;
  
  
  Team leaders: consistency is key
&lt;/h2&gt;

&lt;p&gt;In leadership roles it is often one's job to make sure the team have no single points of failure or, at least that these are minimised with some form of backup strategy. One of the tenets of modern agile teams is the concept of &lt;a href="https://letslearnabout.net/blog/what-it-is-a-t-shaped-developer-and-why-you-should-be-one/" rel="noopener noreferrer"&gt;T shaped&lt;/a&gt; developers, and cross-functional teams in general. This does &lt;em&gt;not&lt;/em&gt; mean that every single person must be fully equipped and trained to do every single job; that can very quickly become unmanageable and counter-productive.&lt;/p&gt;

&lt;p&gt;It &lt;em&gt;does&lt;/em&gt; however mean that there should be a certain baseline knowledge level of all the different aspects of a team, e.g. most or all team members being able to do the basic support tasks required of the team, with maybe one or two team members taking the lead in that area, driving improvements such as automation, or otherwise streamlining processes.&lt;/p&gt;

&lt;p&gt;This is why knowledge sharing is so vital to a high-performing team, since without it, &lt;a href="https://ideascale.com/blog/silo-mentality-definition/" rel="noopener noreferrer"&gt;silos&lt;/a&gt; can very quickly develop and lead to a multitude of pain for the team and the rest of the business, and ultimately, the customers and end users.&lt;/p&gt;

&lt;p&gt;The biggest challenge with knowledge sharing is making sure there is &lt;em&gt;consistency&lt;/em&gt; in approach, in terms of the actual steps taken as well as the quality / detail level applied.&lt;/p&gt;

&lt;p&gt;As a leader it can be tough to encourage or enforce standards like this, but this consistency is key to a healthy and high performing team, so should be valued very highly at all levels.&lt;/p&gt;

&lt;p&gt;I have been in teams before where if team member A performed a task it was pretty much guaranteed that there would be rework, build failures (normally because they 'forgot' to run QA locally), and compatibility issues when it came to deployments, but if team member B did the same task, it would have great test coverage, work flawlessly, and be forwards &lt;em&gt;and&lt;/em&gt; backwards compatible, and even have documentation for how it works (which of course team member A "didn't have time" to do).&lt;/p&gt;

&lt;p&gt;The team themselves should be enforcers of their own standards, whether that's during code reviews, passing tickets back to individuals who 'forgot to run QA', or whatever else. Generally, the person in question will start to improve their habits just to avoid the social stigma and rework!&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This has turned into a bit of a ramble, so here's the short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As a knowledge holder, be open and honest and willing to share your knowledge as it not only helps the team, it actually helps you!&lt;/li&gt;
&lt;li&gt;As a team member or knowledge 'seeker', offer help and most people will bite your hand off for it!&lt;/li&gt;
&lt;li&gt;As a team lead, when encouraging knowledge sharing, ensure consistency is key and try and get the team to enforce this themselves; if it's 'top down' driven, it won't be nearly as effective as if it's peer-to-peer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Over to you
&lt;/h2&gt;

&lt;p&gt;Are you a developer, tech lead or in another relevant technical role? What are your thoughts on this topic? I'd love to hear some good tips for knowledge sharing both from the 'sharer' and 'sharee' perspectives, as well as from a leadership standpoint.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>growth</category>
      <category>development</category>
    </item>
    <item>
      <title>Starting something new</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Thu, 05 Sep 2024 22:24:10 +0000</pubDate>
      <link>https://dev.to/dansilcox/starting-something-new-5ahh</link>
      <guid>https://dev.to/dansilcox/starting-something-new-5ahh</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;I have had quite a varied career in and around tech over the last 10 years or so, working on varied tech stacks in many very different companies in terms of size, structure and even budget, as well as doing a stint of freelancing.&lt;/p&gt;

&lt;p&gt;In the hopes of it being helpful to people earlier in their career, or looking to advance to the next level, but without sacrificing a whole lot of their 'life' outside of work, I've decided to share some of my stories, knowledge and the things I've learned over that time in the hopes of helping others to learn from my mistakes and avoid making them for themselves! I don't presume to be an absolute expert but I definitely have some things to say that could be interesting, useful, or preferably both!&lt;/p&gt;

&lt;p&gt;This post is essentially just a vague high-level introduction to what I'm hoping to make into a bit of a series, so I won't go into loads of detail here, suffice it to say my goals for this emerging project (or whatever this is) are, in broad terms, as follows:&lt;/p&gt;

&lt;h3&gt;
  
  
  Pass it on
&lt;/h3&gt;

&lt;p&gt;Over the years I've had the privilege of learning from many smart people, and doing some cool things. I want to share some of that acquired knowledge and wisdom in the hopes of elevating others and providing something of a platform for them to build upon in their own growth journey.&lt;/p&gt;

&lt;h3&gt;
  
  
  Be a human first
&lt;/h3&gt;

&lt;p&gt;There's a lot more to being a good developer than the code we write, whether it's the interactions with other people, our mindsets around the work we're doing, or even our own physical and mental health.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build in public
&lt;/h3&gt;

&lt;p&gt;This post itself is an example of this. I don't really know what this project is yet, but by posting this, hopefully it'll inspire me to keep going and develop it into... something?!&lt;/p&gt;

&lt;h3&gt;
  
  
  What's next?
&lt;/h3&gt;

&lt;p&gt;To be perfectly honest I'm not quite sure yet. But I'm aiming to share more details, possibly in video form, at some point in the next few weeks.&lt;/p&gt;

&lt;p&gt;If this idea resonates with you make sure you follow me here on &lt;code&gt;dev.to&lt;/code&gt; for whatever's coming next!&lt;/p&gt;

</description>
      <category>career</category>
      <category>growth</category>
      <category>development</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Performance optimisation - a brief overview</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Mon, 21 Dec 2020 16:40:30 +0000</pubDate>
      <link>https://dev.to/dansilcox/performance-optimisation-a-brief-overview-2cb3</link>
      <guid>https://dev.to/dansilcox/performance-optimisation-a-brief-overview-2cb3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Earlier in the week I was chatting with a colleague about the HUGE topic of performance optimisation and what can be done to get the most &lt;a href="https://www.merriam-webster.com/dictionary/throughput" rel="noopener noreferrer"&gt;throughput&lt;/a&gt; from a system in the most efficient way. I thought there were some interesting points in our discussion and so decided to turn it into a post.&lt;/p&gt;

&lt;p&gt;The first thing to mention is that I am not specifically a performance engineer, so there almost certainly will be things I've missed or misunderstood. Also, this whole concept can take &lt;em&gt;years&lt;/em&gt; to perfect and with the ever-changing tech landscape, there are always new ways to screw up performance, or to improve it.&lt;/p&gt;

&lt;p&gt;However I believe that the approaches mentioned will help scalability and/or performance in most contexts, tech stacks and environments, so with that said, let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the basics right first
&lt;/h2&gt;

&lt;p&gt;There are a few key things that I believe will make almost any software perform faster and more efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Only do work which must be done
&lt;/h3&gt;

&lt;p&gt;The first step when optimising is to eliminate altogether anything which you don't &lt;em&gt;need&lt;/em&gt; to do - this is sometimes clear cut (e.g. removing a block of old code that has become redundant) and sometimes less so (e.g. knowing what level of logging to output in which environment)&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimise what has to be handled at run-time
&lt;/h3&gt;

&lt;p&gt;When I say run-time I'm not just referring to runtime as opposed to build time, I simply mean the time during which your customer/app user/consumer is waiting for the app to do what it needs to do. This could mean outsourcing background operations to a separate background worker, parallelising API calls where possible, pre-warming caches or any other number of things to prevent users waiting for things to complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Watch your loops
&lt;/h3&gt;

&lt;p&gt;By definition, anything inside the code block of a loop will almost definitely be run multiple times, so you need to be aware of what steps that loop is doing and what they are likely to cost (in terms of CPU calculation, memory usage, time, etc - as opposed to direct financial cost). Generally, loop-based optimisations can be expressed with &lt;a href="https://medium.com/@stalonadsl948/big-o-notation-for-dummies-999a7e3fa1ec" rel="noopener noreferrer"&gt;big O notation&lt;/a&gt; - in simple terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;O(1)&lt;/em&gt; means whether there are 5000 items or 1 item in the collection you're looping through, it will take the same amount of time&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;O(N)&lt;/em&gt; means the time is directly proportional to the number of items, e.g. the loop will take 5000x longer if there are 5000 items than if there is 1 item&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;O(N^2)&lt;/em&gt; means the loop will take the &lt;em&gt;square&lt;/em&gt; of the number of items to run (in relative terms) - so if looping through 5000 items, 
it will take &lt;em&gt;25,000,000 times&lt;/em&gt; longer than 1 item!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where possible, minimise putting "expensive" things like database queries or API calls in a loop if you can; perhaps the API supports batch requests, or perhaps you can convert your many similar &lt;code&gt;where ID = ?&lt;/code&gt; queries into a single &lt;code&gt;where ID IN (...)&lt;/code&gt; query.&lt;/p&gt;

&lt;p&gt;Nested loops also have a reputation for being particularly nasty if you're not careful. The number of "nestings" are effectively the power by which we multiply &lt;code&gt;N&lt;/code&gt; in our "big O" function - e.g a single loop nested in another loop (2 layers) is &lt;code&gt;O(N^2)&lt;/code&gt; whereas 3 layers is &lt;code&gt;O(N^3)&lt;/code&gt; and so on. That's what I mean when I say they are "particularly nasty"!&lt;/p&gt;

&lt;h3&gt;
  
  
  Cache me where you can!
&lt;/h3&gt;

&lt;p&gt;Wherever appropriate, consider caching data, to avoid further "downstream" calls - bear in mind that cache invalidation is one of the &lt;a href="https://www.martinfowler.com/bliki/TwoHardThings.html" rel="noopener noreferrer"&gt;hardest things in computer science&lt;/a&gt;, so you need to be ready to manage that increase in complexity if you add caching to your application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test, test test!
&lt;/h3&gt;

&lt;p&gt;There is no silver bullet, or magic way to improve performance - so you have to validate every change you make to ensure it has, you know, improved performance...&lt;/p&gt;

&lt;p&gt;Start with a base line, no matter how bad it may be - and then re-run the exact same test after each change to see if things have improved - if they have, great! If not, you can go back and try something else...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Important note&lt;/em&gt; - you cannot simply test the response times and throughput - you have to actually validate that the app still does what you think it does! e.g. I did some performance tests once where the response time literally went from 200ms to about 30ms and I was over the moon - until I realised that for some reason it had started returning 500 errors which was why it was so much faster!&lt;/p&gt;

&lt;h2&gt;
  
  
  Architectural perspective
&lt;/h2&gt;

&lt;p&gt;It's not only at the actual code level that optimisations can be made - also look at your architecture. Should you be looking to &lt;a href="https://www.techopedia.com/7/31151/technology-trends/what-is-the-difference-between-scale-out-versus-scale-up-architecture-applications-etc" rel="noopener noreferrer"&gt;scale up or out&lt;/a&gt;? &lt;/p&gt;

&lt;p&gt;Could you split out some functionality into a separate service and focus your scaling on sub-components rather than blanket-scaling the whole app? &lt;/p&gt;

&lt;p&gt;Would it even make sense to rewrite your code in another tech stack for your context? Rarely is the answer to this last one "yes" - but occasionally you might want to prioritise a certain attribute of a language (e.g. a faster "cold start" from, say, Node.JS vs .NET Core for an infrequently used but time-critical AWS Lambda function, or better async support for parallel background API calls from Go, vs PHP).&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability
&lt;/h2&gt;

&lt;p&gt;It should be noted that there's a difference between performance and scalability, though they are inextricably linked. &lt;a href="https://12factor.net/" rel="noopener noreferrer"&gt;12 Factor&lt;/a&gt; has some great tips for highly scalable web applications and many (though of course not all are relevant) of the approaches can be tailored to "non-web" apps too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I hope this has been useful, of course it's really only scratching the surface and there are countless other more specific / detailed approaches that can be used.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Is there something in particular that stood out to you? Or is there something you feel I've missed? Why not share it in the comments, let's have a discussion and I'm sure we can all learn something!&lt;/em&gt; &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>performance</category>
    </item>
    <item>
      <title>Delivering a great demo</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Fri, 11 Dec 2020 16:08:22 +0000</pubDate>
      <link>https://dev.to/dansilcox/delivering-a-great-demo-19e5</link>
      <guid>https://dev.to/dansilcox/delivering-a-great-demo-19e5</guid>
      <description>&lt;p&gt;I've been delivering demos and presentations for about 10 years in various forms, to different types of audiences and over that time I've made a lot of mistakes, had a lot of things go wrong and also had a lot of positive experiences. I thought it might be useful to some who have maybe never done demos or only done a handful, for me to share some of my learning over that time to save you the pain of learning those things "the hard way"!&lt;/p&gt;

&lt;p&gt;In my experience there are two main things that lead to a great demo:&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Know your audience
&lt;/h3&gt;

&lt;p&gt;If you are delivering to a bunch of developers, that will need to be a very different type of demo than if it's aimed at, say, the marketing department or other less-techy stakeholders and it's absolutely &lt;em&gt;vital&lt;/em&gt; that you target your audience in terms of the presentation, even if the underlying content is (mostly) the same.&lt;/p&gt;

&lt;p&gt;For example, if you've built some tool, for developers you can mention the tech stack, the methodologies/design patterns/tooling, etc etc - but for marketing you can just talk about the functionality and not really go too much into the "magic" that makes it all work.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Prepare before-hand!
&lt;/h3&gt;

&lt;p&gt;It sounds obvious and we've all heard of the "&lt;a href="https://esub.com/blog/5-ps/" rel="noopener noreferrer"&gt;5 Ps&lt;/a&gt;", etc! However I still see people doing demos with little to no prep wondering why it was not well received or why they felt stressed delivering it! Some top tips learned the hard way from my experiences in the past:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consider pre-recording the demo, at the very least as a backup, especially if you're reliant on external factors or shared environments - I've been caught out by changes made by someone else causing my demo to fail in the past and it's frustrating and embarrassing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whether pre-recorded or live, run through the demo out loud at least twice (or as many times as it takes to feel confident and comfortable delivering it) before-hand. You might think you can just "wing it" - and you can - but it will be obvious to the audience who was "winging it" and who prepared before-hand, trust me! Note that by default I'm a "winger" and it's taken me a long time to learn that you end up with a better result &lt;em&gt;out&lt;/em&gt; if you put more effort &lt;em&gt;in&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you make notes, keep them as brief bullet points / prompts, rather than reading something word-for-word - also, if you miss a section during the presentation, just move on - don't panic about going back and covering all the different parts. Again, I tend to start rambling when I'm writing notes, but I've found that by having shorter notes, I actually remember &lt;em&gt;more&lt;/em&gt; and deliver a better presentation. I still try and make sure to write a &lt;em&gt;few&lt;/em&gt; prompts though, so that I don't miss key information.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3 - Stay calm!
&lt;/h3&gt;

&lt;p&gt;During the presentation itself, your heart might be racing and you might be rushing and panicking, but make a point of taking a deep breath and &lt;em&gt;enjoying&lt;/em&gt; the process! By taking a breath, you buy yourself a little bit of time to think ahead.&lt;/p&gt;

&lt;p&gt;Even if something goes wrong, most of the time people have either been there, or are patient/kind enough to accept that sometimes things happen! A product owner in one of my previous roles used to say "uh oh, someone forgot to sacrifice to the demo gods!" which helps lighten the mood and remove some of the stress and also divert the focus temporarily while you get the app working (or not!). Whatever happens, most of the time it really is not going to be the end of the world - just talk through what &lt;em&gt;should&lt;/em&gt; have happened or show a screenshot/recording of it happening previously, if you have that option! I think that about sums up the key points, though there are no doubt countless other things to consider. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you've got some thoughts on things I've missed, some funny horror stories or successes, or even some recorded demos you'd like to share, why not post them in the comments?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tips</category>
    </item>
    <item>
      <title>PHP 8 Released! What are your favourite features?</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Fri, 27 Nov 2020 16:50:19 +0000</pubDate>
      <link>https://dev.to/dansilcox/php-8-released-what-are-your-favourite-features-1a4l</link>
      <guid>https://dev.to/dansilcox/php-8-released-what-are-your-favourite-features-1a4l</guid>
      <description>&lt;p&gt;PHP 8.0 has &lt;a href="https://www.php.net/releases/8.0/en.php" rel="noopener noreferrer"&gt;finally been released&lt;/a&gt; and as a long-time PHP developer (among other things) I'm excited to see PHP maturing and getting some really great improvements. It gets a lot of stick and like any language it has its limitations and annoyances, but it's great for some things and these just make it far better than PHP 7.x (which was already 100x better than PHP 5.x!).&lt;/p&gt;

&lt;p&gt;What are your favourite features to the new version? Will you be migrating your production PHP apps to PHP 8.0 straight away or hold off for a bit?&lt;/p&gt;

&lt;p&gt;Here are a few of my favourites, in no particular order:&lt;/p&gt;

&lt;h4&gt;
  
  
  Constructor property promotion
&lt;/h4&gt;

&lt;p&gt;Languages like TypeScript already have this and developers can save loads of time when writing value objects, entities, DTOs, etc:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PHP 7.3&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/** @var string */&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$thing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="cd"&gt;/** @var int */&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$otherThing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @param string $thing
     * @param int $otherThing
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$thing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$otherThing&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;thing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$thing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;otherThing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$otherThing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;PHP 8.0&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$thing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$otherThing&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Attributes
&lt;/h4&gt;

&lt;p&gt;At last, we can get away from comments that can break applications!&lt;/p&gt;

&lt;p&gt;I realise that syntactically they don't look that different to annotations, but attributes are an actual language feature, not a reflection hack. In C# you can use attributes for everything from input filter validation to Open API definitions and I can see much the same thing happening in the PHP ecosystem over time. It just relies on the major frameworks adopting these rather than the &lt;a href="https://r.je/php-annotations-are-an-abomination" rel="noopener noreferrer"&gt;abominations of annotations&lt;/a&gt;!&lt;/p&gt;

&lt;h4&gt;
  
  
  The JIT
&lt;/h4&gt;

&lt;p&gt;This will not make a lot of difference for many web apps, blogs, etc, but for backend long-running scripts, CPU intensive operations, etc, this will be a game changer. The graph on the PHP 8 release page shows some examples of how much difference it can make:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F93a9sd5kjlbic5y1mp2v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F93a9sd5kjlbic5y1mp2v.png" alt="PHP 8 JIT benchmarking" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are so many more features I've not mentioned simply because of time. I'd love to see in the comments what everyone else is looking forward to and also whether you've already been using the beta/RC versions or are going to upgrade to PHP 8 ASAP.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>php</category>
    </item>
    <item>
      <title>My year in dev</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Fri, 13 Dec 2019 15:08:54 +0000</pubDate>
      <link>https://dev.to/dansilcox/my-year-in-dev-dkg</link>
      <guid>https://dev.to/dansilcox/my-year-in-dev-dkg</guid>
      <description>&lt;p&gt;I came across this awesome tool on &lt;a href="https://dev.to/maurogarcia_19/my-2019-in-dev-2b96"&gt;this post&lt;/a&gt; and thought it would be nice to share my stats :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://year-in-dev.cephhi.com/stats/dansilcox" rel="noopener noreferrer"&gt;My year on dev.to&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why not have a go yourself!&lt;/p&gt;

</description>
      <category>myyearindev</category>
    </item>
    <item>
      <title>PHP - 'dump' those debug statements!</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Mon, 25 Nov 2019 15:59:03 +0000</pubDate>
      <link>https://dev.to/dansilcox/php-dump-those-debug-statements-482</link>
      <guid>https://dev.to/dansilcox/php-dump-those-debug-statements-482</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;We have all been there - for whatever reason your debugger is not working (or you're being lazy) so you decide to use &lt;code&gt;var_dump('here');exit;&lt;/code&gt; or something similar during development to work out what is going on with your code.&lt;/p&gt;

&lt;p&gt;You finally fix the issue, commit your code and push it up and then the code reviewer fails it because of your &lt;code&gt;var_dump()&lt;/code&gt; being left in. Or worse - they miss it and suddenly strange messages (like "got here") start appearing on your test environment!&lt;/p&gt;

&lt;p&gt;Then, having already wasted the time of your code reviewer and potentially other colleagues, you have to waste your own time and energy removing it and updating your PR. If only there was something you could do to prevent this...&lt;/p&gt;

&lt;p&gt;Good news, there is!&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't use var_dump!
&lt;/h2&gt;

&lt;p&gt;The best thing you can do is &lt;em&gt;avoid using &lt;code&gt;var_dump()&lt;/code&gt; at all&lt;/em&gt;. If you're using TDD and/or BDD you likely will &lt;em&gt;very rarely&lt;/em&gt; need any sort of debugging. In any case you should get your debugger working just in case. But this is beyond the scope of this article...&lt;/p&gt;

&lt;h2&gt;
  
  
  Let your IDE spot your var_dump for you
&lt;/h2&gt;

&lt;p&gt;If you're a PHP developer, you may well using PHPStorm or another Jetbrains IDE - so get the &lt;a href="https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-" rel="noopener noreferrer"&gt;PHP Inspections&lt;/a&gt; plugin and you will make your life &lt;em&gt;waaay&lt;/em&gt; easier! It also has an inspection built in that underlines any &lt;code&gt;var_dump()&lt;/code&gt; calls in red and gives you a nice warning message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a pre-commit hook to save you from yourself
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What's a git hook?
&lt;/h3&gt;

&lt;p&gt;The concept of git hooks is explained &lt;a href="https://duckduckgo.com/?q=git+hooks&amp;amp;atb=v184-1&amp;amp;ia=web" rel="noopener noreferrer"&gt;elsewhere&lt;/a&gt; but basically it's an event-based script runner. So you can tell git to run a particular shell script when a particular thing happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  The code
&lt;/h3&gt;

&lt;p&gt;In this case "pre-commit" means "before a commit is saved" and the script that can be run is one that I use for my PHP projects. The part of code in particular that checks for &lt;code&gt;var_dump()&lt;/code&gt;s is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Prevent committing of "var_dump"s in code
VAR=$(git diff --cached | grep -w "var_dump")
if [ ! -z "$VAR" ]; then
  echo "Detected a var_dump in one of your files. Aborting commit"
  echo "$VAR"
  exit 1
fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can download the full pre-commit hook from &lt;a href="https://github.com/dansilcox/php-pre-commit-hook" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  'Hooking' it up...
&lt;/h3&gt;

&lt;p&gt;By default, git hooks are run from inside the &lt;code&gt;.git/hooks&lt;/code&gt; directory - but you can't actually &lt;em&gt;commit&lt;/em&gt; them to your repository from there. This is why I prefer to add them in a custom folder and tell Git where they live...&lt;/p&gt;

&lt;p&gt;To add this (or any other hook) to your repository, you need to add the file itself and ensure it's executable, then tell git about the file (where it exists, and that it should run it):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a folder inside your git repository called &lt;code&gt;bin/git-hooks&lt;/code&gt; (or whatever you want to call it). &lt;/li&gt;
&lt;li&gt;Add your file to that folder (named &lt;code&gt;pre-commit&lt;/code&gt; - no extension)&lt;/li&gt;
&lt;li&gt;Ensure your file is in executable mode (run &lt;code&gt;chmod +x&lt;/code&gt; on your file)&lt;/li&gt;
&lt;li&gt;Edit your git repository's configuration file: &lt;code&gt;git config -e&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;core.hooksPath&lt;/code&gt; to &lt;code&gt;./bin/git-hooks/&lt;/code&gt; - like the following (there may be other keys/values in there of course...)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[core]
    hooksPath = ./bin/git-hooks/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's about it!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What about you? Got some other really cool git hooks you're using? Why not share them in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>git</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>8 tips for breaking down language barriers</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Wed, 23 Oct 2019 21:18:52 +0000</pubDate>
      <link>https://dev.to/dansilcox/8-tips-for-breaking-down-language-barriers-1p7h</link>
      <guid>https://dev.to/dansilcox/8-tips-for-breaking-down-language-barriers-1p7h</guid>
      <description>&lt;p&gt;This simple guide is designed to help those for whom English is a first language to communicate clearly and inclusively with those who have learned it as an additional language.&lt;/p&gt;

&lt;p&gt;It is not intended to be patronising or demeaning - quite the opposite in fact, I have a huge level of respect for multi lingual people - in terms of human languages (as opposed to programming languages!) I only speak English, apart from a little bit of French from school, so big thumbs up to all you multi-linguists!&lt;/p&gt;

&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; intended to help us single-linguists to avoid getting carried away and unintentionally excluding those who might find English less familiar and therefore not as easy to follow.&lt;/p&gt;

&lt;p&gt;1) Keep to short sentences where possible &lt;br&gt;
2) Speak more slowly and clearly than you normally would - don’t mumble or rush words, pronounce consonants clearly (avoid ‘&lt;a href="https://youtu.be/_4MJUi03GHM" rel="noopener noreferrer"&gt;glottal stops&lt;/a&gt;’ for example - skip to about 1 min)&lt;br&gt;
3) Avoid slang/expressions/idioms - or be ready to explain them and laugh with your colleagues about how crazy they sound when you really think about them!&lt;br&gt;
4) In technical topics, using well known terms, such as design patterns, as opposed to your own custom names for things, can help your colleagues as they quite likely learnt at least some of this &lt;a href="https://dev.to/damcosset/what-makes-you-choose-the-language-you-write-your-articles-in-2jfi"&gt;in English&lt;/a&gt; (see the comments on this article for anecdotal evidence)&lt;br&gt;
5) Use non verbal communication to supplement your words where possible - hands, facial expressions, tone, etc - but not excessively to the point of embarrassingly waving your arms around!&lt;br&gt;
6) Listen carefully to your colleagues when they speak to you&lt;br&gt;
7) Respect each other’s time zones! Don’t book all your conference calls/ meetings during their lunch break (food is a priority in &lt;em&gt;any&lt;/em&gt; language!!)&lt;br&gt;
8) DO NOT correct or patronise them!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Over to you:&lt;/em&gt; multi-linguists, can you think of any other points that might help you to feel more included in English discussions on technical topics? English-as-first-language-ists - any other tips you can add from experience?&lt;/p&gt;

&lt;p&gt;Let’s all help each other to break down those barriers that exist in tech at the human level, which tech has solved in a practical sense!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>communication</category>
    </item>
    <item>
      <title>Making positive decisions</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Mon, 30 Sep 2019 15:27:47 +0000</pubDate>
      <link>https://dev.to/dansilcox/making-positive-decisions-1mop</link>
      <guid>https://dev.to/dansilcox/making-positive-decisions-1mop</guid>
      <description>&lt;p&gt;Do you ever suffer from Analysis Paralysis? Whether it's on big life decisions like whether to take a particular job, or on the smaller things like what to have for dinner, it can be really frustrating to yourself and to others dependent on your decision when you are seemingly stuck in this loop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If I do X then A B C could happen, but wait... if I do Y then D E F could happen which is just as bad... So I should do X... but wait then A B C could happen..." (...forever...)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A friend once described the solution to this with the following analogy which I'm going to shamelessly copy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's easier to steer a moving car&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I really like this analogy because it's so true - have you ever tried to 'dry-steer' your car? It's way more difficult to turn those wheels, and damaging to the tyres potentially, compared with just heading in a direction and adjusting course on the way.&lt;/p&gt;

&lt;p&gt;Once you make &lt;em&gt;a&lt;/em&gt; decision to move forward, it's inherently a positive decision - you are &lt;em&gt;moving forward&lt;/em&gt;! You're not going backwards or standing still - and you will either &lt;em&gt;win&lt;/em&gt; (i.e. you made the 'right' decision) or you will &lt;em&gt;learn&lt;/em&gt; from whatever decision you took. But at least you made a decision!&lt;/p&gt;

&lt;p&gt;Now don't get me wrong - analysis &lt;em&gt;itself&lt;/em&gt; is actually a &lt;em&gt;good&lt;/em&gt; thing - jumping head first into a decision (big ones at least) can be catastrophic without knowing the context, the facts surrounding the decision, the impacts of your choice on your life and others' lives, etc. I'm by no means saying &lt;em&gt;skip&lt;/em&gt; that step. I'm simply saying that once you've scoped out the impact of, say two options that are more or less equally weighted, that is - two options that are basically both OK, but neither is perfect or an out-and-out choice, &lt;em&gt;just pick one&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Most of the time, you can change your mind later anyway.&lt;/p&gt;

&lt;p&gt;Have confidence in your own decision making - for sure, do your analysis - don't go in blind. But once you've got some basis for a decision, &lt;em&gt;just make one&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;One practical tip that I've learnt is to use 'pseudo-chance' to help others make these kinds of decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign 'heads' to one decision and 'tails' to the other, and flip a coin&lt;/li&gt;
&lt;li&gt;When they see what the coin is telling them to do, if they're subconsciously leaning in the &lt;em&gt;same&lt;/em&gt; direction as the coin, or genuinely have no particular preference either way, they will just go with it&lt;/li&gt;
&lt;li&gt;If however they are subconsciously leaning in the &lt;em&gt;opposite&lt;/em&gt; direction, this will likely become clear and they'll deviate from the coin's 'decision'&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Can you relate to this? Or do you have any other tips to help those who can? Why not provide them in the comments below?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>life</category>
      <category>shipit</category>
    </item>
    <item>
      <title>The joys and perils of working remotely</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Wed, 11 Sep 2019 09:42:38 +0000</pubDate>
      <link>https://dev.to/dansilcox/the-joys-and-perils-of-working-remotely-3aeg</link>
      <guid>https://dev.to/dansilcox/the-joys-and-perils-of-working-remotely-3aeg</guid>
      <description>&lt;p&gt;For the past two years or so, I have been a part of a team spread across three timezones, representing at least eight different cultures. In one sense this sounds like a disaster already! However, we have made it work remarkably well and I feel like it has been a great success - though not without its challenges.&lt;/p&gt;

&lt;p&gt;In this post, I want to talk through some of the successes and struggles, reflecting on what went well and what could have been done better, in the hopes that others will be able to celebrate the joys with me and learn from the perils in order to avoid facing them first-hand. So, without further ado, here we go!&lt;/p&gt;

&lt;h2&gt;
  
  
  Joys
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Despite the distance, we really do gel as a team and have a real laugh - I have definitely made some life-long friends through the experience&lt;/li&gt;
&lt;li&gt;We work well together and are able to ship great software&lt;/li&gt;
&lt;li&gt;We learn a lot from each other, in terms of technology and in terms of culture, personality, etc&lt;/li&gt;
&lt;li&gt;Personally, I am often way more productive from home - without the distractions of an open plan office&lt;/li&gt;
&lt;li&gt;No commuting!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Perils
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Communication is just &lt;em&gt;never&lt;/em&gt; as good when it's not face to face - instant chat and even video calling are great tools, but are only ever going to be "next-best-things" to good old fashioned talking to each other face to face&lt;/li&gt;
&lt;li&gt;Colleagues being "away" on chat when you are desperate for help is &lt;em&gt;really&lt;/em&gt; frustrating!&lt;/li&gt;
&lt;li&gt;Feeling disconnected from the office goings-on, whether it’s work things or the ‘watercooler’ chat!&lt;/li&gt;
&lt;li&gt;Not being able to get hold of &lt;em&gt;anyone&lt;/em&gt; - for example if they’re all in a location-based meeting and unavailable on chat...&lt;/li&gt;
&lt;li&gt;Things like VPN issues can be absolutely disastrous for productivity, especially when paired with the point above about not being able to get hold of people!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I totally understand and agree with the productivity gurus saying you should turn off &lt;em&gt;all&lt;/em&gt; notifications and "make your apps work for you" rather than the other way around. The downside is that it can, for your remote colleagues, make it very difficult to contact you and can actually leave them feeling disconnected and under appreciated.&lt;/p&gt;

&lt;p&gt;Overall, I would still say that remote working &lt;em&gt;does&lt;/em&gt; work, but you and your team have to all &lt;em&gt;want&lt;/em&gt; it to work and commit to being available, building rapport beyond boring work interactions, and ultimately treating each other as humans and as equals.&lt;/p&gt;

&lt;p&gt;There are loads of other pros and cons that I can’t think of right now - why not suggest your own in the comments if you have similar experiences!&lt;/p&gt;

</description>
      <category>remote</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Do you find it difficult to unplug?</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Mon, 02 Sep 2019 11:58:44 +0000</pubDate>
      <link>https://dev.to/dansilcox/do-you-find-it-difficult-to-unplug-37gn</link>
      <guid>https://dev.to/dansilcox/do-you-find-it-difficult-to-unplug-37gn</guid>
      <description>&lt;p&gt;I have just come back from ten days in the lovely &lt;a href="https://www.google.com/maps/place/29650+Mijas,+M%C3%A1laga,+Spain/@36.5915597,-4.6544579,13.83z!" rel="noopener noreferrer"&gt;Mijas, Spain&lt;/a&gt; with family. It was amazing and really relaxing - great to get away from all the hustle and bustle of "normal" life for a bit.&lt;/p&gt;

&lt;p&gt;However I did find that it took me a good few days to fully "unplug" from thinking about work, whether it was a coding problem at the back of my mind, worrying that I'd miss important team changes or even just miss out on the Slack banter! This also made me realise that it actually impacts my weekends sometimes, this struggle to unplug. I have always tried to live in a balanced way whereby I "work to live" rather than "live to work" (though of course both are important and I always give my best while &lt;em&gt;at&lt;/em&gt; work).&lt;/p&gt;

&lt;p&gt;Does anyone else have this issue? How do you minimise it and stop it from spoiling your down time?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>If you were designing a programming language what would your favourite features be?</title>
      <dc:creator>Dan Silcox</dc:creator>
      <pubDate>Mon, 12 Aug 2019 09:30:49 +0000</pubDate>
      <link>https://dev.to/dansilcox/if-you-were-designing-a-programming-language-what-would-your-favourite-features-be-539p</link>
      <guid>https://dev.to/dansilcox/if-you-were-designing-a-programming-language-what-would-your-favourite-features-be-539p</guid>
      <description>&lt;p&gt;Having learnt a few different languages over the years I have a shortlist of my favourite features across different languages (&lt;em&gt;note&lt;/em&gt; I have included a few things that are not strictly language features, but are commonly used libraries that I think are just great!) - I will list my own thoughts below, but I thought it would also be a fun question to ask the community!&lt;/p&gt;

&lt;p&gt;So here's my list in no particular order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Generic_programming" rel="noopener noreferrer"&gt;Generics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;Arrow functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javascript.info/async-await" rel="noopener noreferrer"&gt;Async/Await&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/" rel="noopener noreferrer"&gt;LINQ queries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods" rel="noopener noreferrer"&gt;Extension methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/" rel="noopener noreferrer"&gt;Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Schema_migration" rel="noopener noreferrer"&gt;Database migrations&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What are your thoughts on these features? Would you include them if you were to write a language? What else would you add and why?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Edit: one that is really useful, some would say absolutely key, in modern web development, is native strong-typed JSON serialisation/unserialisation - ie being able to convert easily between object and JSON representation without having to manually map the internal fields, especially where nesting is involved. C# has a &lt;a href="https://www.newtonsoft.com/json/help/html/Overload_Newtonsoft_Json_JsonConvert_DeserializeObject.htm" rel="noopener noreferrer"&gt;great implementation&lt;/a&gt; utilising generics for the "to" object type when deserialising - the equivalent &lt;a href="https://www.newtonsoft.com/json/help/html/Overload_Newtonsoft_Json_JsonConvert_SerializeObject.htm" rel="noopener noreferrer"&gt;serialiser&lt;/a&gt; is pretty good too, with easy support for custom converters for things like string representations of enums, etc&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>random</category>
      <category>thoughts</category>
    </item>
  </channel>
</rss>
