views:

86

answers:

6

While many ask questions about where to find good books or tutorials, I'd like to take the opposite tack.

I consider myself to be an entry-level programmer ready to move up to mid-level. I have written code in c, c++, c#, perl, python, clojure, vb, and java, so I'm not completely clueless.

Where I see a problem in moving to the next level is learning to make better use of the literally hundreds upon hundreds of libraries available out there.

I seem paralyzed unless there is a specific example in a book or tutorial to hand-hold me, yet I often read in various forums where another programmer attempts to assist with a question. He/she will look through the docs or scan the available classes/methods in their favorite IDE and seem to grok what's going on in a relatively short period of time, even if they had no previous experience with that specific library or function.

I yearn to break the umbilical chord of constantly spending hour upon hour searching and reading, searching and reading, searching and reading. Many times there is no book or tutorial, or if there is, the discussion glosses over my specific needs or the examples shown are too far off the path for the usage I had in mind or the information is outdated and makes use of deprecated components or the library itself has fallen out of mainstream, yet is still perfectly usable (but no docs, books, or tutorials to hand-hold).

My question is: In the absence of books or tutorials, what is the best way to grok new or unfamiliar libraries?

I yearn to slicken the grok path so I can get down to the business of doing what I love most -- coding.

+2  A: 

Give a good programmer a manual and they can figure it out quickly. It is not reading books or tutorials that makes you a good programmer, it is actually programming. Practice. You want to be better and learn better, write more code. Set small coding goals or think of a simple application to make. The more you write while looking up syntax in books and tutorials, the more those syntaxes and practices will "click." The reason many are able to "grok what's going on in a relatively short period of time" is because most programming is just syntax.

I'll give you a personal example. I picked up a book on Objective-C to figure out iPhone development. Sat there reading it all last summer. Didn't know squat when I sat down to write the application I designed up in Photoshop. Sure, the ideas are up in my head, but I did not have any practical knowledge to execute them yet. At first the syntax was extremely confusing to me, but I have a lot of experience with programming in general, animation, and UI design, so once I "memorized" the syntax, the code started flowing more naturally. Now I can write Obj-C pretty fluidly without a manual and have better understanding of what task will be difficult and what will be easy.

Typeoneerror
Actually, this advice can be applied to any field.
Typeoneerror
Great answer. Your first sentence is what I've seen. If I understand correctly, you're saying to first get the 10,000 foot overview of how the syntax works before getting bogged down in the specifics?
Kawili-wili
Kind of...but more learn general programming flows/conventions/code and you can apply them to ANY syntax. The more you code/experiment/work with different languages, the more the commonalities b/t them become obvious.."programming."
Typeoneerror
I hate manuals usually, but love S.O. (usually).
Hamish Grubijan
A: 

The bet way to learn without books is in my opinion to start programming. Solving the problems which are facing you will teach you how to use the library.

David
+1  A: 

Libraries provide developers with a domain specific set of concepts with which to solve problems, not unlike natural (spoken) languages. The similarity is deeper than that: the same way knowing more natural languages makes it easier to pick up a new one, experience with more libraries eases the transition into using a new one. There's no magick bullet here: the more experience you have, the faster you progress because you can anticipate what using the library to solve the task might look like.

That aside, these are the things I find help when picking up a new library:

Tomislav Nakic-Alfirevic
It took me a few reads to grok the comment about "natural languages." I guess if I were leaning a new verbal language it would be helpful to pay attention to patterns of conjugation. I hadn't thought of it that way for programming. Thanks.
Kawili-wili
A: 

If you want to inspect or search or learn a .NET assembly - Reflector. Its free, and very powerful.

http://www.red-gate.com/products/reflector/

Kris Krause
+1  A: 

My question is: In the absence of books or tutorials, what is the best way to grok new or unfamiliar libraries?

How about doing what you just did: asking a question here on StackOverflow? From my experience, questions of the type "how to do task A, B or C using library X" get answered fairly quickly, especially if they are beginner questions, and no matter how esoteric or outdated the library might appear to the questioner. In fact, on several occasions I have witnessed such questions being answered by the developer of the library himself.

Even if a library seems to have "fallen out of mainstream" quite a long time ago, chances are that there are still a few people here on SO who are using it or have used it at some point in the past.

Most importantly, you no longer have to "spend hour upon hour searching and reading [...] discussions that gloss over [your] specific needs, or examples [that] are too far off the path for the usage [you] had in mind", because you can tailor your question here on SO to your very own personal needs.

RegDwight
Being a new poster to SO, I will take this advice. Thanks.
Kawili-wili
+1  A: 

Why would you assume that the other "fast groking" programmers haven't previously had their hands held by books or article?

It's called learning curve for a reason. If you're an entry-level programmer there's much you haven't seen. As time goes by and you spend more time coding and learning, you will be exposed to more recurring concepts. In future projects you'll skim through those to only focus on the specifics of interest.

Learning is a skill to be developed. In your case you're still working at it. Any skill requires practice, patience and perseverance. Just trust that if you keep at it, you will get better.

Also, there's absolutely nothing wrong with wanting to have material introduced formally. People learn in different ways. Some are comfortable with going through an incremental trial and error process, while others spend quite some time researching to implement once and right. You could simply be the latter type. Ideally you want to be able to balance a bit of both traits.

trust that the time spent reading all that material eventually gives you an edge. It's not always immediately apparent, but hours spent reading the fine prints ultimately will give you a better general perspective. Chances are that you won't quite be able to apply all of it right away, but at least you'll know it's there and needs to be revisited at a later time.

mike
I hear ya. When I worked on the hardware side, I couldn't read a schematic to save my life. One day, someone explained it to me from a different angle -- insta-grok. After that, show me a schematic, even if I hadn't seen the product before, and I could grok it pretty quickly. I guess I'm still searching for that aha moment on the software side.
Kawili-wili