Tech Terms You Need to Know 💭
Tags: tech, webdev, programming, codenewbie
Published: 2023-01-09 18:01:23

Today's post will be dedicated to a few terms and phrases that are software, development, and tech specific. I was inspired by this [tweet](https://twitter.com/GergelyOrosz/status/1610292534726508544) where Gergely Orosz, author of The Pragmatic Engineer newsletter (if you haven't checked it out, I _highly_ recommend it), asks what terms many software engineers understand, but can confuse people outside of tech. 

I related to many of the replies, as I was so confused by terms like _production_ and _staging_ on my first day as a junior developer. 

Live footage of me on my first day:
<img width="100%" style="width:100%" src="https://media.giphy.com/media/WRQBXSCnEFJIuxktnw/giphy.gif">   

Of all the terms mentioned, here are my favorites:

- **Rubber Ducking** 🦆 
Rubber Ducking is a term often used when talking about debugging. The term “rubber duck debugging” comes from a book by Andrew Hunt and David Thomas called “The Pragmatic Programmer.” In the book, the authors describe a programmer who carries a rubber duck around and debugs their code by explaining it, line-by-line, to the duck. <br> <br>While the practice of talking to a rubber duck may sound silly, it’s actually proven to be a helpful strategy for finding and solving problems with code. 
<br>

- **Daily Standup** 🤝🏽
Daily Stand Ups are part of the Agile Software development process (and SCRUM). They are usually at the same time every day and can cover topics such as what you accomplished the day before, what you plan on accomplishing that day, and blockers. 
<br>
- **Blockers** 🛑 
Something preventing (blocking) you from moving forward with a task, often code-related. 
<br>
- **Do a Git Blame** 🙃 
A git-blame is used to show what revision and author last modified each line of a file. It's like checking the history of the development of a file. More formal definition from [GitHub](https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file): <br><br> 
> The blame command is a Git feature, designed to help you determine who made changes to a file. Despite its negative-sounding name, git blame is actually pretty innocuous; its primary function is to point out who changed which lines in a file, and why. It can be a useful tool to identify changes in your code.
>
<br>
- **Lead the Postmortem** 💀
A post-mortem is when a team reflects on a project, how it was executed, what went right, what went wrong, how to prevent mistakes, and how to do better next time. I've heard this phrase used outside of tech many times. <br><br> In my opinion, postmortems are really a helpful exercise regardless of industry. Oftentimes, someone is chosen to lead this, therefore leading the postmortem. I love [this](https://www.freecodecamp.org/news/what-is-a-software-post-mortem/) article from Free Code Camp on what postmortems can look like for software. 
<br>
- **Technical Debt** 💵 
Technical debt is the term used to describe the result of making decisions based on speed above all else. These quick, real-time decisions can make or break software updates. But there should be a balance between good decisions and fast ones. Technical debt can result in negative outcomes or be well worth it—depending on what you and your team decide. 
<br>
- **Spaghetti Code** 🍝 
Spaghetti Code is a term used when describing unstructured and difficult-to-read code. Spaghetti Code can lead to problems over time, as it's often tricky to build on top of. If not resolved, it can lead to folks spending time and energy fixing and finding bugs due to the lack of structure in the code. 
<br>
- **Kill All** ☠️
killall is a tool for terminating running processes on your system based on name. You can run it like this: <br><br>`killall [process name]`
<br>
- **Development (aka Dev)** 💡
Commonly referred to as dev, this is where developers build the code. For example, your company may have a 'dev' version of the site where you push up code for review. 
<br>
- **Staging (aka Stage)** 🧪
This environment is used to test the software using real data to validate it is ready for use. For example, your company may have a 'staging' version of the site where you push up code. In my experience, this step comes after testing code on dev.
<br>
- **Production (aka Prod)** ✅
Commonly referred to as prod, this is where the software is made available to users (aka friends, family, the general public, etc.) 
<br>
- **Ship to Production**
Shipping to production essentially means pushing code live to where it is available to all users. However, this can happen differently depending on your company. I love [this ](https://blog.pragmaticengineer.com/shipping-to-production/) article from Gergely Orosz on the different approaches to pushing code live. 
<br>
- **Cut a Release** 📋 
Cutting a release means taking the state of a code base, project, or repo, and locking it down so no further changes are made. This state is then given a release name and/or release version. <br><br>An example would be how different versions of operating systems are released for your laptop or phone. Releases are helpful because when consistent versions of the software are given to users, it is easier for them to ask for help based on what version they are using. 
<br>
- **Change List** ✔️
New features and/or fixed bugs that are new from one version of software to the next. 
<br>
- **Grok** 🧘
Grok can be used to describe understanding a subject matter (for example, a programming language) so well that you become _one_ with it. <br><br>Two definitions from [The New Hackers Dictionary](https://www.amazon.com/gp/product/0262680920?ie=UTF8&tag=grok-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0262680920) by Eric S. Raymond state:

> 1. To understand. Connotes intimate and exhaustive knowledge. When you claim to ‘grok’ some knowledge or technique, you are asserting that you have not merely learned it in a detached instrumental way but that it has become part of you, part of your identity. For example, to say that you “know” LISP is simply to assert that you can code in it if necessary — but to say you “grok” LISP is to claim that you have deeply entered the world-view and spirit of the language, with the implication that it has transformed your view of programming. Contrast zen, which is similar supernal understanding experienced as a single brief flash. See also glark.
> 2. Used of programs, may connote merely sufficient understanding. “Almost all C compilers grok the void type these days.”


You can read more about its origins [here](http://www.grokcode.com/95/definition-and-origin-of-grok/).
<br><br>
Comment down below with any of your favorites!