Microsoft Losing Interest in C#?

M

Mike Schilling

Daniel O'Connell said:
LOL. I suppose its possible, but then, the JLCA may be partially based on
the C# compiler's code, ;).

Where? JLCA parses Java and produces C# code[1]; CSC parses C# and produces
MSIL. I'm not sure I see any common functionality between the two. I
suppose they might have some syntax tree manipulation in common, though the
transformation from the Java tree to the C# tree would be pretty minor.

1. Slowly and incorrectly, last I looked. But that was in 2002, and things
may have improved.
 
A

Andrey

Drebin said:
See inline..




I don't know that this is the answer though, because there are still
incompetent doctors and lawyers. I like the current system that "the
competent are well paid" - where with this system, "the certified are well
paid", which isn't right - in my book.




No, not at all!! Let me be clear. I don't have a problem with inexperienced
developers or developers that just don't know a certain technology. I'm not
saying that at all!!

I have a problem with people that have been programming longer than I've
been alive in just a couple of languages - and suck at it. They are horrible
developers. I am a big fan of "know your job". And I am surrounded by people
that CHOOSE not to better themselves and be competent at what they do. They
are paid to be "professional" software developers. These are people that do
the absolute minimum to get by in their job. Given a choice I'd rather do
more work, than have to work with shoddy code and ignorant developers. And
sadly, this is by FAR the biggest demographic for VB developers (having
worked at several companies in a few regions of the U.S.)


Maybe you haven't had experience with this type of developer? VB is by FAR
the language of choice of these type of people because it has the least
rules and enables the lazy programmer to be as lazy as they want!! The
problem I have with that, is that "assumptions lead to bugs".. and when they
embrace things like the "variant" datatype that can be coerced into any data
type, that's just ASKING for trouble.

And the are trying to use ADODB with VB.NET, and they are mixing asp and asp.net pages,
and they are .... so right now i am spending the second week in a row
on fixing VB.NET duh-veloper's project, and still wondering why the hell he didn't include java
aplets as well (meanning that he is same non-compitent in java as he is in vb, having MS in computer
science and knowing nothing but how to make my job harder while debugging his code :))

Anyhow, my point is, there is an entire subculture of incompetent VB
developers (I've seen at MANY companies) that are able to continue being
"developers" because Microsoft keeps enabling them with this sloppy
(loosely-typed) language. I guess I'd like to see Microsoft take a stance
and "thin the herd" as it were. :) but why would they, they are making
money of these jokers!!

Well, when have you seen Micro$oft care of what industry wants?
I guess it always makes industry care about what Microsoft wants :)
I agree!! I have met probably 3 in my career - and I agree, the people that
are good in VB, are VERY good.. Sadly, this is by far the exception, not the
rule. Again, I don't have a problem with the language or IDE, I have a
problem with the lazy people that take advantage of the worst parts of VB
and continue to put out shoddy code that I continue to have to maintain!!

I know one - he is also a PROF in Pascal, C++, Fortran, and just a smart ass :)
Seriously, i haven't met a single VB programmer(i talk about those who know only VB) who was a
professional PROGRAMMER. But i know couple HTML coders who think they are pro's :) LOL!
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
Daniel O'Connell said:
LOL. I suppose its possible, but then, the JLCA may be partially based on
the C# compiler's code, ;).

Where? JLCA parses Java and produces C# code[1]; CSC parses C# and
produces MSIL. I'm not sure I see any common functionality between the
two. I suppose they might have some syntax tree manipulation in common,
though the transformation from the Java tree to the C# tree would be
pretty minor.

Well, if you think slight changes to a java compiler is all it takes to
parse C#...why isn't the reverse the same?
1. Slowly and incorrectly, last I looked. But that was in 2002, and
things may have improved.

still slow, but it seems to only be pumping out about 350 errors on 20k line
projects.
 
M

Mike Schilling

Daniel O'Connell said:
Mike Schilling said:
Daniel O'Connell said:
Bootstrapping a C# compiler would be almost trivial:

Start with a Java compiler written in Java..
Use the JLCA to translate it to C#.
Make slight changes to the parser to parse C# instead of Java.
Make slight changes to the backend to generate MSIL instead of Java
bytecode.

LOL. I suppose its possible, but then, the JLCA may be partially based
on the C# compiler's code, ;).

Where? JLCA parses Java and produces C# code[1]; CSC parses C# and
produces MSIL. I'm not sure I see any common functionality between the
two. I suppose they might have some syntax tree manipulation in common,
though the transformation from the Java tree to the C# tree would be
pretty minor.

Well, if you think slight changes to a java compiler is all it takes to
parse C#...why isn't the reverse the same?

I'm sure it is, but there are so many free Java compilers available, I'm not
sure why they'd start with a C# compiler instead.
still slow, but it seems to only be pumping out about 350 errors on 20k
line projects.

Does that mean 350 messages about code it can't convert? That's not bad.
What I recall is generated code that either didn't compile or (much worse)
compiled but was incorrect. .
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
Daniel O'Connell said:
Mike Schilling said:
message
Bootstrapping a C# compiler would be almost trivial:

Start with a Java compiler written in Java..
Use the JLCA to translate it to C#.
Make slight changes to the parser to parse C# instead of Java.
Make slight changes to the backend to generate MSIL instead of Java
bytecode.

LOL. I suppose its possible, but then, the JLCA may be partially based
on the C# compiler's code, ;).

Where? JLCA parses Java and produces C# code[1]; CSC parses C# and
produces MSIL. I'm not sure I see any common functionality between the
two. I suppose they might have some syntax tree manipulation in common,
though the transformation from the Java tree to the C# tree would be
pretty minor.

Well, if you think slight changes to a java compiler is all it takes to
parse C#...why isn't the reverse the same?

I'm sure it is, but there are so many free Java compilers available, I'm
not sure why they'd start with a C# compiler instead.

Legalities, to start with. Its actually more likely they modified the VJ++
or such parser.
Does that mean 350 messages about code it can't convert? That's not bad.
What I recall is generated code that either didn't compile or (much worse)
compiled but was incorrect. .

Yes. I certainly didn't have time to try to fix the project at the time,
still don't really. It was jj2k, a open java implementation of jpeg2000.

There were quite a few issues with Writer&TextWriter compatibility, etc.

The code doesn't compile right now because, IIRC, the JCLA generated a few
javaisms in the sections where a direct conversion wasn't possible.
 
M

Mike Schilling

Yes. I certainly didn't have time to try to fix the project at the time,
still don't really. It was jj2k, a open java implementation of jpeg2000.

There were quite a few issues with Writer&TextWriter compatibility, etc.

The code doesn't compile right now because, IIRC, the JCLA generated a few
javaisms in the sections where a direct conversion wasn't possible.

Here, for whatever historical or amusement value it might have, is an
evaluation of JLCA I did in May of 2002:

The first file I tried to create was UUID.java. It should be a good
candidate for conversion in that:

It's simple java, and doesn't use any advanced features.
It has no dependencies on java classes outside the JDK.
It can be tested standalone. When run, it produces UUIDs.

The conversion produced no errors. It took 7 seconds to convert 500 lines.
Attempting to compile the resulting csharp file results in:

UUID.cs(99,21): error CS0246: The type or namespace name 'Comparable' could
not
be found (are you missing a using directive or an assembly
reference?)

The JLCA doesn't understand the Comparable interface, which was added after
1.1.4 (in 1.2). An odd thing to leave out of a tool which claims to support
Collections. In fact, .NET does contain an IComparable interface almost
identical to the Java Comparable interface, but JLCA is apparently unable to
make this conversion.

Take 2, remove Comparable:

UUID.cs(99,14): error CS0535: 'UUID' does not implement interface member
'System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime
.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext)'
UUID is Serializeable, and the .NET implementation of serialization is
unsurprisingly quite different from the Java one.

Take 3, remove Serializeable:


UUID.cs(144,35): error CS0246: The type or namespace name 'StringTokenizer'
could not be found (are you missing a using directive or an assembly
reference?)
StringTokenizer was present in 1.0, and the JLCA create some code to emulate
it, but apparently doesn't understand the 3-augment constructor form (which
may have been added after 1.1.4). This code is used to parse UUIDs, which
isn't part of the test, so we'll remove it.

UUID.cs(195,30): error CS0246: The type or namespace name 'MessageFormat'
could
not be found (are you missing a using directive or an assembly
reference?)
UUID.cs(200,10): error CS0246: The type or namespace name 'MessageFormat'
could
not be found (are you missing a using directive or an assembly
reference?)

MessageFormat isn't documented as post-1.1, so I don't know why it isn't
supported. We'll re-implement the code that uses it with
StringBuffer.append();

UUID.cs(387,4): error CS1547: Keyword 'void' cannot be used in this context
UUID.cs(404,7): error CS1547: Keyword 'void' cannot be used in this context
UUID.cs(412,7): error CS1547: Keyword 'void' cannot be used in this context
UUID.cs(413,7): error CS1547: Keyword 'void' cannot be used in this context

This is cute. There are void functions called getXXX, and the JLCA assumes
they're accessors for bean properties of type void. We'll rename them.

UUID.cs(479,55): error CS0030: Cannot convert type 'sbyte[]' to 'byte[]'
UUID.cs(483,55): error CS0030: Cannot convert type 'sbyte[]' to 'byte[]'

This is simply bad code generation. C#, like C++, has both signed and
unsigned types. "byte" in Java is converted to signed byte (which is
correct.) The java code is using java.util.Random to fill a byte array with
random numbers. JLCA produces a routine to convert the signed byte array to
unsigned bytes, which its Random number class expects, but there are two
problems with the produced code:
1. JLCA generates spurious, incorrect casts when calling it. These are
the errors shown above.
2. The resulting code:
Copies the signed byte array to an unsigned byte array
Fills the unsigned byte array with random numbers
Proceeds to use the signed byte array, which still has zeroes in it

We'll rewrite the C# code to be correct.

UUID.cs(487,17): error CS0221: Constant value '170' cannot be converted to a
'sbyte' (use 'unchecked' syntax to override)

This comes from the line:
nodeId[4] = (byte)0xaa;

In C#, the cast apparently isn't enough to allow setting a signed byte to a
value which doesn't fit. We'll change it to
nodeId[4] = -86;

take 4:
Conversion works. It take less than a second to compile and link the C#
code. It produces UUIDs which look correct.
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
Here, for whatever historical or amusement value it might have, is an
evaluation of JLCA I did in May of 2002:


The first file I tried to create was UUID.java. It should be a good
candidate for conversion in that:

<snip problems>

Hehe, yes, I could see that being annoying.

Interesting. Have you tried the versino that comes with vs2005 betas?

I can't find the UUID.java file(or, atleast, the one I think you used, there
are a surprising number of UUID classes for java) or I would test it myself.
 
M

Mike Schilling

Daniel O'Connell said:
<snip problems>

Hehe, yes, I could see that being annoying.

Interesting. Have you tried the version that comes with vs2005 betas?

No. My company decided on a path that doesn't involve JLCA (for obvious
reasons :) and I haven't looked at it since then.
I can't find the UUID.java file(or, atleast, the one I think you used,
there are a surprising number of UUID classes for java) or I would test it
myself.

You can download it at
http://www.netbeans.org/source/brow...ava?rev=1.2&content-type=text/x-cvsweb-markup .
If you really have the time, I'd be interested in what you discover.

Thanks,
Mike
 
J

James Curran

Daniel said:
Guess you weren't kidding about making more of an appearance in the C#
group, either, ;).

Well, at my day job, I've been doing C# almost exclusively for the
passed 10 months. *And* the questions of the C++ groups are getting
dreary... No one asks "fun" STL questions anymore... Now, it's just dull
DLL/memory issues.
 
D

Daniel O'Connell [C# MVP]

James Curran said:
Well, at my day job, I've been doing C# almost exclusively for the
passed 10 months. *And* the questions of the C++ groups are getting
dreary... No one asks "fun" STL questions anymore... Now, it's just dull
DLL/memory issues.

LOL, it gets that way here sometimes. Still.
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
No. My company decided on a path that doesn't involve JLCA (for obvious
reasons :) and I haven't looked at it since then.


You can download it at
http://www.netbeans.org/source/brow...ava?rev=1.2&content-type=text/x-cvsweb-markup .
If you really have the time, I'd be interested in what you discover.

I havn't had time to actually test the resultant code for accuracy, but the
code generated by JLCA in whidbey compiles without modifications.

There are 11 issues, mostly dealing with the differences with
System.Convert.ToInt32 and java.lang.Integer.parseInt and System.Random and
java.util.Random. I'm not sure of the differences so I don't know if there
is anything that will break the code.
 
A

Andrey

Daniel said:
I havn't had time to actually test the resultant code for accuracy, but the
code generated by JLCA in whidbey compiles without modifications.

There are 11 issues, mostly dealing with the differences with
System.Convert.ToInt32 and java.lang.Integer.parseInt and System.Random and
java.util.Random. I'm not sure of the differences so I don't know if there
is anything that will break the code.

Knock-knock!
After reading last 100 posts in this topic I'm just curious what are you talking about... if it's
not private, of course :)

Were you trying to compile csharp code with a sorta modified java compiler? Or i'm off stream here? :)

Andrey
 
M

Mike Schilling

Andrey said:
Knock-knock!
After reading last 100 posts in this topic I'm just curious what are you
talking about... if it's not private, of course :)

Were you trying to compile csharp code with a sorta modified java
compiler? Or i'm off stream here? :)


The topic recently drifted to the Java Language Conversion Assistant or
JLCA, for short, a tool Microsoft distributes to help convert Java
applications to C# ones. I was recalling how badly the first version
worked, and Daniel used the current version to convert the same Java program
that I had so much trouble trying to convert back in 2002.
 
J

Jon Skeet [C# MVP]

Mike Schilling said:
The topic recently drifted to the Java Language Conversion Assistant or
JLCA, for short, a tool Microsoft distributes to help convert Java
applications to C# ones. I was recalling how badly the first version
worked, and Daniel used the current version to convert the same Java program
that I had so much trouble trying to convert back in 2002.

I have fairly awful memories of the JLCA myself. I converted the Apache
XPath code from Java to C# for the Compact Framework (which doesn't
have the normal .NET XPath stuff). It worked in the end, but took a
long time to do. Never used it either :(
 
M

Mike Schilling

Daniel O'Connell said:
I havn't had time to actually test the resultant code for accuracy, but
the code generated by JLCA in whidbey compiles without modifications.

There are 11 issues, mostly dealing with the differences with
System.Convert.ToInt32 and java.lang.Integer.parseInt and System.Random
and java.util.Random. I'm not sure of the differences so I don't know if
there is anything that will break the code.

The simplest thing to do it run it and see. Edit the Java to have a main
like

public static void main(String[] args)
{
for (int i = 0; i < Integer.parseInt(args[0]); i++)
{
System.out.println(new UUID());
}
}

re-translate it, and run, say,

UUID 12

to print out 12 UUIDs. When I do this in Java, the output looks like:

2CFFFF1E-0CB4-11D9-A4BE-C3134102AA77
2CFFFF1F-0CB4-11D9-A4BE-C3134102AA77
2CFFFF20-0CB4-11D9-A4BE-C3134102AA77
2CFFFF21-0CB4-11D9-A4BE-C3134102AA77
2CFFFF22-0CB4-11D9-A4BE-C3134102AA77
2CFFFF23-0CB4-11D9-A4BE-C3134102AA77
2CFFFF24-0CB4-11D9-A4BE-C3134102AA77
2CFFFF25-0CB4-11D9-A4BE-C3134102AA77
2CFFFF26-0CB4-11D9-A4BE-C3134102AA77
2CFFFF27-0CB4-11D9-A4BE-C3134102AA77
2CFFFF28-0CB4-11D9-A4BE-C3134102AA77
2CFFFF29-0CB4-11D9-A4BE-C3134102AA77

C# output will be different from Java (due to the random numbers), but if
you run them at more or less the same time,

all UUIDs should be unique. The difference will be an increment in the
first group
the first, time-based, group should be larger for whichever is run
second
the second and third, also time-based, groups, should be identical
the last group should still end in AA77
 
S

Saras Asnani

The only reason people do VB crap is because most of them never knew
how
to do good or proper C/C++/Java and now C#. C# is an awesome
language.
Most of these people should not be called programmer or coders. I
still like people who think before they implement (thinking of desgins
first etc) like a true software/hardware engineer.

The only reason MicroTheft would consider supporting VB is because
there are so
many VB, VB.NET, VBScript VBA "Software" "Programmers" out there. Do
you think MicroTheft is stupid (from a business perspective) to invest
money, time, and semi-intelligent efforts into VB.NET. They do it
because it will sell the .Net platform. That means more MS Market.
Which means more MS Domination.

I really like C# but I wish like good sportsmen I wish MicroTheft was
a good sport and say in their C# Language Release something to the
effect "C# exists because it has stood on the shoulder of Giants..."

I dont like workig with implementers who have had no accredited four
year scientific degree from the US or Western Europe or people who
have no software engineering framework.

If they did they would know its the desgin and the would know the most
appropriate language for it. Yes lot of times language does not
matter. But if you are the implementer if you are the one who is going
to chisel the solution and MAINTAIN IT... well you better go for C# or
Java/C++.

Ofcourse this does not apply to people who are forced by their
managers or senior managers to use a technology/language like VB.NET
or VB. It is these managers who need job security (their business and
tech or other knowledge amounts zero... a well programmed monkey could
do their job.. just like G.W. Bush).

VB.NET should stand for Virtual Bastardization Dot Net

Thanks for lending me your mind.
-Saras Asnani.
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
Daniel O'Connell said:
I havn't had time to actually test the resultant code for accuracy, but
the code generated by JLCA in whidbey compiles without modifications.

There are 11 issues, mostly dealing with the differences with
System.Convert.ToInt32 and java.lang.Integer.parseInt and System.Random
and java.util.Random. I'm not sure of the differences so I don't know if
there is anything that will break the code.

The simplest thing to do it run it and see. Edit the Java to have a main
like

public static void main(String[] args)
{
for (int i = 0; i < Integer.parseInt(args[0]); i++)
{
System.out.println(new UUID());
}
}

re-translate it, and run, say,

UUID 12

to print out 12 UUIDs. When I do this in Java, the output looks like:

2CFFFF1E-0CB4-11D9-A4BE-C3134102AA77
2CFFFF1F-0CB4-11D9-A4BE-C3134102AA77
2CFFFF20-0CB4-11D9-A4BE-C3134102AA77
2CFFFF21-0CB4-11D9-A4BE-C3134102AA77
2CFFFF22-0CB4-11D9-A4BE-C3134102AA77
2CFFFF23-0CB4-11D9-A4BE-C3134102AA77
2CFFFF24-0CB4-11D9-A4BE-C3134102AA77
2CFFFF25-0CB4-11D9-A4BE-C3134102AA77
2CFFFF26-0CB4-11D9-A4BE-C3134102AA77
2CFFFF27-0CB4-11D9-A4BE-C3134102AA77
2CFFFF28-0CB4-11D9-A4BE-C3134102AA77
2CFFFF29-0CB4-11D9-A4BE-C3134102AA77

C# output will be different from Java (due to the random numbers), but if
you run them at more or less the same time,

all UUIDs should be unique. The difference will be an increment in the
first group
the first, time-based, group should be larger for whichever is run
second
the second and third, also time-based, groups, should be identical
the last group should still end in AA77

My results:
D556A42D-0CA5-11D9-8D09-00000000AA77
D556A42E-0CA5-11D9-8D09-00000000AA77
D556A42F-0CA5-11D9-8D09-00000000AA77
D556A430-0CA5-11D9-8D09-00000000AA77
D556A431-0CA5-11D9-8D09-00000000AA77
D556A432-0CA5-11D9-8D09-00000000AA77
D556A433-0CA5-11D9-8D09-00000000AA77
D556A434-0CA5-11D9-8D09-00000000AA77
D556A435-0CA5-11D9-8D09-00000000AA77
D556A436-0CA5-11D9-8D09-00000000AA77
D556A437-0CA5-11D9-8D09-00000000AA77
D556A438-0CA5-11D9-8D09-00000000AA77

The straight 0's at the end seems a little odd, but that may just be an
aspect of my partiuclar machine.
 
M

Mike Schilling

Daniel O'Connell said:
My results:
D556A42D-0CA5-11D9-8D09-00000000AA77
D556A42E-0CA5-11D9-8D09-00000000AA77
D556A42F-0CA5-11D9-8D09-00000000AA77
D556A430-0CA5-11D9-8D09-00000000AA77
D556A431-0CA5-11D9-8D09-00000000AA77
D556A432-0CA5-11D9-8D09-00000000AA77
D556A433-0CA5-11D9-8D09-00000000AA77
D556A434-0CA5-11D9-8D09-00000000AA77
D556A435-0CA5-11D9-8D09-00000000AA77
D556A436-0CA5-11D9-8D09-00000000AA77
D556A437-0CA5-11D9-8D09-00000000AA77
D556A438-0CA5-11D9-8D09-00000000AA77

The straight 0's at the end seems a little odd, but that may just be an
aspect of my partiuclar machine.

It's definitely a bug. It appears to be in the translation of:

/** randomly generate a node ID. make the last two bytes
* 0xAA77, which cannot conflict with a real Ethernet address */
private void initializeNodeId()
{
byte barr[] = new byte[2];

Random r1 = new Random();
Random r2 = new Random(r1.hashCode());
r1.nextBytes(barr);
nodeId[0] = barr[0];
nodeId[1] = barr[1];

r2.nextBytes(barr);
nodeId[2] = barr[0];
nodeId[3] = barr[1];

nodeId[4] = (byte)0xaa;
nodeId[5] = 0x77;
}

I'll hazard a guess: that the nextBytes call translates to
System.Random.NextBytes(), which fills an array of *unsigned* bytes, and
that the results don't get copied back to barr, which is an array of
*signed* bytes. If so, it's the same bug I saw in 2002.
 
D

Daniel O'Connell [C# MVP]

Mike Schilling said:
Daniel O'Connell said:
My results:
D556A42D-0CA5-11D9-8D09-00000000AA77
D556A42E-0CA5-11D9-8D09-00000000AA77
D556A42F-0CA5-11D9-8D09-00000000AA77
D556A430-0CA5-11D9-8D09-00000000AA77
D556A431-0CA5-11D9-8D09-00000000AA77
D556A432-0CA5-11D9-8D09-00000000AA77
D556A433-0CA5-11D9-8D09-00000000AA77
D556A434-0CA5-11D9-8D09-00000000AA77
D556A435-0CA5-11D9-8D09-00000000AA77
D556A436-0CA5-11D9-8D09-00000000AA77
D556A437-0CA5-11D9-8D09-00000000AA77
D556A438-0CA5-11D9-8D09-00000000AA77

The straight 0's at the end seems a little odd, but that may just be an
aspect of my partiuclar machine.

It's definitely a bug. It appears to be in the translation of:

/** randomly generate a node ID. make the last two bytes
* 0xAA77, which cannot conflict with a real Ethernet address */
private void initializeNodeId()
{
byte barr[] = new byte[2];

Random r1 = new Random();
Random r2 = new Random(r1.hashCode());
r1.nextBytes(barr);
nodeId[0] = barr[0];
nodeId[1] = barr[1];

r2.nextBytes(barr);
nodeId[2] = barr[0];
nodeId[3] = barr[1];

nodeId[4] = (byte)0xaa;
nodeId[5] = 0x77;
}

I'll hazard a guess: that the nextBytes call translates to
System.Random.NextBytes(), which fills an array of *unsigned* bytes, and
that the results don't get copied back to barr, which is an array of
*signed* bytes. If so, it's the same bug I saw in 2002.

That does appear to be the case, and, frankly, I would be surprised if any
translator got this right. It seems like something only a person who knew
what the code was supposed to be doing could do.

For what its worht, there is a call to SupportClass.ToByteArray() around
barr in NextBytes, which certainly causes the issue.

It seems much closer, however.
 
R

Ravichandran J.V.

<!-- really like C# but I wish like good sportsmen I wish MicroTheft was
a good sport and say in their C# Language Release something to the
effect "C# exists because it has stood on the shoulder of Giants..."
-->

Sportsmen play sports and software engineers engineer programs. So, why
have this cross-platform integration?


<!-- Thanks for lending me your mind. -->

When one reads a post here one has no option but to spend some of the
grey matter on the contents as I have done. I am sure, though, that I
have not lent my mind so, please don't use my mind.

<!--
Ofcourse this does not apply to people who are forced by their managers
or senior managers to use a technology/language like VB.NET or VB. It is
these managers who need job security (their business and tech or other
knowledge amounts zero... a well programmed monkey could
do their job.. just like G.W. Bush). -->

why do yhou make grammatical mistakes ? "a well programmed monkey could
do *its* not their job". Syntax and grammar mean almost the same thing,
you know. If you make English grammatical mistakes, do you also make
syntactical mistakes ? It is worth correcting, you know.


with regards,


J.V.Ravichandran
- http://www.geocities.com/
jvravichandran
- http://www.411asp.net/func/search?
qry=Ravichandran+J.V.&cob=aspnetpro
- http://www.southasianoutlook.com
- http://www.MSDNAA.Net
- http://www.csharphelp.com
- http://www.poetry.com/Publications/
display.asp?ID=P3966388&BN=999&PN=2
- Or, just search on "J.V.Ravichandran"
at http://www.Google.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top