I lived in Russia for two years. When I first moved there (I was 19) I went through the painful experience of being immersed in a foreign language. For a couple of months I couldn't express myself clearly, if at all. I couldn't put more than a couple of words together. I only understood about half of what people were saying to me. I couldn't even ask the bus driver to stop so I could get off at my stop.
After that short period, though, I became very comfortable communicating in Russian. I realized that there's probably no way to learn a language without going through that painful period. I think the same is true of programming languages. You're going to have to stumble through a couple thousand lines of horribly written code before you become fluent. You might as well start writing those now and get it over with.
I just started in a new roller hockey league this week. I still can't skate backwards well. I know that if I want to learn I'm going to have to fall on my butt a bunch of times. As long as I stay cautious and don't allow myself to fall, I'll probably never learn.
This is at least partly why it's hard for older people to learn new things, while 5 year olds seem to pick up things in days. As you age, you become more cautious, a natural progression caused by continuous exposure to pain and suffering. It gets the point of irrationality. What's the risk in trying out a new language? In reality, there really is none, you've just got to fight past it.
You're absolutely right. As I see it, the complacency you describe is the number one reason why many people in modern societies never emerge beyond being "average". They lose the drive to learn new things, challenge themselves, and continuously improve. Once becoming established it's very easy to sit back, relax, and coast along through life.
A motto I try to live by is this: If you have a choice between doing an easy thing and a hard thing, do the hard thing if you want to be great.
"This is a good plan for life in general. If you have two choices, choose the harder. If you're trying to decide whether to go out running or sit home and watch TV, go running. Probably the reason this trick works so well is that when you have two choices and one is harder, the only reason you're even considering the other is laziness. You know in the back of your mind what's the right thing to do, and this trick merely forces you to acknowledge it."
"What's the risk in trying out a new language? In reality, there really is none, you've just got to fight past it."
Counter argument (more something that popped into my hard than something I firmly believe, but plausible): As you get older you get a different perspective on time. You increasingly ask yourself, Is this the best use of my time? Are there not other things more deserving of my attention?
I do think that people tend to get a fear of failure instilled in them, and that contributes to lower motivation to try things, but adults also have different responsibilities than five-year-olds.
However there are times to build up slowly and approach things slowly, such as when the activity carries a high risk of serious injury.
When I went through Basic Airborne Training we praciced every step possible on the ground over and over before setting foot in a plane, and I wouldn't suggest doing it any other way.
Similarly, I am just now starting to learn to ride a motorcycle. I know I can't stay cautious forever, but I am building up in small steps. I started with a closed course safety class to get my license, then I rode at fairly low speeds in my low-traffic neighborhood a little bit before going out on city streets. Still haven't taken it on a highway yet.
With that said, where the price of failure is relatively low, then be bold, experiment, and accept that you will fail many times before becoming good. It is the fastest and most thorough way to learn.
I'm going to take a contrary viewpoint here, but please don't take offense. I see what you're getting at.
What I've learned is that anyone can learn Rails, or Git, or whatever buzzwordy thing is the latest language, tool, or framework. It's easy to learn these things because they are new, hip, and promise productivity increases. I thik it's good to try new things, but things like this aren't that hard to try, if you're really into programming. They have pretty shallow learning curves, and give pretty instant gratification: the double-whammy of what makes a good hacker flavor-of-the-month.
Learning these types of things is fun, easy, and good. You never know what the next big thing might be. And, you probably will come across a few gems you keep with you for many years. You also probably pass through a lot of crap.
It's much harder to learn things that take time and patience, that don't provide the instant gratification of learning a new framework or whiz bang tool chain.
You need to take the long view. Programming languages are a means of expression, they don't make you write better code.
What makes you write better code is the hard stuff. The stuff you lose if you don't practice. The stuff nobody has the time to sit down and really learn. Linear algebra, statistics, physics, machine learning, machine vision, game theory, logic, information retrieval, network theory, the list goes on. It's much easier to pick up a "Foobar in Action" book that has no scary math symbols or floating point values that can get you from 0 to "Hello World" in a few hours.
But, you will always be just another code monkey that way, following the leaders. I'd rather have totally shitty, ugly code written in BASIC that expressed some novel algorithm that nobody else had than yet another CRUD application written in Clojure in the cloud with jQuery and WebSockets.
Put down the Pragmatic Programmers books every once in a while, turn off your computer, and start reading about the basics. Even if you've learned it before, it always helps to go back. You never know when that thing you slept through sophomore year of college will turn out to be the right approach for a problem you're working on.
I've found that I have to go through periods of doing (hustling), and then periods of research/learning when stuck, going back to doing once unstuck. The cycle repeats itself.
Transitioning between the two can be difficult. It's like switching between a "job" and being in academia. They're similar but two totally different worlds. One gives you hands-on experience, and the other book smarts. Separately neither paints a full picture, but combined they certainly do.
Absolutely correct. I leapt into rails programming and muddled through for a while, but now I'm taking my foot off the accelerator for a while and reading Agile Web Development in Rails.
After that short period, though, I became very comfortable communicating in Russian. I realized that there's probably no way to learn a language without going through that painful period. I think the same is true of programming languages. You're going to have to stumble through a couple thousand lines of horribly written code before you become fluent. You might as well start writing those now and get it over with.
I just started in a new roller hockey league this week. I still can't skate backwards well. I know that if I want to learn I'm going to have to fall on my butt a bunch of times. As long as I stay cautious and don't allow myself to fall, I'll probably never learn.