A list of programs that can be useful when creating resource packs. They are all free to download.
When it comes to editing textures, (in my opinion), GIMP is the best program, mainly because of the such wide variety of features. Pallettes, replace by colour, layers, channels, you name it. Website .
Notepad++ is just a good version of Notepad. I find it's really good for automating long tasks when you're editing blockstates or models JSON files, when it's normally so tedious. Notepad++ has macros built-in, can find and replace across hundreds of files at once. Website .
I don't much 3D modelling myself, but when I do, I always use Blockbench. You can make OptiFine CEM, Java block models and a bunch of other stuff. You don't have to worry about getting nasty UV mapping in the models right, getting the right textures on the right places. Blockbench lets you do it in a graphical way, and export it as a JSON file. Website
Visual Studio Code
In Minecraft, VS Code can be useful for editing complicated models, blockstates and JSON files. It has a bunch of extensions, for mcmeta syntax highlighting, or finding errors in models. Website