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,083
  • 2
  • 45
  • 56
guiman
  • 2,088
  • 13
  • 17
  • 3
    Hi guiman, Programmers.SE is a question-and-answer site, not a discussion board: [real questions have real answers](http://meta.programmers.stackexchange.com/questions/991/real-questions-have-real-answers). Can you rephrase to ask a question instead of trying to start a discussion? –  Jan 18 '11 at 08:43
  • How Programming skills is different from language guru? You mean knowing OOP is a programming skill and knowing Java is language guru? – Gopi Jan 18 '11 at 09:42
  • @Sri_Kumar thats exactly my point – guiman Jan 18 '11 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 Jan 18 '11 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 Jan 18 '11 at 18:52
  • There is one word that answers your question: **Lisp**. – Mark C Jan 19 '11 at 05:42

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
  • 3
  • 12
  • 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 Jan 18 '11 at 17:29
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.

Martin York
  • 11,150
  • 2
  • 42
  • 70
  • "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. – DistantEcho Jan 18 '11 at 09: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 Jan 18 '11 at 12:29
  • Programming can easily be an individual activity, it just takes longer. – jprete Jan 18 '11 at 17:27
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,352
  • 5
  • 75
  • 130
  • 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 Jan 18 '11 at 08: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 Jan 18 '11 at 09:02
  • @Ammo : Good idea :-) – Geek Jan 18 '11 at 09: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 Jan 18 '11 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. – mu is too short Jan 18 '11 at 17:44
  • IMO, "worst working code" is hardly "getting stuff done". But that doesn't mean that each and every line of code has to win a beauty contest, either. – user281377 Jan 18 '11 at 17:48
  • @mu is too short But what you're saying now basically is that "problem solving" encompasses both "coding skills" and "language guru". Which is fair enough but it isn't consistent with the way the question was formulated. – biziclop Jan 18 '11 at 18:37
  • @biziclop: An unimplemented solution is like a fancy concept design for a car; it may be beautiful and elegant but if there isn't room for an engine then it is useless. Or, in the words of Steve Jobs: Good artists produce. You don't need to be a language guru but you do need to be able to figure things out (problem solving) and implement solutions (programming skills). This is a comment thread, not an answer, we're allowed to have a discussion. – mu is too short Jan 19 '11 at 00:58
  • @mu is too short I didn't say problem solving was enough. Quite the opposite, I was arguing against it by pointing out that it's wrong to assume that just because somebody's smart enough to solve problems, he'll be easy to teach how to code. I stand by this claim because I've witnessed (and suffered) it myself. The whole point of the question is, as far as I can see, is that none of the three skills are worth anything without some degree of the other two. – biziclop Jan 19 '11 at 10:18
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?

Naweed Chougle
  • 562
  • 5
  • 12
  • 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 Jan 18 '11 at 08: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. – Naweed Chougle Jan 18 '11 at 08:58
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,463
  • 14
  • 73
  • 93
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,351
  • 21
  • 22
  • 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 Aug 19 '15 at 10:10
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
    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 Jan 18 '11 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. – Abimaran Kugathasan Jan 18 '11 at 22:48
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.

Filip Dupanović
  • 1,215
  • 8
  • 13
0

Analytical ability

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

Amir Rezaei
  • 10,938
  • 6
  • 61
  • 86
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
  • 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 Dec 09 '11 at 16:26