<?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: Lane Wagner</title>
    <description>The latest articles on DEV Community by Lane Wagner (@wagslane).</description>
    <link>https://dev.to/wagslane</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%2F169444%2F0f5198ad-02a1-4a12-bb13-e8cc6d38ae2b.jpg</url>
      <title>DEV Community: Lane Wagner</title>
      <link>https://dev.to/wagslane</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wagslane"/>
    <language>en</language>
    <item>
      <title>Maybe You Do Need Kubernetes</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 18 Mar 2024 13:00:00 +0000</pubDate>
      <link>https://dev.to/wagslane/maybe-you-do-need-kubernetes-2h0</link>
      <guid>https://dev.to/wagslane/maybe-you-do-need-kubernetes-2h0</guid>
      <description>&lt;p&gt;Theo has this great video on Kubernetes, currently titled &lt;a href="https://www.youtube.com/watch?v=H5sPGruv2yc"&gt;"You Don't Need Kubernetes"&lt;/a&gt;. I'm a Kubernetes enjoyer, but I'm not here to argue about that. The part of the video I &lt;em&gt;do&lt;/em&gt; want to discuss has nothing to do with k8s. It's where Theo draws the "Line of Primeagen".&lt;/p&gt;

&lt;p&gt;He explains that some technologies trade scalability (performance, flexibility, whatever) for speed of development. Deploying Next.js using Vercel and Firebase is quick but it comes at a cost. As you scale up, either by adding users or by adding more complex features, you'll need to do one of two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rewrite with something more flexible or performant&lt;/li&gt;
&lt;li&gt;Pay a &lt;em&gt;lot&lt;/em&gt; of money to a third-party to handle your problems for you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, the idea is that you should choose a fast-to-ship technology so that you can move faster and hire more cheaply.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;...I can ship a Go app to k8s faster than I can get eslint, tsc, and vsc-de to cooperate... but I digress...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then you stick with that strategy until you scale up to the "Line of Primeagen":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m3msm21y89tc0ut1ksw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m3msm21y89tc0ut1ksw.png" alt="line of primeagen" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It represents the point where you're spending so much money due to slow code or third-party costs that it's worth it to do the hard things required to more efficiently "scale" (whatever that means in your case).&lt;/p&gt;

&lt;p&gt;You gotta hire a Rust Chad and kick those React Andys to the curb. Or something.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's wrong with this idea?
&lt;/h2&gt;

&lt;p&gt;Well, nothing really. Theo's correct. If you're a founder, indiehacker, or engineer #1 at a startup, this is exactly how you should be thinking.&lt;/p&gt;

&lt;p&gt;The problem is that &lt;em&gt;you&lt;/em&gt; aren't a founder, an indiehacker, or engineer #1 at a startup. 99% of my readers want to be a great engineer and earn a high salary as employee #2-10000 at a tech company. There's nothing wrong with that, but it means you should think about this stuff differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should &lt;em&gt;you&lt;/em&gt; do?
&lt;/h2&gt;

&lt;p&gt;When I look at that graph above, I think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How can &lt;em&gt;I&lt;/em&gt; be the one they throw money at to come in and do the hard things?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you're making a &lt;em&gt;business&lt;/em&gt; decision, it's generally good to pick the simplest, fastest, and cheapest option&lt;/li&gt;
&lt;li&gt;When you're making a &lt;em&gt;career&lt;/em&gt; decision, it pays to be an expert in hard things&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To be clear, I'm &lt;em&gt;not&lt;/em&gt; saying that you should solve simple problems in complicated ways just to inflate your market value. That can have the opposite effect. Bad engineers do that. I'd say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gain the hard skills required to solve complex problems, but only deploy complex solutions when they're actually needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Maybe you should learn Kubernetes
&lt;/h2&gt;

&lt;p&gt;People don't like to hear this, but &lt;em&gt;difficulty is a moat&lt;/em&gt;. When something gets easy, it gets cheap. If you want to be paid a lot, you need to be &lt;strong&gt;really good&lt;/strong&gt; at something that's both &lt;em&gt;in-demand&lt;/em&gt; and &lt;em&gt;hard&lt;/em&gt;. If it were easy, everyone would be doing it. That's why very few people actually made money dropshipping in 2015 or buying NFTs in 2017. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2uziinquyxbs7ot4vxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2uziinquyxbs7ot4vxe.png" alt="making money agen" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's also why I hate when coding Bootcamps talk about how easy it is to learn to code. It's not easy. At least, not if you're doing the interesting stuff that pays well.&lt;/p&gt;

&lt;p&gt;To be clear, I don't believe in standing in the way of progress. I want coding and software engineering to get simpler, easier, and faster. The result of that, however, is that the winning strategy for software engineers is to continually build expertise in in-demand, hard-to-learn stuff.&lt;/p&gt;

&lt;h2&gt;
  
  
  So should I not learn Next.js?
&lt;/h2&gt;

&lt;p&gt;I'm not trying to single out individual technologies (except for Java, don't do Java kids). I'm saying that you shouldn't be scared of the hard stuff. Don't jump from easy tutorial to easy tutorial. Once you've found your bearings in this whole coding thing, start tackling some harder problems. The work will pay off.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Give Up Sooner</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Wed, 13 Mar 2024 21:57:51 +0000</pubDate>
      <link>https://dev.to/wagslane/give-up-sooner-3nne</link>
      <guid>https://dev.to/wagslane/give-up-sooner-3nne</guid>
      <description>&lt;p&gt;As a developer, how many times each day do you look something up online? I'm not talking about a simple piece of syntax, I'm talking about the things that are a bit harder to find. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a good way to compile C to WebAssembly and run it in a browser without needing to modify the code itself?&lt;/li&gt;
&lt;li&gt;Can the Stripe UI export promotion code redemptions as a CSV?&lt;/li&gt;
&lt;li&gt;Is there a &lt;em&gt;good&lt;/em&gt; tool for hot module reloading in Go?&lt;/li&gt;
&lt;li&gt;Is it socially acceptable to go out in public in South Dakota with blue hair?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While working as a team lead a few years ago, I remember asking Jeffy, a developer on my team:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is there a way to get &lt;a href="https://sqlc.dev/"&gt;sqlc&lt;/a&gt; to use pointers for nullable columns instead of the sql.Null types?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jeffy went heads down for... much longer than I would have expected. After more than a full day of research, he came back with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"No, there isn't a way. I found something that seemed promising, but it doesn't work. I think we should fork the project and add it ourselves."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Hol' up.&lt;/em&gt; I've got some questions.&lt;/p&gt;

&lt;p&gt;First, you're telling me that you found what we want in the API of a well-known open-source project, but it's broken and &lt;em&gt;no one else&lt;/em&gt; knows that it's broken but you? You are confident there aren't any skill issues involved?&lt;/p&gt;

&lt;p&gt;Second, you're telling me that your recommended course of action is for our team of four to fork a project with many thousands of lines of code and maintain our own version ad infinitum? All for a little quality of life improvement?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5twb3yu4oi42f51e13i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5twb3yu4oi42f51e13i.png" alt="" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;No, Jeffy. No.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What was Jeffy's problem?
&lt;/h2&gt;

&lt;p&gt;Counterintuitively, I believe Jeffy's problem was that he didn't know when to give up. I don't mean on the task as a whole, I mean on each individual path he was taking to find the answer. Here's a chart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy60xej2ou2v8padrjsvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy60xej2ou2v8padrjsvd.png" alt="Jeffy's Local Maximum" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jeffy was too attached to his initial searching methods. Maybe he was too attached to one page from the docs, to his initial search query, or to Google as a search mechanism altogether. Jeffy found a &lt;em&gt;local maximum&lt;/em&gt; and became stuck. He should have bailed &lt;strong&gt;so much sooner&lt;/strong&gt; and tried looking elsewhere.&lt;/p&gt;

&lt;p&gt;If I don't find good evidence that the answer I'm looking for exists in the place I'm searching, I'm bailing pronto. That doesn't mean I'm 100% certain it doesn't exist, but you usually don't have to read an entire Stack Overflow thread to know whether or not it relates to your problem.&lt;/p&gt;

&lt;p&gt;I'm honestly amazed at how some developers take so long to look stuff up. Now, in their defense, even if you're an efficient searcher, you can still get stuck in a "quagmire": a local maximum. If you're not careful, you can find yourself reading on and on about a topic that seems like &lt;em&gt;exactly&lt;/em&gt; what you're looking for, only for it to skim over the details that you actually need. Bummer.&lt;/p&gt;

&lt;p&gt;I'm a big &lt;a href="https://dev.to/computer-science/ai-taking-programming-jobs/"&gt;fan of using AI&lt;/a&gt; as a replacement for some of my would-be Google searches, but Chat GPT is the &lt;em&gt;ultimate&lt;/em&gt; quagmire, that is the ultimate local maximum. It's the worst kind of quagmire because at every step it will confidently reassure you that it does in fact know the answer. When you insist that it's wrong, it confidently continues to provide information that sounds correct, but isn't.&lt;/p&gt;

&lt;p&gt;If you use Chat GPT for programming assistance, you &lt;em&gt;need&lt;/em&gt; to develop a strong sense of when Chat GPT is making stuff up. In short, &lt;em&gt;you need to know when to bail.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RTFM
&lt;/h2&gt;

&lt;p&gt;Sometimes we talk about "Googling things" as a skill unto itself, and it kind of is. But similar to Chat GPT, it's less about formulating the most pristine search query, and it's more about knowing when to give up on a goose chase.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the SERP indicate that your original search query was a good one? No? Bail.&lt;/li&gt;
&lt;li&gt;Does the first page you visit have a directly relevant title or first paragraph? No? Bail.&lt;/li&gt;
&lt;li&gt;After spending another minute on the page are you still convinced the answer is somewhere below? No? Bail.&lt;/li&gt;
&lt;li&gt;Is it likely the answer can be found more easily in the docs, the user manual, or, &lt;em&gt;gasp&lt;/em&gt;, the code itself? Yes? Bail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reading the manual, perusing the official docs, or digging through the source code usually takes longer than skimming an on-topic article or tutorial, but SEO-spammed articles often coalesce into an entire sea of local maxima. They tease you by scratching the surface of what you're looking for, but if your issue isn't the most common one, you can waste hours trudging through the garbage.&lt;/p&gt;

&lt;p&gt;Sometimes, taking the &lt;a href="https://dev.to/education/learn-to-code-the-slow-way/"&gt;time to go deep&lt;/a&gt; into the topic is the fastest (only?) way to find answers to the more esoteric questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Back to Jeffy
&lt;/h2&gt;

&lt;p&gt;I don't want to leave you hanging on this story. As it turned out, the documentation for SQLC was complete, but it was tricky to understand how to use pointers for nullable columns if you landed on the wrong page. There are a lot of configuration options for SQLC, and it's easy to get lost.&lt;/p&gt;

&lt;p&gt;I just cloned the repo, grepped for "pointer", and found the code that parsed the configuration option. It was clear after just a few minutes of reading the source that we just needed to do three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Specify the &lt;code&gt;go_type&lt;/code&gt; we want (e.g. "string" instead of &lt;code&gt;sql.NullString&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;nullable: true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;pointer: true&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;overrides&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;db_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text"&lt;/span&gt;
    &lt;span class="na"&gt;nullable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;go_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string"&lt;/span&gt;
      &lt;span class="na"&gt;pointer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes you gotta rtfm. Sometimes you gotta suck it up and grep the code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;btw, &lt;a href="https://sqlc.dev/"&gt;sqlc&lt;/a&gt; is awesome and if you like Go you should be aware of it.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Put that Framework Down Before Someone Gets Hurt</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Tue, 07 Nov 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/wagslane/put-that-framework-down-before-someone-gets-hurt-29fn</link>
      <guid>https://dev.to/wagslane/put-that-framework-down-before-someone-gets-hurt-29fn</guid>
      <description>&lt;p&gt;There is only one question that ignites my inner rage more than "How do I get a developer job in 3 months?"? That question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What &lt;a href="https://dev.to/backend/dont-start-with-frameworks/"&gt;web framework&lt;/a&gt; should I use?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's not that I think frameworks are evil, scary, or even bad. I'm just bothered by the '&lt;em&gt;assumption&lt;/em&gt; that to build an online thing, you &lt;em&gt;must&lt;/em&gt; start with a framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do I mean by "framework"?
&lt;/h2&gt;

&lt;p&gt;The JavaScript ecosystem has had its way with the definition of the term "web framework". The JS community seems to excel at keeping us from having nice things.&lt;/p&gt;

&lt;p&gt;I like to define the terms "library" and "framework" as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Library&lt;/strong&gt;: Code that you import into your project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: A structure that you import your code into.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A framework provides nearly as much project lock-in as a programming language. If I choose to build my application in Next.js, it's impossible to move to SvelteKit without a rewrite.&lt;/p&gt;

&lt;p&gt;A library is hot-swappable. If I use a library for database operations, and a new one comes out that seems to do a better job, only a small part of my application needs to be updated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hey Next.js devs, React is a framework.&lt;/strong&gt; Neither Dan Abramov nor God himself can convince me that React is just a library. I understand that it can kinda be used as one, but no one does that.&lt;/p&gt;

&lt;p&gt;And while we're at it, Express.js isn't a framework. It's just a routing library. &lt;em&gt;(yes I know it says framework on the homepage, but see my preview comments about the JS ecosystem)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Put that hammer down
&lt;/h2&gt;

&lt;p&gt;Story time. I was working at a company about 5 years ago where we were maintaining an ETL pipeline that processed anywhere from 100 to 1000 messages per second. There were some micro-services involved that did a bunch of different things. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Translating messages from one language to another&lt;/li&gt;
&lt;li&gt;Sorting the messages into categories based on keywords in the content&lt;/li&gt;
&lt;li&gt;Sending alerts based on the aforementioned categories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One day I was tasked with figuring out why one of our services was choking at a mere 30 messages per second. This service was responsible for taking messages from a queue and placing them into different Postgres databases depending on which customer cared about the message. In theory, it was literally this simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Message comes in&lt;/li&gt;
&lt;li&gt;If the  &lt;code&gt;customer_id&lt;/code&gt; on the message is in the map of &lt;code&gt;customer_id&lt;/code&gt; -&amp;gt; &lt;code&gt;database_url&lt;/code&gt;, then insert the message into the database at &lt;code&gt;database_url&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hopped into the project and was immediately dismayed to learn it was a Ruby project. But not &lt;em&gt;just&lt;/em&gt; a Ruby project, it was a Ruby on &lt;em&gt;Rails&lt;/em&gt; project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kAD3OTyC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmt5kdnzu30v9k2wozci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kAD3OTyC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmt5kdnzu30v9k2wozci.png" alt="Image description" width="487" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look, I have no problem with Ruby on Rails. There are plenty of examples of companies that have made millions or even billions dollars on the back of Rails projects.&lt;/p&gt;

&lt;p&gt;But this isn't a monolithic web application. This is a &lt;em&gt;tiny&lt;/em&gt; service that's supposed to quickly dump messages into a Postgres database. Why do I need an HTTP router? Why do I need an auth library? Why do I need all the other junk?&lt;/p&gt;

&lt;p&gt;I need two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A way to concurrently pull messages from a Rabbit queue&lt;/li&gt;
&lt;li&gt;A way to insert messages into a database asynchronously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go and JavaScript both have &lt;em&gt;super&lt;/em&gt; easy and lightweight ways to accomplish this. I just need a few lines of code, and not much by way of dependencies. After a couple of hours poking through this Rails monstrosity (that for some reason also used Redis to track progress) I just wrote a single worker in Go, which took less than an hour, deployed the new service, tested it in production, and archived the Ruby project.&lt;/p&gt;

&lt;h2&gt;
  
  
  But could it have worked in Rails?
&lt;/h2&gt;

&lt;p&gt;Yes. I'm sure that I could have just refactored that Rails project, found the hot paths, and optimized the performance bottlenecks. I mean, its unlikely that it was ever going to be as fast or as lightweight as a Go service, but the project was I/O bound so it could have been fine.&lt;/p&gt;

&lt;p&gt;The point is that sometimes as software engineers we find a hammer that we really f---ing love. It's such a fun hammer! It's so ergonomic! So &lt;em&gt;clean&lt;/em&gt;! And we're so good at wielding it! So, its natural that we go around swinging it at every goddamn nail we see.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's a question of defaults
&lt;/h2&gt;

&lt;p&gt;At Boot.dev we use Nuxt.js for our front-end UI. It's a great framework. But when I write a Discord Bot you won't catch me running &lt;code&gt;nuxi init&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I'm not just saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use the right tool for the job"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, I'm saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use the simplest tool for the job"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's easy to add complexity as you need it to accomplish your goals. It's much harder to remove it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding Stacks: From Concept to Python Implementation</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Sat, 07 Oct 2023 19:32:34 +0000</pubDate>
      <link>https://dev.to/wagslane/understanding-stacks-from-concept-to-python-implementation-44j2</link>
      <guid>https://dev.to/wagslane/understanding-stacks-from-concept-to-python-implementation-44j2</guid>
      <description>&lt;p&gt;A &lt;strong&gt;stack&lt;/strong&gt; is an abstract data type that serves as a collection of elements. The name "stack" originates from the analogy of items physically stacked on top of each other. Just like a stack of plates at a buffet, plates can be added, removed, and viewed from the top. However, plates further down are not immediately accessible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SV--IVZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6d3ux1zoyuenj043zg90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SV--IVZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6d3ux1zoyuenj043zg90.png" alt="Image description" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A stack operates on a &lt;code&gt;LIFO&lt;/code&gt; (last in, first out) principle. This means that the most recently added item will be the first to be removed.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Basic Stack Operations:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Push&lt;/strong&gt;: &lt;code&gt;stack.push(item)&lt;/code&gt; - Adds a new item on top of the stack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pop&lt;/strong&gt;: &lt;code&gt;stack.pop()&lt;/code&gt; - Removes the top item from the stack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peek&lt;/strong&gt;: &lt;code&gt;stack.peek()&lt;/code&gt; - Returns the top item without removing it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size&lt;/strong&gt;: &lt;code&gt;stack.size()&lt;/code&gt; - Returns the number of items in the stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When might you use a stack?
&lt;/h3&gt;

&lt;p&gt;Let's take the and example from the world of game development.&lt;/p&gt;

&lt;p&gt;When designing a weapon system in a video game, especially for weapons with magazines like a repeater crossbow, a stack can be an ideal choice for the underlying data structure. A magazine that holds arrows, for instance, would benefit from the LIFO principle: the last arrow loaded is the first one fired.&lt;/p&gt;

&lt;p&gt;Here's the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Magazine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arrow&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arrow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You could then use the &lt;code&gt;Magazine&lt;/code&gt; class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;magazine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Magazine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Arrow 1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Arrow 2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Arrow 3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;# Arrow 3
&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;# Arrow 3
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;# Arrow 2
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;magazine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;# Arrow 1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Are stacks fast?
&lt;/h2&gt;

&lt;p&gt;Stacks are fast. All operations are &lt;code&gt;O(1)&lt;/code&gt;, which means they take the same amount of time regardless of the size of the stack. Stack of 10 items? Stack of 10,000 items? It doesn't matter, pushing and popping will be &lt;em&gt;blazingly&lt;/em&gt; fast.&lt;/p&gt;

&lt;p&gt;Think about it: you can only add or remove from the top of the stack. You &lt;em&gt;never&lt;/em&gt; have to iterate through the entire stack to find an item.&lt;/p&gt;

&lt;p&gt;Now, to be fair, if for some reason you know that an item exists in a Stack, you can &lt;code&gt;pop()&lt;/code&gt; until you find it. This would be &lt;code&gt;O(n)&lt;/code&gt;, but if that's a use case for you, you should probably be using a different data structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Origin of "Stack Overflow"
&lt;/h2&gt;

&lt;p&gt;While many developers are familiar with the website &lt;a href="https://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;, not everyone knows the term's origin. A programming language, such as Python, uses a stack data structure to manage function calls and their scope. &lt;/p&gt;

&lt;p&gt;Consider this simple program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;function_one&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;function_two&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;function_two&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;function_two&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;function_three&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;function_three&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;function_three&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"function three"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;function_one&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, each function call is represented by a &lt;a href="https://en.wikipedia.org/wiki/Call_stack"&gt;call frame&lt;/a&gt; in memory. When a function is invoked, a new frame is pushed onto the runtime stack. When the function completes its execution, its frame is popped off the stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dreaded Stack Overflow
&lt;/h3&gt;

&lt;p&gt;A "stack overflow" refers to an error that occurs when the stack exceeds its capacity. The limit of this capacity varies based on numerous factors like the programming language and available memory. If a program surpasses this limit, the stack overflows, which often results in the program crashing. Python, however, takes measures to prevent the interpreter stack from growing excessively large, thereby averting a stack overflow. Instead, a runtime exception is raised.&lt;/p&gt;

</description>
      <category>python</category>
      <category>devops</category>
      <category>datascience</category>
      <category>coding</category>
    </item>
    <item>
      <title>Learn to Code the Slow Way</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 11 Sep 2023 15:51:34 +0000</pubDate>
      <link>https://dev.to/bootdotdev/learn-to-code-the-slow-way-2g60</link>
      <guid>https://dev.to/bootdotdev/learn-to-code-the-slow-way-2g60</guid>
      <description>&lt;p&gt;Ever since starting &lt;a href="https://www.boot.dev" rel="noopener noreferrer"&gt;Boot.dev&lt;/a&gt;, I've been flooded with what I call "quicksand questions". On the surface, a quicksand question &lt;em&gt;seems&lt;/em&gt; like a good question. If you could answer it, it would catapult you from where you are (nightshift at the Wendy's drive-in) to where you want to be (telling friends that you work at Netflix btw).&lt;/p&gt;

&lt;p&gt;Quicksand questions are all about finding shortcuts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I need a developer job in 3 months, what's the best way to do that?&lt;/p&gt;

&lt;p&gt;I see you've laid out 20 courses in your backend learning path, but, *wink* which ones can I skip?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What's wrong with shortcuts?
&lt;/h2&gt;

&lt;p&gt;Now, I want to be &lt;em&gt;clear&lt;/em&gt;, there is &lt;em&gt;absolutely nothing wrong&lt;/em&gt; with wanting to take a shorter path toward your career goal. Anything else would be insanity. If there was a pill to turn you into a senior developer overnight, I'd encourage you to pop that sucker.&lt;/p&gt;

&lt;p&gt;In theory, educational min-maxing seems like a solid strategy, but in practice it just doesn't work.&lt;/p&gt;

&lt;p&gt;Why? Because the destination is &lt;em&gt;unknown&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dijkstra's algorithm is great if you know where you're going. If you don't, you need something else.&lt;/p&gt;

&lt;h2&gt;
  
  
  No one knows where they're going
&lt;/h2&gt;

&lt;p&gt;The tech scene is a clusterf*ck of complexity. I learned like 10 different programming languages in college, and even 3 years into my degree, I still didn't know that I'd end up working as a backend engineer writing Go.&lt;/p&gt;

&lt;p&gt;I interviewed for all sorts of nonsense, from embedded systems to frontend development. Yeah, turns out that my Prolog class didn't help much in my first interview, but you know what? It didn't &lt;em&gt;hurt&lt;/em&gt;, and now when someone says "it's a declarative system" my facial expression doesn't betray ignorance.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F451bzxm8hpmo8lyhbx8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F451bzxm8hpmo8lyhbx8x.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you knew &lt;em&gt;exactly&lt;/em&gt; which concepts you'd need to master to pass your first interview, then you could might be able to find an effective shortcut. The trouble is, there is no &lt;em&gt;precise&lt;/em&gt; subset of knowledge that will always be enough to pass every possible first interview.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every company has its own janky tech stack&lt;/li&gt;
&lt;li&gt;Every PM has their own version of "agile"&lt;/li&gt;
&lt;li&gt;Every hiring manager has their own 7-step interview process&lt;/li&gt;
&lt;li&gt;Every job requires different bits of arcane knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You have &lt;em&gt;no idea&lt;/em&gt; what you'll be doing day to day at your first job when you're starting to learn to code. I hear people say things like "I never even use my DSA skills at work", and upon further inspection, it turns out they're a WordPress "developer".&lt;/p&gt;

&lt;h2&gt;
  
  
  So I shouldn't be interested in the shortest path?
&lt;/h2&gt;

&lt;p&gt;You should, it's just not where you think you'll find it. The shortest path to a job as a programmer does &lt;em&gt;not&lt;/em&gt; involve minimizing the amount of things you need to learn and build. That sort of thinking results in a much longer, more mentally exhausting journey. Something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Jump directly into a web framework (probably Next.js since you're basic af)&lt;/li&gt;
&lt;li&gt;Find you have a talent for building TODO apps&lt;/li&gt;
&lt;li&gt;Realize you can't build "hello world" without a tutorial&lt;/li&gt;
&lt;li&gt;Attempt to remedy that by doing more tutorials&lt;/li&gt;
&lt;li&gt;Read on Twitter that ackshaully Rust is the best language&lt;/li&gt;
&lt;li&gt;Admit defeat at the hands of the borrow checker&lt;/li&gt;
&lt;li&gt;Repeat steps 1-4 &lt;code&gt;n&lt;/code&gt; times, where &lt;code&gt;n&lt;/code&gt; is a &lt;code&gt;d4_roll * your_stubbornness&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The shortest path (or at least short*er* path) usually looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Learn core programming/cs &lt;em&gt;concepts&lt;/em&gt; in some language&lt;/li&gt;
&lt;li&gt;Tentatively decide on the kind of programming you want to do (frontend, backend, mobile, etc)&lt;/li&gt;
&lt;li&gt;Learn the fundamentals of that kind of programming in technologies well suited for it&lt;/li&gt;
&lt;li&gt;Never stop learning and building while you search for a job&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't get me wrong, this second path still isn't short. Programming isn't easy, sorry if you were told it was, but if you're willing to put in the effort you can avoid an aimless stroll through the 9th circle of tutorial hell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't be scared of work
&lt;/h2&gt;

&lt;p&gt;Folks spend eons trying to find the shortest learning path, or trying to avoid learning things that "they'll never use again". They're fine wasting &lt;em&gt;months or years&lt;/em&gt; learning absolutely nothing to avoid doing &lt;em&gt;any&lt;/em&gt; unnecessary work. Why not bite the bullet and risk spending a few &lt;em&gt;days&lt;/em&gt; learning something that's not directly applicable to the job you'll eventually land?&lt;/p&gt;

&lt;h2&gt;
  
  
  Dogecoin to the mooon?
&lt;/h2&gt;

&lt;p&gt;Let's be 100000000% honest. Some folks are looking for a good 'ol fasioned get rich quick scheme. After a few weeks of struggling with loops, they'll give up and purchase an AI-powered crypto trading bot on Fiverr. Don't be like those folks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Becoming a software engineer is NOT a "get-rich-quick" scheme. It's a "get-upper-middle-class-slow" scheme&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The trick to "making it"? You have to actually get good.&lt;/p&gt;

&lt;p&gt;So, instead of copy/pasting haphazardly from StackOverflow to "fix" the next error you encounter, take the extra minutes to figure out what it &lt;em&gt;means&lt;/em&gt;. I can't begin tell you how many PRs I've reviewed that "fix" something, but are just a patch of a patch because the dev never grokked the underlying problem.&lt;/p&gt;

&lt;p&gt;For example, an ex-Java dev (it's always a Java dev) finds that &lt;em&gt;sometimes&lt;/em&gt; this function (in Go) panics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// sendEmail sends emails, but sometimes panics&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They go straight to Google and find that panicking in Go can be "solved" with a &lt;code&gt;recover&lt;/code&gt;. So they open a pull request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;recover&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"recovered from panic in sendEmail"&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="c"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This kinda works? But a better developer would try to understand and fix the underlying problem in the code. They would add &lt;code&gt;nil&lt;/code&gt; checks, or just stop using pointers altogether for this function...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// now sendEmail never panics&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want to have a bias toward becoming better, not reaching the end. There isn't an "end", there's just too much out there to learn. The scope of all of software engineering is larger than the scope of your last program's global namespace.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's not the advice you wanted
&lt;/h2&gt;

&lt;p&gt;Getting fit, giving up addiction, building a business, and yes, getting your first dev job are all &lt;em&gt;hard&lt;/em&gt;. Don't make it harder on yourself by wasting your time searching for shortcuts.&lt;/p&gt;

&lt;p&gt;Learn evergreen foundational stuff, build projects that interest you, and you'll be amazed how far you can get in just a year or two of consistent effort.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>career</category>
      <category>backenddevelopment</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Frontend? Gross. This Is Why I've Always Preferred the Backend</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 10 Jul 2023 15:54:00 +0000</pubDate>
      <link>https://dev.to/wagslane/frontend-gross-this-is-why-ive-always-preferred-the-backend-27am</link>
      <guid>https://dev.to/wagslane/frontend-gross-this-is-why-ive-always-preferred-the-backend-27am</guid>
      <description>&lt;p&gt;As a kid, I always wanted to be good at drawing. I practiced drawing my favorite anime characters, but frankly, my mom was the only one who thought they were good.&lt;/p&gt;

&lt;p&gt;Fast forward roughly 18 years, and I'm a college graduate with a computer science degree looking for my first role. I had a part-time full-stack developer job in college, but I wanted to work at a larger company and specialize on one side of the stack for at least a few years. I built a few websites in college, and I found that I would spend roughly 50% of my time on the &lt;em&gt;entire project&lt;/em&gt; just tweaking CSS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The worst part?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The sites all looked like ass anyways.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My decision was made. I wanted to &lt;a href="https://boot.dev"&gt;become a backend engineer&lt;/a&gt;. Let's talk about some of the other factors that impacted my decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  I love building my own stuff, sans the UI
&lt;/h2&gt;

&lt;p&gt;I &lt;em&gt;hate&lt;/em&gt; UI design. You know, sitting for hours, tweaking bloody CSS classes, and the result? A site that makes most 90s GeoCities pages look like a Van Goph.&lt;/p&gt;

&lt;p&gt;It was then I realized that I could just make the command line my best friend. When you &lt;a href="https://blog.boot.dev/backend/best-backend-projects/"&gt;build backend projects&lt;/a&gt; and CLI tools for developers, you &lt;em&gt;never need to build a UI again&lt;/em&gt;. Developers &lt;em&gt;prefer&lt;/em&gt; CLI tools!&lt;/p&gt;

&lt;p&gt;It’s not about giving up, it’s just about recognizing where my strengths and preferences lie.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building tools for developers makes you a better developer
&lt;/h2&gt;

&lt;p&gt;If you think about it, everything you build as a backend developer will be used by other developers! That means you have a fantastic feedback loop where your peers and mentors are telling you how to hone your craft, every single day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building a REST API? Front-end devs use it.&lt;/li&gt;
&lt;li&gt;Building a CLI tool? Other developers use it.&lt;/li&gt;
&lt;li&gt;Architecting a database? Other back-end developers use it.&lt;/li&gt;
&lt;li&gt;Choosing a &lt;a href="https://blog.boot.dev/backend/top-backend-technologies/"&gt;backend technology&lt;/a&gt;? Other developers on the team will integrate with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And trust me, the feedback from other developers is rarely sugarcoated. There are no &lt;a href="https://www.urbandictionary.com/define.php?term=Shit%20Sandwich"&gt;shit sandwiches&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They’ll tell you if your tool is a diamond in the rough or just plain rough. It's an opportunity to learn, improve, and ultimately, become a better developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  My favorite question: "Is it possible?"
&lt;/h2&gt;

&lt;p&gt;I've always been more invested in &lt;em&gt;what can be done&lt;/em&gt; rather than &lt;em&gt;how it looks&lt;/em&gt;. Function over form, at least from an engineering perspective.&lt;/p&gt;

&lt;p&gt;Fancy buttons and interactive graphics are cool, but I'd rather geek out about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can we translate all these tweets into Japanese in real-time?&lt;/li&gt;
&lt;li&gt;Can we reduce our cloud bill by 50% if we use this database?&lt;/li&gt;
&lt;li&gt;Can we cut the page load time in half?&lt;/li&gt;
&lt;li&gt;How can we architect our backend to simplify the code required for email, sms, discord, and in-app notifications?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scalability and performance
&lt;/h2&gt;

&lt;p&gt;I love thinking about scalability and performance. There’s just something so satisfying about planning, creating, and optimizing systems to make them perform better, handle more traffic, and grow as the business and use cases grow. It's so nice to work on something that can be measured concretely.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I reduced latency by 50%.&lt;/li&gt;
&lt;li&gt;I improved throughput by 200%.&lt;/li&gt;
&lt;li&gt;I reduced our cloud bill by 30%.&lt;/li&gt;
&lt;li&gt;The system can now handle 10x the traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get the idea. It's easier to explain the value of your work when you can quantify it. It sounds more impressive to the boss than "I moved our vanilla CSS to Tailwind".&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript kinda blows
&lt;/h2&gt;

&lt;p&gt;Let's switch gears and talk about JavaScript.&lt;/p&gt;

&lt;p&gt;It's unbelievably impressive that JavaScript has come as far as it has, you know, being the absolute cluster f*** of a language that it is. It's a &lt;a href="https://blog.boot.dev/clean-code/reacting-to-programming-types-and-mindsets/"&gt;dynamically typed&lt;/a&gt; nightmare with legacy baggage that's been bolted on over the years. There are ways to work with it that are &lt;em&gt;less&lt;/em&gt; bad, but it's still bad.&lt;/p&gt;

&lt;p&gt;At the moment &lt;a href="https://boot.dev/learn/learn-golang"&gt;Go&lt;/a&gt; is my language of choice. Static typing, fast compile times, a great standard library, and statically compiled binaries. It's a joy to work with.&lt;/p&gt;

&lt;p&gt;The great thing about the backend is that you can kinda just pick your stack. &lt;em&gt;Use whatever you want!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Like Go? Use it.&lt;/li&gt;
&lt;li&gt;Love Python? Use it.&lt;/li&gt;
&lt;li&gt;Enjoy the borrow checker? Rewrite your backend in Rust.&lt;/li&gt;
&lt;li&gt;Like Java? You're wrong, but use it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Higher pay
&lt;/h2&gt;

&lt;p&gt;And now, let’s talk about the elephant in the room: &lt;em&gt;money&lt;/em&gt;. Moolah. Cheddar. Greenbacks. Benjamins.&lt;/p&gt;

&lt;p&gt;Let’s face it, we all have bills to pay and I'm not ashamed to admit that I like money. So yeah, the pay advantage of backend engineers played a role in my decision.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://survey.stackoverflow.co/2023/#work-salary"&gt;2023 Stack Overflow&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend developers in the US: $165,000&lt;/li&gt;
&lt;li&gt;Frontend developers in the US: $140,000&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  You do you
&lt;/h2&gt;

&lt;p&gt;I can confidently say that my preference for &lt;a href="https://blog.boot.dev/backend/frontend-vs-backend-meaning/"&gt;backend development&lt;/a&gt; is not just a passing fancy. It’s a career choice driven by curiosity, passion, and yes, practicality. &lt;/p&gt;

&lt;p&gt;But remember, this is &lt;em&gt;my&lt;/em&gt; journey. &lt;em&gt;Your&lt;/em&gt; preferences in programming might be in creating sleek, dynamic web interfaces, or in developing the next big mobile app experience. And that's okay!&lt;/p&gt;

&lt;p&gt;In the end, finding joy in what you do, whether it's frontend, backend, game dev, or something in between will probably be the best predictor of your personal success. Good luck out there.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>backend</category>
      <category>go</category>
    </item>
    <item>
      <title>Build Your First Coding Project and Avoid Tutorial Hell</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Wed, 05 Jul 2023 13:47:00 +0000</pubDate>
      <link>https://dev.to/bootdotdev/build-your-first-coding-project-and-avoid-tutorial-hell-ioa</link>
      <guid>https://dev.to/bootdotdev/build-your-first-coding-project-and-avoid-tutorial-hell-ioa</guid>
      <description>&lt;p&gt;While "real" hell may or may not exist (no need to get into religious beliefs here), tutorial hell is &lt;em&gt;very&lt;/em&gt; real.&lt;/p&gt;

&lt;p&gt;My definition of tutorial hell goes something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tutorial hell is where you write code that others are explaining to you how to write, but you don't understand how to write it yourself when given a blank slate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At some point, it's time to take the training wheels off and build something &lt;em&gt;on your own&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is it time to build your own project?
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://boot.dev"&gt;Boot.dev&lt;/a&gt;, students write their first non-tutorial project after completing the following modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn Python (course)&lt;/li&gt;
&lt;li&gt;Learn OOP (course)&lt;/li&gt;
&lt;li&gt;Build a Python CLI (project)&lt;/li&gt;
&lt;li&gt;Learn Algorithms (course)&lt;/li&gt;
&lt;li&gt;Learn Data Structures (course)&lt;/li&gt;
&lt;li&gt;Build a Maze Solver (project)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal Project 1&lt;/strong&gt; (when they build their first fully custom project) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, keep in mind that Boot.dev students are hands-on-keyboard 100% of the time. I'm not saying you should watch 40 hours of video before building anything, but I &lt;em&gt;am&lt;/em&gt; saying you should have a solid understanding of coding fundamentals before building your &lt;em&gt;own idea&lt;/em&gt;. You should learn those fundamentals by &lt;em&gt;writing code&lt;/em&gt;, but it's best if the projects and challenges you're working on are &lt;em&gt;guided&lt;/em&gt; so that you can focus more on learning the &lt;em&gt;concepts&lt;/em&gt; and less on figuring out what to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the goal of your first project?
&lt;/h2&gt;

&lt;p&gt;Your goal here is &lt;em&gt;not&lt;/em&gt; to build something that makes money, or even to build something that will make its way onto your resume.&lt;/p&gt;

&lt;p&gt;The goal of this &lt;em&gt;first&lt;/em&gt; project is simply to get you used to the process of building something from scratch. You just need to get some practice breaking down a project into smaller pieces. You need to experience that first breath of fresh air as you emerge from the depths of tutorial hell for the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are some good requirements for your first project?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Try to spend 20-40 hours on this project.&lt;/li&gt;
&lt;li&gt;Use a programming language you're already familiar with.&lt;/li&gt;
&lt;li&gt;Commit your code to Git often, and push it up to Github.&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes#about-readmes"&gt;README.md file&lt;/a&gt; for your project. It should explain to readers:

&lt;ul&gt;
&lt;li&gt;What the project is, and what it does&lt;/li&gt;
&lt;li&gt;How to clone and run it&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;It's okay for (I'd even encourage) you to use third-party libraries! That said, make sure that some of the code that &lt;em&gt;you&lt;/em&gt; write is doing something interesting. You don't want a razor-thin wrapper around a third-party library to be the only thing you've written.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  But what should I build?
&lt;/h2&gt;

&lt;p&gt;The whole point of a personal project is that it's &lt;em&gt;personal&lt;/em&gt;. The idea needs to be &lt;em&gt;yours&lt;/em&gt;. Even if the project you build is &lt;em&gt;simple&lt;/em&gt; for now, at least it's &lt;em&gt;yours&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build something that you find interesting.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This probably isn't a project that will make its way onto your portfolio or resume, but it's still good to get into the habit of building things that are &lt;em&gt;interesting&lt;/em&gt; and &lt;em&gt;useful&lt;/em&gt;. Interesting and useful projects have many benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They're more fun to work on&lt;/li&gt;
&lt;li&gt;They have more interesting and difficult problems to solve&lt;/li&gt;
&lt;li&gt;You (or someone else) might actually use them&lt;/li&gt;
&lt;li&gt;They're more likely to grab the attention of other people&lt;/li&gt;
&lt;li&gt;Attention from other people can lead to career opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use a programming language that you're already at least somewhat familiar with. Assuming you haven't been writing a ton of code outside of Boot.dev, your project should probably be a Python program that runs on the command line. That's fine!&lt;/p&gt;

&lt;p&gt;I want to provide a few ideas to get your creative juices flowing, but &lt;em&gt;please&lt;/em&gt; don't choose a project from this list without at least putting your own spin on it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A text-based adventure game in the terminal&lt;/li&gt;
&lt;li&gt;A CLI tool to detect the strength of a password, or to validate it&lt;/li&gt;
&lt;li&gt;Tic-Tac-Toe in a tkinter GUI&lt;/li&gt;
&lt;li&gt;A tool that creates ASCII art from an image&lt;/li&gt;
&lt;li&gt;A command line tool to view Reddit feeds in the terminal&lt;/li&gt;
&lt;li&gt;A command line tool that parses a CSV file of pokemon data and lets you search for pokemon by name, type, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  But, but, but... I don't know how to build "X"!
&lt;/h3&gt;

&lt;p&gt;Your job as a developer is to &lt;em&gt;constantly&lt;/em&gt; build stuff that you've never built before. Don't shy away from an idea because you're not sure where to start. Google it. Ask ChatGPT. Ask the Discord community. You might need to put in an hour of research before starting to decide if your idea is feasible within a 40-hour time frame, but that's fine!&lt;/p&gt;

&lt;p&gt;Assuming that you'll be doing something you've never done before! You have some fundamentals under your belt. Now it's time to piece it all together and research as you go.&lt;/p&gt;

&lt;h2&gt;
  
  
  You'll need help
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You're going to get stuck.&lt;/strong&gt; If you don't get stuck, you probably chose an idea that's way too easy.&lt;/p&gt;

&lt;p&gt;The trick is developing a skillset for getting &lt;em&gt;unstuck&lt;/em&gt;. This is a skill that will serve you well (and is absolutely necessary) in your career as a developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get used to Googling
&lt;/h3&gt;

&lt;p&gt;Start with Google. Do some research on your idea. See what others have done when building similar projects. See if there are any libraries you can install to make your life easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use ChatGPT
&lt;/h3&gt;

&lt;p&gt;Talking through your issues with ChatGPT (&lt;a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging"&gt;rubber duck&lt;/a&gt; debugging) can be a great way to get unstuck.&lt;/p&gt;

&lt;p&gt;Don't have ChatGPT write your code for you! You won't learn that way, and you'll be dreadfully slow if you get stuck in that habit. Instead, use ChatGPT to help you think through your problems, and ask it to try to find bugs in your code or explain code snippets you don't understand.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep in mind that ChatGPT can be confidently wrong, so don't take its word as law.&lt;/em&gt; Use it to get back on track, but verify the information it feeds you with other sources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Discord
&lt;/h3&gt;

&lt;p&gt;Ask questions in the &lt;a href="https://boot.dev/community"&gt;Boot.dev Discord server&lt;/a&gt;, especially if you're a current student (but you're welcome either way)! As with all question-asking, provide as much context as you can so that when your fellow students and mentors help they can efficiently provide you with the information you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publish and share
&lt;/h2&gt;

&lt;p&gt;Get your project out into the world! Again, the purpose of your &lt;em&gt;first-ever&lt;/em&gt; personal coding project probably shouldn't be to build something amazing for your resume. That said, I still think you should put enough love into it that you're not ashamed to make it public on your &lt;a href="https://blog.boot.dev/jobs/build-github-profile/"&gt;GitHub profile&lt;/a&gt; and share it with other devs you know. Get some feedback, ask for code reviews, and you can always iterate on it later and improve it as your skills improve.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>codenewbie</category>
      <category>learning</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Awww, do I Really Need to Learn X to Get a Job as a Developer?</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 26 Jun 2023 14:20:00 +0000</pubDate>
      <link>https://dev.to/bootdotdev/awww-do-i-really-need-to-learn-x-to-get-a-job-as-a-developer-29oa</link>
      <guid>https://dev.to/bootdotdev/awww-do-i-really-need-to-learn-x-to-get-a-job-as-a-developer-29oa</guid>
      <description>&lt;p&gt;A developer's life is a never-ending saga of learning new things. It's like you're playing Diablo where every new Jira ticket can feel like the next mini boss to slay. Exciting? Absolutely. Scary? Sure. Especially at first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we resist learning new things?
&lt;/h2&gt;

&lt;p&gt;We're creatures of comfort. We like what we know, and the unknown can be as intimidating as a null dereference in prod. But here's the deal: the software development industry moves fast and there's a near-infinite amount of stuff to learn. This isn't mechanical engineering. We have 3 new JavaScript frameworks &lt;em&gt;per day&lt;/em&gt; people.&lt;/p&gt;

&lt;p&gt;Imagine this. You're squaring off against another candidate for a job, and you both are qualified in that you check all the boxes in the listed job requirements (I know, super unrealistic). The only difference between you two? &lt;em&gt;They know a heckofa lot more about the non-essential stuff than you do.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Who do &lt;em&gt;you&lt;/em&gt; think the employer will choose?&lt;/p&gt;

&lt;h2&gt;
  
  
  The necessity vs curiosity dilemma
&lt;/h2&gt;

&lt;p&gt;Now, I'm not saying you should learn every design pattern, language or tool that comes onto the scene. What you need is a balance between &lt;strong&gt;necessity&lt;/strong&gt; and &lt;strong&gt;curiosity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before you panic about not knowing the ins and outs of Kubernetes or TensorFlow, remember this: &lt;strong&gt;you don't need to learn everything before getting a job&lt;/strong&gt;. Real growth happens on the job, through tackling &lt;em&gt;real&lt;/em&gt; problems, not hypothetical ones.&lt;/p&gt;

&lt;p&gt;But if you want to stand out in this vast sea of developers, a spark of intellectual curiosity can be your purple cow. Go ahead and explore an interesting algorithm, RTFM when you're working with a new library, or take a minute to watch FireShip's latest video about that language you've been eyeing. You might be surprised by the doors it can open. &lt;/p&gt;

&lt;h2&gt;
  
  
  Increasing your "starting point"
&lt;/h2&gt;

&lt;p&gt;Learning isn't about hoarding answers like Scrat hoards that acorn. It's about pushing the boundary of your ignorance a little further with each passing day. I like to call this your &lt;strong&gt;"starting point"&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Think back to when you first started coding. You probably spent a lot of time googling basics like &lt;em&gt;"how to write a for loop"&lt;/em&gt; or &lt;em&gt;"what's a git branch?"&lt;/em&gt; (We've all been there, no shame.) But as you learn and grow, your starting point moves ahead. Now, you're probably googling something like &lt;em&gt;"how to specify a PUT endpoint in the go-CHI library"&lt;/em&gt; or &lt;em&gt;"best practices for asynchronous error handling in Node.js"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;See the difference? Your journey from 'for loops' to 'PUT endpoints' is a testament to your growth, and each new concept or tool you learn pushes your starting point even further. You'll never be done Googling or asking Chat GPT, but you'll be able to tackle more complex problems more efficiently with each passing day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the scenic route
&lt;/h2&gt;

&lt;p&gt;Learning to code isn't part of the problem set solved by Dijkstra's shortest-path algorithm. You don't need to find the &lt;em&gt;shortest&lt;/em&gt; path to success. &lt;strong&gt;Taking the scenic route isn't just okay, it's better in the long run and can be good for your career&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dare to venture off the beaten path. Those side quests where you learn a random library because it looked cool, or spend a weekend building a game in a language you just stumbled upon, can do wonders for your skillset. Even if you never go on to use those tools again, you'll have learned a new way of thinking about problems, and that's invaluable.&lt;/p&gt;

&lt;p&gt;Each time you solve a new problem, or the same problem in a new way, you add flavor to your developer identity. Plus, that random knowledge often magically pops up in interviews and projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving forward, not sideways
&lt;/h2&gt;

&lt;p&gt;Now, while I encourage you to embrace deviations, it's crucial not to lose sight of your core learning path (If you're a Boot.dev student, it's probably this &lt;a href="https://boot.dev/tracks/backend"&gt;backend learning path&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;You don't want to end up in tutorial hell. &lt;/p&gt;

&lt;p&gt;Ah, tutorial hell. The Bermuda Triangle of coding, where you're lost in a sea of online courses and YouTube tutorials, endlessly copy-pasting code without truly understanding anything. The only way out of tutorial hell is to continuously progress along a learning path so you can make sure that you're actually learning &lt;em&gt;new, important things&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Well, that and you need to actually build something. Lots of somethings. Lots of somethings where each step isn't spelled out for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embrace learning, embrace growth
&lt;/h2&gt;

&lt;p&gt;As developers, we're not just coders—we're lifelong learners. It's part of the job description, like being able to survive grueling &lt;a href="https://wagslane.dev/posts/leave-scrum-to-rugby/"&gt;Scrum&lt;/a&gt; meetings.&lt;/p&gt;

&lt;p&gt;So, don't shirk from learning new things. Embrace it. The fear, the excitement, the occasional frustration, it's all part of the package. And remember, you're not running away from learning. You're just taking a consistent jog towards success. &lt;/p&gt;

</description>
      <category>job</category>
      <category>career</category>
      <category>education</category>
      <category>webdev</category>
    </item>
    <item>
      <title>JavaScript? Python? Go? Which Tech Stack Should You Learn?</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Tue, 25 Apr 2023 14:51:00 +0000</pubDate>
      <link>https://dev.to/bootdotdev/javascript-python-go-which-tech-stack-should-you-learn-4178</link>
      <guid>https://dev.to/bootdotdev/javascript-python-go-which-tech-stack-should-you-learn-4178</guid>
      <description>&lt;p&gt;Ah, the age-old question: which tech stack should I learn? Aspiring developers often get bogged down in this dilemma, and it's not hard to see why. The tech industry is an ocean of opportunities, and the fear of diving into the wrong waters can be paralyzing.&lt;/p&gt;

&lt;p&gt;But here's a little secret for you: &lt;strong&gt;it's more important to be insatiably curious and willing to learn new things than to stress over learning exactly the right things.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Don't try to &lt;a href="https://www.urbandictionary.com/define.php?term=min%2Fmax"&gt;minmax&lt;/a&gt; your programming education"&lt;/p&gt;

&lt;p&gt;-- Paraphrased from &lt;a href="https://www.twitch.tv/theprimeagen"&gt;ThePrimeagen&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  It doesn't matter much. There are jobs in every stack
&lt;/h2&gt;

&lt;p&gt;There are jobs in every tech stack. From popular ones like &lt;a href="https://boot.dev/learn/learn-javascript"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://boot.dev/learn/learn-python"&gt;Python&lt;/a&gt;, and Ruby to newer languages like &lt;a href="https://boot.dev/learn/learn-golang"&gt;Go&lt;/a&gt;, Elixir, or Rust, there's a market for each of them.&lt;/p&gt;

&lt;p&gt;Take JavaScript, for example. It's the go-to language for front-end development, and &lt;a href="https://blog.boot.dev/javascript/nodejs-vs-javascript/"&gt;Node.js&lt;/a&gt; has made it incredibly versatile on the back-end too. With the rise of serverless architectures and the popularity of React and Angular, JavaScript devs are in high demand.&lt;/p&gt;

&lt;p&gt;But what if you're more into Python? No problem! Python is not only the darling of data scientists and machine learning engineers but also a solid choice for web development with frameworks like Django and Flask.&lt;/p&gt;

&lt;p&gt;The point is: whatever tech stack you choose, there's a job out there for you &lt;em&gt;if you know what you're doing&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Total number of jobs doesn't matter, you only need &lt;em&gt;one&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Let's say you're a Golang aficionado, but you're worried because there aren't as many Go jobs as there are for JavaScript. Well, remember this: you only need to land &lt;em&gt;one&lt;/em&gt; job.&lt;/p&gt;

&lt;p&gt;Instead of fretting over the total number of available jobs, focus on finding the right fit for your skills and passions. After all, the perfect job in a smaller market is better than being miserable in a sea of JavaScript gigs. I actually wrote an &lt;a href="https://blog.boot.dev/jobs/not-about-job-openings/"&gt;entire article about how the ratio of openings/developers&lt;/a&gt; is a much more important consideration than the total number of jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  You'll fail because you give up and stop learning, not because your tech stack is unpopular
&lt;/h2&gt;

&lt;p&gt;The tech industry rewards adaptability and growth. Technologies come and go, but the core skills and mindset of a developer persist. Expect to be constantly learning new programming languages, frameworks, and tools throughout your career.&lt;/p&gt;

&lt;p&gt;In fact, dabbling in &lt;a href="https://blog.boot.dev/education/learn-multiple-programming-languages/"&gt;multiple languages and frameworks&lt;/a&gt; can make you a more well-rounded and versatile developer. By exposing yourself to different ways of thinking and solving problems, you'll develop a more comprehensive understanding of programming concepts.&lt;/p&gt;

&lt;p&gt;I've seen hundreds of learners fail in their journey to become developers because they gave up and stopped learning. &lt;em&gt;I've never seen a single person fail because they started with the wrong stack.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Anything will work, but some choices &lt;em&gt;are&lt;/em&gt; better than others
&lt;/h2&gt;

&lt;p&gt;Alright, so we've established that you can find a job in any tech stack, but does that mean all choices are equally good? Not quite.&lt;/p&gt;

&lt;p&gt;When choosing a tech stack, there are factors to consider that can impact your career development. Let's dive into a few key things to keep in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try to learn something that has jobs in your area
&lt;/h3&gt;

&lt;p&gt;Before picking a tech stack, do some research on local job markets and industry trends. Find out which languages and frameworks are in high demand in your area, and which ones are on the rise.&lt;/p&gt;

&lt;p&gt;Working with a tech stack that has a strong community and support network can help you stay up-to-date and make it easier to find jobs or freelance gigs. I've also found that for junior developers it's typically easier to land a job in your local area than to find a remote gig. That's not a hard and fast rule, but it's something to keep in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a tech stack that you enjoy
&lt;/h2&gt;

&lt;p&gt;Remember: your tech stack choice should align with your personal interests and career goals.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you're passionate about data science and machine learning, &lt;a href="https://boot.dev/learn/learn-python"&gt;Python&lt;/a&gt; might be a better choice for you than PHP&lt;/li&gt;
&lt;li&gt;If you're interested in cloud-native back-end development, I'd certainly recommend &lt;a href="https://boot.dev/learn/learn-golang"&gt;Golang&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;f you're all about building sleek and interactive web apps, &lt;a href="https://boot.dev/learn/learn-javascript"&gt;JavaScript&lt;/a&gt; and its various frameworks could be right up your alley&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Don't be afraid to learn technologies that you won't use at work
&lt;/h2&gt;

&lt;p&gt;To become a well-rounded developer, there are a slew of &lt;em&gt;concepts&lt;/em&gt; that are important to learn. When designing the &lt;a href="https://boot.dev/tracks/backend"&gt;learning path on Boot.dev&lt;/a&gt;, I'm not only interested in teaching students a cluster of technologies, I'm focused on getting those concepts to stick. As it turns out, some languages and frameworks are better at teaching certain concepts than others.&lt;/p&gt;

&lt;p&gt;For example, if you're working to become a back-end developer, here are some of the important concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-object-oriented-programming"&gt;OOP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-algorithms"&gt;DSA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-sql"&gt;Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-http"&gt;HTTP + Basic networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-web-servers"&gt;REST APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-functional-programming"&gt;Functional programming basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boot.dev/learn/learn-cryptography"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Don't worry, you can always learn more
&lt;/h2&gt;

&lt;p&gt;Once you've learned one programming language, picking up another one becomes &lt;em&gt;way&lt;/em&gt; easier. &lt;strong&gt;I'm talking like 80+% easier.&lt;/strong&gt; Most new developers don't realize this, but it's why you don't need to stress over the perfect first language.&lt;/p&gt;

&lt;p&gt;Programming languages may have different syntax and nuances, but the underlying concepts remain consistent. Once you've got the fundamentals down, learning a new language or framework becomes more about understanding the specific quirks and less about grappling with entirely new ideas. Binary trees, encapsulation, and function closures are all pretty universal concepts, you'll never need to re-learn them.&lt;/p&gt;

&lt;p&gt;Let me give you an example: if you're proficient in Python and decide to learn JavaScript, you'll find that many of the core programming concepts, like loops, conditionals, and functions, are pretty similar. JavaScript has its quirks (looking at you, &lt;code&gt;this&lt;/code&gt; keyword), but you'll be surprised at how quickly you can pick it up.&lt;/p&gt;

&lt;p&gt;Go forth. Embrace the challenges, learn from setbacks, and above all, never stop being curious. The most successful developers I've met never ask "Do I really need to learn X?" They say "X looks exciting! I'm going to build something with it."&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>coding</category>
      <category>education</category>
    </item>
    <item>
      <title>Which is More Important: Hard or Soft Skills for Programmers?</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 24 Apr 2023 14:02:00 +0000</pubDate>
      <link>https://dev.to/bootdotdev/which-is-more-important-hard-or-soft-skills-for-programmers-lh7</link>
      <guid>https://dev.to/bootdotdev/which-is-more-important-hard-or-soft-skills-for-programmers-lh7</guid>
      <description>&lt;p&gt;You're waiting at the front-desk of Google's campus in Boulder, Colorado, waiting for your coding interview to start. Across from you in the lobby sit two other candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A charismatic airpods-flaunting developer who can charm the pants off of anyone in the room but requires an agonizing 8 hours to get a linked list working&lt;/li&gt;
&lt;li&gt;A programming prodigy who writes games in assembly, but is such a colossal jerk that nobody will play their game anyways&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which of them will provide more fierce competition for the &lt;a href="https://blog.boot.dev/jobs/not-about-job-openings/"&gt;job spot&lt;/a&gt;? Let's tackle the age-old question: &lt;strong&gt;Which is more important, hard or soft skills for programmers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First I'll annoyingly explain what hard and soft skills are, but then we'll dive into the reason I wanted to write this article: &lt;em&gt;the rectangle analogy&lt;/em&gt;. This analogy will help you understand where you should be spending your time improving to maximize your chances of landing a job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard Skills: The Foundation
&lt;/h2&gt;

&lt;p&gt;First things first: what are hard skills? These are the tangible, measurable abilities that you &lt;em&gt;need&lt;/em&gt; to get the job done. As a developer, you'll need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code in specific languages&lt;/strong&gt; - like &lt;a href="https://boot.dev/learn/learn-python"&gt;Python&lt;/a&gt;, &lt;a href="https://boot.dev/learn/learn-javascript"&gt;JavaScript&lt;/a&gt;, or &lt;a href="https://boot.dev/learn/learn-golang"&gt;Golang&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use technologies and tools&lt;/strong&gt; - such as Git, &lt;a href="https://boot.dev/learn/learn-docker"&gt;Docker&lt;/a&gt;, or AWS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand &lt;a href="https://boot.dev/learn/learn-algorithms"&gt;algorithms&lt;/a&gt; and &lt;a href="https://boot.dev/learn/learn-data-structures"&gt;data structures&lt;/a&gt;&lt;/strong&gt; - because nobody wants to be that developer who can't reverse a string without Googling it first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A boatload of other things&lt;/strong&gt; - because programming is a vast and ever-expanding field.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Importance of hard skills for landing a job
&lt;/h3&gt;

&lt;p&gt;Hard skills are the bread and butter of your programming career. They're an absolute requirement for most programming positions, and they demonstrate your technical competency. In fact, if you could only have one type of skill, hard skills would be more important. After all, it's pretty tough to write code without, you know, actually knowing how to code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep hardening your hard skills
&lt;/h3&gt;

&lt;p&gt;The tech world moves at breakneck speed, and if you're not continuously leveling up your hard skills, you're gonna get left in the dust. Remember, Rome wasn't built in a day, and neither is your programming expertise. Invest time and effort in learning new languages, tools, and techniques over time.&lt;/p&gt;

&lt;p&gt;You don't need to be an expert on &lt;em&gt;everything&lt;/em&gt;, but you need to know how to deliver working code that solves real problems within your domain. If you want to &lt;a href="https://boot.dev"&gt;be a back-end developer&lt;/a&gt; and work at SaaS companies, then you should at the very least:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have a solid understanding of a couple of programming languages like Python and Go&lt;/li&gt;
&lt;li&gt;Be able to set up and use a &lt;a href="https://boot.dev/learn/learn-sql"&gt;SQL database&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Know how to &lt;a href="https://boot.dev/learn/learn-web-servers"&gt;build a REST API&lt;/a&gt; using those technologies&lt;/li&gt;
&lt;li&gt;Know how to deploy that API to a cloud platform like AWS or GCP &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Soft Skills
&lt;/h2&gt;

&lt;p&gt;Soft skills, on the other hand, are the intangible, interpersonal abilities that can give your career a nice boots. They might not be as easy to quantify as hard skills but they're nearly as vital. Soft skills include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Charisma&lt;/strong&gt; - people like working with fun people.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication and writing abilities&lt;/strong&gt; - so you can articulate your ideas and keep everyone in the loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kindness and empathy&lt;/strong&gt; - because you're working with humans, and humans don't like assholes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard work and follow-through&lt;/strong&gt; - if you're good, but you don't deliver, then no one cares.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Importance of soft skills for long-term success
&lt;/h3&gt;

&lt;p&gt;Soft skills are the secret sauce that can propel your career to new heights. They facilitate collaboration and teamwork, making it easier for you to work with others and get the job done. Plus, having solid soft skills can enhance your overall job satisfaction and career growth. After all, nobody wants to work with a genius who's also a jerk.&lt;/p&gt;

&lt;p&gt;Hard skills are a requirement to get a job in tech, but assuming the gap in hard skills between two candidates is similar, I've actually seen the more charismatic and likable candidate get the job over the slightly more technically competent one. Why? Managers are people, and people like working with other people they like.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I improve my soft skills?
&lt;/h3&gt;

&lt;p&gt;If you have a crappy personality, don't worry too much. You don't need to be a brilliant orator or a master of the written word just to get a job as a code monkey. The number one rule should be easy to follow: &lt;strong&gt;don't be an asshole.&lt;/strong&gt; If you do that, you're halfway there.&lt;/p&gt;

&lt;p&gt;The related follow-up rule is to balance &lt;a href="https://blog.boot.dev/jobs/confidence-in-job-interviews/"&gt;confidence and humility&lt;/a&gt;. If you're a kind, open-minded developer that knows what you're talking about, you'll do great.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rectangle Analogy: Combining Hard and Soft Skills
&lt;/h2&gt;

&lt;p&gt;Now that we've explored both hard and soft skills, let's dive into the rectangle analogy to understand how they work together. Imagine your hard skills are the length of a rectangle, while your soft skills represent the width. The area of this rectangle corresponds to your probability of landing a job. The larger the area, the better your chances of finding a gig that suits your skillset.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wh7EFIx5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vvr3rscngigei1wqg9fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wh7EFIx5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vvr3rscngigei1wqg9fo.png" alt="job probability" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means the equation for your job probability is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hard_skills * soft_skills = job_probability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To maximize &lt;code&gt;job_probability&lt;/code&gt; with the least amount of effort, spend more time on whichever skill you tend to lack. The area of a square is larger than the area of a lopsided rectangle with the same perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The misconception of limited skill points
&lt;/h2&gt;

&lt;p&gt;If you're thinking this sounds a bit like a Dungeons &amp;amp; Dragons character sheet where you have a limited number of skill points to allocate, that's not how the real world works. In the real world, you can just &lt;em&gt;get more skill points&lt;/em&gt;. You can excel in both hard and soft skills.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I've worked with amazing people who are easy to get along with and are brilliant programmers&lt;/li&gt;
&lt;li&gt;I've also worked with incompetent jerks who are somehow also bad at writing code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work hard and do your best, you can be both a great programmer and a great person. It's not an either-or situation. In the immortal words of Shia LaBeouf, "Just do it!"&lt;/p&gt;

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

</description>
      <category>learning</category>
      <category>jobs</category>
      <category>jobsearch</category>
      <category>learntocode</category>
    </item>
    <item>
      <title>As a Developer, What Hardware Do You Truly Need?</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Fri, 21 Apr 2023 14:37:53 +0000</pubDate>
      <link>https://dev.to/bootdotdev/as-a-developer-what-hardware-do-you-truly-need-1ih5</link>
      <guid>https://dev.to/bootdotdev/as-a-developer-what-hardware-do-you-truly-need-1ih5</guid>
      <description>&lt;p&gt;Let's be real here: we live in an age where everyone and their dog seems to think they need the latest, most expensive gadgets to get anything done. But when it comes to &lt;a href="https://boot.dev"&gt;learning how to code&lt;/a&gt;, do you really need that shiny, wallet-draining powerhouse of a machine?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nope.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's chat about the hardware you need to get started with coding, and dispel the myth that you need to spend a fortune on your setup like a Macbook-toting &lt;a href="https://www.urbandictionary.com/define.php?term=Soydev"&gt;soydev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory: The real MVP
&lt;/h2&gt;

&lt;p&gt;RAM (Random Access Memory) is where it's at, and this is where you're not going to want to cheap out. If you're not familiar with what RAM does, let me give you the lowdown.&lt;/p&gt;

&lt;p&gt;RAM is the temporary storage your computer uses to maintain the data it needs to run apps. More RAM means you can run more apps simultaneously, which is super important when you're coding, because you'll likely have a bunch of programs open at once. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text editor&lt;/li&gt;
&lt;li&gt;Web browser with 50+ tabs (guilty!)&lt;/li&gt;
&lt;li&gt;Terminal&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;Spotify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opening files: When you open a file, the data is loaded into RAM, so having more of it means you can open larger files without your machine choking.&lt;/p&gt;

&lt;p&gt;Compiling code: Compiling is the process of turning your code into an executable program. This can be a memory-intensive operation, especially for larger projects. More RAM helps speed up the process.&lt;/p&gt;

&lt;p&gt;For most use cases, you probably won't want less than 4GB of RAM. There isn't a true minimum, because, depending on the programs you use, you can get away with quite little, but if you can get 8 you'll be in a good place, and 16+ will feel like a dream.&lt;/p&gt;

&lt;h2&gt;
  
  
  CPU: Nothing too wild
&lt;/h2&gt;

&lt;p&gt;The CPU (Central Processing Unit) is the brain of your computer, executing instructions and performing calculations.&lt;/p&gt;

&lt;p&gt;It might seem counter-intuitive, but a powerful CPU isn't always necessary for coding. As long as your editors and day-to-day apps aren't lagging, you're going to be fine. Remember, a good CPU won't make the programs you write any faster. You need great hardware for running in production, but not necessarily for development.&lt;/p&gt;

&lt;p&gt;So, while a good CPU can certainly help, you don't &lt;em&gt;need&lt;/em&gt; the latest, most powerful CPU to get started. A mid-range processor from the last few years should be more than enough for most coding tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard Drive: SSDs slap hard
&lt;/h2&gt;

&lt;p&gt;You'll just save so much time when you start up your computer and load applications if you have a solid-state drive (SSD). SSDs are faster than traditional magnetic (spinning disk) hard drives, and they're also more reliable.&lt;/p&gt;

&lt;p&gt;You don't &lt;em&gt;need&lt;/em&gt; one, but you'll be much more productive if you have one. As far as storage space goes, I would hesitate to ever go below 256 GB, just because you'll probably have a lot of apps and data on your local device. That said, if you can get a full TB of storage you'll be in a fantastic place.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPU: Nice, but far from necessary
&lt;/h2&gt;

&lt;p&gt;The GPU (Graphics Processing Unit) is another piece of hardware you might be curious about. But unlike RAM, a powerful GPU isn't always necessary for coding.&lt;/p&gt;

&lt;p&gt;The GPU is responsible for rendering images, animations, and other visual elements on your screen. While it's &lt;em&gt;critical&lt;/em&gt; for tasks like gaming and video editing, coding web apps usually doesn't require much GPU horsepower. That said, here are some tasks that do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Machine learning:&lt;/strong&gt; If you're diving into the world of AI and machine learning, a beefy GPU is your best friend. It'll help you train models faster, allowing you to iterate and improve your algorithms more quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Game development:&lt;/strong&gt; If you're creating the next gaming masterpiece, a solid GPU will help you render graphics, run game engines, and test your creations in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3D rendering:&lt;/strong&gt; For 3D modeling or animation, a powerful GPU will make your life a lot easier by speeding up rendering times.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Peripherals: Keyboards, mice, and monitors
&lt;/h2&gt;

&lt;p&gt;A comfortable keyboard and mouse can make a big difference in your coding experience, but if you're just getting started you probably won't have a strong opinion about what you like yet. You can get started with super cheap stuff and it probably won't hinder your productivity very much. Later on, as you understand your own workflow and preferences, you can invest in a different mouse/keyboard combo.&lt;/p&gt;

&lt;p&gt;As far as monitors go, I would never recommend working with a screen less than 1080p. If you can get a 1440p or 4K monitor, you'll be in a great place. But again, you don't &lt;em&gt;need&lt;/em&gt; a fancy monitor to get started. I know "10x" devs that work with 1, 2, or even 4 monitors, but the truth is you won't know what works best for you until you've been coding for a while. I'd start with a simple single monitor setup, and only make changes if you feel like you need to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using lightweight apps
&lt;/h2&gt;

&lt;p&gt;Now that we've covered the core hardware components, let's talk about the software side of things. Choosing the right tools for coding can make a huge difference in terms of hardware requirements and overall efficiency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.vim.org/"&gt;Vim&lt;/a&gt; (or &lt;a href="https://neovim.io/s"&gt;NeoVim&lt;/a&gt;) is a prime example of a lightweight tool that doesn't require much in terms of hardware. It's a text editor with a small memory footprint, making it ideal for coding on less powerful machines. But Vim is just one example—there are plenty of other lightweight tools out there, each catering to different programming languages and tasks.&lt;/p&gt;

&lt;p&gt;Lightweight tools put less strain on your system, so you'll experience fewer slowdowns and crashes, even if your hardware isn't top-of-the-line. Since lightweight tools use fewer resources, they generally load and run faster, which means you can write, test, and debug your code more quickly. Generally speaking, if you're happy and efficient using the lighter-weight stuff, there's no reason not to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using bloatware
&lt;/h2&gt;

&lt;p&gt;In contrast to lightweight tools, heavier apps like Electron and full-fledged IDEs (Integrated Development Environments) like Visual Studio can consume a &lt;em&gt;lot&lt;/em&gt; more resources. These tools typically offer more features and integrations, which can be helpful for development but also require more memory and processing power. They may also include graphical interfaces and other fancy visual elements, which can further bloat their resource usage.&lt;/p&gt;

&lt;p&gt;Generally speaking, I'd stay as far away as you can from the &lt;em&gt;truly&lt;/em&gt; heavy apps like Visual Studio, Android Studio, and XCode. If it takes 30+ seconds to start up, it's just not going to be fun to work with. Of course, sometimes you can't escape depending on what you're trying to accomplish, but if you can avoid it, do.&lt;/p&gt;

&lt;p&gt;Electron apps are essentially just more browser windows. They work by running web technologies (HTML, CSS, and JavaScript) inside a sandboxed browser. They're certainly not as efficient as command-line tools like Vim, but they're often not as bad as some of the bloaty IDEs listed above. As long as you aren't opening too many of them, and as long as you have a decent amount of RAM, you'll probably be okay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Memory (RAM) is crucial for running applications, opening files, and compiling code. Aim for at least 8GB, but 16
GB is even better.&lt;/li&gt;
&lt;li&gt;A mid-range CPU should be sufficient, but if you have the budget, this isn't a bad place to spend it.&lt;/li&gt;
&lt;li&gt;An SSD somewhere between 256-1024 GBs will put you in a great spot.&lt;/li&gt;
&lt;li&gt;A great GPU is only important for specific tasks like machine learning, game development, or 3D rendering.&lt;/li&gt;
&lt;li&gt;In terms of performance: command line tools &amp;gt; Electron apps &amp;gt; IDEs.&lt;/li&gt;
&lt;li&gt;If you don't know what you like, start with cheap peripherals and a single 1080p monitor. You can always upgrade later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bottom line is that learning to code is possible with a wide range of hardware configurations. It's not about having the most expensive, high-powered machine—it's about understanding what you actually need for the tasks you'll be working on and finding the tools that best suit your needs and budget. At the end of the day, you can realistically learn to code on a Raspberry Pi; you just might have to be a little more patient.&lt;/p&gt;

&lt;p&gt;Don't let hardware be a barrier to entry. Dive into some code, explore your options, and remember that the most important tool in your arsenal is your own determination and curiosity. As they say, necessity is the mother of invention, so let your passion for coding be the driving force behind your success, not the latest shiny gadgets.&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>learning</category>
      <category>codenewbie</category>
      <category>career</category>
    </item>
    <item>
      <title>Do You Need to Blog to Get a Coding Job?</title>
      <dc:creator>Lane Wagner</dc:creator>
      <pubDate>Mon, 17 Apr 2023 14:28:36 +0000</pubDate>
      <link>https://dev.to/bootdotdev/do-you-need-to-blog-to-get-a-coding-job-25gm</link>
      <guid>https://dev.to/bootdotdev/do-you-need-to-blog-to-get-a-coding-job-25gm</guid>
      <description>&lt;p&gt;As the founder of &lt;a href="https://boot.dev"&gt;Boot.dev&lt;/a&gt;, I've worked with countless students who are eager to break into the tech industry. And time and time again, I see the same question pop up: "Do I need to start a blog to get a coding job?"&lt;/p&gt;

&lt;p&gt;It's a valid question. There's a lot of buzz around personal branding and the importance of building an online presence. But as someone who worked (and I guess still works) as a hiring manager, I can tell you that blogs are &lt;em&gt;mostly&lt;/em&gt; overrated.&lt;/p&gt;

&lt;p&gt;Let's break down the pros and cons of blogging as a developer. I'll share my own experiences and insights, and offer some practical tips for those who do choose to start a blog. So if you're wondering whether or not you need to blog to get a coding job, keep reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  You don't need to blog, you should only do it if you enjoy it
&lt;/h2&gt;

&lt;p&gt;Let's start with the most important point: &lt;strong&gt;you don't need to start a blog to get a job as a developer.&lt;/strong&gt; I was the only developer at my last company of roughly 100 engineers that had a blog.&lt;/p&gt;

&lt;p&gt;A blog can certainly help you stand out in a crowded job market, as it has for me, it's absolutely not a requirement. Your skills, experience, and ability to solve problems are ultimately what will get you hired. If you're not interested in blogging or don't enjoy writing, then there's no need to force yourself to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blogging will only help land jobs if you write bangers
&lt;/h2&gt;

&lt;p&gt;Assuming you &lt;em&gt;do&lt;/em&gt; decide to start a blog, it's important to note that not all blog posts are created equal. For a blog to ackchyually help your job search, you need to write amazing content that showcases your expertise and adds &lt;em&gt;new value&lt;/em&gt; to your readers.&lt;/p&gt;

&lt;p&gt;Regurgitating information that can be found elsewhere on the inter-webs net won't do you any favors. Your blog posts need to be original, well-written, and packed with insights that can't be found elsewhere. If you're going to invest time and effort into creating a blog, make sure that you're creating content that's truly worth reading.&lt;/p&gt;

&lt;p&gt;If you're going to start a blog, write content that slaps. Don't waste your time and energy on mediocre stuff that won't get you noticed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write &lt;em&gt;your&lt;/em&gt; story
&lt;/h3&gt;

&lt;p&gt;If you're gonna write a blog post, make it &lt;em&gt;yours&lt;/em&gt;. No one else should be able to write it better than you. Anyone can explain how a binary tree works for the 42,690th time. But what makes a great blog post is when you share your own experiences and insights.&lt;/p&gt;

&lt;p&gt;If you've worked on a niche problem that you're particularly proud of, write about it. If you have a story about how you or your team overcame a unique challenge, write about it. If you've learned something new or personally changed your mind about something, write about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech influencers overestimate the importance of a personal brand
&lt;/h2&gt;

&lt;p&gt;If you spend any time on Twitter or LinkedIn, you've probably seen countless posts from tech-fluencers talking about the importance of building a personal brand. While a personal brand has value in &lt;em&gt;some&lt;/em&gt; scenarios, influencers drastically overestimate the importance of a personal brand when it comes to getting your first job as a developer.&lt;/p&gt;

&lt;p&gt;Vanishingly few real-world (non-twitter) developers have a personal brand. Of the hundreds I've worked with personally, I can count on one hand the number that have a large following online, and that hasn't prevented them from finding success in their careers.&lt;/p&gt;

&lt;p&gt;At the end of the day, what matters is your ability to solve problems, create value for your employer, and prove that you can do so in an interview. If you can tangibly demonstrate those skills, you'll be in good shape. I think these are much better ways to stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.boot.dev/jobs/build-github-profile/"&gt;A good portfolio of GitHub projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Solid open-source contributions&lt;/li&gt;
&lt;li&gt;Networking with other developers at meetups in &lt;a href="https://boot.dev/community"&gt;online communities&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't let the hype around personal branding make you feel like you're not doing enough if you don't have a large following on social media. Focus on building skills in order to write amazing code that solves real-world problems. The rest will follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning to write is a valuable communication skill
&lt;/h2&gt;

&lt;p&gt;Personal branding nonsense aside, I &lt;em&gt;do&lt;/em&gt; believe that writing a blog to clarify your thoughts and improve your communication skills is a valuable endeavor.&lt;/p&gt;

&lt;p&gt;Being able to communicate your ideas clearly and concisely in written form can make a big difference in your ability to collaborate with teammates and work on projects effectively. In today's world of Slack, Discord, and other asynchronous communication mediums, being able to articulate your thoughts in writing is a necessity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you blog? Meh. Only do it if you like it.
&lt;/h2&gt;

&lt;p&gt;So, do you need to blog to get a coding job? Nope. A blog might help if you write some bangers that skyrocket to the top of Hacker News, but if your posts are fairly average, they probably won't move the needle. Your skills, experience, and ability to solve problems are ultimately what will get you hired.&lt;/p&gt;

&lt;p&gt;All that said, learning to write effectively is still an immensely valuable skill for any developer. Being able to communicate your ideas clearly and concisely in written form can make a big difference in your ability to collaborate with teammates and work on projects effectively. So, if you enjoy writing, I'd encourage you to write to be &lt;em&gt;a great writer and to write useful things&lt;/em&gt;, not to be an "influencer".&lt;/p&gt;

&lt;p&gt;Don't stress too much about building a personal brand or starting a blog. Focus on building real skills and creating value through code, and the rest will follow. If you do decide to start a blog, make sure that you're writing articles that &lt;strong&gt;slap&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>coding</category>
      <category>job</category>
      <category>career</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
