Learning is important. I trust that is a non-controversial statement.
Much has been said about learning styles, and I will not repeat it here. However, something I see less talked about is learning phases. Specifically, I want to talk about two distinct phases of learning: Up and Out.
While learning usually is applied to a skill, the concept I'm talking about applies to anything: Learning a new skill, getting accustomed to a new community, or culture, or country, or tradition, or religion, or practice, or... pretty much anything.
Learning up
Whenever you start something new — be it learning a skill, starting at a new company, getting involved in a new Open Source community, or anything else — you start off "not knowing what you don't know". You don't even know the syntax of the programming language, much less how to make it do what you want. You don't know that you need to anneal only certain kinds of steel before you even start forging it, or the best way to do so (which differs from one alloy to another). You don't know what the social etiquette is for a given situation, or even if there is one. You start off in a state of ignorance.
Fortunately, ignorance is curable; it's stupidity that is not. Ignorance just means you've lots to learn, and that's good. How do you learn?
If your answer to that is "try it until you figure it out"... you're wrong. That's the stupid way. Certainly practice is crucial, but if you start off with just practice you're making it extra hard on yourself. You don't even know what to practice yet.
The smarter way is to seek advice from those who already know the thing you're trying to learn. There are more experienced developers, blacksmiths, or community members who already know the things you're trying to learn, and already made the mistakes you're liable to make yourself if you have no guidance. Some of them may be better at passing on that knowledge than others, but generally speaking enough of them are dedent at it that you can find a few to learn from, either personally or indirectly via their blogs, books, or other publications.
In the parlance of philosophy, you start by learning at the feet of your Elders.
That idea rubs a lot of people (Americans especially) the wrong way. The idea of hierarchy, the idea of "just accept what you're told by your betters", etc. flies in the face of our staunchly individualistic, pseudo-egalitarian culture. That doesn't make it wrong, though. Any skill or community has many thousands of little details that make it work, and reality has a surprising amount of detail.
The stereotype of the incompetent guy who tries to do it all himself and ends up burning down the house is a stereotype for a reason: Just trial and error is going to involve a lot of catastrophic failure before you figure out all the fiddly details. And that catastrophic failure could lead to a great deal of damage, and not just to you.
Sure, being a poor writer is probably not going to hurt anyone. Being a poor programmer could lose your client millions of dollars. Being a poor construction worker could cause a building to fall on someone 3 years from now. Being a poor diplomat could start a war. Being a poor community member could cause a major incident, harm lots of people, and get you kicked out.
There's also the issue that you can develop bad "newbie habits" that are hard to break later on, unless advised not to. Sure, global variables (in programming) may not hurt anything in this small program; but if you get in the habit of relying on them you will unquestionably create very unstable software in the future that can have massive consequences for you, and your colleagues, and your customers.
"Doing it wrong" has consequences, and when you are new enough that you don't know what you don't know your odds of "doing it wrong" without intending to are high. In some cases it's material harm, in others it's just confusion. If "this is the way we do it in this company/community/organization/culture" is new and strange and confusing to you, then as the new person it is your responsibility to... learn it and learn to deal with it. At least at this stage. "It's not what I'm used to so it's wrong" is an incredibly selfish, harmful attitude to take.
Might you know better? Might that social etiquette be wrong? Might there be a better way to structure that code? Might there be a better way to hold the steel while striking it? Quite possibly. Nothing is immune to improvement. But as the newcomer, what are the odds that you have it, right off the bat? Non-zero, but very very small. Everything in a skill or social convention is there for a reason. It may turn out to be for a stupid reason, but how do you know, when you are still getting started? You don't.
Or it may just be an arbitrary convention that works because it's a convention, not because it's good or bad, just "we all do it the same way" is what's valuable. (My favorite example here: Should the OK button be to the left of the Cancel button, or to the right? In the end it doesn't matter in the slightest, as long as it's consistent. If your program is out of step with what users on your platform expect, then you are the one who's wrong.)
When learning something new, you should, I'd argue must, start from a point of humility and honest ignorance and willingness to learn from your Elders, and assume that the things they're telling you are worthwhile, not just put there to make life hard for newbies.
Learning out
Eventually, as you learn, you develop a "feel" for whatever the topic is. The skills become second nature, you "get" the cultural nuance and unwritten rules, you recognize the vocal inflection, you learn how to tell from the exact shade of yellow if the steel is hot enough, and you don't remember how to write a program that uses global variables anymore. You've internalized the lessons and conventions and skills and cultural mores. In short, the whole point of learning is to become one of the Elders.
That doesn't mean you're done learning. Perish the thought. It just means the type of learning you're doing changes. Instead of learning from your Elders (those "up" from you), now you're learning from your Peers (those next to you, spreading "outward"). From your fellow experts in the field and long-time community members.
It's in learning from your Peers that you can, and should, be able to challenge the status quo. OK, we've all been doing it this way, I get that... but why? Is it really optimal? Would this other technique be better? Is this social etiquette really fair? Are we using the same definition of fair?
Learning from your Peers is inherently different than learning from your Elders. Learning from your Elders is about relying on accumulated knowledge of those that came before, and avoiding the common, obvious-in-hindsight mistakes that they already made. Those that came before you already put blood, sweat, and tears into building a body of knowledge or social fabric that you can rely on. Learning from your Peers is about working together to further expand that body of knowledge, or refine it, or correct it where necessary.
Learning from your Peers is about challenge, both to you and to your Peers. There is inherently conflict in it, but ideally it is friendly, constructive conflict. You're challenging each other to be better, questioning assumptions in a constructive way (rather than just destructive or trolling way). You'll probably be wrong at least as often as you're right, or more often right/wrong isn't a binary question but simply a scale of appropriateness, fit, or interpretation. Informed experimentation, both formal and informal, is highly valuable and should be shared (whether successful or not).
That doesn't mean that all of your Peers and fellow Elders are at the same level of knowledge. There is still a great deal of inequality of knowledge, of experience, and of skill. There's always room to learn more from your fellow Elders.
One of the best feelings is when a Student that you mentored, to whom you were their Elder, becomes a Peer. (And if you don't think so, you have no business mentoring or teaching anyone.)
This phase of learning ends when you're dead. You may still be breathing, but if you stop learning you may as well be dead.
Iterating
I've presented these two phases here as discrete, linear concepts but in practice it's not that simple. In the vast majority of cases there's no formal transition from Student to Elder. Even when there is a ceremony of some sort (college graduation, recognition from a guild as moving to journeyman or master, etc.) that's not an on/off switch for learning styles. It's a much more gradual transition, and you don't know you've gone through it until after the fact. That's as it should be.
You will also, as you expand in a field, go back and forth at times between the two phases. You may be an Elder in one programming language but when you start on a second, you're back to Student for a while; possibly a much shorter while than you were before, but a while. You may be a dependable blacksmith in steel, but working with titanium or gold or silver? Now you're back to Student, because it's different.
You may know what the social conventions are in one Open Source community, but when you get involved in a new one there's a different set of unwritten rules you need to learn. If you know what to look for the second time around it becomes much easier and faster to pick up, perhaps only a few days, but it's still a process. The policy about when you escalate a ticket at your new company many be very different than at your old company; your first job is to learn and conform to the new company's policy and become an Elder in that.
You may understand "American culture", but the social conventions in Minneapolis and Mobile are different enough that you will feel different walking down the street for a while, whichever way you're moving. That doesn't make Minneapolis or Mobile wrong; it just makes them different and you need to revert to Student when moving from either one to the other.
Personally, I'd say I'm firmly in the Elder category in writing PHP, in writing English, in driving, in HTTP, in HTML, in the conventions of my current company, and a myriad other things. However, I'm still solidly in the Student category in writing Python or Go, in blacksmithing, in CSS, and many others. I will very likely never get past the Student phase in many of them, and that's OK.
Everyone is in a constant state of transition from one phase to another as they learn new things. That "Student reversion" could last an hour, or it could last years. That will depend on how different it is from what you already know, how complex the topic is, and many other factors.
Learning up Responsibly
As a member of a community, you always have many responsibilities. That's a topic for another post to explore in detail, but for now suffice to say that your responsibility is different depending on your learning phase.
If you're still a Student, still Learning Up, your first responsibility is simple: Shut up and Listen. The people telling you things about how you should behave, what you should do, what you shouldn't do, how you should do it... They're not just arbitrary. They're the result of hard-won knowledge, battle scars, and often times decades of people's lives. You have a duty to respect that.
If it's a skill you're learning, you owe it to yourself to take advantage of the knowledge available to you for how to not suck at that skill; or at least how to suck at it less for a shorter period of time. Your practice and experience is good, but if you have the opportunity for it to be guided by someone more knowledgeable, take it. And you owe it to your Elders to respect their experience and the effort they're trying to put into shortening your learning curve.
If it's a new culture you're assimilating into, you owe it to yourself to not be a judgemental asshole. There's no other way to say it: If you come into a new culture and start by saying "this is all wrong" or "that's not how I'd do it" or "but that word means this other thing to me and I'm just as right as you are"... you're an asshole. Full stop. Don't be an asshole.
You also owe it to those already invested in the culture or community you're joining to assume they know what they're doing. Those cultural conventions, etiquette, processes, and so forth developed for a reason, and when you're still new you are in no position to judge those reasons. They've built that system over a long period of time, often through a great deal of pain. Culture — even small-scale culture like a company or a local community or even a large and old Meetup or mailing list — is part of a person's identity. Judging someone else's identity out of ignorance is just being an asshole.
Don't be an Eternal September problem. If you do, then you're an asshole.
What you may learn is that a particular skill, profession, or community is not for you; that you're not willing to take the time and effort to become an Elder, or you don't feel comfortable with a certain group of people. That's OK! Really, it is. It's OK for you to leave. There's no shame whatsoever in saying "this is not for me". That, too, is a valuable form of learning.
Learning out Responsibly
Similarly, if you're an Elder in a field, skill, or community you have a responsibility as well. In fact, you have a responsibility to both your fellow Elders and to upcoming Students.
To your fellow Elders, you owe respect and collegiality. They've put in the time, learned the skill, served the community. They are your Peers. They may very well be wrong about something... but you may be as well. Or you may both be semi-right (and semi-wrong) from a different perspective. Give them, and you, space to keep learning, experimenting, and refining safely.
To the upcoming Students behind who, you owe guidance and mentoring. I'm sure at this point someone in the audience is going "I don't owe nobody nothing; let them learn by their own scars; I've got better things to do with my time; I'm no good at that." Or some combination of those. To them I say: You fail at being selfish.
There are many reasons you have a duty to help those behind you, and many of them are completely, entirely selfish. So if you want to be selfish and not help newcomers, you are working against yourself.
First and foremost, you will die someday. Or stop working in a given field. Or leave a community/company/group. If it's something you care about at all, you need to help produce the next generation. If you don't, and no one else does, there will be no next generation and the skill or culture dies with you.
Or, worse, there will be a next generation that is built using your name that is entirely different. They will "jack up the title and write a new story" (to use Hollywood parlance). If you don't teach them your ways, they will invent their own and you will not be able to stop them.
In some cases that means simply a different set of cultural mores and conventions. That's not necessarily a bad thing, but it does mean the culture you helped build dies alone. Or the company you helped build collapses because people are following different, incompatible protocols. Or people engage in a profession, knowing none of the lessons you could have taught them, and people get hurt or die as a result. Those are most definitely bad outcomes.
Many fields (medicine, law, architecture, etc.) explicitly disallow people from practicing a skill as an amateur, because the potential for harm is so great. Sometimes the restrictions are excessive in practice, but the concept is very much valid. (I want to ensure my house is built by someone well-trained in ensuring that it doesn't fall down on me, thank you.)
Even if loss of life isn't involved, the impact of others' work can still come back on you. Every time someone releases a crappy, amateur PHP application that's ridden with security holes it reflects badly (fairly or not) on the entire PHP community. It's in our self-interest to ensure that people learning PHP learn how to not produce crap that gives us all a bad name. (See also, PHP the Right Way.)
On a lighter note, those Students still learning up are tomorrow's Elders. They're your future Peers. They're people you'll be living with, working with, playing with, sitting with at conferences, and so on. You owe it to them and to yourself to ensure they start off on the right foot (if only so that you don't have to fight them about global variables in 5 years). They may well have the great idea that moves your field forward. They may not have it yet, but after some mentoring and experience (which you are in a position to provide) they could. If they push back on something, listen! It could be brilliant, but most likely it's just their honest ignorance speaking. That means they're telling you what it is they don't understand, and what they need you to teach them.
At the same time, allow them to make mistakes. Forgive their mistakes, as much as possible, as long as they're willing to learn. If they make a social faux pas a few times, that's (probably) OK. Coming down on them too hard will not teach them to not do it again; it will teach them to not trust you. (If they screw up repeatedly despite supportive correction, that's a separate problem.) Ensure that their major screw ups are in cases where it won't hurt anyone, then help them learn from them.
Besides, when they become your Peers don't you want them to have good memories of your mentorship?
Above all, though: Be open to you being the one that is wrong. You may be an Elder, but that doesn't mean everything you know is frozen in time. New techniques, new cultural movements, and natural drift happen, and can be a very good thing if you let them. And if you don't, you may well get run over by them.
An aside on age
I'm using the terms Student and Elder, but there is no age associated with any of these roles. I mean "Elder" in the sense of "has been around and learned things", not in chronological age. The instructor at the forge where I am learning blacksmithing is more than a decade younger than I am, but has about 4 years more experience at the forge and knows way, way more about swords and arms than I do. (And about linguistics, but that's another discussion.) Don't mistake the number of times someone has made it around the sun for experience in any particular field, or with any particular community or culture. They are only vaguely related.
For that matter, the time someone has been working on something is not a hard predictor of their Elderness, either. Some people can pick up a particular skill very easily, while others take much longer. Some acculturate to a new community quickly, others balk at it, for reasons that are highly complex. While "time in the field" and "level of skill" do correlate, they do not correlate very tightly. In fact, I'd argue that once someone has made it to Elder level it becomes even weaker, since the skill difference between two Elders is generally far far less than between an Elder and a new student. There's always more to learn, but never as much more to learn as when you're starting out.
Conclusion
Learning is an eternal process, but how you learn is something that changes over time. Your approach to learning, and to teaching, shifts as you level up, as well it should.
When you're just starting out, shut up and listen. Those that are trying to teach you are (most likely) doing you a favor. Whether it's a skill or a community or anything else, your responsibility at the start is to suppress your ego, trust, and learn. The time to be a know-it-all will come later, grasshopper.
Once you've become an Elder of whatever community or skill we're talking about, you have an obligation to ensure that those that come after you get at least as much support and help as you had; more if you can manage it. And do not stop learning. Learn from your Peers. Learn from your Students. Give yourself as much permission to be wrong, and learn, as you do your Students and fellow Elders.
Above all, know yourself and where you are in any given area. In what are you an Elder, and in what are you a Student?