11

Ok, I've been teaching a buddy how to program for a while now. He's a very fast learner, and he's quite good at programming so far. However, he has one "issue" I keep trying to correct.

He jumps in and starts doing highlevel programming without learning some of the basics (He's created a full blown web application but still doesn't know pagination or session management).

This isn't the problem though. He keeps jumping around to new technology (Node.js, MongoDB, EC2, etc). I tried telling him that he should learn some of the basics about his RDMS of choice (MySQL) as he uses it everyday before investing a bunch of time into learning the basics of MongoDB (And probably moving to something new).

Am I the one in the wrong here, or should he try to focus on one thing at a time and get really good at it?

Kris Harper
  • 2,267
  • 2
  • 19
  • 21

9 Answers9

18

Personally, I think it can be a great idea to sample different technologies and languages when learning to program. Focusing on one technology has the obvious benefit of making you very good at it, but the obvious downside of only knowing a single technology.

But I think the more important subtler downside is that languages and frameworks generally come with an ideology. There are many programmers (maybe most programmers) who only apply one ideology in everything they program. This is often because they learned one framework in one language really well and now they can't see anything without those goggles on.

Especially for someone just learning to program, I don't really think it's an issue to want to try what's out there, and wait to get focused on something until later. After all, it will be difficult to write anything substantial without knowing a technology decently well.

Kris Harper
  • 2,267
  • 2
  • 19
  • 21
6

There is good reasoning on both sides of this issue. Knowing "enough" about a lot of different technologies is certainly valuable. Knowing "a little" about a lot of different technologies? Not so much.

Deep knowledge of particular technologies can certainly be valuable - IF there's ongoing demand for them. Knowing "everything there is to know" about a particular technology? ...most probably overkill.

So, it's all in the balance. If he ends up building wonderful apps with nosql, why would he have to know the difference between the InnoDB engine and the MyISAM engine?

pbr
  • 225
3

I agree in part. He does need to know the underlying principles - but he doesn't need to just sit down on one thing and get really good at it. Nobody does.

On sitting down with one thing and getting really good

I'm currently working with C# and Microsoft XNA to make a game. I'm learning a lot about XNA as I go, and whilst I'm already pretty competent with C#, my knowledge is expanding bit by bit (today I learned about constraints on type parameters).

However, there's no need for me to become 'really good' at XNA or C#. If I were to finish my project now and move on and never use either of those ever again, I would be completely satisfied and my learning would continue elsewhere.

The principles are important though

At least I understand the underlying principles. When I create things in C# and XNA, I understand what I'm doing - and if I don't, I learn about it.

If I wrote pagination, I would understand how pagination works. If your friend created some pagination and has no idea how it worked, that is a problem. If he didn't create pagination, there's no reason he'd need to know though.

The issue here is: does he know what the @$#! he's doing, or is he a programmer who has no idea how to program?

3

I'm guessing he's attempting other languages because he has something he want to build. You can always return to a language or framework and learn more.

There is a fine line between learning the theory/building a foundation and trying to remain motivated.

At least he's not stuck in a single language. Sometimes you take the good with the bad.

JeffO
  • 36,956
3

I find his attitude as an asset rather than a liability. His ability to do research is above average. His learning curve is also shallow. Why not exploit this traits if you want him to learn something.

His inquisitive mind is always on the go, why not provide him direction. Start by telling him why pagination is an important and essential. Let him take a look at websites with pagination and websites without those.

How about giving a constructive criticism to what he is doing. "Wow you've done something great, but wouldn't it be better if you do it this way with emphasis on optimization and best practices.

I think doing a comparison between a good practice and a bad practice can really stimulate his mind.

Do not restrict him, he will eventually find something he would like and settle with it for some time. If I were you, I provide him with lots of learning material about things he is so passionate about.

I think he is doing the top down approach while you on the other hand want him to do a bottom up approach

1

Why is it bad?

On the opposite I think it's very good! It shows curiosity and eager to learn. Moreover, he wants to find the right tool for the right job! Better than to stick with an inadequate first choice technology. ;)

Actually, I do it likewise, as a seasoned programmer. And I recommend it. Whenever I have a new project, my behavior is as follows:

  1. explore (the potential technologies that may be useful)
  2. experiment (with the ones that looks promising)
  3. choose your techs (or experiment a little further until you know)
  4. stick to it (develop your app and pull it through)

I think it makes perfect sense.

dagnelies
  • 5,493
1

Personally, if someone had to focus only on one technology, I'd say it should be C#/Java, used along with SQL.

From this, I believe, you can adapt to any other technology.

But sticking to one technology could be limiting if a guy wants to step into the corporate environment.

Ideally, one object-orientated platform, one mobile platform, one web-platform and then very good knowledge of SQL (or any other db environment).

And basics first, otherwise he WILL get stuck later on!

0

It's not bad if he is a beginner in programming.

He will see how some stuff work's. But if he doesen't understand the what he is doing it's better not to do it at all.

I had that problem with myself i want to know it all Java, C, C++, C#, Phyton, ASP.NET...etc but i realized i can't know it all, so i focused on couple of things's and it's much better.

So what should he do(advise him):

  1. Think what stuff you want to do
  2. Explore all the options
  3. Find what fits you
  4. Learn it
  5. Never stop learning

I would not agree with @arnaud if you always explore and learn new stuff when a new project is in front of you(well not completely). It takes too much time to explore and learn new stuff again and again and some projects have a time limit. But on the other hand if you need to learn some simple new stuff it's ok :D .

AeOn
  • 1
0

I agree with you, its sometimes easy to get a superficial knowledge of a particular framework or technology or language, but to get a real understanding its best to get involved in a real world development through to completion, and maintain it - become someone who others come to for advice. Its preferable to become a jack of all trades, master of one rather than just a jack of all trades, master of none. Having said that, I wouldn't discourage him from learning new stuff because he obviously has a good level of enthusiasm.

dodgy_coder
  • 1,098