I consider myself to be a hacker. A fairly good one in fact. But lately something has been bugging me. The command line is making a comeback.<p>Recently I've been really intrigued by node.js. It has been a freaking pain to get an instance up and running. Joyent? make a curl command line post(That doesn't seem to work). Git? Issue yourself a key via command line. Finally I get into duo stack and then I get a guide with about 25 steps of command line commands.<p>It is 2011. WTF? Back around the turn of the century we used to have these things called installers that would keep people from having to do the same damn thing over and over and over. Or type. We create these great clickable symbols that were organized into hierarchies that were great for both teaching by way of layout and for getting things done. I think we called them menus.<p>I've done some digging around and found this insightful post about it:
http://news.ycombinator.com/item?id=1407278<p>...but you know what? I call phooey. As much as it is great that you can mix and match at the command line, a picture is still worth a thousand words.<p>So tell me hn, what am I missing. Am I fooling my self calling my self a hacker if I use gitgui? (three click and I see exactly what is going where...why is typing 5-6 equivalent lines into the command line better?)
The command line is the most flexible way to automate day to day tasks. Yes, a graphical installer makes things easy-once. Need to change the names of multiple files in a directory? Need to delete files that match a certain type, without hunting and pecking? Want to grab every jpg from a webpage? Doing these tasks on the command line is trivial compared to pointing and clicking for every single instance.<p>There are many benefits from using the command line interface to software. Often it is a trade off between flexibility and speed versus learning and thinking. It takes time to build up a solid knowledge of commands and options, and effort to recall them, but once that skill is acquired, it can save a lot of time.
A UI is great if it does exactly what you want it to do. But if not, and you want to customize at all, you're stuck. While if you're working on the command line, you can script any behavior you'd like.<p>A command line approach is also far superior for remote operation, repetition, combining with other tools, etc., because you can script the interactions and control flow.
Command-lines are faster and more flexible than GUIs, because you define your own workflow - you can chain commands together with the unix pipe, pass arguments to commands that are the result of other commands via the backtick and a lot more cool stuff like that. Also, you can type faster than you can point and click. I prefer to keep my hands on the keyboard where I need them rather than having to reach out for the mouse, which is really far away if you think of it - it's 20cm aprox.<p>Besides, there's a hacker component in using a cmd, because it teaches you how things really work instead of covering that up with a pretty interface that does the job for you.<p>If these reasons didn't excite you, then maybe you are simply not a cmd guy - which doesn't discredit you as a hacker, I guess. Hackers <i>build</i> things, no matter what their tool of choice is.
For me, command lines are like delegating a task to somebody else: "Find me all the temporary files older than a week and delete them".<p>In a GUI, I'm doing the task myself: "Hmm, where are the temporary files kept? OK, which are the old ones? I can probably delete these. Wait, here's some more, etc."<p>As with delegating tasks to people, both approaches have their uses (and pros and cons).
I love the command line because I started at a unix hosting company. It is important to be able to work effectively on remote systems. I can't think of very many production servers that have the option of plugging a monitor and keyboard into (or remote desktop).<p>I consider command line skills to be a bare minimum for programmer competency.
I think that whenever there is only a single <i>likely</i> goal (such as "having installed something"), anything more than one command is a problem, and installers are useful.<p>But any site that gives a list of 25 commands is Doing It Wrong. The whole point of a <i>script</i> is to perform sequences of commands, and a link to a script is just as useful as an installer GUI would be. Except that it's actually better:<p>- When a script is used, it seems more likely that someone has actually run it. (Who knows if they've updated their document?) There also won't be copy/paste errors.<p>- A script is transparent; an installer isn't (even when it dumps logs, they're usually a bit vague). It's easier to see that a script will work, and easier to explain what happened if it didn't work.<p>- Many people don't want step-by-step or excessive explanations, and a script nicely solves this through embedded comments and code. If you <i>need</i> explanations or details, there's a place for them that's out of the way. And if you don't, you can blindly run the script. It's a nice separation.
Hmm. What's your workflow for reencoding every file in a directory with a name matching a certain pattern and then renaming the reencoded files with a number based on the order that the original files were in? For example, M2441j.avi (an MPEG) should be reencoded into H.264 and then renamed to 23.mp4. All files not matching M###j.avi should be ignored.<p>Yes, I know that this probably isn't something that you ever do, but humor me. Would you go hunting through, identify all those files and then reencode and rename them by hand? I certainly wouldn't, I would spend maybe five minutes writing and testing a script to do it for me, and then just invoke it every time I needed to do so again in the future.<p>Programming is all about automation, and the command line is perfect for making programs that do easily repeatable tasks. It's also far easier to debug. As an analogy, do you prefer writing programs by hand or putting together building blocks? It's the exact same thing.
Well do you want a gadget or a toolbox? GUI's are gadgets, they do what the person who wrote it thinks is a good idea. There is nothing wrong with this. The command line is a toolbox, there is all sorts of stuff you can do to make uniq things happen.<p>Now from the POV of putting something out there for developers to use which is easier to publish and get out there:<p>* Several installer GUI's: mac, linux, windows<p>* about a page of instructions on how to get this done<p>Which would be the Minimum Viable Product and let you ship now?