I always thought of a fairly sizeable project that I'd like to tackle, and dove into it with the new language I wanted to learn. Something like a full blown editor, an interpreter, a big scientific Monte Carlo calculation, an Emacs extension, or a database. A big project will ensure you encounter numerous stumbling blocks that really make you think about how to accomplish things in the language you are using. You'd never think of such things if you just sat down and thought, what meaningful thing can I learn about this language today?
Also, you should try to understand what the *best* way to accomplish each task *in* *that* *language* is. It's more important to understand how the language shapes the solution to the problem than it is just getting some solution to work. Anybody can hack a solution in new language B that looks just like the solution they wrote in old familiar language A - you've only mastered language B when you understand the idioms of that language. For example, when learning A+, a vector and matrix oriented language, I initially wrote many C style loops, because in C that's how you apply a simple operation to a sequence of values. I eventually learned to use all the vector operators to replace the iterations, and knew I was getting it down when I started to think in terms of vector and matrix operations rather than iterating over scalars. I've successfully applied this approach to learning FORTRAN, C, A+ (I maintain the Debian package), C++, Scheme, Emacs lisp, and now Perl. Some of those sizeable projects have never been finished, but significant portions have been done several times over in multiple languages! You phrased your question in terms of languages, but when I interview people for programming positions, I generally do *not* ask very many language specific questions, I ask questions that explore more abstract thinking and logic. I think a guru is someone who knows the language independent abstractions of computer science as well as being an expert in multiple languages. So learn those, too. Read about algorithms, data structures, design, and compiler construction. Learn how to break a problem down into its fundamental components. This is a key differentiator - the novice sees a big, complicated problem and writes a big, complicated program; the guru sees a set of smaller problems for which he writes a set of simple, elegant modules that can be independently tested and then applied together to solve the larger problem. That was fun, thanks for asking :-) On Mar 20, deFreese, Barry ([EMAIL PROTECTED]) wrote: > OK, so this is going to be somewhat of an esoteric question but.. How did > you really delve into development and what is/are your sources of > inspiration. I am trying to dive head first into Python/Perl?/C/C++ and > while it's easy enough to write the "Hello Worlds" and CD-catalog programs > :-) how did you move beyond that. > > For example. I see a lot of questions on debian-user about configuring IP > addresses, so I thought, hey I'll write a quick Python app to configure > /etc/interfaces and /etc/resolv.conf. Of course doing an apt search > produces etherconf, linuxconf, and several other utilities for configuring > interfaces. Would you write the app anyway just for the experience?? How > did you get from the middle ground to guru-dom?? Or is the answer that if I > need to ask, I will never be a hacker!!?? :-) > > Thanks!! > > Barry deFreese > Technology Services Manager > Nike Team Sports > (949)-616-4005 > [EMAIL PROTECTED] > > "Technology doesn't make you less stupid; it just makes you stupid faster." > Jerry Gregoire - Former CIO at Dell > > > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] -- Neil L. Roeth