Ultimate Software Developer Setup?
wicked coding asks: "I'm a professional software engineer and I'm planning on building my ultimate setup for longer hours coding and hacking, but I'm kinda stuck when it comes with what to choose. What hardware would you choose to use, if money was no object? Obviously there may be some constraints on space. Leave no stone unturned, I'm looking for suggestions on desks, seating, lighting, keyboard and pointing device, monitors and even the computer system itself. Ideally it needs to be as comfortable and ergonomic as possible. What software would you choose to use, if the intended targets were Java and OO PHP5? Currently I'm using Eclipse on Gentoo. Is there a more suitable IDE that works with most popular OSS (and not so OSS) languages including XML, SQL, CSS, PHP, Perl, Java, and C/C++?"
One facing straight ahead and two angling into your peripheral vision. Not only do you get a ton of real-estate, but you never have to worry about getting that even-tanned look on your face. :)
"I'd rather be a lightning rod than a seismometer." -Ken Kesey
If you think you're going to produce better code by splurging $$$ on a shiny desk, maybe you should give up programming.
The accessories you need are a pile of paper and some good pencils, with which you can design your code nicely before you even fire up your IDE.
You need to prioritize. First worry about your fingers, eyes and arse
1) Get a slick 1600x1200 or better LCD screen
2) Get more screens to broaden your field of view
3) Spend $100+ on a really good keyboard. I choose Happy Hacking.
4) Spend $500+ on a really good office chair (or $5 from a failed startup)
With this as a starting point, you can feel physically comfortable, freeing you to address your mental confort.
Evil people are out to get you.
Stop fucking around reading Slashdot instead of coding and you won't have to spend all those long hours at your computer ;)
Is my personal favourite.
:wq
Location: A beach in Northern California, slightly south of San Fran.
Power Generation: This Honda Generator for reliability and gas efficiency, 20hrs of code at a time. (note: after viewing the power consumption of this solution, you may require a second generation unit or higher model number)
Computers: 2 Mac Mini's - one for compile runing Gentoo, the other dual boot Red Hat / Os X... Cluttering up your beach space is simply unacceptable.
Second Computer set: some low power-drain and Form Factored PIV for testing that 'old and busted' windows crud people occasionally run
Display: 2x The DLA-QX1g - Why do monitors (old and busted) when you can have the new hotness of a projection screen with 1365x1024 resolution. It's a no brainer. Remember to get a widescreen lens for the projector, and an active screen to go with as well - these things are going to need to produce a LOT of lumens to compete with the sun.
A 4 port KVM switch
Input: Microsoft Natural keyboard w/ mouse, wireless versions. Gonna have to be both, although you might want a trackball that works in midair.... MS is still pretty much the best at putting together an awesome and non-stress creating keyboard / mouse combo. Alternatively, you could combine keyboard and chair I guess. That would mean, with the screen and the KVS switching hotkeys, etc, you wouldn't NEED a desk, although you might want a second screen and projector for a computer to be used as a notepad hooked up to one of the keyboard inputs on the KVM but not the video. Note: Sand might get into your chair, I'd be down with a yoga mat or chaise lounge, and the wireless keyboard.
My little site.
Donald Knuth works standing up, and so should you.
You might also want to consider investing in a full-sized pipe organ.
Eclipse has a huge future. Many IDE makers are abandoning their own IDEs and making Eclipse plugins. There's already good free plugins for C/C++, excellent inexpensive JSP plugins, and tons of others that I've seen but not used. I have to believe there's some good XML plugins as well. Since Eclipse is cross platform, you don't have to worry about being stuck to one OS. Stick with Eclipse unless you have some special need that Eclipse doesn't do.
AccountKiller
A lot of things you mention I don't care much about. But I recommend ridiculous amounts of RAM. Even if you get more than you think you'll need, you'll find a use for it.
My latest giant RAM sink is VMWare. I run a virtual copy of Windows for browser testing, and a couple more for virtual servers. Virtual servers are much better for testing than real ones: when you're done trying something out, you can revert the virtual disk back to a known clean configuration.
Vimi, vidi, vici
I'll leave the translation up to you.
It seems weird that you are looking for new things -- what's wrong with what you are currently using? While I can understand wanting to tweak some of your tools, if you've been coding for some time now, you probably know your habits best by now.
Some obvious things that come to mind:
(1) For programming, it's especially nice to be able to have at least two editing windows open side by side. The Dell 2005FP is great for this -- I've owned mine for about half a year, and still marvel at it. I have trouble using smaller monitors now.
(2) Editors are really a religious preference. Emacs isn't perfect, and there are a lot of things you can find wrong with it, but personally it's still the best editor out there. I've tried using the newer graphical editors, but in the end I always go back. The languages you suggested are probably going to be supported by most editors. However, just because the editor supports a language, doesn't mean it won't support it well. There are some very small things that many editors get wrong (especially with C++, I've found), which is one of the reasons I've stuck with emacs for so long.
(3) Mice is yet another religious preference. Personally, my favourite mice continue to be Microsoft's Explorers. I recently bought the cheaper Logitech version, and still wishing I didn't just pay more money. If only M$ could stick with the HW business...
(4) I've tried a plethora of keyboards. The flat no-nonsense keyboard ended up being my favourite. I tried one of the ergonomic weird shape keyboards for about a week, and maybe I was doing something wrong, but it started to hurt my wrists (never had that problem before). Even if I was somehow typing wrong, in the end, you really should just use what works for you. While you might find someone raving about some new product etc., it just might not work for how you operate.
Your best approach is to try to slowly fade new things in. I suspect if you take someone's advice and get a bunch of random 'highly rate' applicances, you will be unhappy in the end.
Hey a bunch of developers on every platform known to humanity, what is the "ultimate" way to develop.
Here's a script:
CPPFanBoyMFC "I think Visual C++ is the best. I love MFC with a mighty passion!"
CPPFanBoySDK "No way dude, I use Visual C++ with the straight up SDK and roll my own classes as needed."
CPPKDEFanBoy "Visual Studio blows compared to KDevelop."
CPPMakeFanBoy "When I was a kid, I used to write make files and use Emacs and gdb from the console, and I liked it, so I still do."
CPPViFanBoy "Yeah, but, vi is better than emacs, everyone knows that"
AssemblyFanBoy "90% of you C/C++ guys talking about getting close probably don't even know the calling convention of your functions. Hop along IDE cripples."
VB6FanBoy "Assembly? I can do in two minutes that which takes you two weeks to write. VB 6.0 is the bomb, but MS ruined it with VB.NET"
WinFanBoyD "C# makes the rest of you obsolete..."
SunFanBoy "Too bad you stole it from Java."
PythonFanBoy "Java, Blah! Your weak languages do not enforce indenting..."
DelphiFanBoy "All your strongly typing innovations are belong to us."
Perl "While you guys were arguing, I just finished it all in one line of code... oh wait... where does that greedy matching operator go. I'll see you tomorrow."
Any more?
This is my sig.
No. Go to ebay. Search for IBM type M keyboards. Buy one. Your fingers will thank you. As for mice, well, I just always go for Logitech.
A multiple-monitor setup using LCD flat panel displays should top the list. I can't begin to describe how much easier it is to do development work on a multi-monitor system, and I can tell you that if you work for a full day with an LCD (running via DVI connector, of course, not RGB/SVGA) side-by-side with even a good ViewSonic CRT, you'll be forever sold on the LCD panels because the brightness, contrast, color accuracy, and crispness are all so much better.
RAM and disk are the two biggest bottlenecks to development, in my experience. So the next most important thing is memory and storage. Get at least 2GB of RAM, and then get yourself set up with a RAID array with plenty of storage (200GB or more), running in a RAID mode that provides for full automatic recovery if a drive fails. Many motherboards now natively support RAID-mirror configurations (two drives) using SATA drives.
The RAID array will drastically improve disk performance. Plus, you'll never have to worry about backup/recovery again. The RAID array by definition always keeps itself "backed up" by its built-in redundancy, and recovery is as simple as popping in a new hard drive and letting the array rebuild to the new drive.
Moderator hint: a comment is neither "Flamebait" nor "Troll" if it is true.
If money were no object, that's what my setup would consist of. A dual G5 and a 30" cinema display (2560 x 1600 resolution!). The apple pro keyboard is sufficient but I would upgrade to a laser mouse of some sort (Maybe one of the new 5 button bluetooth intelli laser mice...) Between OSX and Virtual PC you can test your code in both Windows and OSX. OSX also has x11 if you need it. You mention PHP so I'm guessing you're doing a lot of web development... with this setup you can test every browser Apache AND IIS, Windows AND *nix. I'd buy a license of Zend Studio for PHP development as well as a copy of BBedit (I use both, BBedit has some indispensable features). As for the physical environment, you can't go wrong with one of these: http://www.sittingmachine.com/ Pretty much the most comfortable desk chair ever.
Kiteboarding Gear Mention slashdot and get 10% off!
"Flame me and then brag about your setup."
You know what?
I just ordered Beta 2 a month ago (http://www.getthebetas.com/ ), and I've fallen in love with it. It's like Microsoft was joking when they released previous versions of VS. For C/C++, you can't beat it. Granted, I've never been an Emacs or vi person, but IntelliSense is vastly improved with this edition and will save you quite a few keystrokes.
It also contains the best XML editor I've ever used (Earlier this year I was working on an XML-heavy project, so I tried about 10 different ones).
I found that reading and knowing the right people has much more to do with my productivity as a programmer. Fancy keyboards and the such only help if for some reason a piece of equipment is causing you pain. Multiple monitors and stuff like that are nice, don't get me wrong but I would rather save my C notes to buy technical books. From working with many programmers, I think they should do the same thing. Another thing that I saw mentioned was buying a 500 dollar chair. Can we say overkill? Personnally I can't code very often for more than an hour straight without wanting to get up and take a walk or something. A 50 dollar chair is confortable enough for me. I think a lot of this fancy equipment is more of an image thing, if you have a 500 dollar chair, 3 19 inch LCDs and a blazing fast PC then one seems to think they are cooler. I am a professional programmer, I get paid to think and produce. Give me the extra cash as a bonus, I wills stick with my 400 dell, 50 dollar chair and 17 inch lcd.
Paper and pencil are nice, but for some things, the big-ass whiteboard is really handy.
Bah. All you can do with vi is code, so you're still stuck with using a stunning array of separate applications. My life is too short for a complicated mess like that.
Now with emacs, you can have an editor, an interpeter, a compiler, a linker, a refactorer, a debugger, a CVS/SVN client, a machine virtualizer, an object browser, a documentation browser, and a game of Tetris. All in one convenient, bite-size package.
I still use "vi" everywhere... but I suspect emacs would do a better job."
Whoa! A self-confessed vi user suggesting that emacs may be better at some things? Clearly this one has had his mind tainted. Burn him alive before the infection spreads!
After coding since 1972 I've found that simpler is better. The more whiz-bang things you have around - the more they are going to distract you.
:-) RED means DEAD in coding. Blues and greens mean good things are happening and yellow means you are about to be pissed off by something either you did or someone else did to your code. :-P
:-)
I use vim to edit, gcc to compile, ddd/gdb to debug. Whether it is Linux, BSD, Sun Solaris, Windows, Macintosh (OS X and earlier), Cray, SGI, or whatever - I use the same things. It makes life simple. I have my vim macros - they do all of my documentation for me, help to reformat bad code I have to look at, and even can go through a complete file and replace various items I do not like to look at into things I do like to look at.
I have found that fancy IDEs, overly helpful editors, and things of that sort tend to piss me off since I type so fast. I especially hate it when an IDE overlaps what I'm typing so I can't see what I'm typing. It usually gets the wrong word and by the time the program finally figures out what the actual word is I want - I've typed it in already. However, I do like the color coding.
In any event, do whatever feels best for you, but fancy things tend to get in the way rather than help out (unless you just happen to like that sort of thing).
This is not to say that IDEs can not help. Especially when programming for Windows. Also, there are interface designers. The two I like are DialogBlock or wxDesigner. Neither of them get in the way of coding. Once through with them though - I stick to vim.
If you are looking for advice on creature comforts - here are mine:
1. Have someplace you can put things to drink. It always breaks concentration when you have to get up, go to another room, and get a drink. If possible, buy a small refrigerator you can put under the desk or in another part of the room. Put your cold drinks in there so you have them ready to drink when you need one.
2. Have lots of shelves nearby. You need them so you can put your reference books on them so you don't have to go looking for them.
3. Get a pet. Preferrably a cat. Cats are interesting creatures and if you ignore them for an hour or two they will eventually demand your attention. This is a good thing because you can forget that time is passing while coding and the cat will remind you to get up and move about. Why is this important? Because there is this little thing called Phlebitus that you can get. (It is also called Secretary's Disease.) You get it from spending long hours sitting doing something. The blood in your legs tends to slow down and pool (ie: not return to the heart to be renewed as much). When the blood slows down enough it begins to form blood clots which can result in your having a stroke or you getting Phlebitus. If you are very unlucky (like me) it will completely block your artery or vien and you will then be on medication for the rest of your life (or you could say I am lucky not to be dead because of the Phlebitus). So get a pet and live a long healthy life. (This is not to mention the fun you can have with a pen light making the cat chase it all over the place. Of course it isn't too fun when the cat hits your pile of printouts and scatters them all over the place - but hey! That's why you get the shelves!)
4. Windows. You need them. You need them so you can open them and let some fresh air in. You need them so when it gets dark you remember to eat, go to the bathroom, etc.... You need them to realize that your life is passing you by while you sit there and code away. I coded for almost thirty years in buildings without windows. Now I work part time and spend a majority of my time at home coding in a room with a window. I also help out those who can't make their computers work, teach people about computers, and do other freebie things instead of just sitting in a window-less room and coding ten to sixteen hours per day.
Someone put a black hole in my pocket and now I'm broke.
I have two monitors these days because I'm waiting for my CRT to blow up, so I bought a Samsung 213T before it does (great 21.3" LCD, if you're looking, by the way). It's a pivotable 1600x1200, and I nearly always use it pivoted 90 degrees 1200x1600 for longer pages. About the only time I switch to landscape position is when I'm editing a horizontal photo in Photoshop.
When my CRT does go out, I think I'm going to be stuck. I'm so used to having two monitors I'll have to run out and buy another 213T (or whatever the best deal on LCDs is at the time).Of course I recommend an Aeron chair and a convertible workstation-type desk. this is the type of workstation that has a raising/lowering/tilting keyboard tray and another paddle that raises/lowers the entire desktop. This allows you to move from sitting to standing position in a second...very important for keeping those wrists, back, and neck from repetitive motion injury. Get an ergonomic keyboard and a click-wheel mouse with side buttons--this minimizes moving back and forth from keyboard to mouse.
I'd also take a look at various accessibility options. There are footpedal typing aids--why not engage those for a whole body coding experience? Gloves that behave like a keyboard and a mouse, trigger style mice, etc. I'd invest in a couple of different input options just to mix it up every now and then.
Set up the room with all windows blocking light securely and all lights inside the room should be indirect only, and places way to the side of your monitors so as to to minimize glare. Calibrate your monitors so that you don't have overly contrasty or bright images in front of your eyes all day, and take frequent breaks every 15 mins to half an hour.
Seems to me like disk space is getting to be more and more of a hassle these days--nip this in the bud since you have an unlimited budget by getting one of those 1.5TB network-attached storage modules they sell (I've seen them for digital photographers). They have internal RAID and support 1Gb Ethernet, which means you'll need a 1Gb switch and card in all the boxes on your home LAN. (Get fiber if you can, but now we're talking real money, I think.) Since I haven't played with NAS I'm not sure what you can do with them, but I have no reason to think you couldn't set up the RAIDing internally whatever way you wanted--I would personally go with RAID-6, some kind of LVM configuration on top of that, and the latest ReiserFS for my source control partition (lots of small text files). As it would be a while until I used half that space, it would be cool if I could mirror the entire setup internally--that way, when I wanted to completely restructure my disk space, I could just break the mirror, do a complete format of half of it, rejigger it around, copy stuff over from the half-mirror, destroy that and re-mirror. (0.75TB should be enough for anybody. What!?)
That's about all I can come up with for now...should be a pretty good start.
but have you considered the following argument: shut up.
I don't think anything beats a nice big whiteboard and plenty of colour markers (and eraser) for brainstorming and mapping out flows, structures, links, in and outs.
:-)
I've looked so many times for a nice computer package for doing that but I pretty much always go to the whiteboard - I can stand, I can pace, I can step back, I can use my fingers to rub out.
A digital camera is handy when working with a whiteboard - that you can take a photo, save it and print it out for later. I have seen some whiteboard type things that have markers (and eraser) that can be tracked and imported straight to the computer, but I know that when I've got thoughts happening I don't want to have to interrupt and remind myself that using my finger to rub something out isn't replicated to the 'puter.
Big sheets of paper can work, a premanent record to go back to (very handy if you suddenly realise that your new brainwave is a f$#% up), but it is hard to rub out stuff and when starting from scratch on a new sheet with some old info some thoughts can be lost.
A chalkboard/blackboard can do the same thing, but you want to keep the dust away from the insides of the monitors, system units etc.
Besides there is the added bonus that if you get the right markers you end up nice and relaxed while you are working
Also plenty of fresh air and a bit of pacing room for when you need to think things through a bit more.
USE IT!!!!
* Don't buy a $700 aeron chair and slouch in it.
* Don't let your wrists fall while you type.
* Don't lean in 3" from your LCDs, stay ~27" away.
* Take small 30-sec breaks every 20-30 min
* Eat healthy throughout the day, not a pile of pizza and candy once a day at midnight; regardless of how cool it makes you feel to drink energy drinks like Bawlz!.
* Avoid caffiene and meth, unless you have a major deadline to hit.
Seriously, if you can force yourself to do these things, you can go several hours longer programming during the day.
It works for me, but YMMV.
https://www.accountkiller.com/removal-requested
The thing about this: I think our minds are distracted somewhat unconsciously. Every time the hard drive whirs back up, I'm more likely to become distracted, and more likely to let something slip, but it took me a long time before I recognized this pattern.
Actually no, it feels and behaves like a normal IDE, most people and that is mostly a documentation problem, run it with the default memory settings, while they work, eclipse will start to choke once you dump a load of files into it or once you hammer it with a handful plugins. Most people do not know that java does not behave like every other program it only takes the amount of ram it is assigned to currently running heavy server development with a s***itload of plugins and even an integrated case tool with following settings -vmargs -Xmx700m -Xms200m -XX:MaxPermSize=128m and the IDE is fast, believe me.