Take the 2-minute tour ×
Personal Productivity Stack Exchange is a question and answer site for people wanting to improve their personal productivity. It's 100% free, no registration required.

I keep on reading blogs and tweets about how somebody just sat through few days, learned a new technology and hacked together a new project in a weekend. It is simply unfathomable for me. I recently was studying WPF and it took me a whole of 3 months to get a good understanding of some basics and almost two projects to appreciate it.

I am currently trying to learn Angular and getting into understanding a project in Javascript/PHP. It seems to be taking forever (2 months and counting) and I am just starting to understand the basics. How do people learn and do things so fast? Or am I slow or is there any technique by which I can also improve significantly my speed of learning?

Thanks...

share|improve this question

migrated from programmers.stackexchange.com Aug 19 '13 at 13:57

This question came from our site for professional programmers interested in conceptual questions about software development.

19  
hacking together something quick is easy, mastering the tech (and related idioms) takes ages –  ratchet freak Aug 19 '13 at 13:46

14 Answers 14

up vote 29 down vote accepted

A solid foundation in computers and more specifically in software development allow people to ramp up on new projects and technologies rather quickly. Principles remain the same from language to language, it's more or less the syntax that changes.

It sounds like you might still be learning these foundations, and that takes time. Once you've got 'em down (a few years of self teaching?) you'll be able to swap in and out of technologies like learning to drive another car.

share|improve this answer
1  
Can you suggest a few pointer and books which would help me learn the foundations? –  Manoj Aug 19 '13 at 14:03
1  
@Manoj:Just keep doing what you are already doing, after you have learned the next 10 technologies, picking up the 11th will be a lot faster than it is now. –  bjarkef Aug 26 '13 at 11:32

You have passed the first level of the Dunning-Kruger effect:

The Dunning–Kruger effect is a cognitive bias in which unskilled individuals suffer from illusory superiority, mistakenly rating their ability much higher than average.

This means you are lucky enough to be in a position to actually learn something about the framework you're studying. It's my duty to tell you that it's going to get much worse before it gets better, and there is very little you can do except to continue what you are doing.

It looks like I can pick up a framework or language in a weekend, I can't. It took me about 2 years to learn the skills I needed to pick up a framework or language in a weekend, and another 10 to learn how to apply them in a weekend with any framework or language I don't know. Notice I say or. with a framework and language it will certainly take longer than a weekend.

I recently built something with AngularJS, it took me about 1 minute between reading the first example to creating the "hello world" then I stopped reading the examples and started building the application, the building blocks (knowledge + experience) I needed to be able to pick it up were:

  • Object Oriented Programming
  • Design Patterns: Factories, Singletons, MVC, etc...
  • javascript, json
  • HTML/XML/XPath
  • Security Models
  • Templating
  • Networking
  • HTTP
  • Bug Fixing
  • Debugger Tools
  • Code Reading
  • etc...

I can honestly say I don't know AngularJS very well, even though I have now built some cool stuff with AngularJS and can answer interesting AngularJS questions on StackOverflow. I do know the building blocks that I need to be able to build something with AngularJS, many of them I've used for over 20 years.

share|improve this answer

The reason for this is because some people use technology rather than learn it.

Learning the nuances comes later when knowing the finer details is wholly necessary. They may be more pragmatic and perhaps top down thinkers who work from the highest level goal, organise it into subtasks and then have much simpler tasks to solve, which is just a matter of getting the language to do what you require of it.

For this reason it is important to learn by doing, reflecting, theorising and planning together. Train your brain by performing the activity, and while you are dealing with certain problems you will find it easier to learn the nuances of a language because it relates to an actual experience (unless you're the type of person who can just sit down and read 1000 page manual and suddenly understand everything about the language without ever having developed the necessary experience).

share|improve this answer
6  
+1, I don't think there's a (good) programmer out there who hasn't gone back to their old work and thought, "What the hell was I thinking, this is a stupid way to do that!" –  Izkata Aug 20 '13 at 3:06

A large part is simple experience. New technologies borrow from and build on old technologies. After a while you only really need to learn the differences.

The other big factor in quickly learning new technologies is getting better at figuring out what you can safely ignore. School conditions you that each individual should understand every detail of every project. Angular is the result of years of effort by hundreds of people. No one has a perfect understanding of it. If you insist on understanding it as well as you understand a project you built yourself, you will never feel comfortable.

So start out with the tutorial, then build as much of your own app as you can using only what was covered in the tutorial. Then pick one thing you'll need that wasn't covered in the tutorial and figure out the easiest way to make it work, ignoring any extraneous information. Don't try to build the perfect app at first. Do the minimum amount of work necessary to get something working. As you learn more, you'll discover there are better ways to do some things you did earlier, and you can go back and refactor them.

In other words remember Voltaire: "Perfect is the enemy of good."

share|improve this answer

How many different technologies do you know? If it is less than 5, then part of the issue here is simply that your breadth is likely a bit low and that could be overcome by going through a few years of trying several techniques to see which routes work in getting the basics. Think of those people that speak more than a few languages fluently. Chances are they spent years learning those languages and some time keeping their use of the language which may be something for you to consider here.

Keep in mind that someone may get a project done but not fully understand that. Consider this question for a moment: Do you know all the words of the English language? Probably not yet you use the language as a way to communicate with others, here if nowhere else. Thus there is something to be said for what is that line between getting something working and really understanding all the pieces behind it.

Do you know what learning styles work best for you? Do you know which ways may simplify learning something so that rather than read an entire book, you read the few dozen pages that has what you really need to get something done? This is part of how people can learn some things quickly is that it is presented in a much easier fashion.

share|improve this answer

I'm just going to add a dimension to several of the answers above.

I asked a musician friend who was playing in a cover band how he could learn and remember his part in so many songs so quickly (including both singing and guitar playing of various types). This was a diverse American pop and Polish immigrant favorites cover band, and they were always learning new songs. He told me that fter you've played enough, you know all of the moves, so to speak. You know what kind of patterns are likely to be played in what order, and you're just mixing and matching them in different ways, so it's easy to remember.

Learning programming languages and libraries is like that. When you've been doing it long enough, you know the finite set of things that a language or library designer is likely to put into the package if they have any sense, and it becomes easy to guess how things will be done. In essence, you learn which choices were made from a menu you already know, and then you learn the exceptions--the quirks of the package, which might have to do with novel functionality that it's trying to implement. For libraries, it also helps if you are already familiar with the concepts of the domain for which the library is designed. For example, it's a lot easier to learn a library for credit card processing if you already know a different credit card library.

The exceptions to this pattern occur when a language depends on a paradigm that's unfamiliar to the experienced programmer, as when someone who's always done procedural programming learns an object-oriented language, or when an object-oriented programmer switches to a strictly functional programming language. Or when learning something that was intentionally designed to thwart programmers' expectations, like so-called esoteric languages.

share|improve this answer

A lot depends on what you mean by understanding, there's a difference between someone who can knock up a "Hello World" application and a seasoned professional with 10 years experience.

Personally I find videos incredibly helpful to understand the very basics quickly, moving on from that structured moving through a book written for my learning style helps - but that does take time and must be spaced out learning to allow for it to sink in.

share|improve this answer

It depends a lot on the person, the type of technology, the person's background, and what level of mastery your seeking.

Learning basic C#/.NET from a solid Java background can be done within a weekend. (Some say it's a bit of a relief.) However, mastery of .net including a solid understanding of the underlying CLR takes much much longer.

The type of technology you're learning also has an impact. Even for C++ veterans, wrapping your head around the intricacies of template metaprogramming can be challenging.

A person with a solid CS understanding and who can literally spend days going through the books is going to learn "faster" than those who seem allergic to newer versions/languages.

That said, I'm not sure your level of WPF mastery or the amount of time you've spent, but relatively speaking, WPF is significantly easier than the historic C++ MFC counterpart. For the markup portion of WPF which is straightforward and in part designed for UI devs(graphic designers), you should be able to "get off the ground" within a week.

share|improve this answer
1  
I should say more than WPF, it was the MVVM pattern that I started really appreciating as I had to make changes few months down the line. But the initial "get off the ground" and use it in the project certainly took 2 months. –  Manoj Aug 19 '13 at 15:05

If you find that what you're learning seems to be slipping just as quickly through your fingers before you feel it has sunk it and/or you've had a chance to apply it, I highly recommend using an SRS (spaced repetition software) like Anki or Mnemosyne. They use something called the Spacing Effect.

Personally, I used it to study for my last IT certification, and was amazed at the difference vs winging it. It reduced the time I needed to study, and pinpointed my weak areas quickly.

I'll echo many of the other respondents to this question by saying that you shouldn't be afraid to dive in head-first and pay not attention to some random other person who built something seemingly magical in a weekend - you have no idea what their prior background really consisted of.

One last recommendation that I've found works for me when it comes to programming is to ensure I really understand even the most basic concepts by writing 'micro programs'. For example, if I wanted to fiddle around with some language's echo function, I'd write a 2 or 3 line program that only performed 'echo' things, and I'd toy with that for a while until I felt I had a solid grip on it. Once there, I could start wrapping 'echo' functions into my larger programs with high degree of confidence.

Good luck!

PS> If you're interested in reading some fantastic articles on SRS, check these articles out: http://www.wired.com/medtech/health/magazine/16-05/ff_wozniak?currentPage=all http://www.jackkinsella.ie/2011/12/05/janki-method.html

share|improve this answer

1)Have a passion to learn the technology so that you won't get distracted from other things and you won't allow yourself to postpone the activity.

2)Associate or analyse or compare the new technology with technology that u learned earlier.

3)don't just study all the time.work out some samples while u learn it bcuz it gives u confidence and develops interest on what you study..

Just keep in mind

Talent and effort nothing without the focus and determination.

share|improve this answer

I answered already, but here's a completely different one, also based on an analogy. I studied an area of math very slowly, because I wanted to make sure I thoroughly understood every concept and every line of every proof. I'm sometimes not very good at everyday applications of this kind of math. I can be slow and make mistakes on problems that others answer instantly. But I understand the concepts much, much more deeply than some of those people do. I can do things that require that deeper understanding, when some of the people good at routine applications can't do anything. (Neither kind of knowledge is necessarily better; they have different benefits.)

It's possible that you take a long time to learn packages, but when you do, you know them very well and can be more productive, while others just know enough to get by.

And there are also different kinds of productivity. Sometimes the fastest programmers write code that's impossible to maintain. They get the job done quickly, but they, or more likely others pay the price later in time spent trying to figure out how to modify their code without causing problems. Maybe you're learning the right way to program with new software, rather than just hacking something together that's likely to break or be difficult to maintain.

share|improve this answer

What I'm saying might be a combination of all of the above, but here's my method:

  • Look at basic tutorials to understand the underlying concepts
  • Look at examples and try some of your own
  • Try making something of your own using the technology (By copying code snippets).
  • While pasting the code snippets, make sure you understand every line (this is where it goes wrong)
  • Stop copy pasting code after a while, so as to remember the syntax
  • Get to a point when finding a code snippet to copy paste would take be more work than writing it yourself.

No matter what technology you are trying to learn, You will always keep learning more about it. So there's no point trying to learn all of it at once. It's better to learn in small usable bite sized pieces.

And ofcourse using those pieces progressively also helps you learn.

Last but not the least, being excited about what you are learning also helps in learning faster.

P.S. you are not going to pass any certification exams this way, but you would have a working knowledge of it.

share|improve this answer

Take your time understanding what you are doing. It will be more beneficial to you and your boss if you take the time and learn. Learn it and own it. None of us ever stop learning.

share|improve this answer

I don't know if this would help, but when I was little, they wouldn't allow me to touch things especially things like VHS and computers without the supervision of an adult because they said I was too destructive. When I got to high school, I was so clumsy with computers although I can already navigate around a little. I don't even have the slightest idea about HTML, CSS, networking, etc. So who would have thought that I'll be a programmer today! And I'm absolutely loving my job! This is all thanks to curiosity which turned into passion. And yes! It's about actually using the technology as what Mr. Keldon has said.

P.S. Do not be afraid.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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