Auto-pilot often comes at a cost: It puts a layer between you and what you’re building.
In “Creating Short Films for the Web,” Hillman Curtis writes about shooting in manual:
Another goal I set for myself was to become comfortable enough with the camera to shoot in manual. This meant switching everything “auto” on the camera off: auto focus, auto zoom, auto iris and shutter speed, an auto white balance. This can be risky when you are new to using a camera: you might misfocus or forget to check your white balance as the light changes. But with manual you can dial in a much richer shot, and it forces you to stay connected with your camera throughout the shoot.
For similar reasons, we often choose to pull out the machete and chop our own path in software development. Programmers write code in text editors, instead of integrated development environments, so they can better feel the pulse of the code. Designers code HTML/CSS by hand too. Also, we answer every support email ourselves because farming support out would put us that much further away from our customers.
Every time you outsource something, put something on automatic, or get software to do it for you, you put up another layer. After a while, these layers add up. They blur your vision. You lose touch with the core of what you’re doing. Like Hillman says, shooting in manual lets you dial in a much richer shot.
JustinS
on 15 Mar 07Interesting take. Though, I wonder if in some ways the opposite isn’t true. When I bought my first real camera it was a 1970’s soviet fully manual medium format camera, and I loved it. Through trial and error I learned about the relationships between shutter speed, aperture and exposure. I learned about barrel focusing and how to calculate flash exposure. I felt like this was real photography, and I still absolutely love shooting on that camera. My next camera was a Nikon F3, it added aperture priority exposure and could meter in much lower light. Next was a Nikon n80 and then a Nikon d70. Each of these cameras added more and more layers of options for automation. My pictures haven’t changed at all, but more often, when I’m in quickly changing and complex situations my pictures come out exposed how I want them (which isn’t always correctly) and focused how I want them (which isn’t always in focus) and I’m left to put my energy into framing the shot. My time on manual cameras was invaluable in understanding how to use my more automated cameras, but having these options increases, rather than take away from, my efficiency and my ability to produce good work.
I think the same is true in development. After all, isn’t Rails a form of automation. As are all frameworks. If you know how to use it fully, you can get whatever you want out of it. I think handcrafting is awesome, and there are times when nothing else will do. But in terms of getting good projects done, and done when I need them done, I’ll take a team of great developers working with whatever level of automation they need any day.
Rimantas
on 15 Mar 07I am not so sure if using fully manual exposure setting is such an bright idea, except in rare circumstances. Aperture priority or shutter priority offers the best solution – it’s kind like good text editor for hand-coding html – you must know which tag to use, but when you do editor offers auto-completion. White balance? If you are really demanding – shoot in RAW and then deal with it later.
Ben
on 15 Mar 07Isn’t that entirely in opposition with your philosophy of ‘Getting Real’?
I can take a photo and think about aspects other than the (comparatively) mundane task of making sure there is enough light, concentrating on the task at hand and not the factors that will in all likelihood not have any affect on the result except slowing down the process.
And I think most developers hand code HTML/CSS because there isnt a viable alternative – Textmate is about the best IDE you can get, and that automates a whole lot. I very much doubt its to ‘feel the pulse of the code’.
Ethan Bodnar
on 15 Mar 07Just got his book in the mail today. Cant wait to read it.
ML
on 15 Mar 07It’s all about choosing where/when to go automatic or manual. Obviously you don’t want to do everything by hand all the time. We often seek out shortcuts and assistance from software. The point here is just to recognize the costs of doing so and realize that sometimes the long road can actually help you stay in touch with what you’re doing and help you get the precise results you want.
Sébastien Orban
on 15 Mar 07Well, he’s speaking about a movie camera, it’s not exactly the same as a picture camera. But well, full manual ask a lot of control and work. But then you can really control your picture. With the other modes, it’s not exactly there (even with bracketing).
Ivan Vega
on 15 Mar 07And then why the hell are you using Rails and not Assembler?
Hehe, just kidding.
MI
on 15 Mar 07Actually, I know quite a few programmers who prefer plain text editors to full-blown IDEs, myself among them, for just that reason. Think about it, if you have an Intellisense list of every method it allows you to disengage your brain to some extent and not really learn the API you’re working with. Letting a tool take over that part of your thought process will abolutely impact your ability to get a feel for the code.
Jared Goralnick
on 15 Mar 07I see how your analogy applies to software development, and I completely agree with the benefits of text-editors and manual camera shooting (at least some of the time).
However, I disagree with your comment that”[e]every time you outsource something…[y]ou lose touch with the core.” I agree that one creates distance from their customers when the developers aren’t the supporters, but it also takes time away from the developers’ development. And often times the skills it takes to develop software are very different than the skills it takes to support it. My issue is with the idea of the core—because in business we always want people to focus on the core of their job, and companies to focus on the core of their vision. Outsourcing is an enabler not a distraction from that.
A business should often learn the hard way to handle support, to manage their books, to take care of some hardware…while they’re growing and can afford the time, as the experience may help in the long run. But once a business is running at full steam, people should focus on what they’re good at and not take on too many cross-roles. I believe that support is a core function of a software company, and thus it shouldn’t be outsourced…but the developers shouldn’t necessarily be the ones doing the support. On the other hand, many other aspects of a business are not at the core, and experts with more experience and more time should be handling those functions…or the business should hire people specifically for those roles. In addition, people become more difficult to replace when they take on multiple roles—a bad idea before the value and the long terms prospects of a company.
I imagine we’re all on the same wavelength here…but I just wanted to clarify, given how much I agree with the 37s philosophy. Whether or not my focus on what you’re good at approach is part of the Getting Real approach, I imagine many of your readers share that.
James
on 15 Mar 07I may never understand the need for the “uber” developers to distinguish themselves by using editors rather than IDEs. In this case, if distance from the code is your chief concern, they why aren’t you doing raw SQL in your text editor instead of using ActiveRecord etc? Frameworks and Libraries produce the same layers of “distance” from the guts of things as do IDEs, yet IDEs get a bad rap. Why is that?
If there was a powerful, mature IDE for Ruby/rails people would be all over it. (especially with refactoring support) Likewise with a powerful, visual debugger – its all about maximizing the utility of the limited bandwidth between the user and the monitor.
ramanan
on 15 Mar 07I don’t use a debugger when I code: when the code hurts, I hurt.
Matt Gillooly
on 15 Mar 07This seems to have a lot to do with Joel Spolsky calls the Law of Leaky Absractions (i.e. “All non-trivial abstractions, to some degree, are leaky.”).
See also Fred Brooks’ No Silver Buller.
Andreas
on 15 Mar 07Regarding using a text editor rather than an IDE; is this just a result of the language you use (Ruby)? Are there any useful Ruby IDEs? As far as I know, IDEs for Ruby are limited by the relative immaturity of the platform but even moreso by the dynamic nature of the language. Dynamic languages can’t be analysed at compile time in the same way that static languages can; so all the power you get from a static language IDE is (sadly) unavailable. I must say it concerns me that a young programmer using a static language (e.g. Java, C#) might read these anti-IDE comments and take them as gospel. Java is such a terribly unproductive language (relatively), you need all the help you can get, and that means an IDE!
engtech
on 16 Mar 07It also can provide dangerous lapses with your understand of how something works.
I’ve you’ve only ever programmed with garbage collections then you don’t necessarily understand memory management.
Everyone should have to debug wild pointer surprise at some point.
Peter
on 16 Mar 07There is another factor that provides a good analogy between photography and software / systems development: Most street photographers prefer to use a Leica M Type Camera. Why? Because they offer very little automation to begin with. When you are shooting on the street while ‘The Moment’ is shaping up, trying to get a frame of a situation that only happens for a fraction of a second and then it’s over forever you don’t want to snap it and then afterwards start thinking about what the camera (and it’s automated functions) just did with that exposure. You might have gotten the shot but at what exposure, what depth of field and where did the focus log on to, the guy on the other side of the road that I was framing for or the car that wen’t by just a moment before I took the shot…
The same is true for developers preferring a simple environment with total control and direct access to everything that shapes their development environment. Its the difference between a visual studio and a notepad – no worries about what the environment does with the code in the background that might interfere with future plans or that makes things more complex and difficult to understand. Same thing with visual web design tools etc.
All this of course requires that developers, designers, musicians etc to become ‘one’ with their (simple) tools so they become a natural extension of their thoughts just as the good old Leica range finder becomes a natural extension of a street photographers vision.
BradM
on 16 Mar 07Matt, you 37s guys sometimes do a great ‘link it up’ post. Maybe you already know of this, or don’t care but a good topic to link up would be a great photography book.
I purchased a NIKON D70S roughly a year ago, and I’m still in Auto mode. Maybe I need to spend more time with it, but I would love a great reference.
Ravi
on 16 Mar 07Isn’t Rails, with all its magic, a kind of Semi-Auto-Mode for busy programmers?
Geoffrey Graham
on 16 Mar 07Reminds me of the first three rules of Radical Marketing>
“1. The CEO must own the marketing function. CEOs of radical marketers never delegate marketing responsibility.
2. The marketing department must start small and flat and stay small and flat. CEOs of radical marketers must not allow layers of management to grow between them and the market.
3. Get face-to-face with the people who matter most-the customers. Radical marketers know the advantages of direct interaction with customers.”
As summarized here, from this book. A great book I’ve recently picked back up.
Greg
on 16 Mar 07I totally agree with this. I think auto mode is fine if you don’t care about your photos, and just want party snapshots or something – no thinking, just pres butan. And I’ve ruined plenty of shots by leaving something set up wrong, that automatic would’ve caught.
So there’s a place for zoning out and letting someone else do the work, but not if you’re passionate about what you’re doing. If you really care about something, you won’t get any better by doing it the easy way.
Beerzie
on 16 Mar 07I’m with Greg on the camera bit. In manual mode, your possibilities are expanded, and your level of control is more granular. It also helps you understand the behavior of the camera much better. In the long run, you get better shots and become a better photographer.
Jeff
on 16 Mar 07I shoot manual too, especially when I shoot HD, but for writing code? Please. I’d much rather get things done.
I use Visual Studio, and with the ReSharper add-in especially, I can write code, stub out stuff and refactor crazy fast. VS doesn’t “do” anything with your code unless you tell it too.
But if you’re OK with pecking out the same public property/private variable code every time, knock yourself out. And when you go the command line to compile, know that I just push F5.
Sam Barnum
on 16 Mar 07I’m with Andreas on the IDE thing. It depends on the kind of language you’re using. I can see how for a ruby developer, An IDE can cut you off from really learning rails, because a lot of the methods in ActiveRecord don’t exist until you call them.
However, as someone who works primarily in Java, using IntelliJ (my IDE) makes coding really really fun.
For a test-first mentality, I just write my test cases before the code exists, inventing method names and class names. Anything that doesn’t exist shows up in red. Once my test is written, my IDE will create the claseses and methods.
When developing a new API, I don’t have to agonize over getting everything right the first time. I can just name my classes and methods whatever seems good at the time, and then refactor it painlessly if necessary.
For integrating with other third-party libs, the IDE reeally shines as well. If it’s a well-written lib, it should basically be self-documenting. Auto-complete + static type checking can really make things intuitive.
I could go on and on, on things like “find usages” support, “introduce variable”, and code analysis, but I’ve got to fire up the ol’ vi and get back to work on this PHP project I’ve been stuck with…
The Other Steve
on 16 Mar 07You are all truely The Man! You are the elite of the elite, the superior of the superior… the programming Gods amongst Gods. Nobody could possibly be as good as you if they didn’t use notepad for their development environment.
That is what you wanted to hear, right?
Sadly, you seem to think using an IDE means using wizards. It’s not. It’s about intellisense and object browsers and other things which help you do your job.
A better analogy to your text editor would be a camera where all the dials have the numbers scratched off, so that to get F/11, you need to remember that you turn the dial all the way to the right, and then back off two steps. Yeah, maybe in time you’d be an expert with that one particular camera model, with the one particular lense. But what happens when you switch lenses or camera bodies? Or want to do something you don’t frequently do?
I guess you better remember to carry the manual with you, eh?
Kevin Jensen
on 16 Mar 07Wow, I couldn’t disagree more with most of the things you’ve posted.
AndrewSeven
on 16 Mar 07I’m not sure that its a good analogy.
Using notepad is a bit like using a pinhole camera, not just “not automatic”, featureless.
Using a modern camera in non-automatic mode is a bit like our current tools where there is a lot of controls and a lot of switches to twiddle.
Modern automatic cameras are probably more like the next wave of model driven architecture tools that appear to be on the horizon.
Mike
on 17 Mar 07I like the analogy that the big-brains who work on Microsoft SQL Server (I believe they were responsible for the self-tuning resources in version 7 and beyond).
In the early days of television, people had lots of dials on the front of the TV to fine tune the picture and colour and so on.
Nowadays, there are still similar fine tuning controls for signal reception, but no one really uses them – people turn on the TV and “it just works”. Audio/videophiles probably are zealots about using such fine-tuning, but they are a small group of people.
So I’ll stick to using my IDE thanks very much. I even use visual designers for web pages and Windows forms, despite the fact I could write the code myself. Now with the advent of DSLs, I believe more and more software development will become a visual design process, even a software factory.
Software development should be a science, not an art. It should be repeatable. Henry Ford would never have changed the automobile industry if he had decided to build his cars with craftsmen (as was the practice before his time).
Christopher Morley
on 17 Mar 07Interesting discourse. I have very conflicting opinions on this topic. There are good points and bad points to either way of doing things, but what really matters is: your mind.
How well do the pixels vs. the bits work to your advantage? Text editors get closer to the bits (or, the sarcasm of “So, why don’t you just use Assembler”) and IDEs get closer to utilizing the information per pixel (and also the sarcasm of “So, how the heck do you really know what it’s doing under the hood?”)
Pressing F5 to compile is nice, of course. May you always be able to pay your annual licensing fees to MSDN (a bit of sarcasm there too, of course). My point with this: even if you have a nice free IDE like Eclipse or Netbeans, you still are dependent on a whole slippery pile of “goo” underneath you. You are depending on others for the future stability of the IDE. This is fine, to an extent. Sometimes it can be a painful waste of time when you upgrade and your entire codebase gets broken somehow. It’s tantamount to the automatic code conversion tools in Microsoft wizardary format in Visual Studio. Yes please, alter my code. I trust you that it will work the same. Um. No.
See, sometimes F5 just won’t do. Sometimes you want to know that you have the ability to compile your stuff from the command line, and that all of your code bootstraps itself. I like thinking sometimes that if all I had was a piece of paper and a pencil, I could build up an empire from scratch. Oh, and then I could write a program that would allow me to hit F5 and build Visual Studio for me, so that I would never be lost…(more sarcasm).
Okay, so I am more accepting of IDEs than I used to be.
But I still like Textpad, and use it very, very often.
Sometimes I use Text Editors because I don’t want the confusion of the Intellisense. Sometimes your fingers already know the answer, and typing out the answer may not be as fast, however it also has zero interruptions and distractions. Many times the dropdowns of Intellisense is useful, when you don’t already know the answer, but other times it’s about as useful as Clippy.
Time is a factor. Even if you know the answer, sometimes Intellisense can help you “type” the code faster. That’s fine, as long as you don’t mind your head being flame broiled for a few seconds with all this other stuff that is /not/ what you are looking for.
This is the classic GUI vs. TUI. I mean, what makes Windows so great? So, you can click to what you want without typing a key to change directories. That’s good, for stupid people who can’t remember where they stashed their stuff. Sometimes you just want quick ready, and direct access to your whole empire, without having to think about and read and sort through other stuff along the way. I’ll type it in. I type fast and I think fast. Sometimes I can type it out faster than it takes for the CPU to grind on all the stuff that I might want. It’s the same thing with Microsoft Word sometimes.
It’s like: okay, so you called your program “Word”, however sometimes it is so focused on bolding and italicizing and underlining and automargining and autoidenting that I think – Jeez. I don’t need ANY of that. All I want to do is type one damn word – remember? Now, there is a trade off. Typing out html by hand when all you want to do is bold one word is a lot harder. Typing out bolded takes a heck of a lot longer than CTRL+SHIFT-LEFT, CTRL+B. Sometimes you have the time to type out the strong tags though, since your mind hasn’t yet caught up. Sometimes you want everything Exactly how you made it, without some interference by some goopity goop under the hood. Sometimes you want your own tabs and whitespace so that you know for a fact that all that stuff is perfectly legit and that you, personally, can trust it for literally decades, not to break. Sometimes you just gotta pump it out the door and ship it today and don’t care if it breaks in a year, or you forget what the heck you did or how you made it.
It really depends on the situation.
Arts and Crafts are Arts and Crafts. Dogfood is Dogfood.
Standing on the shoulders of giants affords some advantages like: look ma, look what I can do in 5 minutes! I don’t know exactly how it works, but I did it in 5 minutes!
Versus standing on your own two feet and going, yeah, it took me 5 days to write this thing, but I know every nook and cranny, and I will sign on this here dotted line that if you have problems in 6 years with this application, call me up and I’ll tell you to get a new computer and reinstall it, because it will still work.
That’s why I like the mid-way point: standing on the shoulders of giants, who lived in the 1970s. You can’t beat the stability of baseline linux tools, for example. You can’t beat the price either.
It’s kind of like the philosophy some people have of only reading books that were written at least 500 years ago.
Vs. turning on the tube and getting the latest-and-greatest, WIZ BANG crap that looks good now, but will most likely either be outdated in 3 months, or worse, be completely broken.
angelamwilson
on 20 Mar 07This is my reply555
angelamwilson
on 20 Mar 07This is my reply555
mmmm
on 20 Mar 07qq
mmmm
on 20 Mar 07qq
angelamwilson
on 20 Mar 07This is my reply555
angelamwilson
on 20 Mar 07This is my reply555
angelamwilson
on 20 Mar 07This is my reply555
angelamwilson
on 20 Mar 07This is my reply555
angelamwilson
on 20 Mar 07This is my reply555
Jeff
on 20 Mar 07“See, sometimes F5 just won’t do.”
And if you ever actually used VS, you’d see that in the output window the IDE is executing csc.exe with the switches you set up in the project properties.
So how is that “goo?”
This discussion is closed.