What do you count as actually knowing a programming language? Being able to write more than "Hello World!" or a program that counts to 100? Post what you think it means Smile
If I can use a language to create something, and that, given some assignment, could easily figure out how to do it. Then, I consider that I know a programming language. I actually consider a few levels of 'knowing'. I 'know' C in the fact that I can use it. I 'know' Java in the fact if given an assignment, I could program in it with just a few classes that I didn't know about.
being able to port WRFNG into that language instantly makes you a god Razz

but seriously, I would say knowing how to create a simple calculator in a language would mean you *know* it


EDIT: NOOO! graphmaster posted before me!
I don't think it's either of those. I think when you can do the following two things, you "know" the language:

1) Given a chunk of source code, explain what it does, as long as you're given a reference of the arguments to functions you haven't see before
2) Given a fairly simple assignment to implement, implement it with minimal reference to function indexes and syntax references.
ok, fine, my example means you are at least slightly competent at the language Smile
A simple calculator doesn't even begin to address some of the more complicated parts of a programming language. I like what Kerm said, though I still don't think that necessarily covers it. I'm not really sure what would. Personally, one of my the first things I do in a language to feel more comfortable with it is make Conway's Game of Life. It teaches you multi-dimensional arrays, graphical output (if applicable), user input, nested loops, and conditionals. It's not really enough to "know" the language, but it helps me feel like I've got a good foundation.
personally, i would consider someone to really "know" a language only when he can come up with an idea for any given program, without modifying it to fit his own skill level, and (assuming that he has sufficient time and motivation and the program does not require specs that are outside the capabilities of his hardware/language used) can implement it without outside assistance

i also like Kerm's requirement of being able to decipher the intention of someone else's source code, however
Merth, that's a good idea for a benchmark of a specific example program.

shmibs wrote:
personally, i would consider someone to really "know" a language only when he can come up with an idea for any given program, without modifying it to fit his own skill level, and (assuming that he has sufficient time and motivation and the program does not require specs that are outside the capabilities of his hardware/language used) can implement it without outside assistance
I might consider that being fluent in the language; I think there's a difference between knowing the language and being fluent, but that's personal preference on what distinctions to make, I guess. Smile


shmibs wrote:
i also like Kerm's requirement of being able to decipher the intention of someone else's source code, however
Thanks.
Implementing it without outside assistance is very very beyond just knowing the language. I find myself googling all sorts of things in Java, C++, and even C#. In fact, that's an amazing programming skill to have: figuring out if someone else has done it; and if they have, using their library if you can.

The code-reading ability it definitely way up there on the things-you-should-be-able-to-do-in-a-language-on-your-resume list.
To know a language means:
1) You have a solid understanding of the syntax and it's gotchas. For example, in C you understand what pointers are, how memory is allocated and freed, the difference between stack and heap allocation, etc... For something like Java, you understand the difference between == and .equals, etc... More importantly, you can *explain* it to someone else.

2) You are familiar with the standard libraries and the common libraries. You have a good idea what is and isn't available, regardless of whether or not you can use it without reference documentation. Memorizing the APIs is completely useless, and being able to code without referencing the APIs is likewise a useless skill. Instead, what is important is that you know what is available, even if you don't know the specifics.

3) You understand what the language is and isn't good for. You are aware of it's limitations, even if you don't fully know them. For example, you understand that if someone suggests creating a GUI application in Java, that you should stab them in the eyeball. Likewise, if someone suggests writing performance critical code in Python or LUA, a swift kick in the nuts is the appropriate response.
I like the definition overall. To stress:
Kllrnohj wrote:
2) You are familiar with the standard libraries and the common libraries. You have a good idea what is and isn't available, regardless of whether or not you can use it without reference documentation. Memorizing the APIs is completely useless, and being able to code without referencing the APIs is likewise a useless skill. Instead, what is important is that you know what is available, even if you don't know the specifics.
That's exactly what I think, which is why I gave my definition the caveats that I did.
Kllrnohj wrote:
More importantly, you can *explain* it to someone else.
I think this a very important point. Being able to explain something shows you understand it, and explaining it can often help you understand it even more!
There are different types of knowing IMHO, you can know how to make a simple program, and not all of the possibly functions, but a simple program is a basic understanding. Also, in a sense truly knowing everything of how a programming language works, and all its possible functions is "knowing 100%" is impossible, because you never can guarantee there is something someone else figures out you didn't think of, therefore knowing is just being able to use it for your needs.
Sonlen wrote:
There are different types of knowing IMHO, you can know how to make a simple program, and not all of the possibly functions, but a simple program is a basic understanding. Also, in a sense truly knowing everything of how a programming language works, and all its possible functions is "knowing 100%" is impossible, because you never can guarantee there is something someone else figures out you didn't think of, therefore knowing is just being able to use it for your needs.
Sure, but I think knowing enough to explain a program, even if it's not your own, and be able to synthesize a program and demonstrate an understand of the language's structure, function, libraries, and limitations is far from being an expert approaching anything near 100%. Smile
KermMartian wrote:
Sonlen wrote:
There are different types of knowing IMHO, you can know how to make a simple program, and not all of the possibly functions, but a simple program is a basic understanding. Also, in a sense truly knowing everything of how a programming language works, and all its possible functions is "knowing 100%" is impossible, because you never can guarantee there is something someone else figures out you didn't think of, therefore knowing is just being able to use it for your needs.
Sure, but I think knowing enough to explain a program, even if it's not your own, and be able to synthesize a program and demonstrate an understand of the language's structure, function, libraries, and limitations is far from being an expert approaching anything near 100%. Smile


Which is why I said knowing 100% is impossible.
Sonlen wrote:
There are different types of knowing IMHO, you can know how to make a simple program, and not all of the possibly functions, but a simple program is a basic understanding. Also, in a sense truly knowing everything of how a programming language works, and all its possible functions is "knowing 100%" is impossible, because you never can guarantee there is something someone else figures out you didn't think of, therefore knowing is just being able to use it for your needs.


No it isn't. Languages have specifications. A function I write is not a part of the language. It is completely possible to 100% know a language. Typically there is no point to that, unless you are working on the language specification itself.
I know how to program HMTL. Can I haz be 1337 nao?

Kerm takes it up the butt
Kllrnohj wrote:
No it isn't. Languages have specifications. A function I write is not a part of the language. It is completely possible to 100% know a language. Typically there is no point to that, unless you are working on the language specification itself.

Don't be pedantic or silly. There is more to a language than the syntax. Knowing all the declensions and conjugations in the world won't help you in a conversation with the cute french girl at the bar during your semester abroad without a working vocabulary. The same holds true for computer languages and coding efficiency/job-worthiness.
I consider knowing a language being able to make it do whatever you want, outside of obvious system limitations(I'm not going to get PHP to do a Direct3D game, for example, but I can make it stream rapidly changing PNGs out of a database to a client.)

It doesn't even really matter if you know all the prebuilt functions or not, that's almost impossible with modern languages. I constantly am googling for the parameters of some function or object when working on a program.
Netham, but the point is that you have a vague idea of what the libraries and functions exist. You know that PHP uses the GD library to manipulate those PNGs, and how it imports, modifies, and publishes images to the filesystem or client. I consider being able to sketch out that framework in your mind, code it out, and look up the arguments and exact names of the GD image functions as knowing it (especially with PHP's very inconsistent function naming).
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 2
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement