You try a new tool and it does not work. You google the problem and if you are lucky a random answer says you need to edit some weird configuration file and place it in a specific directory you don't know. You try but during the process things go wrong. Either because you don't understand the steps listed in the answer or because the solution is not exactly the same situation as yours.

I can't be the only who is puzzled/annoyed when I am in these kind of situations. I find these problems a lot more scarier than when I don't understand a particularly algorithm. Often I can end up using 10 hours trying to get something to work without getting anything done. After that I just give up.

I like programming but I really hate these moments when you need to integrate with a tool and you end up in situations as described. Often I don't even want to try new tools because I am afraid of this happening.

My question is: Is there a way to get better at this? Is there a faster way to learn all this without just practicing? I have thought about getting books about unix and begin using the shell for every day use but I am not sure it is worth it.

  • 1
    Not sure if Unix/Linux is actually your chosen platform or not. But if it is, there is nothing you could learn which is more useful than how to use the shell (apart from, how to learn). May 24, 2012 at 23:02
  • this is 95% rant and 1% question, and not even an on topic constructive one either!
    – user7519
    May 25, 2012 at 0:20
  • This certainly is not meant as rant though I can understand you charactherize as it. I think it is a relevant question because I think it is something every programmer is going through. It seems though some are better handling it than others. May 25, 2012 at 0:31
  • @MadsAndersen It may be relevant but it is entirely too broad to really be answerable. The enormously complex integration problems that we spend hours solving are difficult enough to answer or else we wouldn't spend hours on them. It becomes more absurd to suggest that there is a single solid answer that can help you improve upon every one of these unique situations. On the whole, others are right... this is something that we just get better at through experience, nothing else matters. This is what separates the juniors from the seniors.
    – maple_shaft
    May 25, 2012 at 2:02
  • "I can't be the only who is puzzled/annoyed when I am in these kind of situations" Oh yeah, I know that feeling. xkcd.com/979 Jun 12, 2016 at 5:29

5 Answers 5


As you beat your way through each problem, you become better at solving problems in general, and eventually, you may become really good at it.

Eg, trade in your club for a nice circular saw.

Time Doing Something + Paying Attention = Experience

I've been programming for 24 years now, and have gotten quite proficient at diving into new areas that are confusing or hard at first. Be encouraged, and keep working at it!

  • This does not help me. What you are basically saying is that I should just practice and get experience. Also I think I was not clear in my question. It is not that I find new areas confusing or hard at first but that I never get to that point because of "computer problems". Ie. setting class paths, editing makefiles, xml files etc. that has nothing to do with what I want to learn. May 24, 2012 at 22:28
  • 3
    +1 for this answer. Much of real programming consists of editing Makefiles, updating XML-based configurations, and figuring out the new tool. Becoming proficient with your tools, and new tools, is a key skill. May 24, 2012 at 23:01
  • @MadsAndersen, no, really, Gahooa is right. There is no easy way to do this, otherwise we'd all be doing it. If you are going to program for a living you may very well end up having to debug the configuration of a client's computer over the phone while they're screaming at you and neglecting to tell you critical information about their configuration. May 24, 2012 at 23:20
  • @JamesYoungman, wish I could upvote your comment twice :P May 25, 2012 at 0:09

To become a super user, you need to become accustom to understanding the problems and the pieces that you don't understand. Key to this is understanding differences in environments.

Practice and experience are huge keys to becoming more proficient overall, but they must be coupled with a desire to understand the problems. If you edited a configuration file and it didn't behave the way you expected it to, you need to dig into why it didn't work. Simply shooting in the dark and tweaking it until it magically works will not improve your ability to understand things in the future.

The other key is to understand that computers behave differently based on their environment. Environment in this case means the OS, the OS version, and even the applications installed on that OS and their versions.

If you're using Ubuntu 12.04, for example, then you'll want to search for solutions to your problem on Ubuntu 12.04. If you find a solution to a problem but it's being described on Fedora 16, then you'll probably run into problems related to differences in the environment. Finding a solution described on an earlier version of Ubuntu or even Debian (on which Ubuntu was originally built) would yield better luck.

The beautiful thing about working with computers is that 99.9% of of the time, the problem, no matter how much it doesn't make sense, actually has a logical and sensible solution behind it (as opposed to understanding humans, which can actually make no sense at times).

Computers are systems a lot like humans, minus all the illogical emotional stuff (although I'm convinced that even computers very occasionally experience unexplainable emotional issues). Humans that speak the same language work well together (identical operating systems running on the same network, applications built for a specific OS, etc.). Friends that know each other well can operate nicely together (mature applications built for a specific OS generally run more smoothly than ported apps).

The key to becoming a super user lies in understanding all these differences and in being able to identify differences in environments while intuitively knowing which areas you don't understand.

When something doesn't work the way you expect it to, you'll know which areas to investigate based on what you don't know and you'll save time by ignoring the areas you already understand.

  • I agree. But what to do when the program you want to use does not work because you get a mac related problem no one else have had. Where do you start where do you end? The whole problem seems overwhelming. Because of this I shoot in the dark and hope for the best. To understand everything can take years to learn. May 24, 2012 at 23:58
  • @MadsAndersen, "To understand everything can take years to learn", Well yeah, you may want it to be trivial and seamless but it just isn't. That's why many of us get paid to do it. There may be ways you can lessen your pain though. I like Macs just fine, but they are a minority variant. If you find yourself having trouble building random open source packages you should probably get a linux box, or at least install a Linux VM on your mac. Alternatively stick to package managers like homebrew or macports. May 25, 2012 at 0:24
  • I know it is not trivial :) That is why I am asking for good ways to learn this. Or if there is any shortcut instead of just learning from experience. Maybe there existed some good books on this subject or people would recommend me learning the unix architecture. May 25, 2012 at 0:35

There are a few different ideas you could explore here:

Deliberate practice would be one idea to explore in terms of which skills are you honing when you learn something from scratch.

In a similar way, you may want to consider how you frame learning something new. Is it exciting to do what you didn't previously do? Which mindset do you have going into this, a fixed mindset or a growth mindset?

If you look over at the "Related" list you may find similar questions that have already been covered here a few times on how to be great at programming.

Maybe I don't relate well to the challenge you have as I know I learn quite a bit when I get something working that I didn't know how to do when I started. While there can be the challenge of how much tenacity one has to handle the various setbacks, this seems to be quite normal to my mind.

The idea of deliberate practice could be applied by looking into logic problems, studying various heuristics behind algorithms such as being greedy, divide and conquer, or dynamic programming, though I imagine for each person it could be difficult to identify what skills are the key ones to use. Another point in here is to consider what kinds of practices do you have that have brought you to this point? Part of working with technology is that it does tend to change quite regularly, at least that is my experience mostly in a web development capacity.

My understanding of your question is that you have a frustration or annoyance in acquiring proficiency with new tools. I can relate to have issues understanding how to use something new and making more than a few mistakes in the process. My tenacity and desire to see something through to completion is where I get my drive to keep in the game and eventually overcome the problems I was facing.

  • Maybe I was not clear in my question. First: I don't think I learn anything when I try to get new tools or libraries to work. Often I get stuck and give up. Second: How to "deliberate practice" computer problems related with programming? Maybe my question belongs more to superuser.com. May 24, 2012 at 22:23
  • 4
    You "get stuck and give up", ergo you don't learn anything. Try seeing a problem through to the end next time. May 24, 2012 at 22:52
  • #Ashley Mills - Thats a low blow. As someone mentioned, sometimes it is just not worth the trouble. As I said in my question I sometimes use 10 hours and get nowhere. Because I am in academia I know that I will get no credit for getting something fixed because I used 200 hours and therefor I stop at some point. May 24, 2012 at 23:37
  • @MadsAndersen, just because you don't get (grade?) credit, doesn't mean you get no credit. May 25, 2012 at 0:11
  • I would rather get good grades. May 25, 2012 at 0:18

Your specific question: "is there a way to get better at this"? By 'this' I infer, the random stab-in-the-dark methodology you claim to use when approcaching a new problem.

I would encourage you particularly to take notes on the issues you face each time you begin a new task. Upon greeting your second task, check your notes to see if you've done any of these things before. If so, use that experience to your own benefit. You have stated in comments "I don't think I learn anything when I try to get [things] to work". It could be, and no offence intended, that you have poor task memory. that you really don't learn anything and hence have an overly difficult time with a new task. Again I would advice meticulous note-taking because in that way, your own problem solving abilities will be the best resource for you to prevent "flailing".

As for learning faster, sorry. I can only advocate learning better. Eat right, get plenty of rest (a tired mind is a slow and stubborn one), and stay calm.

I've been computing for 22 years and I too have been known to colour the air around me blue with frustration. I just take a deep breath and "check my settings".

  • I will try and clarify. By "this" I mean general computer problems. I want the tools and libraries we use in programming to be "plug & play" but often they are not. Fx "You download opensource project and compile it but then get 102 unexpected errors that the documentation says nothing about". I am not asking how to learn better/faster. I have no trouble learning new languages, concepts or algorithms. My problems are related with computers in my daily work in programming. Each new problem is so specific to the tool that I dont feel I learn something if the problem is solved. May 24, 2012 at 23:09
  • ah. well you have learned. With each task, you learn how someone else figures things should be done. Eventually you get to be that person and dictate 'the method'. Then one day someone will follow you, try to use your methodologies, scratch their head then write a similar question on this website. it will however sadly get downvoted as a duplicate of your question and that person will then quit computing and go work for a landscaping company. You just never know :)
    – Sass
    May 24, 2012 at 23:46

Unfortunately, it's difficult to blame you. Quite a few tools are fairly arbitrary about how they do certain things. In some cases, you simply need to collect more data points to start to see a pattern, so the eventually you don't have as much difficulty with these sorts of configuration problems. Unfortunately, that's not necessarily the case -- in a lot of cases you're dealing with the result of people who have a number of reasonable possibilities, among which they choose at least somewhat arbitrarily. That being the case, there often just isn't much in the way of a pattern to find -- at best you can hope to find some meta-patterns, such as better ways to search for solutions.

That said, I'd say that yes, if you're going to (even try to) program on Unix (or anything similar) much, you pretty much need to learn how to use the shell to at least some degree. It has been a core tool in Unix programming for long enough that trying to program on Unix without knowing how to use the shell at least reasonably well will leave you hamstrung. At least in my opinion, it's worthwhile learning vi to at least some degree as well -- even if you don't like it or plan to use it, you'll almost inevitably end having to do something on a machine without the text editor of your choice, and if it's at all Unix-like, it'll almost certainly have vi, vim, or something similar available.

I should also add that in some cases, giving up is the right reaction. You haven't said much about how you're selecting the tools/libraries you're trying to use, but in some cases getting them installed and working just isn't worth the trouble. The big thing here is to look around pretty carefully before you jump in. I've certainly had a few that I did get to work just because I was too stubborn to quit -- and the result definitely was not worth the trouble.

You also need to be honest about your capabilities and current level of expertise. In some cases, you need to know a lot just to get something installed an operating in a reasonable length of time (or to be entirely sure when it is installed and operating correctly). If you don't have that level of expertise yet, then yes about all you can do is spend the time and effort necessary to gain expertise before you can do it.

One question to keep in mind is whether this is happening all the time with everything you try to use, or once in a while. If it's all the time, it may indicate that you're giving up a bit too easily. If it's happening once in a great while, it's likely to be perfectly normal.

  • +1. To answer you last point. I often don't have that level of expertise. Because of time-constraints I decide it is not worth the trouble. I was hoping there was an easy way to learn getting tools to work. May 24, 2012 at 23:24

Not the answer you're looking for? Browse other questions tagged or ask your own question.