12

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?

Shog9
  • 8,101
  • 2
  • 46
  • 56
guiman
  • 2,088
  • 13
  • 17

11 Answers11

14

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.

vz0
  • 785
10

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.

Loki Astari
  • 11,190
7

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.

user281377
  • 28,434
4

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

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.

whatsisname
  • 27,703
2

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.

biziclop
  • 3,361
1

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.

Abimaran Kugathasan
  • 1,083
  • 2
  • 13
  • 23
1

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.

0

Analytical ability

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

Amir Rezaei
  • 11,068
0

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)

-1

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....

asim
  • 1