Merge branch 'master' of github.com:haydenhargreaves/hhargreaves.dev
This commit is contained in:
commit
249222b140
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
node_modules
|
||||
.idea
|
||||
|
||||
# Output
|
||||
.output
|
||||
@ -22,4 +23,6 @@ Thumbs.db
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
|
||||
# Jet brains
|
||||
.idea
|
||||
@ -33,11 +33,11 @@
|
||||
}
|
||||
|
||||
div.journal-wrapper ul {
|
||||
@apply list-disc list-outside;
|
||||
@apply list-disc list-outside ml-6;
|
||||
}
|
||||
|
||||
div.journal-wrapper ol {
|
||||
@apply list-decimal list-inside;
|
||||
@apply list-decimal list-inside ml-6;
|
||||
}
|
||||
|
||||
div.journal-wrapper h1 {
|
||||
@ -66,8 +66,7 @@
|
||||
}
|
||||
|
||||
div.journal-wrapper blockquote {
|
||||
@apply border-l-4 border-blue-300 p-4 my-4;
|
||||
|
||||
@apply border-l-4 border-blue-300 p-4 my-4 bg-[#252525] rounded-sm;
|
||||
}
|
||||
|
||||
div.journal-wrapper a {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
<head>
|
||||
<meta charset=" utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.jpg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
|
||||
@ -92,8 +92,8 @@
|
||||
if (error) console.error(error);
|
||||
</script>
|
||||
|
||||
<div class="">
|
||||
<h2 class="py-2 text-xl font-semibold text-blue-300">PROJECTS</h2>
|
||||
<div class="mt-24">
|
||||
<h2 class="py-2 text-xl font-semibold text-blue-300 border-b-1 border-gray-600">PROJECTS</h2>
|
||||
{#if error}
|
||||
<p class="my-4 text-red-300 italic">
|
||||
<span class="font-semibold not-italic">Error {error.code}:</span>
|
||||
|
||||
16
src/components/resume.svelte
Normal file
16
src/components/resume.svelte
Normal file
@ -0,0 +1,16 @@
|
||||
<div class="">
|
||||
<h2 class="py-2 text-xl font-semibold text-blue-300 border-b-1 border-gray-600">TLDR & RESUME </h2>
|
||||
<p class="py-4 text-gray-200">
|
||||
<span class="font-semibold">TLDR:</span> I like to program, I have 5+ years of experience in over
|
||||
a dozen programming languages. Developer experience and tooling is my expertise.
|
||||
</p>
|
||||
<p class="py-4 text-gray-200">
|
||||
My resume can be downloaded
|
||||
<a href="haydenHargreavesResume.pdf" download class="group relative inline-block no-underline" target="_blank">
|
||||
<span class="relative z-10 font-semibold text-gray-300">here.</span>
|
||||
<span
|
||||
class="absolute bottom-0 left-0 h-[3px] w-0 bg-blue-300 transition-all duration-300 group-hover:w-full"
|
||||
></span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
@ -10,65 +10,62 @@
|
||||
const skills: SkillData[] = [
|
||||
{
|
||||
title: 'Javascript',
|
||||
description: 'Frontend web development and basic backend development using Node.js.',
|
||||
description: 'Frontend web development',
|
||||
rating: 3
|
||||
},
|
||||
{
|
||||
title: 'Typescript',
|
||||
description: 'Javascript with static typing and additional features.',
|
||||
description: 'Fullstack web development',
|
||||
rating: 3
|
||||
},
|
||||
{
|
||||
title: 'Python',
|
||||
description: 'Dynamic language used for data analysis and machine learning.',
|
||||
description: 'Backend & scripting',
|
||||
rating: 4
|
||||
},
|
||||
{
|
||||
title: 'Go',
|
||||
description: 'All purpose language for backend web development and systems programming.',
|
||||
description: 'Backend & systems development',
|
||||
rating: 5
|
||||
},
|
||||
{
|
||||
title: 'Lua',
|
||||
description: 'Simple configuration language used for Neovim and other applications.',
|
||||
description: 'Configuration',
|
||||
rating: 2
|
||||
},
|
||||
{
|
||||
title: 'SQL',
|
||||
description:
|
||||
'Database query language used for data storage and retrieval in relational databases.',
|
||||
description: 'Database query language',
|
||||
rating: 3
|
||||
},
|
||||
{
|
||||
title: 'C',
|
||||
description:
|
||||
'Low level systems programming language used for operating systems and embedded systems.',
|
||||
description: 'Systems & embedded programming',
|
||||
rating: 3
|
||||
},
|
||||
{
|
||||
title: 'C++',
|
||||
description:
|
||||
'Object oriented programming language used for game development and systems programming.',
|
||||
description: 'Systems & embedded programming',
|
||||
rating: 2
|
||||
},
|
||||
{
|
||||
title: 'HTML & CSS',
|
||||
description: 'Web markup and styling languages used for frontend web development.',
|
||||
description: 'Frontend web development',
|
||||
rating: 5
|
||||
},
|
||||
{
|
||||
title: 'Zig',
|
||||
description: 'Systems programming language with a focus on safety and performance.',
|
||||
description: 'Systems & embedded programming',
|
||||
rating: 2
|
||||
},
|
||||
{
|
||||
title: 'Nix',
|
||||
description: 'Functional package manager used for declarative system configuration.',
|
||||
description: 'Operating system & other configuration',
|
||||
rating: 4
|
||||
},
|
||||
{
|
||||
title: 'Java',
|
||||
description: 'Object oriented programming language used for development on all platforms.',
|
||||
description: 'Backend development',
|
||||
rating: 3
|
||||
}
|
||||
];
|
||||
|
||||
14
src/components/work.svelte
Normal file
14
src/components/work.svelte
Normal file
@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
export let company: string;
|
||||
export let position: string;
|
||||
export let timeframe: string;
|
||||
export let description: string;
|
||||
</script>
|
||||
|
||||
<div class="my-8 w-full">
|
||||
<h2 class="py-2 text-2xl font-semibold text-blue-200">{company}</h2>
|
||||
<p class="text-sm text-gray-200 font-semibold">
|
||||
{position} <span class="font-normal italic">({timeframe})</span>
|
||||
</p>
|
||||
<p class="py-4 text-gray-200">{description}</p>
|
||||
</div>
|
||||
102
src/components/workExperience.svelte
Normal file
102
src/components/workExperience.svelte
Normal file
@ -0,0 +1,102 @@
|
||||
<script lang="ts">
|
||||
import Work from "./work.svelte";
|
||||
import { onMount } from 'svelte';
|
||||
|
||||
/**
|
||||
* Work data interface, this will be used to store the work
|
||||
* experience data. This is important for type checking and
|
||||
* validation.
|
||||
*/
|
||||
interface WorkData {
|
||||
company: string;
|
||||
position: string;
|
||||
timeframe: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Server error interface, this will be used to store the error message if the server request fails.
|
||||
*/
|
||||
interface ServerError {
|
||||
message: string;
|
||||
code: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Path to the work data on the server.
|
||||
*/
|
||||
const workDataPath: string = '/work/data.json';
|
||||
|
||||
/**
|
||||
* Store the work data in an array of objects;
|
||||
*/
|
||||
let workExp: WorkData[] = [];
|
||||
|
||||
/**
|
||||
* Store the error message if the server request fails.
|
||||
* Will be null if the request is successful.
|
||||
*/
|
||||
let error: ServerError | null = null;
|
||||
|
||||
/**
|
||||
* Fetch the work experience form the server.
|
||||
*/
|
||||
onMount(async() => {
|
||||
try {
|
||||
// Paths are relative to /static
|
||||
// Svelte deploys /static for me!
|
||||
const response = await fetch(workDataPath);
|
||||
if (!response.ok) {
|
||||
error = {
|
||||
message:
|
||||
'Failed to retrieve work experience data. Please try again later. If the issue persists, contact me!',
|
||||
code: response.status
|
||||
};
|
||||
return;
|
||||
}
|
||||
const data = await response.json();
|
||||
|
||||
// Validate the data (Important!):
|
||||
if (Array.isArray(data)) {
|
||||
workExp = data.map((exp) => {
|
||||
// TODO: Sort the projects by date
|
||||
// This will either require a custom function or a new data system
|
||||
return {
|
||||
company: exp.company || '',
|
||||
position: exp.position || '',
|
||||
description: exp.description || '',
|
||||
timeframe: exp.timeframe || '',
|
||||
};
|
||||
});
|
||||
} else {
|
||||
error = {
|
||||
message:
|
||||
'Data was not in valid format. Please try again later. If the issue persists, contact me!',
|
||||
code: 400
|
||||
};
|
||||
}
|
||||
} catch (err) {
|
||||
error = {
|
||||
message: `${err} Please try again later. If the issue persists, contact me!`,
|
||||
code: 500
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// If an error occurs, log it to the console
|
||||
if (error) console.error(error);
|
||||
</script>
|
||||
|
||||
<div class="mt-24">
|
||||
<h2 class="py-2 text-xl font-semibold text-blue-300 border-b-1 border-gray-600">WORK EXPERIENCE</h2>
|
||||
{#if error}
|
||||
<p class="my-4 text-red-300 italic">
|
||||
<span class="font-semibold not-italic">Error {error.code}:</span>
|
||||
{error.message}
|
||||
</p>
|
||||
{:else}
|
||||
{#each workExp as exp}
|
||||
<Work {...exp} />
|
||||
{/each}
|
||||
{/if}
|
||||
</div>
|
||||
295
src/journal/30 Days of JetBrains: My Vim Cleanse.md
Normal file
295
src/journal/30 Days of JetBrains: My Vim Cleanse.md
Normal file
@ -0,0 +1,295 @@
|
||||
Date: 2025/02/25
|
||||
Desc: After using Neovim for years, I tried the JetBrains products for a month. Here's what I found.
|
||||
|
||||
# 30 Days of JetBrains: My Vim Cleanse
|
||||
|
||||
<img src="/journal/JetBrains-Logo.png" alt="Jet Brains Logo" width="500">
|
||||
|
||||
###### Author: Hayden Hargreaves
|
||||
|
||||
###### Published: 03/27/2025
|
||||
|
||||
## Background
|
||||
|
||||
I have been using Neovim exclusively for over two years, and in those years I have
|
||||
become *"blazingly fast"* and my developer experience has increased exponentially.
|
||||
Inspired by popular Twitch Streamer, [The Primeagen](https://www.twitch.tv/theprimeagen),
|
||||
I started using Neovim in late 2022. I started with just note-taking using a popular
|
||||
Neovim distribution called [NVChad](https://nvchad.com), which allowed me to get a feel
|
||||
for the tool and how it can be used. But it was too hard, the learned curve was too steep.
|
||||
|
||||
Eventually, a few months later, I ran into a YouTube video from The Primeagen where he was
|
||||
programming live on Twitch. While watching this video, I was in awe of his speed, efficiency,
|
||||
and the tools he was using looked amazing. I decided to give Neovim another try, but this time
|
||||
I didn't use NVChad. I wanted to learn how to configure the editor myself, because that is a
|
||||
huge part of why Neovim is so popular, and why I still use it to this day.
|
||||
|
||||
After countless hours of configuration and problems, I finally had a tool that I could call my
|
||||
own and begin writing software with. At first, I struggled to understand the appeal. Vim motions
|
||||
are confusing and hard to remember. But with time, I became fast, really fast. I started to get
|
||||
comments from my peers in class asking how I type so fast and what editor I am using. Most people
|
||||
have the same response to my response: "Eh, Vim? Isn't that old?" My answer, Neovim is new fork
|
||||
of Vim which is being maintained by a large team of amazing open source developers.
|
||||
|
||||
Over the years, I have tried to convince countless peers to "take the vim pill" and give it a
|
||||
try. But after being rejected by almost everyone, finally realized that the tool each developer
|
||||
uses really doesn't matter as long as they enjoy it and feel comfortable. However, I strongly
|
||||
encourage everyone to give Vim a try at some point. You may love it!
|
||||
|
||||
That final realization is the fuel for this experiment.
|
||||
|
||||
## Why JetBrains?
|
||||
|
||||
In my first semesters at Embry-Riddle, I had the pleasure of meeting many experienced professionals
|
||||
who scoff at my choice of tooling. "To each their own," I say! But after the third or fourth time,
|
||||
I started to think that maybe I am missing something? In my Neovim editor I have everything I could
|
||||
ever need, countless language servers (LS or LSP) with autocomplete and other features, database
|
||||
integration, AI tools like CoPilot, lighting fast navigation via
|
||||
[Telescope](https://github.com/nvim-telescope/telescope.nvim) and
|
||||
[Harpoon](https://github.com/ThePrimeagen/harpoon), syntax highlighting via
|
||||
[TreeSitter](https://github.com/nvim-treesitter/nvim-treesitter), and even git integration from
|
||||
[Fugitive](https://github.com/tpope/vim-fugitive). Needless to say, if I want something new, I can
|
||||
get it. Granted, plugins are not exclusive to Neovim. Visual Studio Code (VSC), another popular
|
||||
integrated development environment (IDE), also has a large plugin ecosystem. However, this argument
|
||||
is to rebut against the frequent complaint that Neovim is lacking in features and cannot serve as a
|
||||
modern IDE.
|
||||
|
||||
That now begs the question, why JetBrains products? The answer is simple: they are the best.
|
||||
There is hardly any competition in the proprietary development tools space, the two biggest competitors
|
||||
being VSCode (as previously mentioned) and the JetBrains suite of tools. I have experience using both
|
||||
tools. I spent lots of time using IntelliJ from JetBrains when I learned Java, and this experience
|
||||
opened my eyes to the power of an IDE vs. a typical text editor (Neovim). However, Java is not a simple
|
||||
language compared to GoLang (my primary language) or Python (what I use in many of my University classes).
|
||||
For that reason, I avoided using such powerful tools when writing code in languages that I did not see
|
||||
a huge benefit from. But I have always had a sweet spot for IntelliJ; It was how I was introduced to the
|
||||
world of software development. For that reason, I decided to choose JetBrains for this experiment.
|
||||
|
||||
## Why Change Now?
|
||||
|
||||
Another great question! If I love Neovim so much and I am so productive with a tool, why try something
|
||||
new? A professor who I have grown particularly fond of, has always poked fun at me for my choice of
|
||||
tooling. He frequently mentions that I should try something else because when I get into the work force,
|
||||
I will not be able to use Vim. I have finally had enough! Just kidding. He is right, if I am only
|
||||
competent with a single tool, I will struggle in the future. So I decided to spend 30 days using only
|
||||
JetBrains products.
|
||||
|
||||
With my student email, I qualify for free access to the JetBrains suite, which is a huge factor in this
|
||||
choice. A subscription for a JetBrains editor is nearly $100 a year, **per editor**. In this experiment,
|
||||
I will be using **PyCharm**, **WebStorm**, **GoLand**, **CLion**, and **DataGrip**. I do not want to spend
|
||||
hundreds of dollars on an editor when so many free options exist, but their education benefits, I cannot
|
||||
use that as an excuse. Furthermore, I may as well take advantage of the benefits while I have them!
|
||||
|
||||
## The Migration
|
||||
|
||||
Switching from such a personal tool to a proprietary tool is a big jump. My biggest concern was the motions
|
||||
I have become so accustomed too. Each JetBrains product has a plugin called **IdeaVim** which implements
|
||||
vim motions natively into the editor. In the past, I have used the **VSCode Neovim** plugin, but it felt
|
||||
slow, buggy and simply just bad. However, even in just the short time writing this article, I have not noticed
|
||||
any large issues with the vim motions in the JetBrains plugin.
|
||||
|
||||
Another thing I will miss during these 30 days is the plugins I use in my Neovim configuration. Below, you
|
||||
can see a collection of each plugin I use in my setup. Quite a few! Some of my favorites being **Harpoon**
|
||||
and **Telescope** which allow me to move between buffers (similar but different from files) with ease. During
|
||||
this experiment, I will not install any of these plugins into my JetBrains editors. I could very easily convert
|
||||
any of these editors into a copy of my Neovim setup, but that defeats the whole purpose of this trial! I will
|
||||
use this editor with very few plugins to allow for more native feel, and to take full advantage of the features
|
||||
provided by the tool without handicapping myself to my comfort zone.
|
||||
|
||||
<br>
|
||||
|
||||
#### My Neovim Plugins
|
||||
|
||||
- [dashboard-nvim](https://github.com/glepnir/dashboard-nvim) - A dashboard for Neovim.
|
||||
- [emmet-vim](https://github.com/mattn/emmet-vim) - Emmet support for HTML, CSS, etc.
|
||||
- [github-copilot.vim](https://github.com/github/copilot.vim) - GitHub Copilot integration.
|
||||
- [Harpoon](https://github.com/ThePrimeagen/harpoon) - Quickly jump between files.
|
||||
- [hex.nvim](https://github.com/folke/hex.nvim) - Provides hex editing capabilities.
|
||||
- [lspkind.nvim](https://github.com/simrat39/lspkind.nvim) - Adds icons to LSP completions.
|
||||
- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) - A statusline plugin.
|
||||
- [LuaSnip](https://github.com/L3MON4D3/LuaSnip) - A snippet engine.
|
||||
- [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim) - Preview Markdown files.
|
||||
- [Nixvim](https://github.com/nix-community/nixvim) - Integrates Neovim with the Nix package manager for reproducible
|
||||
configurations.
|
||||
- [noice.nvim](https://github.com/folke/noice.nvim) - Replaces Vim's default notification system.
|
||||
- [none-ls.nvim](https://github.com/nvim-lua/none-ls.nvim) - A "null-ls" implementation for non-LSP servers.
|
||||
- [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - A completion plugin.
|
||||
- [nvim-colorizer.lua](https://github.com/norcalli/nvim-colorizer.lua) - Displays colors in the editor.
|
||||
- [nvim-git signs](https://github.com/lewis6991/nvim-git-signs) - Displays Git changes in the sign column.
|
||||
- [nvim-marks.lua](https://github.com/chentoast/marks.nvim) - Manages marks.
|
||||
- [nvim-notify](https://github.com/rcarriga/nvim-notify) - Another notification plugin.
|
||||
- [nvim-smart-splits](https://github.com/mrjones2014/nvim-smart-splits) - Manages window splits.
|
||||
- [nvim-surround](https://github.com/tpope/nvim-surround) - Easily change surrounding characters (quotes, parentheses,
|
||||
etc.).
|
||||
- [nvim-treesitter-undo](https://github.com/RRRRRRRRRRRRRRRR/nvim-treesitter-undo) - Improves undo/redo with Treesitter.
|
||||
- [nvim-trouble](https://github.com/folke/nvim-trouble.nvim) - Displays diagnostics in a more user-friendly way.
|
||||
- [nvim-ufo](https://github.com/folke/nvim-ufo) - Improves code folding.
|
||||
- [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) - Another Markdown renderer.
|
||||
- [rose-pine](https://github.com/rose-pine/neovim) - Rose pine color theme.
|
||||
- [lspsaga.nvim](https://github.com/glepnir/lspsaga.nvim) - Enhances the LSP experience.
|
||||
- [tailwind-tools.nvim](https://github.com/luckasRanarison/tailwind-tools.nvim) - Provides Tailwind CSS integration.
|
||||
- [Telescope](https://github.com/nvim-telescope/telescope.nvim) - A highly extensible fuzzy finder.
|
||||
- [vim-fugitive](https://github.com/tpope/vim-fugitive) - Git integration.
|
||||
- [wakatime.vim](https://github.com/wakatime/vim-wakatime) - WakaTime integration for tracking your coding time.
|
||||
|
||||
<br>
|
||||
|
||||
To remain some level of productivity, I did install a handful of select plugins in each of the
|
||||
JetBrains IDEs. They are listed below:
|
||||
|
||||
#### JetBrains Plugins
|
||||
|
||||
- [IdeaVim](https://plugins.jetbrains.com/plugin/164-ideavim) - Vim motions.
|
||||
- [GitHub](https://plugins.jetbrains.com/plugin/13115-github) - GitHub integration, installed by default.
|
||||
- [GitLab](https://plugins.jetbrains.com/plugin/22857-gitlab) - GitLab integration, installed by default.
|
||||
- [Grazie Pro](https://plugins.jetbrains.com/plugin/16136-grazie-pro) - Grammar help and completion.
|
||||
- [Rose Pine](https://plugins.jetbrains.com/plugin/18141-ros-pine) - Rose pine color theme.
|
||||
- [NixIdea](https://plugins.jetbrains.com/plugin/8607-nixidea) - Nix and NixOS tooling.
|
||||
- [WakaTime](https://plugins.jetbrains.com/plugin/7425-wakatime) - WakaTime integration for tracking your coding time.
|
||||
|
||||
## Artificial Intelligence
|
||||
|
||||
With AI on the rise, I am faced with the question of using an AI tool in my editor or not. As you've seen above,
|
||||
I use **GitHub Copilot** in my Neovim config, which has served me well. In my experience, it is bad at generating
|
||||
complex code, but it does an exceptional job with helping me write comments and boilerplate code. However, I have
|
||||
found that I think less and rely on Copilot far too much. During these 30 days, I hope to break this habit, which
|
||||
I have heard called "the Copilot pause." When writing some code, I often wait a second for Copilot to write it for
|
||||
me. This pause proves my reliance on AI has grown too far.
|
||||
|
||||
> "After using copilots for a while, you’ve probably noticed the good ol’ copilot “pause.” You know, that moment when
|
||||
> you’re just waiting for AI to write what you’re thinking so you can press tab and go on with your life. That’s the pause."
|
||||
> ~[Eric Zakariasson](https://anyblockers.com/posts/avoid-the-copilot-pause)
|
||||
|
||||
So, during this experiment, I will not use any AI integration in my editor. This includes the **Jetbrains AI Assistant**,
|
||||
which is advertised ad nauseam in the IDEs. But I am no programming master, and I do still see benefit in using
|
||||
LLMs to help with simple tasks and idea creation. So, I will continue to use chatbots like **ChatGPT** or Google's
|
||||
**Gemini** to help me with day-to-day use cases.
|
||||
|
||||
## Editor Setup
|
||||
I have written this entire document in WebStorm, but up to now, its only been a few hours of the switch. But one thing I
|
||||
have learned is that the IdeaVim plugin allows for configuration in a `~/.ideavimrc` file. Very similar to Vim, yay! In
|
||||
this fill you can configure all kinds of things, however, I tried not to go overboard with the configuration file and tried
|
||||
to configure most of the editor in the application settings. Again, to make the feeling less "vim-like" and to have a more
|
||||
out-of-the-box experience.
|
||||
|
||||
```vim
|
||||
" These do not work very well :(
|
||||
" However, there is a setting for this in the IDE
|
||||
" 'Move Line Up/Down' in 'Keymap' settings
|
||||
"
|
||||
" vnoremap J :m '>+1<CR>gv=gv<CR>
|
||||
" vnoremap K :m '<-2<CR>gv=gv<CR>
|
||||
|
||||
" Indent lines with tab and shift-tab
|
||||
nnoremap <TAB> V>
|
||||
nnoremap <S-TAB> V<
|
||||
vnoremap <TAB> >gv
|
||||
vnoremap <S-TAB> <gv
|
||||
|
||||
" Disable the annoying sounds the IdeaVim plugin likes to make
|
||||
set visualbell
|
||||
set noerrorbells
|
||||
```
|
||||
|
||||
This is a sample `.ideavimrc` file which I used for the month. A lot of the settings I found myself wanting to tweak
|
||||
could be done through the menus in the editor itself. Which at times, proved to be rather difficult.
|
||||
|
||||
## Disclaimer
|
||||
The following sections will review my findings and the results of this experiment. Keep in mind, anything I say is
|
||||
100% my own opinion, and every user will likely have a different experience. Nothing here is **fact** just simply
|
||||
how I feel about each tool.
|
||||
|
||||
## What is Missing
|
||||
After using the JetBrains products for a month, I have noticed a few things that were missing that made my development
|
||||
experience slightly more cumbersome. For example, I did not find a very good way to search for files, options like
|
||||
**class search** or **symbol search** are powerful, but sometimes I want to search for a file or navigate quickly between
|
||||
files. I was not able to find this functionality using the default tooling in the Idea products.
|
||||
|
||||
Another thing I was not a huge fan of is the `.idea` directory that is created in the root of each project. This is a small
|
||||
complaint, but in large projects, it can create more bloat in the source. Many times I experienced issues with files
|
||||
loading properly due to a corrupted `.idea` directory. Or even times when the files would get hidden in my source tree due
|
||||
to an issue in the editor config. I don't love that the editor requires setup for each project, similar to the `.vs`
|
||||
directory from [Visual Studio Code](https://code.visualstudio.com).
|
||||
|
||||
Finally, the biggest issue I noticed was the LSP and syntax highlighting was very slow and at times would crash. At
|
||||
times, I would have to stop working and wait for my editor to "catch up" and highlight my code or generate LSP completions.
|
||||
I often found myself having to close a file and open it again to get the syntax highlighting to function again. Which
|
||||
I have never had to deal with in Neovim. Furthermore, in multi-language projects, the tools struggle pretty badly too,
|
||||
due to the single language nature of the tools. Of course, there are solutions to this problem through plugins, but
|
||||
throughout this experience I did not install them as mentioned previously.
|
||||
|
||||
## What JetBrains Does Better
|
||||
Of course, the JetBrains suite is industry grade software, which comes along with lots of powerful built-in tools. Such
|
||||
as Git integration. The source control integration is exceptional and allows for easy switching between branches using their
|
||||
**smart checkout** feature. There were times when I still needed to pull out the command line to solve complex git issues,
|
||||
but for the most part, the UI/UX was good and fairly easy to learn. I also really liked that `// TODO: ...` comments were
|
||||
highlighted to stand out and when commits containing TODOS were created, a notification was pushed to the user. Small
|
||||
things like this really help the tools stand out and feel user-friendly.
|
||||
|
||||
Other features like the LSP and syntax highlighting are installed out of the box. This is a huge win for those who do not
|
||||
want to spend hours configuring their system and tools before working. However, that is *exactly* who I am, so this was
|
||||
not a huge benefit to me, but it definitely made the migration much faster. Another smaller feature that can be included
|
||||
in that list is the **markdown previewer**, which was a nice feature to see. Most modern editors have this feature, so I
|
||||
am sure this is nothing new, but vim is not able to achieve this functionality natively.
|
||||
|
||||
Finally, the last feature I really enjoyed was the project sessionizer. The ability to switch between projects with the
|
||||
click of a button is amazing. However, I did not find myself using it very often. Usually, the only time I needed to use
|
||||
it was when I first opened the editor and had to select or create a project.
|
||||
|
||||
## The Verdict
|
||||
So what was the point of this whole thing? Firstly, I need to be able to tell other people **why I use Neovim vs. other
|
||||
editors.** Jokes aside, there is a real reason. It was pointed out to me that maybe I am handicapping myself or missing
|
||||
out on tools that might help my development workflow. I try not to disregard things that I haven't used, and since I
|
||||
haven't used an editor that isn't Neovim in **years**, I thought it was only fair I give them a chance.
|
||||
|
||||
During this month of JetBrains, I learned a lot about what I like and what I don't like. For example, I still work best
|
||||
with keyboard driven workflows and prefer TUI ([Terminal User Interface](https://en.wikipedia.org/wiki/Text-based_user_interface))
|
||||
over a GUI (Graphical User Interface). Having to reach between the mouse and keyboard was a driving reason that I switched
|
||||
to Neovim in the first place, and I still believe it is a strong argument for the tool. However, sometimes preference is
|
||||
not enough when the tooling is **objectively better.**
|
||||
|
||||
In my experience, I have narrowed the editors down into two categories: **Worth the pain** and **just not strong enough.**
|
||||
|
||||
#### Worth the Pain
|
||||
- **[Rider](https://www.jetbrains.com/rider/)** for C# development
|
||||
- **[Clion](https://www.jetbrains.com/clion/)** for large C/C++ projects with CMake
|
||||
- **[IntelliJ](https://www.jetbrains.com/idea/)** for Java development
|
||||
|
||||
#### Just Not Strong Enough
|
||||
- **[GoLand](https://www.jetbrains.com/go/)** for Go development
|
||||
- **[WebStorm](https://www.jetbrains.com/webstorm/)** for web development
|
||||
- **[PyCharm](https://www.jetbrains.com/pycharm/)** for python development
|
||||
|
||||
You may notice that *every* JetBrains product was not listed above. That is simply because I did not use every single one.
|
||||
I have never once found a need to write PHP code and therefore, did not use the PhpStorm editor. It would be unfair to
|
||||
try and rate products I have never used. So why did I rate each of these editors the way I did? I have a simple
|
||||
guideline: **language complexity.** Languages Python or JavaScript are simple enough (syntax wise) that I do not feel the
|
||||
need to have such powerful tools. The editors placed in the "Just Not Strong Enough" categories do not provide enough help
|
||||
to me to outweigh the lack of preference. Go is also a fairly simple language with very little
|
||||
"[syntactic sugar](https://en.wikipedia.org/wiki/Syntactic_sugar)." In addition, lots of programming experience is in Go,
|
||||
so I have no problem writing an application start to finish without the need for complicated tooling.
|
||||
|
||||
How about the three in the "Worth the Pain" category? Languages like C# and Java are (in my opinion) a complex language
|
||||
with features that really benefit from powerful tools. In my experience, [object-oriented](https://en.wikipedia.org/wiki/Object-oriented_programming)
|
||||
programming languages are the hardest to develop with poor tooling. The power that Rider specifically provides in a huge
|
||||
C# codebase is unrivaled. This [survey](https://www.jrebel.com/blog/best-java-ide) from 2024-2025 says that IntelliJ IDEA
|
||||
is the most popular editor among developers for the Java programming language. So I guess it's safe to say I am not the
|
||||
only one who feels this way!
|
||||
|
||||
>
|
||||
> IntelliJ IDEA has firmly held the top spot over that timespan, with the Java IDE's popularity only increasing from 71% to 84%.
|
||||
>
|
||||
|
||||
The last editor on the list is Clion. The reason I added Clion to the "Worth the Pain" list is simply because I am bad
|
||||
at writing C. I know, hard to believe, but I actually don't know how to use CMake and really don't want to learn. So for
|
||||
projects that require dependencies, I really struggle to compile and run the program. Clion abstracts a lot of the hardship
|
||||
involved with packaging and compiling C programs which is why I will likely continue to use it for projects with many
|
||||
dependencies.
|
||||
|
||||
## JetBrain > Neovim?
|
||||
So after all of that, will I continue using Neovim for everything I do, or will I strictly use JetBrains products? I hope
|
||||
that after reading the previous section, you will know the answer. I am looking forward to jumping back into Neovim and
|
||||
getting work done with "blazing speed," but I now understand that sometimes a full-fledged IDE is just the better option.
|
||||
|
||||
I hope that reading this will shed some light on some of the bias many programmers develop over time. Maybe even inspire
|
||||
you to try something new, even if its only for a month, or even a week! You might love it! Or at the very worst, you might
|
||||
learn something.
|
||||
@ -1,6 +1,8 @@
|
||||
<script>
|
||||
import Projects from '../components/projects.svelte';
|
||||
import Work from '../components/workExperience.svelte';
|
||||
import Skills from '../components/skills.svelte';
|
||||
import Resume from '../components/resume.svelte';
|
||||
</script>
|
||||
|
||||
<div class="flex h-fit w-full flex-col md:flex-row">
|
||||
@ -23,6 +25,8 @@
|
||||
<div class="mt-12 flex w-full flex-col md:mt-24 md:flex-row">
|
||||
<div class="flex-1 md:w-2/3 md:flex-none">
|
||||
<div class="w-full px-4 md:w-3/4 md:px-0">
|
||||
<Resume />
|
||||
<Work />
|
||||
<Projects />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
BIN
static/favicon.jpg
Normal file
BIN
static/favicon.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
static/haydenHargreavesResume.pdf
Normal file
BIN
static/haydenHargreavesResume.pdf
Normal file
Binary file not shown.
BIN
static/journal/JetBrains-Logo-Wide.png
Normal file
BIN
static/journal/JetBrains-Logo-Wide.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
BIN
static/journal/JetBrains-Logo.png
Normal file
BIN
static/journal/JetBrains-Logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
@ -1,16 +1,4 @@
|
||||
[
|
||||
{
|
||||
"title": "Cellular Automation Simulation",
|
||||
"description": "A cellular automation simulation using user defined rule sets. Currently, this is simply, a Conway's Game of Life simulation.",
|
||||
"date": "February, 2025 - Current",
|
||||
"stack": [
|
||||
"Javascript",
|
||||
"SvelteKit"
|
||||
],
|
||||
"image": "projects/cellularAutomation.png",
|
||||
"imageAlt": "Image of my cellular automation game",
|
||||
"link": "https://github.com/haydenhargreaves/CellularAutomation"
|
||||
},
|
||||
{
|
||||
"title": "TCP Server Notification System",
|
||||
"description": "Server/Client TCP notification system for communication between a server and many clients. A custom event loop and protocol was created to handle the communication between the server and clients.",
|
||||
|
||||
32
static/work/data.json
Normal file
32
static/work/data.json
Normal file
@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"company": "Poppin' Jobs",
|
||||
"position": "Junior Backend Engineer",
|
||||
"description": "Develop and maintain backend services using .NET and C#. Collaborate with frontend developers to integrate APIs and enhance user experiences. Work with SQL Server for database design, optimization, and management. Assist in implementing cloud solutions on Azure, ensuring scalability and reliability. Write unit tests and participate in code reviews to maintain code quality. Troubleshoot and resolve technical issues as they arise.",
|
||||
"timeframe": "March 2025 - Present"
|
||||
},
|
||||
{
|
||||
"company": "Bottom line Business Solutions",
|
||||
"position": "IT Technician & Staff Accountant",
|
||||
"description": "Completing data entry tasks and bank statement reconciliation. Building and hosting a web application to manage client data. On-site hosting with home server, including VPN.",
|
||||
"timeframe": "June 2020 - Present"
|
||||
},
|
||||
{
|
||||
"company": "Data Annotation Tech",
|
||||
"position": "Contractor - AI Model Trainer",
|
||||
"description": "Training AI models by answering questions and solving programming problems.",
|
||||
"timeframe": "January 2025 - Present"
|
||||
},
|
||||
{
|
||||
"company": "Backcountry Horsemen of California",
|
||||
"position": "Web Developer",
|
||||
"description": "Developed and hosted a new website while maintaining the current website. Managed domain, SSL licensing, and managed online presence.",
|
||||
"timeframe": "September 2023 - April 2024"
|
||||
},
|
||||
{
|
||||
"company": "Looksee Internship",
|
||||
"position": "Backend Engineer",
|
||||
"description": "Developed an HTTP back end serving video content to a mobile application. Managed and deployed a live demo application. Created architecture for secure client/server communication.",
|
||||
"timeframe": "January 2024 - February 2024"
|
||||
}
|
||||
]
|
||||
Loading…
x
Reference in New Issue
Block a user