Compared to a lot of software engineers I've not been programming long but 8+ years is long enough to get into some pretty horrible habits. The worst of which I managed to shake off only a few years ago (a crippling dependence on MS Visual Studio).
Once I got serious into wanting to become a better programmer I started hopping around editors and Integrated Development Environments. I stuck for a long time on the JetBrains suite that covers the languages I use most (Python, C/C++, SQL and *shudders* Java). JetBrains produces some amazing tools which made me feel far more powerful in programming that Visual Studio ever did. It made everything I wanted to do so easy:
- Linking libraries? Done
- Adding cross compiler functionality? Done
- Simple Git Integration? Done
- Generating tags and hoping around large systems such as the Linux Kernel? Done (and quick to boot!)
The point being that a good IDE makes the world of difference to those of us who write software!
A few months ago I stopped using all these IDEs that I depend upon and love so much...
I decided I didn't want my hand held anymore. I didn't want some software I didn't understand with a license that cost too much and a possibility that one day I couldn't get on with work because I had a dependence on specific software. I wanted to understand the code I handled more! I needed to understand the finer points of how the C/C++ toolchain works, how the compiler handles my instructions etc...
I had a look around and asked a few of my more informed friends about what they use to program with and I got all sorts of answers, the most prominent being VIM. I did of course then look into VIM and damn did it feel naked and raw to me who had relied so heavily upon feature-filled IDEs. I didn't like it. No matter how many tutorials I watched, posts I read or posters I printed (Yes I did print a poster for my wall to try and help). I didn't like VIM.
And then I found Emacs
A few minutes into Emacs I thought "Finally this is great". A few more minutes and it became "WORK YOU PIECE OF SH*T, WHY IS EVERYTHING BROKEN???"
But for some strange reason I liked how Emacs felt. It's ridiculous key-bindings and convoluted ways felt like natural progressions to me. I spent so long reading, trawling and begging through Emacs forums asking for guidance and asking stupid questions (Which the community is great for, and put up with me rather well! Mandatory shoutout to /r/emacs for their readiness to answer my questions)
Over time reading commands given like: "C-x C-s C-c C-C" became second nature (That's an example combo for Saving and executing python within Emacs it's Control-x, Control-S, Control-C, Control-C) As you can see it might not seem intuitive but given a bit of time I feels nice having the ability to give so many keybinds and customise them to my hearts-content
My absolute favourite feature of emacs is having multiple programming languages in the same window and fluidly jumping across them. I love having my screen filled with information... well that is to say useful information like such:
The screen-capture shows A bash shell running mysql, a sql script file and a python file all open at once and running happily beside each other.
Another reason I love my emacs configuration is that it not only makes my day-to-day editing and writing easier and more efficient, it makes it simple for me to add addons to manage other aspects of my life such as with org mode:
Here I keep track of all my tasks I'm currently working on, org mode is the TODO manager I have been searching for, for years and finally even after writing my own applications to do it, I found org mode and it all became easier!
A more recent discovery of mine and I'm still learning how to master it is magit a clever little extension to emacs that lets me manage my Git repositories:
In this image you can see how magit lets me track changes, view file changes and handle pushing/merging of my repos.
On a final note just to iterate how flexible emacs is:
;; Run C programs directly from within emacs
(defun execute-c-program ()
(setq foo (concat "gcc " (buffer-name) " && ./a.out" ))
This is a little function I have for when I'm quickly prototyping a piece of C code and I want to compile and run it on the fly, I have this in my emacs configuration file and it lets me happily run it without having to move away from my code!
Having an editor that you can live in is amazing, once I master the use of eww - emacs built in web-browser I will hardly ever leave it.
I'm far from mastering emacs as a whole and I've made so many mistakes, but a few months of it and I dare say I'll never leave!
4,532 total views, 2 views today