PDA

View Full Version : Python vs C Sharp.net




AFPoster
Jun 23, 2011, 02:24 PM
I don't know if this belongs here but I am just wondering what are the differences between these two coding languages and what benefits do they offer. I am new to all of this so please dumb it down for me =).



ehoui
Jun 23, 2011, 04:00 PM
Python is easy to prototype behaviors and models.

Google is your friend, though:
https://spreadsheets.google.com/pub?key=p7efJLoHuYE-iw6JxBmpSQg&hl=en

larkost
Jun 24, 2011, 12:16 AM
You might start out by telling us why you are choosing those two languages to compare. One is a scripting language native to *nix systems (MacOS X included), the other is a compiled language (C#) plus a set of frameworks (.net) that is native to Windows. .net is almost exclusively windows (Mono does parts of .net). Both are available on the other platforms, but things get hairy/complicated.

Keeping us in the dark about why you are comparing this just means you get bad answers.

AFPoster
Jun 24, 2011, 07:42 AM
Python is easy to prototype behaviors and models.

Google is your friend, though:
https://spreadsheets.google.com/pub?key=p7efJLoHuYE-iw6JxBmpSQg&hl=en

Thank you for this!

You might start out by telling us why you are choosing those two languages to compare. One is a scripting language native to *nix systems (MacOS X included), the other is a compiled language (C#) plus a set of frameworks (.net) that is native to Windows. .net is almost exclusively windows (Mono does parts of .net). Both are available on the other platforms, but things get hairy/complicated.

Keeping us in the dark about why you are comparing this just means you get bad answers.

Well since I don't want bad answer's I'll fill you in more.

I've been asked to research the two different languages to see if it's possible for a person to know both languages at a Sr. Developer level and be able to code perfectly in both. If one person was an expert at Python is it easy for them to pick up and code C Sharp.net as an expert or are there so many differences that it would take time to become an expert in this language. Basically are they like oil and water.

We have 4 developers on staff, 2 know Python and 2 know C Sharp.net. The C Sharp.net developers say it's impossible for a Python coder to pick up Python quickly, efficiently and in a time sensitive manner as an expert while the Python guys say it can be done (none of this has been tested to prove there arguments so basically I need an answer from a different source aside from these guys).

firestarter
Jun 24, 2011, 07:56 AM
If someone really is an 'expert coder', then a lot of that skill will be in their understanding of computers, algorithms, libraries etc. - and this is all transferrable knowledge that will significantly shorten the amount of time it takes for them to learn another language.

Is the .net being coded as server code, or visual/screen based code? I'd expect screen based code to be a bigger stretch for the Python coders - server based stuff probably more similar to what they're used to.

A lot of language learning these days is about learning which libraries to use - as languages such as Java/C# etc. are heavily reliant on them. Most core languages popular today share a lot of syntax with C as an ancestor, so learning the 'core language' often isn't the problem.

Another thing to think about is that noone these days codes in a vacuum. You often don't need exhaustive knowledge of a language to piece together example bits of code, and alter already existing modules.

I've often seen people 'test' programmers at interview by giving them some gnarly grammar questions. No-one codes from first principles in most business settings - you always modify an existing shell, or similar code (it would just take too long otherwise). So while your C# people may be right that it would take a long time to reach 'expert level', someone who can code well in another language could be productive and useful in a relatively short period of time.

AFPoster
Jun 24, 2011, 08:11 AM
If someone really is an 'expert coder', then a lot of that skill will be in their understanding of computers, algorithms, libraries etc. - and this is all transferrable knowledge that will significantly shorten the amount of time it takes for them to learn another language.

Is the .net being coded as server code, or visual/screen based code? I'd expect screen based code to be a bigger stretch for the Python coders - server based stuff probably more similar to what they're used to.

A lot of language learning these days is about learning which libraries to use - as languages such as Java/C# etc. are heavily reliant on them. Most core languages popular today share a lot of syntax with C as an ancestor, so learning the 'core language' often isn't the problem.

Another thing to think about is that noone these days codes in a vacuum. You often don't need exhaustive knowledge of a language to piece together example bits of code, and alter already existing modules.

I've often seen people 'test' programmers at interview by giving them some gnarly grammar questions. No-one codes from first principles in most business settings - you always modify an existing shell, or similar code (it would just take too long otherwise). So while your C# people may be right that it would take a long time to reach 'expert level', someone who can code well in another language could be productive and useful in a relatively short period of time.

The .net is server & visual/screen. I understand that if someone is an expert programmer in any language (Python for example) that they can pick up another language at a faster rate than someone with 0 experience trying to learn at an expert level it just wont be overnight or within 6 months (I would presume, correct me if I'm wrong here).

firestarter
Jun 24, 2011, 08:41 AM
The .net is server & visual/screen. I understand that if someone is an expert programmer in any language (Python for example) that they can pick up another language at a faster rate than someone with 0 experience trying to learn at an expert level it just wont be overnight or within 6 months (I would presume, correct me if I'm wrong here).

6 months might be long enough. Less with someone really good.

'Expert level' is kind of a meaningless label. What do you want them to be able to do? Most commercial coders aren't experts. Most commercial jobs don't need experts.

Sounds like your .net guys are trying to overemphasize their skills. How much skill is enough to be productive?

chown33
Jun 24, 2011, 12:02 PM
TWe have 4 developers on staff, 2 know Python and 2 know C Sharp.net. The C Sharp.net developers say it's impossible for a Python coder to pick up Python quickly, efficiently and in a time sensitive manner as an expert while the Python guys say it can be done (none of this has been tested to prove there arguments so basically I need an answer from a different source aside from these guys).

What other languages do these developers know? How well do they know those languages?

I think there are basically 3 levels of language knowledge:
1. Needs ongoing guidance and assistance.
2. Can work independently, given a goal.
3. Could teach someone else the language.

There's a lot of gradations within each level. The latter 2 levels imply that the person is also sufficiently self-directed that they can learn new things without having to be taught them step-by-step.

There's also a 4th level, which is the ability to teach someone else in multiple languages. I don't think you can really call anyone an expert in a single language until they know some other language really well.

AFPoster
Jun 24, 2011, 01:30 PM
What other languages do these developers know? How well do they know those languages?

I think there are basically 3 levels of language knowledge:
1. Needs ongoing guidance and assistance.
2. Can work independently, given a goal.
3. Could teach someone else the language.

There's a lot of gradations within each level. The latter 2 levels imply that the person is also sufficiently self-directed that they can learn new things without having to be taught them step-by-step.

There's also a 4th level, which is the ability to teach someone else in multiple languages. I don't think you can really call anyone an expert in a single language until they know some other language really well.

I didn't ask all 4 of them what other languages they know aside from the 2 that were in discussion. I do know they can code in other languages but neither one of our developers does both that I've mentioned.

The levels you speak of have names, when I use expert that's pretty open, I guess in the Tech world it would be:
Jr. Developer - Needs guidance and help during projects
Intermediate Developer - Can handle work on there own, but needs overall direction and overseeing
Senior Developer - Can do it all by themselves.

Then there are those who are:
Project Managers
Architects
Analysts

My 4 developers are all Sr. Developers with a mix of one of these 3: project manager, architect & analysts.

I'd also like to disagree about calling a single person an expert without knowing a second language. You can be an expert with only knowing 1 language, nothing proves otherwise.

chown33
Jun 24, 2011, 01:38 PM
Exactly what is your goal here?

Are you trying to decide which one of the two pairs of developers have to learn the other's language?


Why is "expert level" needed? Why not simply a productive level?
This reiterates firestarter's question: How much skill is enough to be productive? One doesn't need to be an expert simply to be productive.

If you already have 2 experts for each language, why not let them provide the guidance after the other pair has achieved a productive level of skill?

AFPoster
Jun 24, 2011, 02:13 PM
Exactly what is your goal here?

Are you trying to decide which one of the two pairs of developers have to learn the other's language?


Why is "expert level" needed? Why not simply a productive level?
This reiterates firestarter's question: How much skill is enough to be productive? One doesn't need to be an expert simply to be productive.

If you already have 2 experts for each language, why not let them provide the guidance after the other pair has achieved a productive level of skill?

Merging developers I have 2 in house and 2 from another company I can use. The Python dev's from another company say they can easily do C Sharp.net while my in house .net developers say it's impossible like oil and water. I need to know if it's possible so that I can hire the other 2 from another company to come in. They've never done .net from what I know so basically can they learn it fast or is it like oil and water.

firestarter
Jun 24, 2011, 02:27 PM
OK, well if that's the situation, then why would you bring in Python developers to do .net?

A lot of the unproductive time in a project is accounted for by developers coming up to speed with your environment, the problem domain, clients, existing system etc.

If you had 2 productive Python developers on site, then they're already 60% of the way to being productive in another language, because they know all this extra stuff already. In that case I'd say, let them go at the .net.

If you're bringing in fresh developers who you haven't worked with before, they wouldn't be 100% productive from the get-go, even if they were 'expert level .net'.

But if you're planning on bringing in contractors who aren't familiar with the environment, apps, systems etc. and then you're planning to train them in a different language on your dollar, that makes no sense at all.

The fact that you're talking about contractors changes things a lot. If you had to finance some down time as your own staff learnt something new, then it's an investment that may be worthwhile. Training a contractor? Not so much. Get the agency to send you some .net guys.

AFPoster
Jun 24, 2011, 02:47 PM
OK, well if that's the situation, then why would you bring in Python developers to do .net?

A lot of the unproductive time in a project is accounted for by developers coming up to speed with your environment, the problem domain, clients, existing system etc.

If you had 2 productive Python developers on site, then they're already 60% of the way to being productive in another language, because they know all this extra stuff already. In that case I'd say, let them go at the .net.

If you're bringing in fresh developers who you haven't worked with before, they wouldn't be 100% productive from the get-go, even if they were 'expert level .net'.

But if you're planning on bringing in contractors who aren't familiar with the environment, apps, systems etc. and then you're planning to train them in a different language on your dollar, that makes no sense at all.

The fact that you're talking about contractors changes things a lot. If you had to finance some down time as your own staff learnt something new, then it's an investment that may be worthwhile. Training a contractor? Not so much. Get the agency to send you some .net guys.

Perfect! This is the answer I was after. Our 2 .net developers have been with us for 3 years, they know everything about our system and we have taught them everything in our business so that it makes sense. The 2 Python developers we have never worked with or done business with. My guess is they would be picking up .net as they went.

firestarter
Jun 24, 2011, 02:53 PM
Helps if you ask the right question and supply all the details! ;)

This question isn't really about 'expert level programmers', it's about who these people are, and all the other stuff they'll have to learn.

chown33
Jun 24, 2011, 03:13 PM
I'd also like to disagree about calling a single person an expert without knowing a second language. You can be an expert with only knowing 1 language, nothing proves otherwise.

I was unclear in my statement.

What I meant to say is that languages interconnect with other languages in many ways. So being a broad-based expert in one language invariably means you will have to acquire some skill in whatever the other connected language is.

The simplest example is SQL. I don't think anyone can claim to be an expert in C# without knowing how its SQLdatabase classes work. That means they have to know how to formulate and use SQL statements. Same thing for Java (it has JDBC classes), or various other languages.

There are also levels of abstraction within a language. Java has JNI (Java Native Interface) that lets you write native methods. So does C#, IIRC. Java native methods are defined as C functions, or using C++.

At other levels of abstraction are data-representation languages like XML. If you don't know anything about XML, then your ability to use it effectively in Python or C# or whatever is diminished. Yeah, frameworks can hide much of the nitty gritty details, but when things break (and they always do), you have to be able to get your hands dirty by digging under that nice SOAP abstraction.

Even with languages like shell scripting, you have to know things like regular expressions (a little language), commands like 'awk' (another little language), and maybe even C if you have to write and compile a new command that performs a specific task.

The interconnects between languages may be language-specific, or platform-specific. For example, if you wanted to use PyObjC with Python, you'll have to learn enough Objective-C to be able to make calls to the libraries you intend to use. So someone might be an expert on Python itself, but when confronted with Python code targeting Mac OS X, they could easily be at a complete loss as to what the program is doing.

I honestly can't think of a single language that doesn't interconnect at some level of abstraction with another language. No language is an island unto itself.


I realize this is all tangential to the actual question. I just wanted to clarify what I meant, since I was so unclear in my original statement.

balamw
Jun 24, 2011, 04:02 PM
My guess is they would be picking up .net as they went.

You still have a big unknown as to how productive anyone who hasn't been in your systems for 3 years will be and how long it will take them to get there.

An expert C# programmer that is set in ways that clash with your internal systems and is not a good "personality fit" with you or your existing devs could actually be far more of a problem.

B