In my short experience here at programmers.stachexchange, when someone needs help to get started at programming quite a lot of users suggest learning this or that language, but few suggest learning the basis of programming (data structures, flow structures, algorithms, paradigms, etc.) So I'm coming to the conclusion that the programming community in general puts more value on language that on core programming skills, and here is where my question comes:

Is knowing a multiple programming languages and understanding every single implementation detail more important that knowing how to abstract, transform and create some code that solves a certain problem?

  • 3
    Hi guiman, Programmers.SE is a question-and-answer site, not a discussion board: real questions have real answers. Can you rephrase to ask a question instead of trying to start a discussion?
    – user8
    Commented Jan 18, 2011 at 8:43
  • How Programming skills is different from language guru? You mean knowing OOP is a programming skill and knowing Java is language guru?
    – Gopi
    Commented Jan 18, 2011 at 9:42
  • @Sri_Kumar thats exactly my point
    – guiman
    Commented Jan 18, 2011 at 16:50
  • 2
    Good edit, guiman! That said, I feel you've created a false dichotomy: learning multiple languages and studying library implementations are common paths to understanding the more fundamental aspects of programming... At the same time, studying data-structures won't necessarily grant you the wisdom to know when each is appropriate! Can you describe why you feel such study might stand in the way of obtaining problem-solving skills?
    – Shog9
    Commented Jan 18, 2011 at 18:32
  • @ Mr._CRT I think that maybe there is no dichotomy, insted what i tried to do with this is clarify why some people tend to learn how to land before learning how to fly, if you know what i mean. In my opinion, is not one or the other, they should go in parallel and non of them obstruct the other, but i've faced situations where a professor insisted on using Java and Objects to resolver algorithms before even telling us how the algorithm works and why to use an object, so it felt like being backwards.
    – guiman
    Commented Jan 18, 2011 at 18:52

11 Answers 11


You see, people usually experience feelings, and sometimes those feelings are a barrier to do the most important thing: team work.

There are those who have excellent problem solving skills, and those who manage to remember all the tiny little deatails of every language. And over the years I've met people having one and lacking the other, and vice versa.

I once worked with someone having superior problem solving skills. He'd participate in programming contests acheiving excellent results. He was a star programmer.

But then, working with him on a team as a partner on daily basis was more than just complicated. His "team work" skills were something like "the rest of the team cheering him to do all the work".

Then I moved jobs and met the Architect. He knew all the Desing Patterns by memory, creating tons of layers of abstraction just because "It makes sense to keep things separarted", leading to an over engineered solution twice the size of a more simpler one.

And again, instead of communicating his "solution" to the rest, he'd open Eclipse and write all the code by himself, just because it was "easier".

Finally I met Q. He wasn't as smart as the first one, nor he knew all the desing patters like the Architect. But he'd code like a machine, creating elegant and simple solutions.

His most notorius skill was explaining things, a skill the other two completely lacked.

  • Nice one! In general those are the most valuable participants, because they can communicate their knowledge to others, creating a better workflow and rising the groups abilities.
    – guiman
    Commented Jan 18, 2011 at 17:29

You need some of each.

But programming is not an individual activity it requires a team of developers. It is always useful to have a least one 'language lawyer' and one 'Solving Genius' and an 'architect' (keeps the big picture in mind) on the team. But in reality you need a modicum of all these skills to be a good programmer.

  • "But programming is not an individual activity it requires a team of developers.": exactly, and that is why I'd add "social skills" to your list. Commented Jan 18, 2011 at 9:22
  • That said, sometimes the team is of one individual. Then you have to learn to be all the roles at the same time.
    – Klaim
    Commented Jan 18, 2011 at 12:29
  • Programming can easily be an individual activity, it just takes longer.
    – jprete
    Commented Jan 18, 2011 at 17:27

Nothing beats getting stuff done. So I vote for problem solving skills, too. Knowing every detail of a language is less important, though I wouldn't call someone skilled who doesn't know how to write idiomatic code in the choosen language.

  • One question : Someone is very smart to solve a DP problem but writes shit code to connect to a DB, will you keep that guy ?
    – Geek
    Commented Jan 18, 2011 at 8:57
  • 1
    Geek: Since that someone is clever, I would teach him how not to write shit code to connect to a DB. If that fails, he's probably not that clever...
    – user281377
    Commented Jan 18, 2011 at 9:02
  • @Ammo : Good idea :-)
    – Geek
    Commented Jan 18, 2011 at 9:11
  • 1
    @ammoQ I've met immensely clever people who just didn't care. They would solve problems all day but would lose interest as soon as they had to translate the solution into code. Most of the worst working code I've ever seen came from them.
    – biziclop
    Commented Jan 18, 2011 at 16:49
  • 1
    @biziclop: They're not actually solving any problems then, are they? The solution to a software problem is working code, a bunch of ideas (as good as they may be) don't solve anything, they're just ideas. The devil is, as usual, in the details and you need working code to cover the details. Commented Jan 18, 2011 at 17:44

Problem solving genius comes first.

The language syntax can be garnered later. Skills developed in multiple languages cannot be put to use unless they are guided by the powerful undercurrents of problem solving abilities.

Every programmer should ask himself or herself: Do I like brain teasers? Do I love tackling daunting problems with the most common sense ideas?

  • 2
    Not really. Some of the best problems solved have shit code written to solve them which is unmaintainable not reusable and can become maintenance nightmare for a Business Application. Look at the solutions at Topcoder most of them are so poorly written that they are very difficult to understand.
    – Geek
    Commented Jan 18, 2011 at 8:54
  • @Geek: You're right, deploying the best programming practices is surely important to implement the best ideas. But I'd still rank problem solving skills at the top. Commented Jan 18, 2011 at 8:58

You need both.

Say instead of a software developer, you are some sort of construction foreman. Imagine you are tasked with some problem to solve. You could be a fantastic problem solver, and instantly see the solution in front of you, however, if you only speak English and your laborers only speak Zulu, you are not going to be very effective. Conversely, if you are fluent in both English and Zulu, but are clueless as to actually solve the problem you are tasked with solving, you again will not be effective.

So as a software developer, instead of organizing a team of Zulu laborers, you are organizing computers. You need a strong command of both problem solving skills, as well as being able to communicate the problem, both in your spoken language to colleagues or your programming languages to communicate to the computer.


The one trait often overlooked but important in my opinion is common sense. Okay, common-sense and self-reflection, that's two important traits.

Common sense is to decide what is worth and not worth doing. More often than not, a developer isn't seeking the ultimate truth, the Perfect Solution, often there isn't such a perfect solution at all anyway. So we're making trade-offs every day. But the costs of bad trade-offs can be enormous, so I rate anyone who can reliably make those devisions very highly.

Self-reflection is part of the same process really, every time you're about to start working on something, you ask "Why am I doing this?" and only proceed if you've got a good answer. (Mind you, even "Because marketing said so." can be a good answer, at least you know not to set your expectations high.) A lot of unnecessary work can be avoided by constantly being aware of the purpose of the piece you're working on.

Granted, these are all somewhat vague meta-abilities compared to problem solving or language skills, but they are vital in stopping you from being carried away by them.

Update: I've just thought about a somewhat less subjective answer to this question: we can take say the 100 most popular answers from StackOverflow and categorize them into one of the three types. It's not a perfect method but probably the closest you can get to a definitive answer.

  • Good points. One thing to point out: "common sense" and "self-reflection" has much wider meaning than you specified. I'd replace "Common sense is to decide" with "Common sense is particularly useful when deciding ...". Just to clarify that you are talking about a particular aspect of it, not the whole concept.
    – Alexey
    Commented Aug 19, 2015 at 10:10

Problem Solving Skills, Analytical thinking, and Patient!

But, here, in Sri Lanka, most of the job industries, searching for peoples having knowledge of language, frameworks, etc. So, I'm thinking, what they want? Really confused.

  • 1
    Many big companies want the hole package (who doesnt) but i think that if you know your stuff, learning a language is as is as sitting 2 months with some book and a text editor.
    – guiman
    Commented Jan 18, 2011 at 16:57
  • Agreed! But, for fresh graduate, hoe can we get to know all the nook & corner of a language? For example, we need to know core Java, JEE(most of the JEE techs), HTML, CSS, JS, etc. It's impossible. Commented Jan 18, 2011 at 22:48

It's all about the programming skills and it's nothing about languages, so that's why you make a conscious decision before you suggest someone a programming language, because you want to give them a good paradigm combo where all the great concepts shine through in their true form.

Take Java for example. It's a great language. It's sucks as a first language tho. You'll send someone on a venture where they'll be banged with OOP, OOD, encapsulation, atomicity, bla bla, and all of a sudden the shift turns to primitives, they stop talking about objects and now it's variables, values and types. Does that not defy or, at least, shy away from everything you've read till that point?

That's why I immediately suggest they pick up two languages up from the start. Go through the first and, once you get your bearings there, in good time pick up the second. The paradigm clash will reveal which bits were concepts, which were language smell. That's how you make programmers and that's exactly why we are suggesting languages.


Analytical ability

A little of everything is important but most important is analytical ability for solving problems.


I would say those two and more such as understanding how to design an library or at the very least a proper class. Some basic understanding of algorithm (do you know the difference between an array and a List? would you ever use listVar.ElementAt(offset) when listVar has a few hundred thousand elements?).

Also i would say a guru would know a diverse amount of technologies. If someone has never used IPC, or doesnt know how to write a class and dump/load from and to a binary file i wouldnt call them a guru. (they can cheat and use serializable in .NET as long as they actually know how to implement it on a class they wrote).

I wouldnt call someone a guru if they know how to problem solve up the wazoo and know all the syntax to their language of choice if they think they need a zip lib to decompress some files. (hint: popen or Process.Start)


It all depends on practice, what you want to be. The environment you started your programming career, the type of projects you worked on and how keen are u to solve the problems that arise....

  • 1
    Your answer is generic. You should rework it to link it more obviously to the themes of the asked question : mutiple languages knowledge vs theoric knowledge.
    – Matthieu
    Commented Dec 9, 2011 at 16:26

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