Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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?

share|improve this question

closed as primarily opinion-based by MichaelT, GlenH7, Bart van Ingen Schenau, Dan Pichelman, Kilian Foth Apr 23 at 11:27

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

6  
Sounds like a good opportunity to demand that his web application supports sessions and pagination. Wouldn't that result in him learning it? –  user1249 Apr 18 '12 at 7:17
    
Also which single technology should be learned? –  user1249 Apr 18 '12 at 7: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 Wamboldt Apr 18 '12 at 9:54
1  
Then you've essentially answered your own question with "no". –  user1249 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 Answers 9

up vote 18 down vote accepted

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.

share|improve this answer
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 8: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 9: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 Wamboldt Apr 18 '12 at 9:55
1  
@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. –  Steve Evers Apr 18 '12 at 13:40

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?

share|improve this answer
    
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 7: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 3:34

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?

share|improve this answer
    
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 Wamboldt Apr 18 '12 at 0: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. –  Jonathan Hobbs Apr 18 '12 at 0:53

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.

share|improve this answer

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

share|improve this answer

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.

share|improve this answer

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!

share|improve this answer

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 .

share|improve this answer

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.

share|improve this answer

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