Most of you are great hackers. How do you determine that you have command of a particular language?<p>What kind of problems/ projects you take up while learning a language. I have read on yc that a lot of people start with a project after a quick refresher and learn the language on the go. Are there any standard problems that you attempt to solve?<p>I've been trying to learn Python but feel a lack of direction and an inability to assess my progress.<p>Please share your views.
I think I have command of a language when I can write something from scratch without spending much (if any) time in the docs looking up things.<p>How many languages have you learned before Python? The first is always hard, and the second is always the worst, because it's the first time you have to think above the level of syntax, but after that it's much easier. By the time you get around to learning number nine, all you have to conceptualize are the diffs with what you already know, which is a much smaller learning curve. So, to summarize, it gets easier with each one you add to your repertoire.<p>As for problems, I just start with the current one. I usually learn new languages because it seems well suited to a problem I have for some reason. Right now I'm really interested in parallelism, so I'm learning Erlang. I'm working on writing some kind of REST ROA stuff with it (and Yaws), for fun.
When you can start thinking the problem through in the syntax of the language before you sit at the computer, odds are you've got a pretty good grasp of it.<p>You usually can't think the language if you're still referring to manuals/internet over 50% of the time for syntax/understanding.
I find that you really just need to find a problem that I myself am interested in solving.<p>As part of the process of completing the project all kinds of problems will come up simply due to the fact that you don't know the language; and you know what? You just solve them and carry on and before you know it, suddenly you're just writing in the language without thinking.<p>The idea of solving standard problems to me does not appeal, but only because they sound like textbook exercises, but really whatever does it for you.
If you can handle multi-threaded server code as well as client UI code, you are very much good in that language. but the important measure is not a particular language, rather your knowledge of algorithm, oo concepts, design pattern, etc. And some languages are a must. i.e sql
I'm practicing Python while solving problems from Project Euler. I think it is a really efficient way to strengthen your LANGUAGE skills. Try very hard to re-write your solutions in an elegant and clean way.
I think this is related closely to another popular question: how do you determine that someone <i>else</i> has command of a particular language?<p>I think the point that I would pick is when you start feeling constrained by it. If you start wanting to do things the language can't do, or can't do well, and you can explain <i>why</i> it can't do it well, then you have explored pretty much all of it.<p>That's why my favorite interview question is "So you're applying to program in FOO. What's something you hate about FOO?"
I really need to write several small or one moderately sized project in a new language to get the feel of it.<p>I've been trying to learn Python and Lisp without any real project to hone my skillz on, whereas with other languages I actually had projects that sort of guided me.<p>So I suggest finding a project that can be written in the language you want to learn, and start writing it.
When you're first leaning languages, "command" of a language probably ends up being defined as a solid working knowledge of the syntax.<p>However, the real deal is when you understand the solution pattern suggested by the language. When you start to break down problems into objects, functions, or types before you even touch a keyboard, then you've really gotten somewhere.
"How do you determine that you have command of a particular language?"<p>When you're answering more [newsgroup|mailing list|forum] questions than you are asking.<p>(And both are good ways to attain command of a language.)
I think it's about the <i>flow</i> e.g. you're in the flow if you can arrange the whole thing in your head(i.e. developing a habit of thinking in a language), you don't have to look to manuals and most importantly if you can reflect upon the language (at least I've observed this pattern among great hackers I admire). You can do amazing things if you achieve the <i>experiential-mode</i> but as I've observed people that I admire it's the <i>reflective-mode</i> that takes you to the next level.
Skip the learning phase, go straight to useful work. Sometime ago I had to render some maps with Mapnik (<a href="http://mapnik.org" rel="nofollow">http://mapnik.org</a>) which is driven by Python scripts. I didn't know any Python, so I just pasted an example from the 'net and started reworking it to suit my needs, experimenting and reading docs whenever I got stumped. Quickly picked up enough Python to write my own scripts, solve other tasks. For me it's the only way to learn.
Speaking of python, have you tried applying your skills using a framework like django? That might be a good way of understanding how much comes naturally, and how much doesn't.
Reading other people's code can be a good way to assess command of a language. I've needed to dig into a number of Python packages over time, and have found it quite noticable how much more quickly and completely I'm able to grok such code as my command of the language increases.
a possible answer would be "when I've code that someone outside my
team is using." Deliver a web app, a library, an interpreter, a game,
and it's reasonable to say you're over the hump.
Ask the poor sucker who has to maintain your code if he thinks you have command of that language. If he says yes, then good for you. If he doesn't, then find out why not.