Someday, my leader told me that don't reinvent the wheels, use framework built-in classes. (with a serious mood) when I implement some algorithm has been supported by .NET fx. And seriously, I didn't know about these support before, cause this is the first time I work with .NET).
So I have this questions. For example, for building an Web-App we have some ways:

  1. C# with ASP.NET framework
  2. Java with JavaEE (and friends like Struts, Spring v.v.) framework.
  3. PHP with Zend framework.
  4. ...

It just takes about 1 months to learn language (C#, Java, PHP...), BUT learning to use a framework effectively takes you at least SOME YEARS working (to know every bit of code has been built-in).
So, how do you learn to use effectively 2 (or more) frameworks? Any ideas are welcome!

  • 2
    Who needs to know every bit of code in a framework? Aside from Jon Skeet of course. – JB King Nov 22 '11 at 15:32

First of all, it shouldn't take years. It shouldn't really take anything. There's no good reason to spend your time pecking at every tiny detail in a framework. Mainly because they keep growing, and fast! It's better to just use your time to actually be productive.

Second of all - here's an easy way to solve your problem: when you want to accomplish something that's at least one of the following:

  • Not entirely trivial
  • Not very simple to implement most efficiently
  • You're not so sure about how to do it from scratch
  • You're not sure you're aware of all the edge-cases
  • You need a generic solution

Just Google for "MY FRAMEWORK - WHAT I WANT TO DO" and see what it has to say.

| improve this answer | |
  • 1
    I would add "someone else has probably had this problem before". – Jeremy Nov 22 '11 at 15:18


How do you learn to play piano and guitar? How do you learn French and Spanish? How do you excel at football and soccer?

Anytime you're learning two distinct but related things, there are at least two important aspects to the process. The first is to learn and practice each thing on its own. The second is to look through that thing to the deeper, common body of knowledge, and to appreciate the thing's relationship to that knowledge. With piano and guitar, that knowledge is obviously music. Once you have a solid understanding of music the process of learning a third or fourth instrument becomes easier. The same is true for languages, sports, and even object oriented frameworks.

Most any object oriented application framework will have a set of data storage classes, a set of classes representing things that are drawn on the screen, and some way to make those two groups work together. There will be inheritance hierarchies, containment hierarchies, and command/control graphs. There may be classes for modifying other classes, communicating with the world beyond the framework, and so on.

These common features are called design patterns, and they are the deeper knowledge behind object frameworks. Each one has a name (sometimes several), and most of the well-known patterns are catalogued in the book Design Patterns. It can be difficult to learn about patterns in the abstract, just as it's more difficult to learn music theory without the concrete experience that comes from playing an instrument. Once you've gotten some experience with one or two frameworks, though, learning about design patterns leads to a string of "aha!" moments as you recognize the patterns you're reading about in the framework(s) that you already know.

So, keep at it, look for commonalities between the frameworks that you're learning, and at some point spend some time learning about the patterns behind the frameworks. That knowledge will give you a deeper understanding of what you already know, and it will also guide you and help you know what to look for or what you might be missing as you learn a new framework.

| improve this answer | |

You keep solving problems with the framework in question.

That's about it.

(IMO you don't really learn a language in a month, either, but that's a different issue.)

| improve this answer | |
  • "you don't really learn a language in a month, either" - depends on what you mean by language. Fundamentals can be learned in a week (as I did with PHP and Python), while the libraries will take much longer, and you'll never get them completely memorized anyway. – Izkata Nov 22 '11 at 20:32

It is easy to both trivialize and overstate this problem. What you've discovered is a basic truth. Learning Java or C# or Ruby is not very much about learning that language syntax.

You also need to understand:

  • Platform characteristics and capabilities
  • Standard Library
  • Extended Library
  • Fashionable tools and frameworks
  • Style, conventions and idioms

Memorization is not important at all but you need a broad understanding of all these characteristics with pockets of specific or deep understanding to be considered a senior developer of that platform and it takes time to reach this level. Time spent developing but also reading other people's code, books, blog articles etc. You can't learn it all upfront and you can't Google it all as you go either.

| improve this answer | |

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