I've been thinking about how and when I program at my best, what the tools are, what the situation is and how I can engineer it more often.<p>It's a combination of editor/IDE (that I know), debugging tools, clear goal, clear head, ...and a bunch of other things.<p>What are your factors of 'the best programming you'?
My environment has to feel isolated yet not alone, i.e. I could not work alone in a basement as I tend to get anxious. Other than that: 1) A good IDE (my current fav is anything by JetBrains) 2) Either Atom or Notepad++ as a basic text editor 3) A Unix-like environment so I can use tools like vim, Perl, and bash (Linux Mint and macOS FTW) 3a) If I must be on Windows, I insist on ComEmu and PuTTY 4) Youtube in the background for watching/listening to stuff that is slightly distracting 5) I play guitar a lot, so I keep a junker electric guitar at my desk in case I need to take a mental break or think through a solution 6) Coffee, within reason 7) I have found that I can get 2-3x more done at 6-9am than from 9am-5pm. My brain seems much more alert when I just wake up. 8) Frequent breaks 9) Somewhat cool -- I can't code hot and deep thinking and analyzing make me feel hotter for some reason. And finally....10) Having as few interruptions as possible from IM (Slack, etc.). I sometimes have to go "dark" for a few hours to get shit done.
Emacs, door shut, no noise, no interruptions. Phone etc in different room. No notifications enabled on my machine.<p>My office at home has three walls made of floor to ceiling glass (back wall is bookshelves). You might think that would be distracting but all I can see is trees, and I'm above ground level so not even animals distract.
I've been coding at home for 20 years now. I really don't know how I'd do in an office environment now.<p>I need quiet, solitude, and no interruptions at work, and a good nights sleep before it.<p>I don't know how people can code with music playing or people talking and coming in and out of the work space. I can't hear myself think with that around me and it bugs the hell out of me.<p>I code in spurts. If I'm focused I won't stop and I'll keep coding until I'm exhausted and get a shit ton of work done, and then I need time off.<p>When I'm tired and "burnt out" I can't code squat. I just sit there and stare and can't really follow and track logic and if I try to write something it's garbage and will break stuff and I'm better off not mucking with anything at all.<p>As far as tools go, I've been using BBEdit the entire time. I use it for JS, Perl, HTML, CSS, Python, plain old text and most everything else I might code. I use it more than any other app I have.<p>I still use "Fetch" for the Mac to transfer files. It works for me.<p>I use a few Raspberry Pi computers connected to my LAN and configured similar to my production servers for development and to keep working when I lose my internet connection. Where I live, in a rural area, that happens quite a bit.<p>I have a collection of disk images for the Pi that I use to prototype stuff on and experiment with. I can hack on those and break them or copy them and go from there or start over again on something else with a fresh install in just a few minutes.<p>The Pi has become one of my favorite tools. I can emulate the internet in my office on my desk and work on building a server dedicated to a specific task and then mimic the install on a production quality VPS. I even have a disk setup to use as portable PC on trips now and don't bring a laptop anymore. I bring a small bag of adaptors for monitors and a tiny wireless keyboard with a touchpad and that's it. Everything important is on a microSD that's easy to remove and conceal and replace.
I get about 4x work done with my main rig at home vs my laptop in an office.<p>1. Big monitor. Tried a regular monitor vs UHD. UHD monitor gives me two rows so I can do stuff side by side.<p>2. The right music + headphones + no background noise.<p>3. Nice keyboard and mouse. My laptop isn't good enough.<p>4. L-Theanine pill before work starts.<p>5. Half hour meditation time before work. Headphones are great for this.<p>6. Decent IDE.<p>7. Also I block off Facebook and games for the entire work week, even past office hours. Flow goes well into the night.
1. Good Music/pod casts/tv on for noise to ignore/trigger other parts of my brain.
2. moderate lighting not to bright not to dark.
3. Confortable temp - codeing cold or hot is a no go.
4. a Decent keyboard with good key travel that doesn't bottom out, and isn't squishy feeling.
4. fluids - having water, coffee, soda, etc... close that I don't have to go get it.
5. standup desk, with bar stool when I do need to sit.
6. Linux/freeBSD
7. open terminal (for man and tool chain: compiler, debugger, etc..).
8. Browser, and some select books when I need to look things up.
9. Vim or VS Code.
10. train co-workers, spouse, kids to not interrupt the zone/flow.
Definitely music and a good nights sleep. If I haven't slept properly or am somewhat exhausted nothing can bring me into flow.<p>If I'm well rested I have 4-5 different hour long mixes that I put on my noise cancelling headphones or use "Focus" from Brain.fm - which I actually think I bought a lifetime membership of because of a HN discount - and with either one of those, I have somewhat trained my mind to go into "work-mode"/flow.
I find tools not so important, as working conditions.<p>Most important are quiet conditions, minimal interruptions & meetings and confidence management know what they are doing.
Peace of mind before I start working. If there's something bothering me, I just can't up and get going on work that needs to be done. A peaceful mind, good night's sleep, and some good breakfast all put together gives me a full day's worth of high productivity.<p>I used to think it was about the tools btw. Then realized the constant experimenting with what tools to use was just my mind playing tricks with me and making me believe I was getting work done.
Visual Studio.<p>Clunky at times and possibly bloated with too many features and menu options but Debugging IDE is by far the best of any IDE I've worked with!