Fog Creek Software
Discussion Board

Learning Strategies



I've recently started to learn XML and I was astonished with the amount of data I have to learn! There is XML, XML Schema, DTD, XSLT, XSL-FO, XPath, SAX, DOM, XML Binding, ... There is so much to know in Software Development! Java, Java APIs, EJB, Servlets, JSPs JSFs, .NET, ASP.NET, C#, Python, Jython, Ruby, JRuby, Groovy, PHP... All those frameworks and platforms! Structs, tapestry, JBOSS, Apache, ... Then there are the OSs, DBs, ... So much information!!! How do you cope with all this???

In my college years my learing strategy was to gather the learning material (books, articles, ...) read them and then write a Detailed Review of the subjects, with diagrams, etc.

Now only the "gather the learning material part" scares me! I just look into something in Cetus Links or Google and I get thousands of links!!! This only for one subject, and I want to learn so much subjects!!!

I want to understand how do you deal with this problem. I found this article ( that touches the subject, but only the part of the information management... and it doesn't tell anything about how to manage everything in your head! So, 2 questions:
1 - How do you manage information (do you write reviews, etc.)?
2 - How do you learn it? And at what rate?


Thursday, May 20, 2004

1. I don't manage information.  It's a big anarchic mess, but that doesn't really bother me, cuz life is like that sometimes. Once I learn something I'll keep the knowledge by using it.  If I don't use the knowledge, then there's not really a reason to try and retain it any longer.

2. I learn stuff when I need to.  Mostly, I try to stay abreast of what's available, but I don't worry about learning it now.  All I generally need is enough of an overview so that I know it exists, what in general it does and when it might be appropriate.  When it's appropriate to use, then I learn what I need to use it.

Even with only 4 hours of sleep a night there aren't enough hours in the day to learn everything you might need.

Steve Barbour
Thursday, May 20, 2004

I had a college prof who advised, in order to learn about a subject, reading 25 books on it.

This only works if you can just _read_ the books without having to study them in-depth, though.  (He wasn't a CompSci professor.)

The biggest problems with the wealth of information are figuring out what's good and avoiding getting bogged down and sidetracked.  So far as finding what's good, I try to find as many books as I can from my local libraries, so I have a good two or three weeks to evaluate the book before I decide if it's worth purchasing.  That part is pretty easy, since I can browse the library catalog and request books online without even leaving home; then I just go pick them up when the request comes in.  Where I live, various city and county libraries have formed a big agreement so that having a card from any one, you can check out books from all the others; this makes the book pool quite large.

So far as the getting-sidetracked part, I've found the best thing is to make a schedule, but not a tight one.  If I'm reading a programming book with a lot of information, typing in examples, reading pertinent documentation, looking for relevant web articles, etc., then one chapter per week might be enough; that gives me enough time to finish the chapter itself, read other helpful stuff related to it, and then _move on_ at the end instead of drowning in information.

Thursday, May 20, 2004

Your learning strategies should depend upon....

which information is managing you?

ie.. Can you provide us that information?

Social Programmer
Thursday, May 20, 2004

"There is XML, XML Schema, DTD, XSLT, XSL-FO, XPath, SAX, DOM, XML Binding, ... There is so much to know in Software Development! Java, Java APIs, EJB, Servlets, JSPs JSFs, .NET, ASP.NET, C#, Python, Jython, Ruby, JRuby, Groovy, PHP... All those frameworks and platforms! Structs, tapestry, JBOSS, Apache, ... Then there are the OSs, DBs, ..."

After reading some job requirements, I came to the conclusion that some of them would have been expressed more concisely by:

"Given a set of 2 to 4 random letters of the English alphabet, in any order, the candidate must be an expert in this technology."

I don't have a definite technique, but I just try to stay reasonably up to date and fill the most important gaps. My own interests are a very important factor too since I tend to think, they may or may not hire me but at least I like what I'm doing.

Thursday, May 20, 2004

You don't _have_ to learn any of this. Why not just go for a walk in the sun instead?

Thom Lawrence
Thursday, May 20, 2004

That "sun" should be Sun(tm).


Thursday, May 20, 2004

I find that I learn about ten times as well when I have a purpose or even specific task driving this learning. 

For example, I learned PHP when I had was writing a website that would have taken forever to write in static HTML.  Learning PHP was faster (and a billion times mroe interesting) than tediously writing all the pages, so I had a lot of motivation.

I find that when I try to learn something for the sake of learning it, the knowledge feels much more fleeting, too academic.  To echo the poster above, learn things as you need them .

Thursday, May 20, 2004

I wish we had 30 hours in a day :)

Green Pajamas
Thursday, May 20, 2004

What you describe is information overload, and it's a serious problem in our profession: Feeling an overwhelming need to know everything about everything. Ultimately, you will know very little and everything.

I master technologies on a need basis (and then promptly forget most of the implementation details, though like muscle memory it comes back in no time: I'd do poorly on a quiz about it, but if a need arose I'd remaster it and implement a solution in no time at all), maintaining knowledge primarily of the core superficial information about each technology/platform/methodology (to somewhat knowledgably know if it should be investigated further for a specific task). Indeed, one of the greatest skills is not knowing the information, but knowing how to quickly and efficiently find the information. People who decide that they simply have to know every nuance


Dennis Forbes
Thursday, May 20, 2004

And how should we stop the tax grab Dennis?

(a fellow duped Ontario tax payer)

Thursday, May 20, 2004

Be hardcore application centric in how you relate to information. You only need to know enough about anything to be able to make good google queries.

Begin with what it is you want to achive and let things follow from that. If you dont have a project, make one up. A nebulus intent, like "learn XML" will put you in confusion every time.

If you have clear questions you can find clear answers.

Eric Debois
Thursday, May 20, 2004

Sorry, the Ontario Liberals stole the end of my post above. They needed it to fund some pet projects that ensure they retain the teacher/nurse/senior vote at the cost of my message.

Dennis Forbes
Thursday, May 20, 2004


You should see what the bastards are doing to the once proud Peoples Republic of British Columbia, baaaah! Next time it's NDP ~ at least they admitted to being theives.

From The Salt Mines of BC
Thursday, May 20, 2004

crap ... thieves not theives.

Newbie Speller
Thursday, May 20, 2004

I second eric's comment.  Once your comfortable programming in a couple different languages, and used a few different APIs, there sort of all the same with their own quirks.  I don't even know 1/100th of all the Java or .NET apis.  I still say i'm a pretty good c# and java prorammer.  I just have confidence that I'll figure things out in a timely manner.

Thursday, May 20, 2004

I usually skim over things just in the evening or during lunch. Keep abreast of things. I also always think "this should be possible, how can I do it in/with X" and then I search Google or elsewhere and inevitably I find how it can be done simpler than I expected or a little bit harder.  I once interviewed with a well known person who asked me a question I did not know. When I said I did not know he laughed and said he didn't know either but that's why we have reference books. And did I mention my wiki for storing things.

Thursday, May 20, 2004

90% of new products, APIs, etc. are evolutionary, not revolutionary.  Learn the core concepts and you will then be able to pick up the details of a particular API or product quickly on an as-needed basis.

I don't try to learn about every new product, API, or language.  I do keep up with what's new/hot.  When I run across something that's brand new, I start digging deeper and read more (or experiment) to gain a conceptual understanding.  AOP (aspect-oriented programming) is a good example.  I first read of it about three years ago.  Had no idea what it was or what it meant or what I could do with it.  Today,  while I've not used AOP "seriously", I understand it well enough that I could sit down with AspectJ or Aspectwerkz and start being productive within a couple days.

Of course, learning the idioms, best practices (patterns), gotchas, and whatnot for a particular tool or API or product takes some time.  But that's not difficult.

Should be working
Thursday, May 20, 2004

Learn only what you need to know between 9 and 5 or whatever curls your hair.

Spend the rest of your time doing the important things, like surfing until you can't feel your toes.

Jack of all
Thursday, May 20, 2004

Don't underestimate AI -- let someone's code hold much of the knowledge for you. APIs exist to abstract details. Of course, this means one should find a good api with good docs, because it is important to know the semantics of what one does.

In agreement with others who've responded, I hear compsci is moribund, and that what you'll encounter is some flashy repackaging of old compsci knowledge that hadn't been mainstream before. So skimming in the bookstore cafe or looking at history could serve you well.

Tayssir John Gabbour
Friday, May 21, 2004

*  Recent Topics

*  Fog Creek Home