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 have my ideas, but I always feel that I'm overly pessimistic. So I'd like to hear more opinions.

How much time do you need to start coding using a new framework so that your code is production ready and not become a support nightmare later on for:

Say large scale frameworks:

ATL/MFC/STL/WTL/.NET/COM/BOOST

And small scale frameworks/APIs:

MSXML/Silverlight/ADO/LIBXML/WIN32/OpenGL/DirectX/CUDA

What are your estimates for both types, [from;to] for both senior/junior developers.

Any ideas on what can decrease the learning time say: Book>API doc, or Tutorials>Book

share|improve this question

closed as primarily opinion-based by Jim G., Kilian Foth, BЈовић, Bart van Ingen Schenau, GlenH7 Feb 28 at 19:06

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.

3  
I certainly would not consider Silverlight and DirectX small scale frameworks. –  Ramhound May 2 '11 at 13:13

2 Answers 2

up vote 1 down vote accepted

Base the amount of time relative to the risk level of the application. You've probably considered this when deciding if you should use it at this time or not. If you're working on an small in-house app, you can get away with being less familiar.

I've been torn between trying a new framework/api on a new application or trying to apply it to a previous project. Hopefully, you understand the previous project much better and could plan accordingly. You may not want to put it into production and just use it as a training exercise. Otherwise, learn the new stuff with the idea it will make the new project easier/better/maintainable/whatever.

Research and read as much as you have to, but make sure you take as much time as you can to do some coding with it. Learn by doing.

share|improve this answer
    
Still, the estimates seem pretty tough to get right. Would you give a task to a new developer to work on Boost based, say 3 people, project for half a year if he has no Boost skills at all, but good C++ skills? Or .NET project of the same size if he's a C++ programmer. On paper technology might sound nice, but can you expect a quality product with beginner developers in such cases? Are there any indicators when can you fit the technology change in a project, like - programmer can write fizzbuz in 2 minutes without API lookup? What are the quality/risk indicators to look for? –  Coder May 2 '11 at 13:34

Time and effort in learning a new skill set depends upon two things.

  1. Transferable skills: We tend to overestimate these.
    For example, I know jQuery but would like to learn YUI. In that scenario my knowledge of DOM, Javascript, CSS, Firebug, and HTML is all transferable knowledge. However, the structure, documentation format and usage of YUI will be completely unfamiliar to me. And this brings me to my second point.

  2. The effort curve: I have come to understand it as somewhat like a normal distribution curve. Getting-to-know phase is not that steep, then doing something useful gets harder and harder and stays that way for a long time, we tend to underestimate this part.

For example, I can write a HelloWorld-type programs in ten new programing languages that I have never used before and will still have free time left in the day. This first phase is very misleading because of its high rate of learning, so beware. My recent experience of switching from ASP.NET MVC to Ruby on Rails made me think real hard about all this stuff. It took me almost a year to be productive in Ruby on Rails and that too after putting in lots of effort.

The frameworks you've mentioned are quite large. For example, in case of Silverlight you'll have to understand the ideology of code-behind, multithreading (which is a must in Silverlight), and WCF.

If you are a student, focus on your coursework first. Choose technologies advised by your professors. Time and energy is a limited resource. Too many students make the mistake of not concentrating on the boring core Computer Science courses and keep playing with hot technologies just for the sake of it. This interest lasts only for the first phase and once things starts to get difficult, they jump to another hot technology and it goes on.

share|improve this answer
1  
This is a bit of a wall of text and I'm having difficulty trying to follow it in its present form. Could you edit to break up the points you are trying to make for easier reading? –  MichaelT Feb 28 at 5:43

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