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,237
  • 2
  • 19
  • 21
Brandon
  • 5,873
  • 6
  • 37
  • 59
  • 6
    Sounds like a good opportunity to demand that his web application supports sessions and pagination. Wouldn't that result in him learning it? –  Apr 18 '12 at 07:17
  • Also _which_ single technology should be learned? –  Apr 18 '12 at 07:54
  • @ThorbjørnRavnAndersen Not so much a single technology, but the LAMP stack is what he works with everyday. I think he should learn all the basic/relevant to his job details about MySQL, Apache, PHP and JavaScript at the very least. – Brandon Apr 18 '12 at 09:54
  • 1
    Then you've essentially answered your own question with "no". –  Apr 18 '12 at 10:17
  • 1
    Isn't he already learning multiple technologies like web, database, etc. at once? What are the bounds of what constitutes a technology here? – JB King Apr 18 '12 at 21:44

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,237
  • 2
  • 19
  • 21
  • 2
    +1 for the second paragraph. I'd add that looking at different languages, frameworks and APIs can teach you a lot about WHY the designers chose to implement a given language/framework/API in the way they did. Giving the learner a deeper understanding of programming and software as a whole. At least, imho – Jamie Taylor Apr 18 '12 at 08:05
  • +1 There are situations where you will learn to focus, such as when you have a "real" programming job. But how do you get a job if you only been exposed to one framework? Learn to write something in more than one framework/library so you can pad your CV and show that you're not biased to one particular technology. ;-) You can learn things like pagination and RMDB's later once you have gained actual context to do so. – Spoike Apr 18 '12 at 09:14
  • @Spoike He has a "real" programming job, hence the reason I'm trying to get him to focus on the technology he uses everyday for that job – Brandon Apr 18 '12 at 09:55
  • 2
    @RougeCoder: Give him appropriate tasks (page this gigantic list, filter items, draw diagram with grouped samples etc.) to enable him to learn how to do the concepts you want him to know about. If there are no such tasks then there is no context for him to make that knowledge stick. – Spoike Apr 18 '12 at 10:34
  • 1
    I used to think it was BS, or at least an exaggeration, when people said things like "learning functional programming makes you think differently." Turns out, they were under cutting the effect it has on your code. My code is *completely* different already, and I'm not yet proficient with my functional language of choice **nor am I trying** to change the way I write code. It really is an eye opener. – Steven Evers Apr 18 '12 at 13:40
  • This is why I think SICP is the perfect introductory text--it covers a bunch of different ideologies in a uniform manner; you get to reuse syntax (sexps) and concepts while learning about functional programming, OOP, logic programming and even low-level register-based programming. – Tikhon Jelvis Apr 19 '12 at 06:35
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
  • 1
  • 5
  • Well, the difference between InnoDB and MyISAM is basically transactions. If he doesn't understand transactions, what chance has he to work correctly with concepts like "eventual consistency"? – Michael Borgwardt Apr 19 '12 at 07:33
  • Pardon? No-one said he didn't understand transactions, and what I wrote didn't imply that at ALL. – pbr Apr 20 '12 at 03:34
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?

doppelgreener
  • 1,274
  • 17
  • 26
  • You raise good points. The problem is, with some stuff he knows what's he doing but with other stuff he doesn't (I think he just doesn't want to learn it so he keeps copying it from other projects). For example, he's written pagination, I've went over it piece by piece, but he still doesn't understand. I know he could understand it, because it's a super simple concept, and he's done far more complex stuff. – Brandon Apr 18 '12 at 00:46
  • Yes, and that _is_ a problem. If he's writing code he doesn't understand he's halfway to being a copy-paste programmer, and being a programmer who has no idea what he's doing. – doppelgreener Apr 18 '12 at 00:53
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,816
  • 2
  • 57
  • 124
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,415
  • 3
  • 20
  • 26
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
  • 2
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
  • 7
  • 22