Future of Java

S

Stefan Ram

Remon van Vliet said:
As a Java developer you'll automatically get quite proficient
in proper OO design,

I wonder how you are supposed to get this proficiency when in
Java neither ints nor blocks are objects? Java is an
object-oriented language insofar as MySQL is a relational
database. (I.e., according to the definitions of the ones who
invented the terms [Kay and Codd, respectively] they are not).
As a practical example, a lot of beginning Java developers
could not give you an answer if you ask them when it's better
to use LinkedList and when it's better to use ArrayList etc.
while the average ANSI C developer can probably give you a
reasonably accurate answer just by looking at the class names,
because they probably had to manually implement linked lists
and other collections at some point.

So, assume you have a bunch of such programmers in your
company and now they are to be send to a two-week training
in order to do something about the deficiency you mentioned.
Which of the following classes do you choose?

- ANSI C programming for Java developers
(Introduction to ANSI C and especially those features
of the languages that a Java programmer will not know)

- The fine print of Java Collections for Java developers
(Treats many details about the collections that might
have been missed on the first view)
I'm sure there are better examples to prove my point

The most recent ANSI C standard is from 1989, AFAIK.
The current standard is ISO/IEC 9899:1999 (E), which also
might be available from INCITS. So »ISO C« nowadays might
be more appropriate a term than »ANSI C«.
Someone that never did anything but Java isnt by default a less
complete developer than someone who knows 10 languages.

Depends on the point of view, what criteria you choose.
Sometimes when a company delievers some kind of standard
business software that is somewhat customized for each client
(adding some fields to forms and SQL-tables), a programmer
with too much creativity and knowledge of other languages
might be less effective, when all this is not required by the
current task. Sometimes the company does not want »complete
programmers«, but just programmers fitting the current tasks.

See also (somewhat contradicting my point, but worth to be
mentioned nonetheless):

http://www.norvig.com/21-days.html
 
R

Roedy Green

So you might send a Java programmer to an Eiffel training for
two weeks. One the other hand, you might also send him to
a training »Design by contract in Java« for two weeks.
Why should the Eiffel training be more successful than the
»Design by contract in Java« training?

They would both be good for the soul. However, I suspect the Eiffel
training would do more to loosen up frozen thinking, getting you
entirely out of your ruts for a while.
 
P

Patricia Shanahan

Stefan said:
So you might send a Java programmer to an Eiffel training for
two weeks. One the other hand, you might also send him to
a training »Design by contract in Java« for two weeks.
Why should the Eiffel training be more successful than the
»Design by contract in Java« training?

Either might be good, but note that there are two distinct set of
interests. It may not be in the best interests of an employer with a
single-language business to encourage employees to learn more languages.

It is in the interests of anyone who wants a long term programming
career to make sure they know how to learn languages. Is there any way
to do that without practice?

Patricia
 
D

David N. Welton

I've never understood the point of Mono. The need it fills is already
filled by Java

You can't ship Sun's Java with most Linux distributions who care about
free software (that is, the important ones like Debian and Fedora), and
open source Java implementations weren't there yet when Mono started. I
don't know exactly why they decided to do Mono instead of putting their
efforts into free Java, but in any case, in not much time, they've done
an exceptional job.

--
David N. Welton
- http://www.dedasys.com/davidw/

Linux, Open Source Consulting
- http://www.dedasys.com/
 
R

Remon van Vliet

Stefan Ram said:
Remon van Vliet said:
As a Java developer you'll automatically get quite proficient
in proper OO design,

I wonder how you are supposed to get this proficiency when in
Java neither ints nor blocks are objects? Java is an
object-oriented language insofar as MySQL is a relational
database. (I.e., according to the definitions of the ones who
invented the terms [Kay and Codd, respectively] they are not).
As a practical example, a lot of beginning Java developers
could not give you an answer if you ask them when it's better
to use LinkedList and when it's better to use ArrayList etc.
while the average ANSI C developer can probably give you a
reasonably accurate answer just by looking at the class names,
because they probably had to manually implement linked lists
and other collections at some point.

So, assume you have a bunch of such programmers in your
company and now they are to be send to a two-week training
in order to do something about the deficiency you mentioned.
Which of the following classes do you choose?

- ANSI C programming for Java developers
(Introduction to ANSI C and especially those features
of the languages that a Java programmer will not know)

- The fine print of Java Collections for Java developers
(Treats many details about the collections that might
have been missed on the first view)
I'm sure there are better examples to prove my point

The most recent ANSI C standard is from 1989, AFAIK.
The current standard is ISO/IEC 9899:1999 (E), which also
might be available from INCITS. So »ISO C« nowadays might
be more appropriate a term than »ANSI C«.
Someone that never did anything but Java isnt by default a less
complete developer than someone who knows 10 languages.

Depends on the point of view, what criteria you choose.
Sometimes when a company delievers some kind of standard
business software that is somewhat customized for each client
(adding some fields to forms and SQL-tables), a programmer
with too much creativity and knowledge of other languages
might be less effective, when all this is not required by the
current task. Sometimes the company does not want »complete
programmers«, but just programmers fitting the current tasks.

See also (somewhat contradicting my point, but worth to be
mentioned nonetheless):

http://www.norvig.com/21-days.html

There's a counter argument for any point of view if you try hard enough. I
have a background in x86 and ARM Basic (i know, i know), assembly, C and a
few Pascal dialects before starting with Java, and although i cant point out
bits of code and say "look, this is where i used my C experience" i'm pretty
sure i picked up some skills relatively unique to a certain language and use
them in my Java code. Also, starting with a brand new language tends to make
it more fun, and when it's more fun you'll be more hapy to spend time on
learning it as well as be more efficient at picking up new skills.

But like i said, it's not set in stone, some people wont enjoy learning more
than one language at all and rather just go to the courses you mentioned and
get it over with. Just like some people never touch or do anything Java
related as soon as they get home while others browse newsgroups and do hobby
projects whenever they have a spare few minutes. Different solutions for
different people, but i personally support the more languages = good point
of view..
 
C

Chris Uppal

Stefan said:
So, assume you have a bunch of such programmers in your
company and now they are to be send to a two-week training
in order to do something about the deficiency you mentioned.

I don't think you'll get anywhere in this analysis if you focus on training
courses (for languages or for anything else). The point of a training course
is that its a /project management/ tool -- nothing more. The only way to learn
a language or most anything else (OO programming for instance) is by
using/doing it. Even a two week course (at least twice as long as is typical
in my experience) is just a way that a project manager can attempt to shorten
people's start-up times, and so reduce the overall project duration. And for
that, they can work well (if properly scheduled). What they don't do is teach
the language (or whatever), they just put people in a position where they /can/
learn[*] the language.

([*] Many people, of course, have no need of formal training courses in order
to attain that starting position.)

Would a Java programmer add anything to his/her overall mastery of programming
with a training course in C, IA32 Assembler, Scheme, or Eiffel ? Not a chance.
Would they gain anything from a year of evenings and weekends spent using
language X for their own projects ? Almost certainly.

-- chris
 
M

marcwentink

Remon van Vliet:
By the way, C# and Java are almost the same so there isnt any
significant gain in learning both. Just learn the one most relevant for your
career plans i guess.

But that is only in the view of understanding the art of programming.
If you think in chances to get a job, earn money, it can be useful to
know two major languages, just because you double your possibilities in
the job market.
 
G

Gordon Beaton

Someone that never did anything but Java isnt by default a less
complete developer than someone who knows 10 languages.

It is commonly accepted that your understanding of your mother tongue
will improve with every foreign language you learn.

Similarly (whether by default or not), I believe that the developer
who knows other languages will always be a more complete developer
than the one who knows only Java, because he will have a larger set of
experiences to draw from when choosing a solution to almost every
problem. He will have a better understanding of the abstractions
behind the languages, and be more aware of their respective strengths
and weaknesses.

/gordon
 
M

Mitch

Remon van Vliet:


But that is only in the view of understanding the art of programming.
If you think in chances to get a job, earn money, it can be useful to
know two major languages, just because you double your possibilities in
the job market.

I have to second this, though it also emphasises the point that it's all
down to personal opinion.

I've been looking for jobs in programming of late and there are a number
of positions that ask for "Experience in C++/Java" and I honestly
believe I'd stand a better chance of getting that job if I were able to
say 'both'.


Equally though I think I will learn a second programming language not
only to get more jobs (After all, to get even remotely acceptable at
programming you need a few years practice - I don't want to wait that
long unemployed!) but ii will learn a second and perhaps third because
at the minute I think learning Java is fun, but in a few years time I'll
probably get bored and I honestly believe you can only get *good* at
something if you truly enjoy it.

I'm sure it will better my overall programming abilities as well, but I
wouldn't let that stop me ;)
 
J

Jon Martin Solaas

Dag said:
Luckily, our trade is programming not a particular language,
so learning one more programming-language will only take you
closer to master.

Yes and no. It's never wasted to learn more than one language. Having a
broad background will give you a broader understanding of what you are
doing.

But when it comes to competition, on the java arena you'd always have to
compete with people dedicated to the java platform, and on the C# arena
you'd always have to compete with people dedicated to C#. Specializing
on both platforms isn't what I'd recommend.
 
J

Jon Martin Solaas

Patricia said:
Jon Martin Solaas wrote:
...

This at least suggests that one should learn just one programming
language, and focus on expertise in that language.

Mnnno. Agree that's one interpretation. But the question was about
staying competitive in the market (event though it came from a college
student). I believe it'd be very resource consuming to stay competitive
on two arenas; .net and j2ee (really this isn't about languages but
about platforms). You'll always find yourself competing with someone
that has dedicated themselves totally to the platform at hand (and it's
absolutely possible to do that without totally neglecting other
languages, programming paradigms etc.)
I've seen people who did that for several years, and then hit a
situation in which that language was just not the right tool for the
job. Some of them found it harder to learn another language than the
typical beginner learning their first one.

The problem was that they had completely absorbed the ways of thinking
appropriate to that language as the only right way to think about
programming. They could not see how to use any features in the new
language that were not present in the old language, so they struggled
with a crippled subset of the new language, containing only those parts
of it that matched the old.

For this reason, I strongly advise new programmers to learn at least a
second language as soon as possible.

Agree completely. Better go for one of C# or Java, and study something
completely different to get some perspective. Java for instance is
pretty verbose, how about looking into Lisp?
However, C# and Java are a bit too
close together. It might be better to learn an assembly language, or
Smalltalk, or Forth, or Lisp. Anything that requires different mental
models of programming from Java.
Definitely.


As a practical matter, languages change too fast to depend on learning
any one language.

Disagree, most languages evolve pretty slow. PHP is one example of the
opposite, trying to keep up with features in Java/C#-like languages.
From new CS student in late teens learning language #1
to being ready to retire in late 60's spans 50 years. How many languages
have been really good career choices for 50 years? Even Fortran, which
has at least kept the same name for that long, is a very different
language now from what it was in the mid-1950s.

Nobody will ever try to replace old COBOL programs running in the
financial sphere. Java's been adopted there too, so ... well. But even
more important; do OP really want to spend the rest of his life programming?
Learning another programming language is both a useful skill and a
mind-stretching mental exercise.

Yes, but trying to dig deep into two platforms simultaneously isn't what
I'd recommend.
I like to think of myself as a master programmer, who happens to have
done some programming in Java, rather than a Java programmer.

Me too, but I'd probably hire the Java programmer (they're only *that*
bright on the other side of the desk, you know :)
 
D

Dag Sunde

Jon Martin Solaas said:
Yes and no. It's never wasted to learn more than one language. Having a
broad background will give you a broader understanding of what you are
doing.

But when it comes to competition, on the java arena you'd always have to
compete with people dedicated to the java platform, and on the C# arena
you'd always have to compete with people dedicated to C#. Specializing on
both platforms isn't what I'd recommend.

Then we disagree... :)

So far, I've never worked a place where only one language was used.

To me, languages is just like a carpenters toolbox:
I pick up a hammer to drive in a nail, but use a screwdriver for
a screw...

If you're into web-applications, one client insist on running IIS
with VBScript/ASP, another does the same, but *might* want to move to
linux next year. JavaScript is a must clientside in both scenarios.

Then there is what to use for the server side business components,
and the DB...
 
R

Roedy Green

But when it comes to competition, on the java arena you'd always have to
compete with people dedicated to the java platform, and on the C# arena
you'd always have to compete with people dedicated to C#. Specializing
on both platforms isn't what I'd recommend

Seems to me as an employer, which I once was, if I had a choice of two
people, the one who know more languages would be the better choice
even if I did not currently use those languages in my shop.

Why?

1. it shows the person is curious, intelligent, industrious, broad
minded, quick to learn new skills.

2. perhaps something in those languages is a perfect fit for a problem
we are using the wrong tool for.

3. Language bigotry is correlated with other forms of bigotry. Since
I always had the complete gamut of sexes, religions, sensualities,
national backgrounds working for me, I would prefer to avoid bigots to
maintain harmony in the workplace.

I remember one young Russian immigrant who applied. I gave him a test
problem to solve. He did it in Modula, beautifully documented. Even
though I did not use Modula in the shop, I told him he had the job,
but by then he got a higher paying offer.
 
J

Jon Martin Solaas

Dag said:
Then we disagree... :)

So far, I've never worked a place where only one language was used.

Actually they exist but they're very rare. As rare as places where only
one man works, I suppose.
To me, languages is just like a carpenters toolbox:
I pick up a hammer to drive in a nail, but use a screwdriver for
a screw...

Ofcourse, but you don't do the work of a plumber, then, I suppose?
If you're into web-applications, one client insist on running IIS
with VBScript/ASP, another does the same, but *might* want to move to
linux next year. JavaScript is a must clientside in both scenarios.

Then there is what to use for the server side business components,
and the DB...

So you propose getting to know oc4j, tomcat, weblogic, jrun, resin,
websphere, jetty just to get to know the potential platform for your
web-gui, then you're gonna learn struts, jsf, velocity, tapestry,
millstone, WingS, expresso ... just in case you're gonna utilize a
web-framework on top of jsp and servlets, and finally you're gonna learn
ejbs, corba, webservices for component/distribution technology, along
with hibernate, toplink, ADF, entity beans, jdbc and what-do-I-know for
persistence? Then you're going to a job interview for a job as a
webgui-programmer and claim expertise in all those areas?

Good luck, I think we just have to agree we disagree ... :)

That said, you one should - as a minimum - have enough overview to know
other tools and crafts better suited for the job than those one master
self. And part of any adequate education in CS is getting familiar with
a broad selection of programming languages. But trying to embrace it all
as a professional is just not realistic. How about sql tuning, network
traffic monitoring and tuning, os memory tuning, SAN, clustering
architecture, firewalls, routers, appserver tuning, browser
compatability quirks, etc etc ...
 
J

jvsoft.org

It's hard to say what is the future of java.
There have so many techology,we only have time to master small of them
 
M

marcwentink

Ofcourse, but you don't do the work of a plumber, then, I suppose?

Yes but if you can tell your boss in construction, if I am done doing
my carpenter job, I can go and help the plumber, although I am not a
specialist in it, it will help you a bit to get the job.
 
J

Jon Martin Solaas

Roedy said:
Seems to me as an employer, which I once was, if I had a choice of two
people, the one who know more languages would be the better choice
even if I did not currently use those languages in my shop.

Why?

1. it shows the person is curious, intelligent, industrious, broad
minded, quick to learn new skills.

Wow, all that from claiming knowledge of more than one language? Well,
I'm sure you would consider other things than just the number of
languages, wouldn't you? I'd certainly would hesitate hiring a person
who knew only one single language, but that's not my point. My point is
that it's difficult to stay competitive if you don't specialize
somehow. Would you hire a person with only general knowledge, and no
special kompetence at all?

Also, there are plenty of opportunities to exercise all the feats you
mention above within one platform. This is not the same as saying a
broad background knowledge of different languages aren't userful, but it
would be even more wrong to claim that specialists lack intelligence,
aren't curious, industious, broad minded and quick learners, if that's
what you're hinting at.
2. perhaps something in those languages is a perfect fit for a problem
we are using the wrong tool for.

Maybe. If you're hiring a person to solve a problem you don't know how
to solve yourself, it seems feasible to look for a person with a broad
skills and a good overview. But generally I'd say that kind of
competence is hard to sell.
3. Language bigotry is correlated with other forms of bigotry. Since
I always had the complete gamut of sexes, religions, sensualities,
national backgrounds working for me, I would prefer to avoid bigots to
maintain harmony in the workplace.

I remember one young Russian immigrant who applied. I gave him a test
problem to solve. He did it in Modula, beautifully documented. Even
though I did not use Modula in the shop, I told him he had the job,
but by then he got a higher paying offer.

Well he was perhaps a specialist in algorithms relevant to your domain
or something then? Or is this just an example showing that he got hired
with a narrow skillset when it comes to number of languages known?
Certainly he'd get the job even if he didn't know any of the languages
used in your multilingual shop? I don't get the point, really. Anyway,
if you'd hire him and introduced Modula as yet another tool in your
already overflowing toolbox I'd say you'd be in for some trouble,
facilitating a broad set of different technologies *does* come with a
cost, namely maintenance, both thechnological and intellectual.
Sometimes it's worth the cost, sometimes not. Unless you have a specific
and well defined need to offer solutions on such a diverse platform I'd
say it's not rational. Most business advice I've ever heard is about
keeping a focus, specializing, finding a niche etc. I'm sure one niche
would be collecting knowledge of as many platforms as possible and then
offering advice, but I'm not sure if there's such a large space in that
niche.

Now, please don't read this as an argument for narrowmindedness. I'm
just saying "jack of a reasonable number of trades, master of one" is
better than "jack of all trades, master of none" or something.
 
J

Jon Martin Solaas

Yes but if you can tell your boss in construction, if I am done doing
my carpenter job, I can go and help the plumber, although I am not a
specialist in it, it will help you a bit to get the job.
AS long as you don't screw up the piping I'm sure that's just fine. But
then you have already defined yourself as a specialist carpenter :)
 
T

Thomas Hawtin

Yes, and on the other hand this same boss will not hire you if you say,
well I know a bit of carpenting, a bit of plumbing, and have done some
things with electricity, but actually I am not really good in either
three.

If you are really good you can do two or may-be three computer
languages as 'senior', if you say you can do more you are either a
genius or, rather, you have made an inconsistent carreer plan.

The way the rules seem to work is that you can claim concurrent
experience. A job involves a m languages (or other skills) for n years,
you therefore have m*n years experience.

Tom Hawtin
 

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

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,175
Latest member
Vinay Kumar_ Nevatia
Top