<?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: Borja Lorente</title>
    <description>The latest articles on DEV Community by Borja Lorente (@blorente).</description>
    <link>https://dev.to/blorente</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%2F445641%2Fffab194c-4232-4ed5-94d1-e96d3053e2ef.png</url>
      <title>DEV Community: Borja Lorente</title>
      <link>https://dev.to/blorente</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blorente"/>
    <language>en</language>
    <item>
      <title>Fearless Code Review Checklist</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Wed, 26 Aug 2020 20:50:51 +0000</pubDate>
      <link>https://dev.to/blorente/fearless-code-review-checklist-nph</link>
      <guid>https://dev.to/blorente/fearless-code-review-checklist-nph</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This content was originally posted in my blog, &lt;a href="https://beyondtheloop.dev/3-programming-milestones-to-work-towards/" rel="noopener noreferrer"&gt;Beyond The Loop&lt;/a&gt;.&lt;br&gt;
If you like it, head over there or follow the blog on Twitter (&lt;a href="https://twitter.com/BeyondLoop" rel="noopener noreferrer"&gt;@BeyondLoop&lt;/a&gt;) for more!&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;This is a very long post, but it's worth reading! If you're in a hurry, I'll leave the condensed version of the list at the end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Code Review is a fundamental skill for engineers.&lt;/p&gt;

&lt;p&gt;Being able to read a set of changes and derive useful insights and constructive feedback will make you invaluable as a colleague. Plus, it will result in better code!&lt;/p&gt;

&lt;p&gt;However, it can be very intimidating at first. It's normal to see your first Pull Request and not even know where to begin.&lt;/p&gt;

&lt;p&gt;I had this problem when I first started, and so I did what's always worked for me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I asked my senior colleagues about their thought process&lt;/strong&gt;. How do &lt;em&gt;they&lt;/em&gt; approach code review? What do they look for? What questions do they ask?&lt;/p&gt;

&lt;p&gt;Taking all those answers into account, I compiled my own checklist. A series of questions I can use to guide my thoughts during a review.&lt;/p&gt;

&lt;p&gt;Having a defined, repeatable process helps me break down the process of reviewing into smaller chunks, making it a lot less overwhelming.&lt;/p&gt;

&lt;p&gt;This list has been invaluable for me over the years. I hope it will be valuable to you as well.&lt;/p&gt;
&lt;h1&gt;
  
  
  Step 1: Read the description
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Reviewing code is the act of finding out how well it solves a problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Before you jump into any code at all&lt;/strong&gt;, you need to have answers to some questions. It's important to do this before even reading the code because it's really easy to get lost in the nitty-gritty of code style and micro-optimization, forgetting to think about how these changes affect the big picture.&lt;/p&gt;

&lt;p&gt;In fact, most of the value of a code review will come from answering these questions, not from reading the code!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What problem is this change trying to solve?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a vital question. Every PR should solve one (and only one) problem.&lt;/p&gt;

&lt;p&gt;The problem could be "We need this feature, and it's missing", or "There is a bug, and we need to fix it".&lt;/p&gt;

&lt;p&gt;Reviewing a PR is the process of finding out how well it solves a problem. Therefore, a deep understanding of the problem is a vital first step.&lt;/p&gt;

&lt;p&gt;Make sure you understand the problem, how it manifests, and how it affects users.&lt;/p&gt;

&lt;p&gt;I've used the word "problem" a lot, but that's because it's important!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How would you solve this problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before learning how the author solved the problem, take a moment to think about how &lt;strong&gt;you&lt;/strong&gt; would solve it. &lt;/p&gt;

&lt;p&gt;It doesn't have to be a full solution, just the general idea of how it would look like. You'll be surprised at how quickly you can come up with the general structure for it!&lt;/p&gt;

&lt;p&gt;This is useful for two reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It will tell you whether you really understand the problem. If you can't come up with an idea of a solution, it's very likely that you're missing some context, and should find out more about the parts of the codebase involved with the change.&lt;/li&gt;
&lt;li&gt;Having a fresh set of ideas on the problem can lead to a completely different, better solution! If this is the case, that's great! Talk to the author, and discuss the new solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you have your idea for what a solution would look like, the next question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What solution did the author present in this change?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This should be clear from the title and description. Remember, we haven't even looked at the code yet. Make sure you understand (and agree with) the solution and all its pieces.&lt;/p&gt;

&lt;p&gt;Asking this question often results in us realizing that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We don't quite understand some piece of the solution: If this happens, you need to figure out what exactly you don't understand, and read existing code and documentation until you do!&lt;/li&gt;
&lt;li&gt;We don't agree with the solution: If this is the case, &lt;strong&gt;stop the review&lt;/strong&gt;, and focus on discussing this with the author. Present your concerns, add some alternatives, and find a solution that satisfied both you and the author!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Do you agree with the effects of the solution?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In most engineering problems, there are tradeoffs. A more complicated solution might run faster, but be harder to maintain down the line. It may require more memory than a slower solution. On the other hand, a simpler solution might be slower, but a lot easier to maintain, and it may not be performance-critical.&lt;/p&gt;

&lt;p&gt;Before jumping into the code, we need to make sure we understand what the tradeoffs are, and we agree that those are the right tradeoffs to make.&lt;/p&gt;
&lt;h2&gt;
  
  
  You made it!
&lt;/h2&gt;

&lt;p&gt;If you made it this far, it means you now have a deep understanding of the problem, and agree that the solution is the right one.&lt;/p&gt;

&lt;p&gt;Great!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This thought process alone will make your reviews incredibly impactful&lt;/strong&gt; because you will be identifying big problems first, and not getting lost in the minutia.&lt;/p&gt;

&lt;p&gt;Now, with this deep understanding, we're ready to dive into the code.&lt;/p&gt;

&lt;p&gt;Take a deep breath, and let's get into the nitty-gritty!&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%2F4b69ddfc8225092fddc1973283490ddd%2Ftenor.gif%3Fitemid%3D15960012" 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%2F4b69ddfc8225092fddc1973283490ddd%2Ftenor.gif%3Fitemid%3D15960012" alt="Diving into the code"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Step 2: Read the code... several times
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;... we're going to go through the changes multiple times, answering a different question each time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's jump into the code!&lt;/p&gt;

&lt;p&gt;Now... where do we start?&lt;/p&gt;

&lt;p&gt;It can feel very intimidating to just jump into the review page and start reading. It's overwhelming! Where do you even look?&lt;/p&gt;

&lt;p&gt;The main problem here is that we're &lt;strong&gt;trying to think about everything at once&lt;/strong&gt;. I don't know about you, but I can't do it.&lt;/p&gt;

&lt;p&gt;When we're reviewing code, there are many things we should look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the code actually implement the solution described in the description?&lt;/li&gt;
&lt;li&gt;Are there any performance concerns?&lt;/li&gt;
&lt;li&gt;Is the code well-tested?&lt;/li&gt;
&lt;li&gt;Does the code conform to formatting and style standards?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a lot to think about! So, instead of trying to answer all of these the first time we see the changes, &lt;strong&gt;we're going to go through the changes multiple times&lt;/strong&gt;, answering a different question each time.&lt;/p&gt;

&lt;p&gt;This will reduce the scope of what we're thinking about to just one question.&lt;/p&gt;

&lt;p&gt;For instance, let's see how we'd answer the following question: "Is the code well-tested?"&lt;/p&gt;

&lt;p&gt;Well, there's a clear path forward: We know we should &lt;strong&gt;start with the tests&lt;/strong&gt;, and see if they cover all the cases we think should be covered. It's definitely not as intimidating!&lt;/p&gt;

&lt;p&gt;The trick is to do the same for each question:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick one question.&lt;/li&gt;
&lt;li&gt;Go through the code changes to validate that question.&lt;/li&gt;
&lt;li&gt;Leave comments.&lt;/li&gt;
&lt;li&gt;Go to 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We want to check performance? If we understand the pieces involved, we should have a good idea of which ones are sensitive to being slow (because they run often). We should focus on those first.&lt;/p&gt;

&lt;p&gt;We want to check formatting and naming? We can forget about what the code does, and just read the words and symbols.&lt;/p&gt;

&lt;p&gt;You should build your own list of questions to ask the code, but here's mine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the code implement the solution described?&lt;/li&gt;
&lt;li&gt;Does it have conscious performance tradeoffs?&lt;/li&gt;
&lt;li&gt;Does it have unconscious performance inefficiencies?&lt;/li&gt;
&lt;li&gt;Does it conform to the naming and style guidelines?&lt;/li&gt;
&lt;li&gt;Is it well-tested?&lt;/li&gt;
&lt;li&gt;Are there any hard-to-understand parts? Do they &lt;em&gt;have&lt;/em&gt; to be there? If so, are they properly isolated and documented?&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  One More Time From the Top
&lt;/h1&gt;

&lt;p&gt;I promised a condensed checklist, so here it is! I'm planning on making this into a free infographic that you can print, so subscribe to the mailing list to get notified when that happens!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**Before Reading Code**&lt;/span&gt;
These should be checked by reading the description and existing code, not the changes themselves!
&lt;span class="p"&gt;-&lt;/span&gt; [ ] I understand the problem this change is trying to solve.
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] I understand and agree with why we need this feature or bug solved.
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] I understand all the pieces involved in causing the problem.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] I have a general idea of how I'd solve the problem.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] I agree with the solution proposed.
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] I agree with the performance tradeoffs presented in the solution (if the change is perf-sensitive).
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] If not, I have talked with the author until we've reached consensus.

&lt;span class="gs"&gt;**When Reading the Code**&lt;/span&gt;
We should make one pass for each of these questions.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] The code implements what's actually described as the solution.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] The code doesn't have unintentional inefficiencies.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] The code conforms to naming and code style guidelines.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] There are no unnecessary hard-to-understand parts.
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] The ones that are there are properly isolated and document.
&lt;span class="p"&gt;-&lt;/span&gt; [ ] The code is well-tested.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A review that looks at all of these things will be invaluable in generating better code!&lt;/p&gt;

&lt;h1&gt;
  
  
  The End
&lt;/h1&gt;

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

&lt;p&gt;Code Review Checklist: Done!&lt;/p&gt;

&lt;p&gt;Granted, this is a very time-consuming process. But keep in mind that &lt;strong&gt;your first 5 reviews will be about learning to review correctly&lt;/strong&gt;. Code Review is a skill, people are expected to take some time to learn!&lt;/p&gt;

&lt;p&gt;And the good news is, once you get the hang of it, it gets a lot faster.&lt;/p&gt;

&lt;p&gt;After those reviews, you start asking questions one by one unconsciously, and you develop an intuition of where to start.&lt;/p&gt;

&lt;p&gt;After dozens of reviews, I rarely go step by step in the checklist anymore, but I'm glad I have it for those tricky reviews!&lt;/p&gt;

&lt;p&gt;What's on your checklist? I'd love to know either via Twitter &lt;a href="https://twitter.com/BeyondLoop" rel="noopener noreferrer"&gt;@BeyondLoop&lt;/a&gt;, or &lt;a href="//mailto:blorente.me@gmail.com"&gt;email&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This content was originally posted in my blog, &lt;a href="https://beyondtheloop.dev/3-programming-milestones-to-work-towards/" rel="noopener noreferrer"&gt;Beyond The Loop&lt;/a&gt;.&lt;br&gt;
If you like it, head over there or follow the blog on Twitter (&lt;a href="https://twitter.com/BeyondLoop" rel="noopener noreferrer"&gt;@BeyondLoop&lt;/a&gt;) for more!&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>github</category>
    </item>
    <item>
      <title>5 Non-Technical Tips to Improve Your Technical Interviews</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Fri, 14 Aug 2020 16:29:12 +0000</pubDate>
      <link>https://dev.to/blorente/5-non-technical-tips-to-improve-your-technical-interviews-4j1g</link>
      <guid>https://dev.to/blorente/5-non-technical-tips-to-improve-your-technical-interviews-4j1g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This content was originally posted in my blog, &lt;a href="https://beyondtheloop.dev/3-programming-milestones-to-work-towards/"&gt;Beyond The Loop&lt;/a&gt;.&lt;br&gt;
If you like it, head over there or follow the blog on Twitter (&lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;) for more!&lt;/p&gt;




&lt;p&gt;Technical interviews!&lt;/p&gt;

&lt;p&gt;We all hate them, we all have to live with them!&lt;/p&gt;

&lt;p&gt;They can be incredibly nerve-wracking! After all, you’re gambling your future job on coming up with a clever solution to a complicated problem on the spot!&lt;/p&gt;

&lt;p&gt;Well, not quite.&lt;/p&gt;

&lt;p&gt;While having a sound technical profile is &lt;em&gt;very important&lt;/em&gt; for a candidate, there are other &lt;strong&gt;equally important, non-technical things&lt;/strong&gt; that a candidate should do.&lt;/p&gt;

&lt;p&gt;I’ve been on both sides of the interview many times, and I believe that there are things that most people are not doing enough of.&lt;/p&gt;

&lt;p&gt;Here's a list of tips that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anyone can start applying today&lt;/strong&gt;, regardless of skill level or seniority.&lt;/li&gt;
&lt;li&gt;Will &lt;strong&gt;significantly increase&lt;/strong&gt; your chances of finding a good job match.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tips do not replace technical knowledge. You still have to know about algorithms and data structures.&lt;/p&gt;

&lt;p&gt;Rather, they &lt;strong&gt;complement&lt;/strong&gt; that knowledge and help you present it in the best way possible.&lt;/p&gt;

&lt;p&gt;Without further ado, here are the tips:&lt;/p&gt;

&lt;h1&gt;
  
  
  🎭Prepare stories to showcase yourself
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Show, don’t tell.&lt;/p&gt;

&lt;p&gt;- Cinema wisdom&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s all well and good to &lt;em&gt;tell&lt;/em&gt; the interviewer that you are a hard working team player.&lt;/p&gt;

&lt;p&gt;However, you’ll make a much deeper impression if you &lt;strong&gt;demonstrate&lt;/strong&gt; those traits with real stories.&lt;/p&gt;

&lt;p&gt;To do that, think about a trait you think the interviewers will find desirable. If you're applying for a junior role, it can be ability to learn quickly and respond well to feedback. If the prospect role is more senior, it can be the ability to provide good feedback and mentor people.&lt;/p&gt;

&lt;p&gt;Then, think about a time in your life where you exhibited that trait. It doesn’t have to be around coding, the point here is to display your personality.&lt;/p&gt;

&lt;p&gt;Here are some examples: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You had a conflict with another person, which you de-escalated until you reached an agreement, and both parties were happy.&lt;/li&gt;
&lt;li&gt;Two parties had a conflict, and you helped mediate between them and come to agreeable terms.&lt;/li&gt;
&lt;li&gt;You wanted to learn something, but there was no good documentation online. You did the research, figured it out, and improved the documentation!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Got the story? Great!&lt;/p&gt;

&lt;p&gt;Now, tell it to someone a couple of times. We don’t want it fully memorised, but we don’t want the nerves of the interview getting in the way!&lt;/p&gt;

&lt;p&gt;Walk into the interview ready to share that story, and I guarantee you’ll have at least one opportunity to tell it.&lt;/p&gt;

&lt;p&gt;Take advantage of this to &lt;strong&gt;show&lt;/strong&gt; your best side!&lt;/p&gt;

&lt;h1&gt;
  
  
  🤝️Show them you're great to work with
&lt;/h1&gt;

&lt;p&gt;For the interviewer, an interview is the chance to decide &lt;strong&gt;whether you’re somebody they’d like to work with&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think about that for a second. What qualities would &lt;strong&gt;you&lt;/strong&gt; like your coworkers to have?&lt;/p&gt;

&lt;p&gt;Sure, you’d like them to be technically capable, but what &lt;em&gt;other&lt;/em&gt; qualities would you like from them?&lt;/p&gt;

&lt;p&gt;Maybe you’d like them to ask politely for help in difficult situations, or maybe you’d like them to adapt gracefully to changing requirements.&lt;/p&gt;

&lt;p&gt;Whatever your list is, I recommend you write it down. Then, read it before heading into the interview.&lt;/p&gt;

&lt;p&gt;These are things that you need to display, and things that you expect your future coworkers to have.&lt;/p&gt;

&lt;p&gt;Try to convey each of those things through your speech and actions! Show them how fun it is to work with you. And don't forget that interviews are a two-way street. Look for these same qualities on your interviewers!&lt;/p&gt;

&lt;h1&gt;
  
  
  🦻Listen to the interviewer
&lt;/h1&gt;

&lt;p&gt;The interviewer is not there to make your life harder.&lt;/p&gt;

&lt;p&gt;Well, that’s not true.&lt;/p&gt;

&lt;p&gt;The interviewer is making your life a little bit hard on purpose by putting you on tough spots, but they’re not doing it to see you suffer.&lt;/p&gt;

&lt;p&gt;They’re doing it to &lt;strong&gt;see how you react&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s completely normal to get stuck in an interview, to find the problems hard to solve. The interviewers expect this. They designed the wustion &lt;em&gt;hoping&lt;/em&gt; that would happen!&lt;/p&gt;

&lt;p&gt;However, they will usually have a list of hints to give if they see you’re having a hard time. That's expected, because it tests how well you listen to feedback, and how a normal code pairing session would go with you.&lt;/p&gt;

&lt;p&gt;But you have to listen carefully to pick up on them!&lt;/p&gt;

&lt;p&gt;Therefore, every time an interviewer tries to say something, &lt;strong&gt;assume they’re guiding you towards the right answer&lt;/strong&gt;, and listen carefully!&lt;/p&gt;

&lt;p&gt;If the interviewer is trying to help, and you’re not listening, what does that tell them about their potential interactions with you at the job?&lt;/p&gt;

&lt;p&gt;Assume the best intentions from the interviewer, and make an effort to listen as though they were a close friend.&lt;/p&gt;

&lt;h1&gt;
  
  
  🗣Think out loud
&lt;/h1&gt;

&lt;p&gt;Good interview questions are &lt;strong&gt;designed to put the candidate in tough spots&lt;/strong&gt;, so that the interviewers can see how they react to them.&lt;/p&gt;

&lt;p&gt;In an ideal interview, the candidate works through a problem &lt;em&gt;they haven’t seen before&lt;/em&gt;, and the interviewers can see how they work through the problem.&lt;/p&gt;

&lt;p&gt;The question will be tough, which means there will be times where you will be tempted to stop talking and think. &lt;strong&gt;Resists that temptation as much as possible&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;As we said before, the interviewer is not there to be mean, or to see you suffer. If they see your thought process straying too far from the right path, &lt;strong&gt;they will try to help&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;But, for them to see you’re veering off the right path, they need to know what you’re thinking!&lt;/p&gt;

&lt;p&gt;So, do your best to &lt;strong&gt;think out loud&lt;/strong&gt;, even if you’re not sure about what you’re saying!&lt;/p&gt;

&lt;h1&gt;
  
  
  💡If you don’t make it, ask your recruiter for feedback
&lt;/h1&gt;

&lt;p&gt;This one is pretty straightforward.&lt;/p&gt;

&lt;p&gt;We're not going to get all the jobs we apply for. That's normal and expected!&lt;/p&gt;

&lt;p&gt;However, we can &lt;em&gt;debug&lt;/em&gt; our own approach to interviews. As with everything in life, we can &lt;strong&gt;learn to become better candidates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In order to learn, you need to know what you could have done better. Sometimes, it’s pretty hard to know that!&lt;/p&gt;

&lt;p&gt;At least, for us as the candidates.&lt;/p&gt;

&lt;p&gt;For the interviewers, they know exactly why they said no. In fact, they probably had a detailed discussion about it, where the recruiter was present!&lt;/p&gt;

&lt;p&gt;Take advantage of that!&lt;/p&gt;

&lt;p&gt;The company would have loved to see you succeed so that they can stop spending time in the hiring process. They want you to grow into a good candidate for them.&lt;/p&gt;

&lt;p&gt;For this reason, after an interview, it’s very reasonable to &lt;strong&gt;politely ask the recruiter&lt;/strong&gt; for feedback.&lt;/p&gt;

&lt;p&gt;Most recruiters will give you a lot of the context that went into the hiring decision.&lt;/p&gt;

&lt;p&gt;That way, you can know exactly what to work on for next time!&lt;/p&gt;

&lt;h1&gt;
  
  
  💃Have fun!
&lt;/h1&gt;

&lt;p&gt;I know this one is probably the hardest.&lt;/p&gt;

&lt;p&gt;But, think about it this way: If you’ve made it to the in-person round of interviews, you’ve made it pretty far (~85% of the candidates don’t make it)! &lt;/p&gt;

&lt;p&gt;Chances are you’ll get a job soon.&lt;/p&gt;

&lt;p&gt;So, instead of seeing the interview as this frustrating trial by fire, try to see it as &lt;strong&gt;an opportunity to talk about an interesting problem with a very knowledgeable person&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An interview is an opportunity to have a conversation about an interesting problem with a very knowledgeable person.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try to (gasp!) &lt;strong&gt;enjoy&lt;/strong&gt; the experience, and even to learn something along the way!&lt;/p&gt;

&lt;p&gt;Disengage yourself from the result, and try to get the most out of the interview regardless of whether you get the job.&lt;/p&gt;

&lt;p&gt;And this is not just for your benefit:&lt;/p&gt;

&lt;p&gt;If you are enjoying the experience, chances are the interviewer is enjoying it as well. And coming back to the second point: Who doesn't want to work with someone that makes hard problems fun to work on?&lt;/p&gt;

&lt;p&gt;So: Relax, and have fun!&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;These are all things that everyone would benefit of doing more of.&lt;/p&gt;

&lt;p&gt;If these have been helpful at all, I’d love to hear from you! Nothing would make me happier than contributing to someone getting a job, even a little bit!&lt;/p&gt;

</description>
      <category>career</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why learning Rust is great... As a second language</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Sun, 09 Aug 2020 16:29:08 +0000</pubDate>
      <link>https://dev.to/blorente/why-learning-rust-is-great-as-a-second-language-5583</link>
      <guid>https://dev.to/blorente/why-learning-rust-is-great-as-a-second-language-5583</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This content was originally posted in my blog, &lt;a href="https://beyondtheloop.dev/rust-second-language/"&gt;Beyond The Loop&lt;/a&gt;.&lt;br&gt;
If you like it, head over there or follow the blog on Twitter (&lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;) for more!&lt;/p&gt;



&lt;p&gt;So, you've taken your first steps into programming. Welcome!&lt;/p&gt;

&lt;p&gt;You've taken some courses and built some amazing things. You've caught the programming bug. Congratulations!&lt;/p&gt;

&lt;p&gt;Maybe you started with Python, doing some neat data analysis. Maybe with CSS+HTML+JS, creating beautiful projects. Maybe something else.&lt;/p&gt;

&lt;p&gt;Whatever the case, you're now comfortable with functions and loops, and your Googling has decreased considerably.&lt;/p&gt;

&lt;p&gt;What's the next step? What can you get into that will be exciting and interesting?&lt;/p&gt;

&lt;p&gt;I believe, for most people, the Rust programming language is a great answer to that question.&lt;/p&gt;

&lt;p&gt;By the end of this post, I hope you will too.&lt;/p&gt;

&lt;p&gt;If you are, stick around for some resources on getting started with Rust!&lt;/p&gt;
&lt;h1&gt;
  
  
  What is Rust?
&lt;/h1&gt;

&lt;p&gt;Let's start from the beginning. What is Rust?&lt;/p&gt;

&lt;p&gt;According to the official webpage, &lt;a href="https://www.rust-lang.org/"&gt;rust-lang.org&lt;/a&gt; Rust focuses on 3 things:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F_tFb76_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/rust-second-language/rust-header.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F_tFb76_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/rust-second-language/rust-header.png" alt="Rust Second Language"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's break it down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliable&lt;/strong&gt; software: Rust, by design, will help you think hard about your software, and figure out where it can fail. This will make you ask yourself questions that you didn't even know to ask. It will train you to think like a great software engineer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient&lt;/strong&gt; software: Rust makes efficient code easy to write. Usually, the simplest way to do something is also the most efficient way. &lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;everyone&lt;/strong&gt;: Rust takes inclusivity very seriously. The community cares deeply about everyone feeling safe and welcome. This shows in every interaction, from the great culture around tutorials and documentation to the very friendly meetups organized all around the world.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With that alone, it sounds like a great language to me!&lt;/p&gt;
&lt;h2&gt;
  
  
  Why second language?
&lt;/h2&gt;

&lt;p&gt;Okay, so if Rust is so great, why learn it as a &lt;em&gt;second&lt;/em&gt; language?&lt;/p&gt;

&lt;p&gt;Well, here's the thing: Rust achieves these goals by giving you &lt;strong&gt;full control over your computer's resources&lt;/strong&gt;. You decide exactly how much space everything takes, down to the byte level. Other languages that do the same are C, C++ and Assembly.&lt;/p&gt;

&lt;p&gt;Now, as we all know:&lt;/p&gt;


&lt;a href="https://tenor.com/view/spiderman-responsibility-gif-4589950"&gt;With Great Power Comes Great Responsibility GIF&lt;/a&gt; from &lt;a href="https://tenor.com/search/spiderman-gifs"&gt;Spiderman GIFs&lt;/a&gt;

&lt;p&gt;When you're first learning to code, &lt;strong&gt;you don't need that much power&lt;/strong&gt;. Your projects will be small, so most computers will run them without issue. They don't have to be super reliable, either.&lt;/p&gt;

&lt;p&gt;Therefore, &lt;strong&gt;you shouldn't take that extra responsibility&lt;/strong&gt;. It will end up getting in the way.&lt;/p&gt;

&lt;p&gt;But, once you're ready to take the next step and work on bigger projects and applications, you &lt;strong&gt;will&lt;/strong&gt; need to learn many of the things that Rust helps you think about.&lt;/p&gt;

&lt;p&gt;So. What &lt;em&gt;does&lt;/em&gt; Rust teach you?&lt;/p&gt;
&lt;h1&gt;
  
  
  Rust teaches you to read (and understand) the output of your tools
&lt;/h1&gt;

&lt;p&gt;Rust will try to catch and fix a lot of your bugs before it runs your code.&lt;/p&gt;

&lt;p&gt;This is great because it means that it will teach you to think about things that you weren't thinking before (more on that later), but it also means that it will produce &lt;strong&gt;a lot&lt;/strong&gt; of error messages.&lt;/p&gt;

&lt;p&gt;In fact, programming in Rust is often described as &lt;strong&gt;"a conversation with the tools"&lt;/strong&gt;, where ask the tool "is my code alright?" and the tool responds with great error messages.&lt;/p&gt;

&lt;p&gt;Inevitably, this means that you'll need to &lt;strong&gt;get into the habit of reading error messages carefully&lt;/strong&gt;. Rust's error messages are thoughtfully crafted to be informative and actionable.&lt;/p&gt;

&lt;p&gt;Sometimes, Rust will even guess what concept you need to understand to solve the error, and &lt;strong&gt;point you to the right documentation!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me repeat that.&lt;/p&gt;

&lt;p&gt;Rust will see the bug, catch it, guess "this user doesn't quite understand X", and it will give you a link to it!&lt;/p&gt;

&lt;p&gt;If you get into the habit of carefully reading and understanding error messages, your productivity and learning will skyrocket.&lt;/p&gt;

&lt;p&gt;Now, let's dive into some more concrete things Rust will teach you.&lt;/p&gt;
&lt;h1&gt;
  
  
  Rust will teach you about types
&lt;/h1&gt;

&lt;p&gt;Let's look at the following example in JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;What are &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt;? Are they numbers? Letters? Lists?&lt;/p&gt;

&lt;p&gt;It doesn't matter. As long as the &lt;code&gt;+&lt;/code&gt; operation makes sense for them, you don't have to know anything else about &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Languages that beginners tend to learn first don't enforce types. And that's a good thing! In small applications, types can end up getting in the way.&lt;/p&gt;

&lt;p&gt;However, as you start working on bigger and bigger projects, you start to realize that types have one benefit:&lt;/p&gt;

&lt;p&gt;They give you information about other parts of the program &lt;strong&gt;without having to read it&lt;/strong&gt;. If used right, types teach you how to use a function without having to read the body!&lt;/p&gt;

&lt;p&gt;Let's look at the same function, in Rust:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;i64&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The signature of the function (&lt;code&gt;add(a: i64, b: i64) -&amp;gt; i64&lt;/code&gt;) tells us exactly what the function does: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you give me two numbers (&lt;code&gt;i64&lt;/code&gt; is a type of number in Rust), I will &lt;code&gt;add&lt;/code&gt; them and give you another number back (&lt;code&gt;-&amp;gt; i64&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is much more descriptive than the other example!&lt;/p&gt;

&lt;p&gt;Eventually, you're bound to come across types in your programming career, and Rust will teach you all you need to know!&lt;/p&gt;

&lt;h1&gt;
  
  
  Rust makes you aware of mutability
&lt;/h1&gt;

&lt;p&gt;Most popular programming languages are mutable by default. In both Python and JavaScript, a function can change its parameters. In other words, this is reasonable code in most languages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&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;When a function changes one of its parameters like that, it's called a &lt;strong&gt;side effect&lt;/strong&gt;. Side effects are generally best avoided.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;There are many examples of why this is generally a bad thing, but it's not something I want to argue in this article. There are many great articles out there arguing for it. Search for "immutability".&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In Rust, &lt;strong&gt;you need to say which of your variables are expected to change&lt;/strong&gt;. Let's look at the same function, written in Rust:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="nb"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Notice the little &lt;code&gt;&amp;amp;mut&lt;/code&gt; after the parameter name: It tells you that the function is allowed to change the parameter.&lt;/p&gt;

&lt;p&gt;As you can see, you always know whether a function will change what you pass to it, &lt;strong&gt;just by the first line&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Yet another piece of information that Rust gives us to &lt;strong&gt;guess what a function does without reading it&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Rust will teach you about memory management
&lt;/h1&gt;

&lt;p&gt;Let's take a look at this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;hello&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;For this code to work, the computer has to remember what the value of &lt;code&gt;hello&lt;/code&gt; is, &lt;strong&gt;all the way until the end of the program&lt;/strong&gt;. In other words, it has to &lt;strong&gt;store&lt;/strong&gt; it in &lt;strong&gt;memory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A computer has a finite amount of memory or things it can remember at any given time. Incidentally, this is one of the reasons why your phone closes background apps, or why your whole computer becomes slow when you have too many tabs open.&lt;/p&gt;

&lt;p&gt;For small applications, this is not really a concern. There aren't &lt;em&gt;that&lt;/em&gt; many things the project needs to remember.&lt;/p&gt;

&lt;p&gt;However, it's not uncommon for big applications to have to remember several Gigabyte's worth of data at once, which can quickly become a problem.&lt;/p&gt;

&lt;p&gt;Let's say we want to represent a 2D point in JavaScript. We could write the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;How much memory do we need in order to remember &lt;code&gt;p&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Trick question, the code doesn't tell us.&lt;/p&gt;

&lt;p&gt;Rust, however, lets you choose &lt;strong&gt;exactly how much memory&lt;/strong&gt; it takes to remember something and &lt;strong&gt;how long the computer needs to remember it for&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's see how we can implement that same point in Rust:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Point&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;How much memory does it take to remember one &lt;code&gt;p&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Well, a &lt;code&gt;Point&lt;/code&gt; has one &lt;code&gt;x&lt;/code&gt; and one &lt;code&gt;y&lt;/code&gt;. They are both &lt;code&gt;i64&lt;/code&gt;. An &lt;code&gt;i64&lt;/code&gt; takes exactly 64 bits of memory. So, a &lt;code&gt;Point&lt;/code&gt; will take exactly 128 bits of memory.&lt;/p&gt;

&lt;p&gt;Most types in Rust can be broken down this way. Thinking about code this way will make you aware of when you're remembering too much!&lt;/p&gt;

&lt;p&gt;Now, there is a lot more Rust does about memory management that I won't get into here. Suffice to say that it's &lt;strong&gt;a great language if you want to learn about it!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Sounds great! Where do I start?
&lt;/h1&gt;

&lt;p&gt;These are just a few reasons why I think Rust is great as a second language.&lt;/p&gt;

&lt;p&gt;If I've convinced you and you want to give it a try, check out these resources!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://github.com/rust-lang/rustlings"&gt;Rustlings Course&lt;/a&gt;: An open-source series of exercises that guide you through setting up your Rust environment and writing your first lines of Rust! If in doubt, start here.&lt;/li&gt;
&lt;li&gt;The official website has a &lt;a href="https://rust-lang.org/learn"&gt;Learn Page&lt;/a&gt; with the most popular and amazing resources.&lt;/li&gt;
&lt;li&gt;Rust has an amazing community that is more than ready to welcome newcomers. Check out the official website's &lt;a href="https://rust-lang.org/community"&gt;Community Section&lt;/a&gt; for more links.&lt;/li&gt;
&lt;li&gt;If you're an experienced developer coming from another language, check out &lt;a href="http://intorust.com"&gt;intorust.com&lt;/a&gt;. It's a series of videos explaining the fundamental differences that Rust has with other languages like C++ or Java.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Rust is an amazing language, and I personally love it. I wouldn't recommend it as a first language, but it's a fantastic tool to guide you in those next steps beyond the beginner phase!&lt;/p&gt;

&lt;p&gt;What do you think? Whether you agree or disagree, I'd love to hear from you!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>rust</category>
      <category>career</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Reddit for programmers</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Thu, 06 Aug 2020 08:14:16 +0000</pubDate>
      <link>https://dev.to/blorente/reddit-for-programmers-4ejk</link>
      <guid>https://dev.to/blorente/reddit-for-programmers-4ejk</guid>
      <description>&lt;p&gt;Reddit is an amazing resource for beginner programmers. It's a goldmine of references to valuable materials and a place where a lot of great folks gather to give each other feedback.&lt;/p&gt;

&lt;p&gt;It has helped me throughout my career and, in this post, I want to explain how you could be engaging with Reddit's communities to skyrocket your engineering skills.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Why Reddit?
&lt;/h1&gt;

&lt;p&gt;At its core, Reddit is a place where communities live. These communities, or &lt;em&gt;subreddits&lt;/em&gt; revolve around a particular concept. For instance, &lt;a href="https://www.reddit.com/r/cpp/"&gt;r/cpp&lt;/a&gt; is a community of people that know about the C++ language, &lt;a href="https://www.reddit.com/r/gamedev/"&gt;r/gamedev&lt;/a&gt; is about developing videogames, and &lt;a href="https://www.reddit.com/r/learnprogramming/"&gt;r/learnprogramming&lt;/a&gt; is about... well... learning how to program.&lt;/p&gt;

&lt;p&gt;There is probably a subreddit for everything you can think of, no matter how big or small.&lt;/p&gt;

&lt;p&gt;The key concept here is &lt;strong&gt;community&lt;/strong&gt;. A community is a place where like-minded people get together to talk about something that interests them.&lt;/p&gt;

&lt;p&gt;Communities are incredibly valuable when developing your skills. They can give you direction, encouragement, and great advice!&lt;/p&gt;

&lt;p&gt;Unfortunately, communities are sometimes hard to come by, or difficult to get into.&lt;/p&gt;

&lt;p&gt;This is what makes Reddit such a good resource. The communities are already there, ready to help! It's the perfect place to ask questions and find people who have walked the same path as you.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Reddit?
&lt;/h1&gt;

&lt;p&gt;Hopefully, I've convinced you that Reddit is a valuable asset to have for your career.&lt;/p&gt;

&lt;p&gt;Now, how can you leverage the power of these great communities? I've found that there are three main ways of benefitting from a community: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading their curated resource lists.&lt;/li&gt;
&lt;li&gt;Seeking feedback from the community.&lt;/li&gt;
&lt;li&gt;Giving feedback to other members.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's go one by one.&lt;/p&gt;

&lt;h1&gt;
  
  
  The sidebars and FAQs are golden fountains of knowledge. Use them!
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B6RqNQJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-read.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B6RqNQJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-read.png" alt="Read the sidebar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most subreddits get a lot of beginner questions. Eventually, most of these questions start repeating over time. To help with that, most subreddits have compiled answers and resources in their "about" or "FAQ" pages. The size of the "about" page depends on the size of the subreddit, with the largest subreddits having fully-fledged wikis! (like this one, from &lt;a href="https://thefitness.wiki/getting-started-with-fitness/"&gt;r/fitness&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Whenever I want to learn something new, like a new tool or a new language, &lt;strong&gt;my first instinct is to check the sidebar of that subreddit&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These "about" pages (also called &lt;em&gt;sidebar&lt;/em&gt;) have one advantage over Googling things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All of these resources have been useful to real humans&lt;/strong&gt; with the same problems as you're likely to face.&lt;/p&gt;

&lt;p&gt;Plus, &lt;strong&gt;nobody makes any money&lt;/strong&gt; with these resource lists, so there's no incentive to advertise products that are not genuinely useful.&lt;/p&gt;

&lt;p&gt;These lists are pure gold. When a new hobby piques my interest, the first thing I do is to check the sidebar for that hobby's subreddit.&lt;/p&gt;

&lt;p&gt;It's the same with programming. Whenever I want to learn something new, like a new tool or a new language, &lt;strong&gt;my first instinct is to check the sidebar of that subreddit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I don't know how else to put it. Go check the sidebars!&lt;/p&gt;

&lt;h1&gt;
  
  
  Seek feedback from the amazing community
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p3awMDMB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-ask.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p3awMDMB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-ask.png" alt="Seek feedback"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We all need people who will give us feedback. That’s how we improve.&lt;/p&gt;

&lt;p&gt;-- &lt;strong&gt;Bill Gates&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good feedback is the cornerstone of learning. However, good feedback is hard to come by, because it requires someone to give you their thought, attention, and careful consideration. The good news is, most subreddits are full of people eager to help!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subreddits&lt;/strong&gt; are amazing to get some expert eyes on your work. There are only two rules that ensure that you have a good interaction with a subreddit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read the subreddit's rules&lt;/strong&gt;. When you post a question or a request for feedback, you are essentially asking for people's time. Treat that time with respect by reading the rules and doing your best to fulfil them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write thoughtful questions&lt;/strong&gt; to get thoughtful answers. If someone wants to help you, you need to give them as many details as possible. Make questions &lt;strong&gt;concrete&lt;/strong&gt;, and give enough context so that the reader can immediately understand where you're coming from. This is easier than it seems since most subreddits have very good guides on asking good questions, like &lt;a href="https://www.reddit.com/r/learnprogramming/comments/61oly8/new_read_me_first/"&gt;r/learnprogramming&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Most subreddits are full of knowledgeable people willing to help. As long as you are respectful of their time, don't be afraid to ask them for answers or feedback!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note that there was no rule about how experienced you need to be to post a question. Even if it can feel intimidating to post a question and look dumb, it helps to keep in mind that &lt;strong&gt;a moment of looking dumb now can save you months of struggling&lt;/strong&gt;. From this perspective, &lt;strong&gt;not posting is much worse&lt;/strong&gt; than posting a "dumb question".&lt;/p&gt;

&lt;p&gt;That said, most subreddits have a mindset of "no question is too dumb", as long as you follow the second rule and put some real effort into asking the question properly. So &lt;strong&gt;ask without fear&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Now, there is another great kind of feedback you can get from a subreddit: &lt;strong&gt;Code review&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're working on a personal project, chances are you're not too sure of what the right way to do something is. &lt;strong&gt;Showing your work&lt;/strong&gt; to a subreddit is a great way of getting the feedback you need to ensure you're on the right track.&lt;/p&gt;

&lt;p&gt;Here's an example: &lt;/p&gt;

&lt;p&gt;When I was in college, I wanted to learn the C++ language. I was able to write some code that worked, but I didn't know if what I was writing was "the right way" of writing C++ code (also called "the &lt;strong&gt;idiomatic&lt;/strong&gt; way").&lt;/p&gt;

&lt;p&gt;I posted my code in &lt;a href="https://www.reddit.com/r/cpp_questions/"&gt;r/cpp_questions&lt;/a&gt;, asking specifically for that kind of advice. The response was amazing!&lt;/p&gt;

&lt;p&gt;I got lots of great advice &lt;strong&gt;that it would have taken me months to figure out&lt;/strong&gt; on my own:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/cpp_questions/comments/46kfn6/so_i_made_a_chip8_interpreter_as_my_first/"&gt;Reddit post: So I made a CHIP-8 Interpreter as my first production-level C++ project, any advice?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One more time&lt;/strong&gt;: Most subreddits are full of knowledgeable people willing to help. As long as you are respectful of their time, don't be afraid to ask them for answers or feedback!&lt;/p&gt;

&lt;h1&gt;
  
  
  Help people in the subreddit to develop your code reading and communication skills
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e4hsBn5u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-review.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e4hsBn5u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://beyondtheloop.dev/img/for-posts/reddit-post/reddit-review.png" alt="Review other people's work"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this doesn't come as a surprise, but these two skills are the mark of a senior engineer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Senior engineers can &lt;strong&gt;navigate a codebase&lt;/strong&gt; they've never seen before efficiently without much direction.&lt;/li&gt;
&lt;li&gt;Senior engineers can &lt;strong&gt;communicate technical concepts&lt;/strong&gt; effectively to other engineers of any level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If someone is seeking people to review their project on Reddit, this is a great opportunity to develop both of those skills!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing someone's project forces you to tackle a codebase you've never seen before, so you train your code navigation muscles.&lt;/li&gt;
&lt;li&gt;If you get stuck, you can always go back to the post and ask the author questions or clarification! Chances are they are delighted to answer them. After all, that's why they posted in the first place!&lt;/li&gt;
&lt;li&gt;Reviewing that code may expose you to techniques and technologies you've never seen before.&lt;/li&gt;
&lt;li&gt;After reviewing someone's code, you need to formulate your feedback in a way that's useful for them. This will train your communication muscles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't be afraid to give your feedback, &lt;strong&gt;especially if you're still starting out&lt;/strong&gt;. We all want to write readable code, and your feedback and questions can help the author realize where the author could make their code more approachable!&lt;/p&gt;

&lt;p&gt;Sidenote: There is not a lot of good material on learning to approach new codebases, but I'm working on a manual to help with that. If you're interested, subscribe below so that you don't miss out when I announce it.&lt;/p&gt;

&lt;p&gt;On top of it all, you're contributing to the well-being of the community and helping another fellow programmer, which is always awesome.&lt;/p&gt;

&lt;h1&gt;
  
  
  Recap
&lt;/h1&gt;

&lt;p&gt;I hope I've convinced you that Reddit is a good place to find growth as a programmer, and give you some useful pointers to use it effectively.&lt;/p&gt;

&lt;p&gt;What are your experiences with Reddit?&lt;/p&gt;

&lt;p&gt;I'd love to read your comments here, in my Twitter account &lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt; or in the place this was originally posted: &lt;a href="https://beyondtheloop.dev/how-to-use-reddit-to-skyrocket-your-improvement/"&gt;Beyond The Loop&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>programming</category>
      <category>tips</category>
    </item>
    <item>
      <title>What's your favourite git command 🖥❓</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Mon, 03 Aug 2020 21:18:19 +0000</pubDate>
      <link>https://dev.to/blorente/what-s-your-favourite-git-command-lkk</link>
      <guid>https://dev.to/blorente/what-s-your-favourite-git-command-lkk</guid>
      <description>&lt;p&gt;Mine is &lt;code&gt;git rebase -i&lt;/code&gt;, you can do almost anything with it!&lt;/p&gt;

&lt;p&gt;Context: This is research for future posts in beyondtheloop.dev&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>git</category>
      <category>career</category>
    </item>
    <item>
      <title>3 Programming milestones towards mastery - and how to accomplish them!</title>
      <dc:creator>Borja Lorente</dc:creator>
      <pubDate>Mon, 03 Aug 2020 15:11:43 +0000</pubDate>
      <link>https://dev.to/blorente/3-programming-milestones-towards-mastery-and-how-to-accomplish-them-3cee</link>
      <guid>https://dev.to/blorente/3-programming-milestones-towards-mastery-and-how-to-accomplish-them-3cee</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This content was originally posted in my blog, &lt;a href="https://beyondtheloop.dev/3-programming-milestones-to-work-towards/"&gt;Beyond The Loop&lt;/a&gt;. If you like it, head over there or follow the blog on Twitter (&lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;) for more!&lt;/p&gt;

&lt;p&gt;I recently had a great conversation on Twitter with &lt;a href="https://twitter.com/svpino"&gt;@svpino&lt;/a&gt; and others, about the line between beginner and advanced programmer:&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--a8VuJwtS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1289578111902900224/yyKe5Qj0_normal.jpg" alt="Beyond The Loop profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Beyond The Loop
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @beyondloop
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/svpino"&gt;@svpino&lt;/a&gt; I'm curious: How do you know when to switch from "beginner" to "seasoned"?&lt;br&gt;&lt;br&gt;Getting over the middle part was the hardest part of my dev journey.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      15:34 PM - 01 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1289585379524268032" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1289585379524268032" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1289585379524268032" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      3
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;That got me thinking: &lt;strong&gt;At some point, one stops being a beginner&lt;/strong&gt;. And that point is not very clear.&lt;/p&gt;

&lt;p&gt;In this post, I outline 3 programming milestones that made me realize that I had levelled up, and resources to achieve each one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every engineer I consider "advanced" has reached these milestones&lt;/strong&gt;, so I think they are worthy goals for anyone.&lt;/p&gt;

&lt;p&gt;If you are interested in any of these goals but would like advice or direction, &lt;strong&gt;don't hesitate to contact me on Twitter&lt;/strong&gt;: &lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;. I'll be happy to help however I can.&lt;/p&gt;

&lt;h1&gt;
  
  
  Milestone: You are mindful about workflow friction
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Our most important resource is mental energy. Optimizing it is key to good engineering.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our mental energy is limited. Experienced programmers don't have more energy than beginner programmers, they just use what they have more efficiently.&lt;/p&gt;

&lt;p&gt;They &lt;strong&gt;intentionally invest in making their workflow seamless&lt;/strong&gt;, so that they have as much energy as possible to solve hard problems.&lt;/p&gt;

&lt;p&gt;For instance: While Googling things is perfectly normal and great, &lt;strong&gt;Googling the same thing over and over again&lt;/strong&gt; is a waste of time and energy. Every time we Google something, we're forced to stop our "flow", which costs a lot of mental energy!&lt;/p&gt;

&lt;p&gt;Here are some of the ways I've improved my workflow, that can help you too!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I have a big Google Doc&lt;/strong&gt; of knowledge: Every time I learn a complicated concept, I write &lt;strong&gt;my explanation&lt;/strong&gt; into it. It's been going on for a couple of years, and it's about 50 pages long.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I got comfortable with the command line&lt;/strong&gt;. It's an incredibly useful tool if you can use it correctly!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I have a &lt;a href="https://github.com/blorente/dotfiles"&gt;shortcuts repo&lt;/a&gt;&lt;/strong&gt;, where I keep command-line shortcuts for commands I use often.
&lt;code&gt;git add -p&lt;/code&gt; becomes &lt;code&gt;gap&lt;/code&gt;, &lt;code&gt;./bazel query --output build&lt;/code&gt; is &lt;code&gt;bqb&lt;/code&gt;, etc. Seconds of typing matter!&lt;/li&gt;
&lt;li&gt;I have learnt some &lt;strong&gt;keyboard shortcuts&lt;/strong&gt; for most of the popular text editors. Editing code without breaking your train of thought can save you a lot of mental power!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these are gradual, and &lt;strong&gt;built throughout a whole career&lt;/strong&gt;. Don't worry if you don't have the perfect workflow now, worry about making it 1% Better every day!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you improved your workflow by 1% every 3 days for a year, you'd be twice as good at the end of the year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, not every workflow is worth being automated. You should focus on finding the sweet spot of &lt;em&gt;"easy improvements that save me large amounts of time over years"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you're not sure about whether it's worth it, check out this graph by &lt;a href="https://xkcd.com/1205/"&gt;XKCD&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a2YLrk7w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/is_it_worth_the_time.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a2YLrk7w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/is_it_worth_the_time.png" alt="What is worth automating?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Resources
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.codenewbie.org/podcast/how-do-i-level-up"&gt;CodeNewbie Podcast, Ep. 7x2: How do I Level Up?&lt;/a&gt; The &lt;a href="//codenewbie.org"&gt;CodeNewbie Podcast&lt;/a&gt; is a great all-around resource to learn from. In this episode, it &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thoughtbot.com/upcase"&gt;Upcase&lt;/a&gt;: The best resource for levelling up as an engineer. Tutorials on Vim, Bash and Git are great to improve your workflow!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/tags/#1%%20Better"&gt;The 1% Better Tag&lt;/a&gt; &lt;strong&gt;in this very blog&lt;/strong&gt; is a collection of workflow improvements I've found over the years! Browse it to see if any are useful, and Subscribe to get notified whenever there's a new one!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/@webprolific/getting-started-with-dotfiles-43c3602fd789"&gt;Getting Started With Dotfiles&lt;/a&gt;: An introduction to one of the best ways to automate your workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, &lt;strong&gt;reduce friction in your workflows!&lt;/strong&gt; Next milestone:&lt;/p&gt;

&lt;h1&gt;
  
  
  Milestone: Git is intuitive for you
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Every senior developer I've come across has a deep, intuitive understanding of Git&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're going to be developing code professionally to any extent, you're probably going to come across Git. When you &lt;em&gt;do&lt;/em&gt; come across it, you might notice that it's not the most intuitive of tools.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you haven't come across Git yet, I'd advise you to read one of the &lt;a href="https://try.github.io/"&gt;Many&lt;/a&gt;. &lt;a href="https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners"&gt;Great&lt;/a&gt;. &lt;a href="https://www.youtube.com/watch?v=SWYqp7iY_Tc"&gt;Tutorials&lt;/a&gt; out there. It's a great tool to keep track of changes on your code!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I used Git for many years without really understanding what I was doing. I learned 4 commands (&lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git pull&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;) and asked my git-savant friend &lt;a href="https://twitter.com/alvarber"&gt;@AlvarBer&lt;/a&gt; for help whenever I got stuck. Which was often. I felt that Git was not very user-friendly.&lt;/p&gt;

&lt;p&gt;Okay, fine: &lt;strong&gt;I thought it hated me&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, one summer I was introduced to a new command: &lt;code&gt;git rebase -i&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The specifics deserve a whole separate post, but after a very frustrating weekend fiddling with it I had a realization:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Git sees a repository as a series of &lt;strong&gt;atomic immutable changes&lt;/strong&gt; (called &lt;em&gt;commits&lt;/em&gt;) that can be &lt;strong&gt;copied&lt;/strong&gt;, but &lt;strong&gt;not changed, moved or deleted&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note a few important bits in that sentence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commits are &lt;strong&gt;atomic immutable changes&lt;/strong&gt;: Once you create a commit, it cannot be modified. If you want to change a commit, you need to create two new commits.&lt;/li&gt;
&lt;li&gt;Commits can be &lt;strong&gt;copied&lt;/strong&gt;: Operations like &lt;code&gt;git cherry-pick&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt; may seem daunting at first, but once you understand them as essentially copying operations, they become very intuitive and useful.&lt;/li&gt;
&lt;li&gt;Commits cannot be &lt;strong&gt;moved&lt;/strong&gt; or &lt;strong&gt;deleted&lt;/strong&gt; (except very intentionally): Git is designed to make it hard to lose work. Once you commit something, it's really hard to delete it. Therefore, &lt;strong&gt;don't be afraid to experiment&lt;/strong&gt; with Git commands, as there's always a way to go back! Even if you think you've messed up, there's usually a way to recover your work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you get in trouble, feel free to reach out on Twitter &lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you understand that, you deeply understand the rest of the commands (and even some of the error messages!).&lt;/p&gt;

&lt;p&gt;With time, you develop an &lt;strong&gt;intuition&lt;/strong&gt; for Git that allows you to do complex operations in a short amount of time, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Re-writing the commit history so that every commit makes sense independently of the others. This will make you an amazing Open Source contributor!&lt;/li&gt;
&lt;li&gt;Experimenting with different versions of solving problems in different branches, and easily pick from one and the other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every senior developer I've come across has a deep, intuitive understanding of Git, and for good reason. Spend time to learn it well, and it will reward that time tenfold.&lt;/p&gt;

&lt;h4&gt;
  
  
  Resources:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=3m7BgIvC-uQ"&gt;Git For Ages 4 and Up&lt;/a&gt;: The best Git tutorial I've seen to date. An in-depth explanation of what I've written here:&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://try.github.io/"&gt;GitHub's Curated List of Tutorials&lt;/a&gt;: GitHub is the biggest service that hosts Git repositories. They have extensive documentation to learn about Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And last, but not least:&lt;/p&gt;

&lt;h1&gt;
  
  
  Milestone: You don't think in terms if/for statements anymore
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Experienced engineers know what details to ignore to look at the big picture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Learning to program is very similar to learning to speak.&lt;/p&gt;

&lt;p&gt;When you first start learning to code, you struggle with the syntax of languages. &lt;strong&gt;You struggle to communicate simple concepts&lt;/strong&gt; to the computer, such as &lt;code&gt;if the colour is "red", then stop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As you become used to the syntax, you also start finding it easier to express those concepts. They become second nature, you don't have to think about them anymore.&lt;/p&gt;

&lt;p&gt;Now that you are comfortable with expressing simple concepts, &lt;strong&gt;you can compose them into more complex ideas&lt;/strong&gt;, like functions.&lt;/p&gt;

&lt;p&gt;When you master those more complex pieces, you can use &lt;em&gt;those&lt;/em&gt; to compose bigger and better things, like whole applications.&lt;/p&gt;

&lt;p&gt;This cycle continues for your entire career. &lt;strong&gt;Experienced engineers have deeply mastered many, many concepts&lt;/strong&gt;, so they can form very complex systems without being worried about the details of every small piece.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Advanced engineers have a very rich vocabulary of programming concepts at their fingertips.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The more advanced you are, the bigger picture you can see&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Resources
&lt;/h4&gt;

&lt;p&gt;While &lt;strong&gt;practice&lt;/strong&gt; is the most important factor to develop this intuitive understanding, here are some books that teach essential concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean Code: It's a great handbook for solid Object-Oriented Programming. Whether you like OOP or not, it has some great notions on how to keep OOP code neat and tidy.&lt;/li&gt;
&lt;li&gt;The Pragmatic Programmer: The best programming book I've read, by far. It outlines best practices for engineers and &lt;strong&gt;how&lt;/strong&gt; to achieve the deep understanding I refer to in this book. I want to write a full review soon, so subscribe if you're interested!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These milestones have been consistently met by senior developers around me, so I think you can benefit by working towards them!&lt;/p&gt;

&lt;p&gt;However, keep in mind that &lt;strong&gt;these can take years to accomplish!&lt;/strong&gt; These are career-long goals to strive towards, it's expected that they will take time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'd like to hear from you.&lt;/strong&gt; Have you met any of these milestones? Which one are you going for next? Was this article helpful?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't hesitate to contact me on Twitter&lt;/strong&gt; &lt;a href="https://twitter.com/BeyondLoop"&gt;@BeyondLoop&lt;/a&gt;, for questions or feedback. I'll be happy to help in any way I can.&lt;/p&gt;

&lt;p&gt;Until then, happy journey!&lt;/p&gt;

</description>
      <category>career</category>
      <category>git</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
