TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: How does the 10x coder overcome configuration headaches?

39 点作者 edgeztv大约 16 年前
I find that I spend at least 50% of my hacking time not writing code but figuring out how to get the desired results from 3rd party software. Things like configuring web servers, using frameworks, using web APIs, etc. In this realm, things often don't work as you'd expect them to, and documentation is often lacking. There is a lot of trial and error, and I absolutely hate endless trial and error (especially with many unknown factors). It always feels like banging your head against a wall.<p>If the legend of the mythical coder who is 10 times faster than average were true, this person would have to overcome the same set of challenges. But how can a one do this 10 times faster than his colleagues?<p>How does one deal with the headaches resulting from using 3rd party software? For me this is by far the biggest obstacle to being happy as a coder.

15 条评论

nostrademons大约 16 年前
Most 10x coders deal with it by not using 3rd party libraries, except for ones that are very highly regarded and trusted. These tend to avoid most of the configuration headaches because <i>everyone</i> uses them, so the maintainers get lots of practice in making them easily installable.<p>It's funny how common wisdom in the software industry is "reuse, don't rebuild", but if you look at projects that are actually successful and developers that are highly regarded, they <i>all</i> have a massive case of NIH syndrome. Google and Microsoft both build all their own software. Mozilla completely reimplemented COM for Gecko. John Resig just got criticized recently because TestSwarm duplicates a lot of the functionality of Selenium Grid. Linus Torvalds wrote his own OS instead of hacking MINIX, and then wrote his own VCS rather than use Subversion or CVS. Chuck Moore wrote <i>everything</i> himself, down to the hardware, which he designed with CAD software he wrote himself in Forth, a language he wrote himself.<p>If you look at it by numbers, this makes perfect sense. The average library is, by definition, average, so a coder who is way above average can undoubtedly write something better given enough attention to the problem. Plus, many of these super-coders got their reputation by writing lots of code in the first place, which you don't do if you just reuse third-party libraries.<p>Unfortunately, everyone thinks they're above average, which is why we get such a profusion of libraries in the first place. ;-)
评论 #526618 未加载
评论 #526679 未加载
评论 #526748 未加载
评论 #526482 未加载
评论 #526953 未加载
评论 #527033 未加载
评论 #526804 未加载
评论 #526502 未加载
评论 #526709 未加载
评论 #526557 未加载
moe大约 16 年前
<i>If the legend of the mythical coder who is 10 times faster than average were true, this person would have to overcome the same set of challenges. But how can a one do this 10 times faster than his colleagues?</i><p>I am a 10x coder, although I prefer when people just refer to me as someone who gets stuff done.<p>The answer to your question is simple: Yes, we are faster because we overcome these challenges, because we are as much sysadmins as we are developers.<p>The secret sauce is to realize that the world does <i>not</i> end at the borders of your VM.<p>If you refuse to acknowledge that your webapp needs an operating system, a webserver, a cache and a database to operate and if you push the lowly "grunt-work" of setting these up to someone else then you'll never be a 10x developer. Because in that case you're depriving yourself of acquiring the magic systems knowledge that leads to all the little "ah, this could be easier"-moments.
评论 #526756 未加载
Dilpil大约 16 年前
The 10x coder doesn't really have a magical trick for dealing with those kind of things. He simply maintains his focus, and makes steady progress until the problem has been solved.<p>However, the 1x coder ignores the problem, or declares it unsolvable. Inevitably, he waits for the 10x coder to fix it. The 10x rule holds.<p>10x coding is as much about willpower as it is about technical competence and experience.
评论 #526571 未加载
DanielBMarkham大约 16 年前
Use 3rd party stuff cautiously. I think "never use 3rd party stuff" is a little extreme, but remember that when you pick up the tool, the tool picks you up too. (Sorry -- watched too much Yoda) That is, you may want the tool for 1 or 2 really cool things, but the tool may demand out of you a week of playing around, pain and suffering, and a dedication that your spouse doesn't get.<p>One rule I use is that when I pick something up, I make sure that I can google help whenever I need it. If Joe-Bob's awesome language or widget set has only 47 people using it, and you have to put up with abuse on an IRC channel or buy 15 books just to get respect from the community -- forget it.<p>Wise choice of tools also means your cognitive load decreases. You simply don't have to remember so much crap anymore. Problem remembering how to attach events to an element in Javascript? Ten seconds with Google and you've got your answer. There's a certain tipping point that products reach. Be careful using stuff before acceptance grows to that point.<p>That's _platform-ish_ stuff. Tools, widgets, languages and such. For whatever you're actually <i>doing</i>, consider rolling your own stuff. Most times you only need a small subset of functionality, and if you're a good coder it's as easy to write it as use somebody else's. Plus, you understand what's going on. Many times I've used stuff with open source code only to spend hours plugging through their code trying to figure out what the heck they were trying to do. That hurts. Don't do that if you can help it. Sure it's great to modify OSS, but it's probably just as easy to spend that time learning more about the technical problem domain.<p>For instance, I'm playing around with the idea of writing another web app. I took a look at YUI -- I really like it. But at the end of the day, so far at least, it does a whole lot of stuff that I don't need, and payload size is important to me. So I'm just going to roll my own stuff. You're always weighing future hassle against productivity. Sometimes, like with learning functional programming or picking up COM or something, the rewards may be much greater than the hassle. But for most stuff, like version control, project planning, configuration, deployment, setup, etc -- you don't have the luxury of taking 3 days to figure some of these tools out. So don't.
aristus大约 16 年前
I'm not a 10x coder, but over the years I've learned to deal with buggy 3PLs by avoiding them, or encapsulating them once and for all. The problem with buggy 3rd-party libs is that the bugs are random. They quite literally keep you dumb by forcing to you memorize random trivia instead of new concepts.<p>Rewriting the same functions yourself in a better and more efficient way teaches you a lot, especially about 1) how to spot good libraries, and 2) when <i>not</i> to write it yourself.<p>If you look at the code of really effective hackers, the one thing they have in common is how small the code is compared to what it does. Look at web.py, or bret taylor's datastore built on top of mysql: <a href="http://bret.appspot.com/entry/how-friendfeed-uses-mysql" rel="nofollow">http://bret.appspot.com/entry/how-friendfeed-uses-mysql</a>
ghempton大约 16 年前
10x coders are also 10x system admins
sunkencity大约 16 年前
The trick is to be comfortable working with a system that you don't know much about. I personally love figuring out new systems, and starting to work in new unknown environments. Yes it takes a lot of time to figure things out, but when you have done it enough times (figured out 3rd party software), you get a feel for it, and can draw the right conclusions on how a program works fast.<p>Inexperienced troubleshooters often enter the work with pre-concieved notions of how the system works and hold on to them for too long. Always doubt your knowledge.<p>I think it usually takes 1-2 days with a system until you start to get our bearings. Before that, you are just collecting data, random tidbits of how the system works.<p>I second the recommendation to use recommended libraries, and I love github for the code network analysis. Back when I did a lot of java development there was often a java library available which solved the problem available on the internet even for a specialized problem, but more often than not it turned out to be a completely shit implementation that needed to be replaced. Of course there are good java libraries, the trick is to know someone you can trust who can recommend libraries.<p>OTOH for some rails tasks that can be resolved by just adding a plugin the quality of the code doesn't matter much, since it's just a few lines of code configuration. Still a good library is much better than a bad. I wish there was some kind of leaderboard, or official plugin list for rails, it can be very hard to judge plugins for a newbie.
mahmud大约 16 年前
You deal with it by using said 3rd party libraries 100x before you embark on your "current" project. Know your tools well, inside and out, and you're 10x more productive than someone just starting out :-)<p>Also, there is something that has to be said for compromise. Get libraries for the language you know best and you will more productive than if you used a high-performance library for a language you don't know. Start small, and worry about scaling or "going big" later.
conanite大约 16 年前
The head-banging gets less and less over time. Or else I've developed a thick skull, not sure which.<p>Experience makes a huge difference - simply because you've seen this problem before, or at least seen this kind of problem before, or maybe you saw the solution to this problem a year ago when you were googling the solution to some other problem and tucked it away in a cavity in your brain.<p>With experience, you happen to know that there are certain kinds of many-to-many relationships Hibernate can't map in a legacy schema where the foreign key is a subset of a composite primary key. So when you encounter that on your next project you drop right down to SQL, to the wonder and bewilderment of your new colleagues whom you've just converted to an ORM tool because it "abstracts away all that sql stuff".<p>With experience, you know the kinds of ways certain systems go wrong, the kinds of solutions and workarounds to apply, and most importantly the kinds of things to google for when hunting for the solution.<p>Even scanning search results pages - to a novice they're homogeneous, but after some time you start ignoring whole classes of results. For example, you're trying to find what some annoying ActiveRecord exception is about, and you realise half of your search results are pointers to subversion log messages mirrored in a thousand places all over the internet. And they don't have the information you're looking for.<p>As some other commenters observed, you have to push and solve those problems that seem impossible, because the next time around, you'll find the answer a little faster. Keep up the head-banging. It eventually turns into supernatural powers. Just be careful with the wall.
ShabbyDoo大约 16 年前
w.r.t. 3pl stuff, the lack of good documentation can be annoying, but I find that my ability to use them quickly speeds up drastically as I use them in more places on more projects. I don't think this pattern is any different when I use a new language -- "What's that weird compiler error mean?" So, for me, it's a learning curve issue.
mattmcknight大约 16 年前
My approach to this is that my creativity and expertise lie in creating unique software. I am not out there to build a web server, so I look for the stuff that is commonly used, well documented, and has easily googlable problems. I try to learn them really well. I stick with the stuff that works. With small open source things, I have been known to pull in the code and get going with it myself...<p>Here are mistakes I see people make that I try to avoid: 1) Making decisions on technology before they have actually tried it. 2) Upgrading to the latest version of products too often. For every problem it fixes... 3) Fail to give developers system administrator access rights. Nothing worse than not being able to install stuff, but it happens all the time.
wheels大约 16 年前
You use what you know rather than switching to the language of the month every, well, month.<p>I've been using the same toolchain for a decade now. I don't have to futz with the configuration: I learned it 10 years ago.<p>There's a balance there, between keeping on top of technology and focusing on solving problems.<p>It's been interesting for me doing a little Ruby of late because coming from mostly C++ (with bits of Java and Perl) I find myself fighting with the interpreter a lot. It's not that C++ doesn't have its quirks, it's just that I've known them all for so long that I work around them intuitively.
mpk大约 16 年前
Well, experience goes a long way.<p>After having built software in different languages for different targets on different systems a few times, you start recognizing patterns.<p>One of the strategies I use to become comfortable with new environments is to build a piece of software (usually a prototype) using only the core language, standard library and maybe one or two 'mature' pieces of third-party library code.<p>This takes a bit of time and I usually end up with a codebase that is a bit crufty (especially when I'm learning the language as I go). However, this usually gets me to the prototype stage with a lot of newly acquired knowledge about performance of the language, best-practices, etc. As well as a lot of testing code.<p>After that I'll start looking into third-party libraries and start factoring out my own code with third-party libs where appropriate.<p>For Java, for example, I've found that a lot of the language helper/util code I write can be replaced with code from org.apache.commons.<p>For interacting with crufty stuff like webservices in all their non-standard glory, I usually build a few classes in Ruby with breakpoints so I can interactively analyze and poke at them. Much, much faster than going through the 'change code'-save-recompile-run cycle with breakpoints in C# and Java.<p>When dealing with loads of XML config files, I'll quickly do a git init and also keep all the files open in vim buffers. (Vim and Emacs are excellent tools for working your way through XML junk). Then I'll put print (or equivalent) statements in the code so I can run the app from the command line and filter the output through grep or even some custom scripts that'll filter the output for me and provide some basic analysis or correlation points.<p>The list goes on and on.<p>You have to realize that apart from the code that operates solely within your codebase (and not even then), you are always dealing with third-party code. The OS, compiler, the VM, the windowing routines, the threading model, etc.<p>As you go on you have to learn techniques to handle this. And one of the first things you already seem to have learned is that you should never be quick to voluntarily add to the pile of third-party software you're already dealing with.<p>And that 10x programmer working opposite you who generates mod_rewrite configs like there's no tomorrow? Yeah, that person spent about 3 days getting to the bottom of that engine and testing the hell out of various configs a few years ago. There's not much of a short-cut for these kind of things.
known大约 16 年前
I had been through this phase. Since most of the 3rd party software is closed source I could not debug their code. I ended up writing work-around code to circumvent the bugs in closed source 3rd party software. And the culprit here is MS Excel and VBA.
antirez大约 16 年前
My guess is that there are multiple factors:<p>* Not invented here syndrome: 10x coder may code small things himself that many times is faster then learning other stuff.<p>* Selection of the tools to use: it will use Ruby instead of Java, for example, and for a reason. In general he'll try to figure the fastest path to solve the problem so will try a lot less.