I always find people's workflows interesting. It's such a personal process, unaffected by outside demands, that I think it sometimes reveals something about its creator. A lot of readers write or program, so I thought that my processes might be interesting.
Most people who write WordPress blogs write them in the built in WYSIWYG editor. That's how I started, too, but since then I've evolved my process to be more efficient, pleasant, and safe-- as in, lacking the danger of losing a post because you accidentally hit the back button.
I write everything in WriteMonkey, a distraction-free editor that I'm willing to defend as being "perfect". I turn my brightness all the way down so that the dark green background is just a faint glow on my screen. The pale green text floats in the middle of thick margins and takes over my field of vision the way a good movie does. There's no formatting, just asterisks to denote titles and subsections to bold later.
In contrast to the barren writing environment, the settings menu has every option you could possibly think of (down to regex expressions for things like comments and titles) to make that blank screen as wonderful to use as possible. I use a non-monospace font, have it autosave and autoopen so that clicking the icon brings up my 69,000+ word file that all of my posts go into.
I try to use my own photos for the blog posts as often as possible, which might explain why some of them have almost nothing to do with the text. I edit them in Lightroom and use a export profile which adds a small watermark (just because I think it makes the whole thing look more pro) and automatically sizes to the width of this column.
Once a week I import all of my posts into Microsoft Windows Live Writer. It's amazing that Microsoft makes the best blog publishing tool, but they do. I don't love writing in it (although it's certainly better than the WordPress web-based editor), but it's great for adding photos and light formatting. All of the meta data like the post slug, excerpt, tags, and post date can be set in WLW and then saved locally or online as a draft.
Oddly enough, the most lacking part of the process is actually hitting the publish button; right now I have a dozen posts loaded up as drafts and another thirty I'm not quite happy with still in WriteMonkey.
As I wrote the last section about my writing workflow, I thought about why it's so important to have such a specific workspace for writing. I think that it's because the best writing happens in that "flow" state where nothing causes friction or distraction. Having an environment conducive to "flow" is just as important with programming.
As recent as a few years ago, I was building web pages entirely in notepad. As sites became more complicated and involved more programming, I started looking for tools to help organize everything.
I have a separate partition on my hard drive for my projects. Inside are subfolders from everything from business cards to Make Her Chase You to my new programming project. Inside web programming project folders I have a "www" folder that has a current working version of the site. I use Git, either by command line or, more recently, with Git Extensions to properly version the directory. I'm an amateur with Git, so I mainly use it as a safety net. I know that if I every screw anything up terribly, I know that I can learn more about it and figure out how to get everything back.
Locally I run WAMP, which is an easy-to-install bundle of Apache, Mysql, and PHP. I alias the www directories so that http://localhost/tasksmash/ goes to the tasksmash/www directory on my project partition. I also edit the config files and hosts file to give myself a domain pointing to the project. For example, dev.tasksmash.com doesn't actually go to dev.tasksmash.com, it goes to localhost/tasksmash. If you don't understand that, you probably don't need to.
I edit files in Notepad++. Although I've gone through most of the plugins, I've settled on an mostly uncustomized installation. I use the Consolas monospace font, which is just beautifully clear, especially with stuff that matters in programming (i vs. j, 0 vs O).
Thanks to the glorious resolution (1920x1080) of the Z12, I often run Notepad++ on the left side of the screen, and Firefox in the right, especially if I'm debugging something and have to check back and forth often. If I'm in my RV I use my second screen for Firefox and keep the laptop one for coding.
My screens look reddish in the picture because I use f.lux.
I've started Tim Ferriss' Occam's Protocol from 4HB. Only a week in, so I'll update you when I have some sort of results to share.
I love seeing the nuts and bolts behind different approaches to blogging and working online. I'm pretty much on the opposite end of the spectrum of you, where I use the basic Blogger platform to write my posts and then do my various customizations (photo-embedding, a bit of html tweaking) before deeming the article ready to be published--or, more often, ready to be put into a line of articles waiting to be published. I find that at least so far, I can do everything I need to in the Blogger platform and it's easy enough for me to use.
I just tried flux and it is really cool. I just wish I could set it to turn on in the day when I'm in a dark room. That would be handy.
I wanted to ask you: When is the Spanish edition of Life Nomadic coming out? I've bought and read the Endlish edition and I've been waiting at the edge of my seat to buy the Spanish e-book to give to a friend of mine. Looking forward to it!
I do a lot of writing for my class notes and lectures but mostly do them on Evernote since i email them while i am in class, i find Evernote extremely helpful since i can access my notes from anywhere and everywhere. I have to check out WriteMonkey for it's sheer simplicity and distraction free-environment.
I develop in Ruby on Rails but find most web app code I write these days is in jquery. Source control is handled by github, as is issue tracking and group collaboration. I deploy quickly and easily to heroku free accounts and move to amazon AWS when projects mature.
After using vim for many years i've settled for Textmate on the mac as my editor of choice. All projects these days consist of many files and Textmate does a great job of automatically tracking these and allowing you to switch and search between files really quickly.
Kind of off topic but some friends and I today unveiled a project we've been working on. It's called Bindle and is sort of a Show and Tell for gear. The idea is to gather information about products that people really love and how they relate to each other, and to allow people to see and share their own collections in a beautiful and meaningful way.
If you're interested you can try it out through the invite system here: http://bindle.me/users/sign_up?invitation_code=b0b117b85cf3507e8e4e
One potentially worthwhile addition to your code-on-the-left/browser-on-the-right configuration is a tool called LiveReload, which will automatically reload your browser anytime your project's HTML/CSS/JS files change.
A quick CTRL-S definitely beats doing the ALT-TAB, CTRL-R, ALT-TAB shuffle all the time!
You can find LiveReload here: https://github.com/mockko/livereload
Caveat: This comes from the Ruby on Rails world, where nearly everyone is on Mac. They have Windows setup instructions that look simple enough, but I don't actually know how easy/painful it is to get it running on Windows.
I went to Ignite Seattle last year, and mostly thought the 5-minute format was useless (I already think most TED talks are too short) but one of the small number of talks I really enjoyed and found inspiring was a professional writer (journalist, I think) who eschewed slides for a 5 minute time-lapse video of him writing a short document. He narrated over it. It was, like you say, super personal, all the weird little foibles. And it was neat to see the things he did that I do, too - setting a horizontal rule at the bottom and cut'n'pasting text down below it as a "graveyard" that I'll later recover text from, things like that.
On a different note, naturally we use Visual Studio 2010 at Bungie for almost all our code, certainly all the C++ and C#/.NET stuff (though I'm sure we have some outlier Emacs weirdos) but Notepad++ is the preferred tool, I think, for most people doing work in Python.
I find a creator's process to be insanely intriguing. It's really the heart of who they are as an artist.
I think, though, that you missed a really important piece of it in this post that I would love to hear more about in the future:
What is the mental process - what is your approach?
What is your process of capturing an idea and translating it into something that exists and is awesome?
I've been refining my programming process for 10 years now and my setup is just a small part of that.
When I started writing more frequently, things got easier as I created a process:
- Go on walks everyday, texting interesting thoughts back to my email.
- Write 500 impulsive words around one of those interesting thoughts later in the day.
- Occasionally take a 500 word raw article, adding to and refining it.
Then you have processes within processes: What's the process for dealing with a mind-bending programming problem? I have my approach and I bet you have one as well.
Being exposed to new approaches is where the most gain is, I think.
That being said, a software suggestion:
VIM is a ridiculously awesome text-editor like nothing else out there that many people judge way too quickly because it is so different.
If you give VIM a try like you gave Dvorak a try - expecting to be a bit out of your comfort zone at first - you'll get into a flow with it and never look back.
In short, VIM is a modal editor. The default mode is 'command mode' not 'insert mode'. Command mode let's you do awesome things like type 'di(' to [d]elete and copy everything [i]nbetween the nearest set of [(]parentheses).
I finally gave it a shot a year ago and it is one of the best investments I've made in my workflow.
I use Visual Studio for any .NET programming I do because they are just fundamentally built for each other. With IntelliSense, I probably only type 50% of the characters in my text file.
I've also built up my own suite of libraries over the years to where I can rapidly deploy new projects based on my own libraries. I think that's where programmers start to diverge from each other on their productivity scale, whether they are rewriting the same code all of the time or they have taken the time to generalize projects they've already worked on to have more reusable code.
I also tend to write programs anytime I have a very repetitive task that I need to do. One of these was a program for writing SQL scripts. When I setup a database, there are a lot of very repetitive things that I do. My setup script includes an "IF EXISTS()" guard for every table creation. I create a number of basic stored procedures for getting and setting rows directly. Certain classes of tables always have certain combinations of columns. A bunch of stuff like that. So I wrote a program that lets me define just the bare minimum of the table structures and it figures everything out according to my style for me from there.
I got an email from a reader this week asking if I'd post about how my computer is set up for productivity. As I was going through my answer in my head, I realized that I'm also very geared towards security, which is frequently overlooked. So, behold: a post about how my computer is set up.
Almost all computers today are fast enough for the average load of tasks that a user will dump on it. Most laptops are light enough to be lugged around comfortably. Storage capacity is abundant across the board.
Let's talk about programming. Everyone says you need it these days. Even I do. But, how should you learn to code? Codecademy, KhanAcademy, or other pseudo-learning techniques? Maybe a book, like Learn Code The Hard Way. What language should you learn, and what software should you code in? The questions are endless!
I'm here to give you a solution for you (and myself). Here's an 8-step guide for learning to code.
Everyone knows that goals are pointless if they're not specific. If you don't define your success, you're just flailing around randomly. Therefore, have something you want to build.
Think of coding like woodworking. You want to learn how to manipulate wood to make beautiful objects. Would you start hacking away randomly? No. Then why would you do that with code?