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.

I've long realized that the best way to go about learning another (natural) language is by immersion - you can learn Spanish in a classroom, but you'll never be as fluent as someone living in Spain (over an extended period of time who is interested in actually learning Spanish).

I was curious if the same was true for people who are new to programming. Now, I know that not all of these are specific to programming, but the general public at least generally associates these things with "computer geeky". Would switching to Linux be a good choice? Would using Git (or some other type of VCS) be a good choice? What about joining online forums and IRC? What about writing unit tests or working on larger projects?

I know that in the past programming and computer science was introduced in a very sterile environment. You started in a university classroom with a well known curriculum and book (say, Structure and Interpretation of Computer Programs), say for a few "hackers" who started young (and often with BASIC or the like).

I've noticed that the actual experience of a software developer is more complicated than just knowing a language (and how to use it), there's a whole lot in between, and a whole lot to learn.

Do you think it's better to start programming by immersion? Not necessarily all at once, but rapidly introducing new "concepts" that professionals make use of? Or is it better to start slowly and academically?

share|improve this question

closed as off-topic by gnat, Bart van Ingen Schenau, MichaelT, Kilian Foth, Robert Harvey Dec 2 '13 at 18:26

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – gnat, Bart van Ingen Schenau, MichaelT, Kilian Foth, Robert Harvey
If this question can be reworded to fit the rules in the help center, please edit the question.

Why are you assuming "slowly" == "academically"? Can you explain this more fully? Why is "new "concepts" that professionals make use of" supposed to be "immersion"? I don't get what you're suggesting. Can you provide more specific examples? Something concrete? –  S.Lott Feb 13 '12 at 0:30
@S.Lott Well, I'm just saying, when you go out into the professional world there's a lot of things you have to deal with outside of programming and theory. I'm not saying that there isn't a lot of stuff to deal with in school, but they're different things (possibly even different classes). In school, programming and computer science concepts are generally introduced in isolation and in theory. While that might make sense, I'm curious if quickly immersing a student into professional programming practices can be used to give them a practical experience, and teach them more efficiently. –  BBB Feb 13 '12 at 0:39
I'm suggesting that instead of just learning theories one at a time, you quickly introduce professional (or at least semi-professional) tools and practices and lifestyles in a manageable way that immerses the student into the "world of programmers" (it may sound sketchy, but I think programmers do operate in a very distinct realm, at least at work, as compared to most others). –  BBB Feb 13 '12 at 0:42
@S.Lott I have to agree with Tom that "academically" == "slowly". Even skipping over the "introduced in isolation" thing, college-level courses tend to retread the same topic for a full week, while the same topic you'd be expected to understand within a day while on the job. –  Izkata Feb 13 '12 at 1:15
@Tom: Please update the question to explain yourself. Please do not add comments to your question. –  S.Lott Feb 13 '12 at 2:49

2 Answers 2

Great question - I like how you think! C++ and Spanish are 'languages' of some sort; however, that's the only thing they have in common. While the two languages are used for communication, programming languages are utilised to communicate with machines - communication with others who read the code is still done in English and by following a well-defined set of practices.

Keeping in mind that everyone learns differently, I think that there are several fundamental issues for learning programming.

Eradicate bad habits/practices immediately. It's easy to get ahead of yourself and not keep an open mind. An example of this: you learn that == can be used to compare values. If you shut yourself off right now, you wouldn't learn about === in PHP, and you'd start running into trouble when you're comparing floats. It's very important not only to learn, but to learn the right things.

If you wanted to learn programming the best way, here's what I would do:

  1. Identify a group of smart software engineers. Not just those who know a lot, but those who can think.
  2. Get your group to review your code - everything you write. You'll learn what you're doing incorrectly immediately and you'll learn the better way promptly.
  3. Read code they write. Understanding someone else's thought and problem-solving process is one way to condition your brain to not doing dumb things.
share|improve this answer

I think it's widely appreciated that immersion and practical experience are very important. That's why most decent CS and SE programs have internships, externships, practicums, and capstone projects. Some of the very best programs make external experience a requirement for the degree. Most programs leave it up to initiative of the student.

These are mostly available to juniors and seniors because you do need some basic skills if your are doing to be doing something besides making coffee.

share|improve this answer

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