7 ms·
One of the most valuable skills someone can have, in my opinion, is not getting attached to really specific workflows or settings or tools. Instead I value bein
by mwfunk 12y ago
One of the most valuable skills someone can have, in my opinion, is not getting attached to really specific workflows or settings or tools. Instead I value being flexible and being able to adapt to whatever system I'm using.
In practice, this means that whenever I think about making some change to my software environment, my first impulse is to ask myself, "do I really have to change this?" This is a 180 from my old, college-age attitude, in which I not only wouldn't question the impulse, I would look for ways to automate making as many little changes and tweaks as possible. At the time I thought I was doing it because I was really increasing my productivity, when in fact I was just doing it because it was fun and fed into my self-image as a super l33t hacker guy. If anything, it was a distraction from whatever I was actually supposed to be working on.
- burntsushi 12y agoI am exactly the opposite and it certainly has nothing to do with fun or self-image. I can hop on to any Linux box and be just fine. But I'm comfortable in a familiar setting with my `~/bin`, aliases, editor (vim), keybindings, a few key-remappings and package manager (pacman). There's a lot of benefits that come from having precisely the same environment on my web server, home machine, laptop, media PCs and my machine at work. I consistently look for ways to automate things. I do it not because I'm a tweaker for tweaking's sake, but because I find it insane to let myself be annoyed by tasks that I know I can automate away. (Then my brain can forget the details of the operation because it is enshrined in code and maybe even some documentation.) For me, it's an efficient way to work. Actually, that's a nice way to sum up how I work: how can I most effectively offload This Stuff I Know so I don't have to worry about it any more? I am extremely uncomfortable on Macs or Windows machines. The solution is to just not use them. (We, as programmers, are fortunate to have some freedom here. For example, I would not take a job with someone who forced me to use OSX or Windows.) To give you an idea of how far I'm willing to go: I wrote my own window manager. I spent years on that path. I got something working around late 2012 and haven't really touched the X11 world since. I had some really specific goals that I wanted to accomplish (support 3+ monitors correctly), and I did, and now I'm happier and more productive for it. Another plus: people using Go now have native X client libraries. Another example: I wrote 8,000 lines of Go to download all of IMDb and load it into a relational database in under 8 minutes (including building trigram indexes on all movie, episode, tv show and actor names). And then I built a command line utility that does fuzzy search and can rename all of my media files instantly. Renaming them manually was terrible drudgery. (And I certainly enjoyed the engineering challenge of making this fast.) Sorry for the banter. :-)
- mwfunk 12y agoI totally get what you're saying, I guess I just have different values (for lack of a better term) where this stuff is concerned. My ideal job would have me bouncing between different operating systems, hardware, and languages all the time. For career reasons, and just to feed my curiosity, I have a fear of getting too comfortable with any one workflow/language/OS/etc. Plus familiarity breeds contempt- every time I thought I found the perfect anything, it was only because I hadn't been using it long enough to hit any of the pain points. I've come to feel really strongly that there is no one right answer when it comes to those things. Sometimes there are wrong answers (I wouldn't write a word processor for a desktop OS in assembly if I didn't have to), but rarely is there ever one right answer, and there's usually something to be learned from all of the viable alternatives. If I get too used to one particular environment, to the point where I refuse to use anything other than that one environment, then I would feel like I was missing out on a lot of cool stuff by ignoring the rest of the computing world. The other side of it is that I've also come to feel really strongly that a lot of the tweaks and optimizations that people swear by and obsess over with (for example) their editor configs aren't actually improving efficiency. When I've gotten into deep configuration and automation and optimally efficient usage of vim or emacs, it felt like I was more efficient, but in hindsight I don't think I actually was. I might've saved a few keystrokes here and there, but at most the extra keystrokes I shaved off were annoyances, and not meaningful impediments to my efficiency. I spent so much more time learning how to shave off those few keystrokes that it's unlikely that I'll ever get it back via repeated usage of what I learned. That's just me though, everybody's got different motivations for why they do what they do. I would like to think that all of the above comes from hard-earned experience, but it's just as likely to be my own preferences and values. When you get super old like me, you get to pass off your personal preferences as genuine wisdom learned the hard way over many long years. :)
- burntsushi 12y agoWell... I guess I need to clear up a few things! - What I said in my previous comment in no way applies to programming languages. It applies to my programming environment. I very much enjoy using different kinds of languages. (There are definitely some that I dislike and stay away from though.) - I do not think I've found the perfect anything or "the one right answer." I continue to improve my setup. I have spent more years in Windows than in Linux, so I am aware of what I'm missing in that regard. My tactic is not to remain static; it is to iteratively improve. So far, it has lead me deeper and deeper into the terminal. (My next big task is migrating email into the console. It is a task so daunting and terrifying that I've procrastinated on it for years.) - I very strongly disagree with your disconnect between annoyance and efficiency. If I'm getting annoyed, then my emotional state is an impediment to focusing and working productively. Drudgery is annoying and frustrating and error prone. I don't really swear by any particular config as some Universal Truth, but I do have strong opinions about what works well for me. And I will spend an exuberant amount of time fixing it, especially if there is an engineering challenge involved (because, why not, we're hackers and it's fun to do that stuff). If the only thing you think you gained is "saving a few key strokes," then I agree that it probably isn't a useful tweak in most cases. What I gain by tweaking is compartmentalization and automation, and they usually pay for themselves in due time. - Haha yes, I'm not quite old yet, but I've been at it for over a decade at this point. So not exactly a fresh lamb either. :-) Thanks for indulging in some friendly banter!
- GhotiFish 12y agoI take the strategy that I will customize and learn tools that are free to use and deploy anywhere. That way I can effectively work in any environment that doesn't dictate 100% of the terms. That said, I've only being through 2 applicable jobs, so whether long term this is a good strategy, I dunno.