Why is Java so huge
Felix-The-Ghost

I was installing Netbeans Java SE and it told me I needed the JDK, which also installed Oracle's JavaFX...

A comparison of this installation and my C++ stuff:

Netbeans/Code::Blocks -- ~240MB/85MB
Java crap/MinGw (With A4 files) -- ~403MB + 90MB/88MB

Total: ~733MB vs. ~173MB

Is this normal? Why is it so much larger? I'm not too familiar with Java. I just know it's interpreted whereas C++ is compiled. Nevermind. I don't have any ideas as to why that is :-/

Update: Netbeans installs ssslllllloooooowwwwwlllllllyyyyyyy.

verthex

I used Jcreator LE. Netbeans is a piece of shit and unless you need it for highlighting parts of your code, its mostly useless and uses too much ram.

weapon_S

If you're using old hardware, you'll learn to hate Java. Also, on Windows all the auto-update/background program crap, and registry fuzz should infuriate a sane human. If you're also using a dial-up connection, you'll learn to hate the updater even more.
This is how I remember the Java runtime. >_>

Matthew Leverton
weapon_S said:

Also, on Windows all the auto-update/background program crap

Yes, every 5 minutes Java is ready to be updated to a bigger and slower version. >:(

GullRaDriel

Matt win ^^

Neil Walker

You are comparing essentially a compiler (mingw) and possibly a few basic libraries with an entire framework library covering everything from gui components to xml handling, including a compiler, debugger and various other tools. Perhaps you should list every class in the JAVA JDK then find everything to match in a C++ library (including full inheritance/interfaces/etc) then compare sizes.

type568

It just doesn't matter these days.. Traffic cheap ram cheap, storage cheap. Budget CPU performance by far exceeds day-to-day needs.

.. who cares.. ?

Matthew Leverton
type568 said:

who cares

Java applications even slow down super computers. :P

Arthur Kalliokoski

Java applications even slow down super computers.

If nonnus29 is lurking, he's blowing a gasket right about now.

torhu

Java's marketing is so good that people that should know better will claim that its performance is on par with native code. ::)

GullRaDriel

What torhu said +10 ^^

gnolam

Java applications even slow down super computers. :P

Nobody in his right mind would use Java on a supercomputer, so that's a non-issue. ;)

Neil Walker

When you are creating truly enterprise level systems you need the backing of some beefy application servers that manage your session replication/sticky sessions, load balancing, thread/jdbc pools, etc. For that, this is where java stands out due to products such as Weblogic. Not to mention the use of frameworks such as Hibernate, Spring, etc.

Apologies if my two posts sound like I'm a Java fanboy :-[

james_lohr
gnolam said:

Nobody in his right mind would use Java on a supercomputer

*cough*

kenmasters1976

I remember when I thought Java was great, but having an old machine I now avoid anything written in Java at all costs.

gnolam

*cough*

Just because MPI bindings exist for a language doesn't mean it's a good idea to use it.

Matthew Leverton

My comment was referring to desktop (GUI) applications. I don't care what benchmarks say... every Java application I run maxes out memory and slows the computer down to a frozen state. It's like an instant throwback to 1985. :P

I don't really care about Java for web applications because they tend to just be for stuffy corporate things that I never have to use.

bamccaig

The problem is moreso Windows than Java. :P It performs much better in GNU+Linux. :D It's no different than the .NET framework. Installing that is a few hundred megabytes too, IIRC, depending on how much of it you install. The size of C:\Windows\Microsoft.NET on this workstation is 1009 MiB (almost a GiB). The fact that Microsoft's platform runs faster on their own OSes shouldn't surprise anyone for any number of reasons. I think that Java is more mature and more customizable though. Google makes extensive use of Java. You just gotta know what you're doing, I guess... :)

type568

But you can't even initiate a simple ping request to a remote host with Java. How can you call a static typed language mature if you can't ping with it? :-\

james_lohr
gnolam said:

Just because MPI bindings exist for a language doesn't mean it's a good idea to use it.

I wasn't even aware that this existed. Java was the language taught at our University, but we were still (quite rightly) forced to use plain C for our MPI projects.

I was actually referring to the fact that it's fairly common in industry to chuck Java solutions onto "supercomputers". Though to be fair I'm just talking about powerful servers (32/64-core 3Ghz machines is what we have where I work). Still pretty "Super" to the likes of you and I, but nothing like the massively parallel machines you would hope to run an MPI application on.

bamccaig
type568 said:

But you can't even initiate a simple ping request to a remote host with Java. How can you call a static typed language mature if you can't ping with it? :-\

A 5 second Google search suggests that java.net.InetAddress.isReachable(int) sends a ping request and returns true if successful.

???

Felix-The-Ghost

every Java application I run maxes out memory

Minecraft does that to me. I can barely run it on this older computer and with any computer it uses like 600MB of memory. I have to play on low quality graphics cause turning on "high quality" crashes the game from lack of available memory. (Brand new Windows 7 64bit)

bamccaig
  1. That doesn't necessarily mean that Java is the problem.

    1. It could be Notch's code quality. A lot of people believe the code must be really bad for the bugs seen over its lifetime.

    2. It could be that Minecraft legitimately requires a lot of memory to run [on a garbage collected OO platform].

    3. It could be Windows 7 itself. It's not exactly a light-weight OS.

      • Just because your computer was sold with Windows 7 doesn't mean it was intended to run Windows 7 well. Most retail PC bundles sold are junk.

CursedTyrant

I think it's mostly Notch's code quality. There was a time when Minecraft ran horribly slow for me on an AMD Phenom II X6 3.1 Ghz (something over 3.0, anyway), 8 GBs of DDR3 RAM and a GeForce 560 TI with 1GB of VRAM. It's not exactly a slow computer.

To be fair, Minecraft runs perfectly fine now.

Quick tip (in case somebody doesn't know that yet): Installing a 64-bit version of JRE on a 64-bit system will help Minecraft run smoother.

Neil Walker

A quick scan shows that BOOST comprises 37,000 files and 400MB of data. Now which is a bloated library. Stick that up your C++ arse Felix ;)

Oscar Giner
bamccaig said:

The problem is moreso Windows than Java. It performs much better in GNU+Linux.

You're so biased :/. Java runs just as bad on Linux than on Windows. (If you're noticing a significant difference in performance, it probably is because you have the 64-bit version in Linux, but the 32-bit version on Windows (Sun thinks all Windows users are stupid, and won't let you even download the 64 bit version if you're not surfing with IE 64 bit version ::)), see next paragraph for more).

Quick tip (in case somebody doesn't know that yet): Installing a 64-bit version of JRE on a 64-bit system will help Minecraft run smoother.

This is true. Not only for Minecraft, but also for other Java based games, and the performance difference is pretty big. Now, if java 64 bit installer wasn't broken so I could install it :P (it gives me a weird error message at some point and the installation fails).

Dizzy Egg

Can more people slate Java please as I hate the b*stard thing. People give me 17,295 reasons why Java is better than my beautiful C, and all 17,295 are as desperate as a crack whore 2 days after the benefit cheque is cashed.

As always I'm inebriated, so more vocal than I should be, but with that in mind Java smells like an obese persons discharge and takes up just as much room.

~fin~

Arthur Kalliokoski

Java was the 1990's version of BASIC.

Felix-The-Ghost

A quick scan shows that BOOST comprises 37,000 files and 400MB of data. Now which is a bloated library. Stick that up your C++ arse Felix ;)

Boost is optional. All that Java crap seems mandatory. Originally this thread was just me wondering why it was so much bigger or even what a "framework" is other than bundling a bunch of stuff you won't use. Please tell me I'm wrong cause I don't really understand frameworks. Especially .NET :x

Wait are frameworks something that needs to be run in a virtual environment instead of the native machine language? Is that what runtime things are for?

Dizzy Egg

..again...desperate arguments

gnolam

Though to be fair I'm just talking about powerful servers (32/64-core 3Ghz machines is what we have where I work).

Yeah, when I say supercomputer, I mean something along the lines of the (at the time) TOP 500 beast we got to deploy our MPI code on. ;D

bamccaig

Boost is optional. All that Java crap seems mandatory. Originally this thread was just me wondering why it was so much bigger or even what a "framework" is other than bundling a bunch of stuff you won't use. Please tell me I'm wrong cause I don't really understand frameworks. Especially .NET :x

Wait are frameworks something that needs to be run in a virtual environment instead of the native machine language? Is that what runtime things are for?

A framework is just a related collection of libraries. Java and .NET both come with much larger standard libraries than C or C++. Which is good. It means that much more code can be reused and much fewer people reinvent the square wheel. You might not directly need those libraries, but Java software that you install might. You could either make the user's life Hell and make them go out and install those packages manually every time a new dependency occurs; bundle redundant copies of dependencies with software releases (like Windows DLLs), which results in a lot MORE wasted space; or you can install everything from the beginning and let developers rely on it being there. Since disk space and bandwidth are so cheap these days it's a no-brainer to do the latter.

type568
bamccaig said:

A 5 second Google search suggests that java.net.InetAddress.isReachable(int) sends a ping request and returns true if successful.

Official SUN API says it only checks access to the host, by available means. You can't be sure a ping will be sent, not to mention the ability to specify various ping parameters like packet size ttl or wait for t/o :-/

Arthur Kalliokoski
bamccaig said:

Since disk space and bandwidth are so cheap these days it's a no-brainer to do the latter.

Well, yeah, when you had a simple BASIC program that simply asked your name, then said "Hi <name!", it had all the graphical stuff and the PC speaker "sound" routines in it anyway, compiled or interpreted. It was just easier to do it that way so the poor dears using it wouldn't get confused.

bamccaig
type568 said:

Official SUN API says it only checks access to the host, by available means. You can't be sure a ping will be sent, not to mention the ability to specify various ping parameters like packet size ttl or wait for t/o :-/

Well I don't really know anything about the technical implementation of ping requests... According to Wikipedia it's an ICMP echo request, which is very low-level (i.e., below TCP/UDP)... From another 3 minutes of Googling it sounds like a very low-level mechanism that is implemented through system calls (at least, in Windows, but likely also in UNIX because apparently only root can make it). So I don't think that you can directly do it in C or C++ either; you need to invoke a system call. I think that Java is able to call into C code so you could conceivably do the same thing with Java... I don't know for sure though. In any case, do you actually have a practical reason why this is needed (I've never needed it) or are you just being pedantic (it's a pretty arbitrary measure of language quality)? :P

Well, yeah, when you had a simple BASIC program that simply asked your name, then said "Hi <name!", it had all the graphical stuff and the PC speaker "sound" routines in it anyway, compiled or interpreted. It was just easier to do it that way so the poor dears using it wouldn't get confused.

That's not the same thing at all... :-/

MiquelFire

Quick tip (in case somebody doesn't know that yet): Installing a 64-bit version of JRE on a 64-bit system will help Minecraft run smoother.

My experience says otherwise. I installed 64-java for some other program, and I was confused as to why Minecraft was so damn jerky. This was during a time Minecraft ran at some 300 fps.

type568
bamccaig said:

In any case, do you actually have a practical reason why this is needed

Yeah, I've been writing a program to run non-stop ping requests to a host, and collect statistics about a connection(loss, and delay). Of course various package sizes may produce various results, not to mention the actual number representing milliseconds elapsed being quite necessary.

I ended up actually calling system ping and manually parsing it's test output.

Also AFAIK this protocol isn't any below TCP/IP, it's just different.

Felix-The-Ghost
bamccaig said:

(like Windows DLLs), which results in a lot MORE wasted space

There's no way my programs/other programs I have use 700+ MB in space (e.g. alleg44.dll is a little more than 1 MB) but I see your point (standardized)

bamccaig
type568 said:

Also AFAIK this protocol isn't any below TCP/IP, it's just different.

(2 seconds of Googling and 60 seconds of reading...) Apparently java.net.Socket is a plain TCP socket wrapper and java.net.DatagramSocket is a UDP socket wrapper. So if the ping protocol was on top of TCP or UDP then you could do it.

There's no way my programs/other programs I have use 700+ MB in space (e.g. alleg44.dll is a little more than 1 MB)...

So if you were to install about 700 typically packaged Allegro games in Windows then it would be wasting about 700 MB of disk space. :P But it's not just your Allegro games that do this. It's everything: your IDE, your Web browser, your music player, your video player, etc., etc., etc., and not all libraries are as small or optimized as Allegro. It's not even uncommon for MinGW (and other open source, UNIX-like software) runtimes to be bundled with software that use them because they can't reliably install to a system-wide location and can't rely on the user to install them. :-/

Oscar Giner
bamccaig said:

So if the ping protocol was on top of TCP or UDP then you could do it.

It is not. ICMP is a transport protocol (level 4 on the OSI model), like TCP or UDP are (so it doesn't sit on top of either of them).

bamccaig

It is not. ICMP is a transport protocol (level 4 on the OSI model), like TCP or UDP are (so it doesn't sit on top of either of them).

I already said that. Pay attention. >:(

Oscar Giner

You said it in a previous post, my memory doesn't go that far :P. Anyway you said ICMP is below TCP/UDP, that's not true either, it's on par (they're all level 4 protocols).

bamccaig

Anyway you said ICMP is below TCP/UDP, that's not true either, it's on par (they're all level 4 protocols).

ICMP is level 3. :-X

BAF

Actually, ICMP is a layer 3 protocol. It sits alongside IP, BGP, etc. So it technically is lower than TCP/UDP. :P

[edit] Damn, beaten while reading/posting. Well, I'll finish the rest of my post then...

every Java application I run maxes out memory

There are some decent Java apps, but they are few and far between. Then again, it's just like PHP - the quality to junk ratio is quite low. :-X

bamccaig said:

The problem is moreso Windows than Java. It performs much better in GNU+Linux. It's no different than the .NET framework. Installing that is a few hundred megabytes too, IIRC, depending on how much of it you install. The size of C:\Windows\Microsoft.NET on this workstation is 1009 MiB (almost a GiB). The fact that Microsoft's platform runs faster on their own OSes shouldn't surprise anyone for any number of reasons. I think that Java is more mature and more customizable though. Google makes extensive use of Java. You just gotta know what you're doing, I guess...

Now we're blaming the operating system? As if Microsoft coded Windows specifically to slow down anything that isn't .NET. ::)

Where does Google make extensive use of Java? With Android? That's hardly relevant, because they're using a totally different runtime.

I feel that .NET does a much better job than Java. Sure, it doesn't have official Linux support, but mono is very well done.

bamccaig
BAF said:

Now we're blaming the operating system? As if Microsoft coded Windows specifically to slow down anything that isn't .NET. ::)

They didn't have to. .NET is considered a first-class citizen in Windows. It's even installed directly in the C:\Windows path. Perhaps more significant than that though is that it's developed by the same company that develops the operating system, meaning that they are free and likely to take advantage of intimate knowledge of the system and use lower-level access to the system APIs to achieve their goals.

For example, WinForms is effectively a wrapper over the Windows API (i.e., not really portable at all). Java, on the other hand, had a goal of being portable from day one, so I think that more effort is put into developing platform independence (something Microsoft doesn't really want and settles for as a compromise), which often means sacrificing performance. I don't know of any Java frameworks that use the native Windows GUI, but then I'm not a Java programmer so they might well exist.

That's just one example though. It's likely that .NET takes great advantage of its heritage on the Microsoft platforms, which is something that Java can't possibly do to the same degree. Everybody knows that it isn't uncommon for Microsoft to not document or to poorly document parts of the API. It's perfectly reasonable to assume that their .NET implementation has lower-level access than Java does.

BAF said:

Where does Google make extensive use of Java? With Android? That's hardly relevant, because they're using a totally different runtime.

I don't j0rb at Google so I don't know for sure, but I definitely get the impression that they use a lot of Java. What I do know:

  • Google Web Toolkit (GWT) is effectively a Java-compiler that compiles Java down into JavaScript. IIRC, the justification for this was that they already use a lot of Java and it's something that they embraced.

  • The Google Tech. Talks that I've seen on YouTube always seem to have some mention of Java as an unofficial use case.

  • Google apparently uses Jetty, which is a Java Web server. I don't know if any or all of the actual Google "Services" are running Jetty, but I suspect that they might be. I think that Java plays an intricate role in their ability to scale as massively as they do, but again I don't really know for sure what they do behind the scenes. I imagine there is also some native code where it counts.

  • Of course, there's Android, which is entirely built on the Java platform. Again, I think the reason for this is that they are already intimately familiar with it, and it has a number of advantages when you want code to be easily portable across hardware and OS releases.

BAF said:

I feel that .NET does a much better job than Java. Sure, it doesn't have official Linux support, but mono is very well done.

I like C#, the language, but I am regularly bitten by little or no documentation for parts of .NET, or at the very least hard to find documentation, and the ecosystem around .NET isn't very helpful. Maybe it's because I don't get certified on every namespace before using it :o, but I seem to encounter very obscure errors in every major library that I use in .NET, and they usually don't have workarounds or are very difficult to workaround or resolve. The core components in .NET are rather well put together, but the further you stray from there the more of a mess it becomes. There's a lot of redundancy that just doesn't make sense. It seems clear to me that departments within the .NET development teams don't seem to coordinate their efforts well. In any case, I'm not impressed with the APIs that I've used.

Java is basically C# without a few syntactic sugar features that I can live without. And it's actually considered free by the Free Software Foundation (though it took its timing getting there), which is a big thing if you care about software freedoms. I doubt that the standard framework is any better than .NET, but I doubt it's any worse either. Just different.

Matthew Leverton
BAF said:

There are some decent Java apps, but they are few and far between. Then again, it's just like PHP - the quality to junk ratio is quite low.

It shouldn't be true with Java. It is the "university" language. People are taught how to use it. Even good programmers write Java applications that suck. :P

PHP junk is created by no-talent n00bs.

Thomas Fjellstrom

It shouldn't be true with Java. It is the "university" language. People are taught how to use it. Even good programmers write Java applications that suck.

Just because you were taught how to write code, doesn't mean you know how to write good code.

verthex

Just because you were taught how to write code, doesn't mean you know how to write good code.

Of course not, since most teachers aren't good coders from the real world. They code bloated apps for college level courses such as applets. They never seem to make those things fast, they just work good enough. Plus Java is a language full of object passing (obviously) so its hard to make the code fast since OOP is the only program design available.

CursedTyrant

Hey, the guy who teaches us Java told us this is how we assign values to floats:

float x = (float)0.0;

I am not kidding. When confronted that it should be 0.0f without the cast, he said that "it is also okay". Go figure.

Neil Walker

Java was the 1990's version of BASIC.

so what is the 21st century equivalent we should be using then for developing embedded, gui, web or console based apps?

Timorg

In reality it seems to be php and html. It has a gui provided by html, and seems to support all the concepts taught in introduction subjects. It supports inheritence, and interfaces. I am sure it supports lots of other high level language features that would make it suitable.

Python could be the language of choice, just no one has written a decent browser plugin or UI toolkit.

I just remember having to program with BCB and shudder a little.

Arvidsson

Without Java we wouldn't have Minecraft which is THE indie game which has revolutionized indie business as we know it.

But I cant' get it to fucking run, so fuck Java!

type568

@mabbam

A'right, so it's below TCP, UDP but on par with IP :P
Still evil -.-'

bamccaig

It shouldn't be true with Java. It is the "university" language. People are taught how to use it. Even good programmers write Java applications that suck. :P

PHP junk is created by no-talent n00bs.

Universities don't teach people to use Java well... They teach them mostly their interpretation of the theories behind writing good software and some semi-correct practices and it's up to the students to put that knowledge into practice, which I've heard doesn't happen very often. I have heard stories of university graduates writing very stupid code. :P E.g. referencing GET/POST variables by numeric index into a string dictionary whose order is undefined, and overlooking and then fighting the need to implement server-side security mechanisms (on more than one occasion)... :-X And this was after years of employment in the field. :P

If you ask me, neither colleges nor universities can make you a good programmer. They can teach you the theories or practices, but it's up to the individual to actually filter out the good from the bad and use it effectively. I've heard a few examples of older programmers complaining about the "Java generation". I don't think that Java is necessarily the problem, but I do think that it's naive to focus on teaching Java to students. Learning a new language is easy, or at least it better be if you plan to make a career out of this. Instead of teaching them a language that holds their hand, they should throw them to the wolves and teach them C++ with GCC from the command line. >:( If they can't succeed in that environment then they shouldn't graduate, IMHO. The transition from C++ to Java is much easier than the other way around, so there's no reason it should be a problem for anyone. (And no, don't waste your breath saying that we should all be taught to program in assembly ... That's not the same thing and you know it :P)

verthex said:

Plus Java is a language full of object passing (obviously) so its hard to make the code fast since OOP is the only program design available.

Please verify the orientation of your encyclopedia. You may be holding it upside-down. Objects are implicitly passed by reference in Java (there is no other option), which is equivalent to passing a pointer, which is very efficient. :-/ Aside from that, there's a very miniscule penalty each time you dereference an object member, but it's completely negligible and will not drastically affect the performance of your application.

Hey, the guy who teaches us Java told us this is how we assign values to floats:

float x = (float)0.0;

I am not kidding. When confronted that it should be 0.0f without the cast, he said that "it is also okay". Go figure.

What's wrong with this:

Test.java#SelectExpand
1class Test 2{ 3 public static void main(String [] args) 4 {
5 float x = 0;
6 7 System.out.println("The value of x is '" + x + "'."); 8 } 9}

bamccaig@castopulence:~$ javac -Xlint Test.java
bamccaig@castopulence:~$ java Test
The value of x is '0.0'.
bamccaig@castopulence:~$ 

???

Oscar Giner
Quote:

ICMP is level 3. [en.wikipedia.org]

True, I got confused :-X.

bamccaig said:

For example, WinForms is effectively a wrapper over the Windows API (i.e., not really portable at all). Java, on the other hand, had a goal of being portable from day one, so I think that more effort is put into developing platform independence (something Microsoft doesn't really want and settles for as a compromise), which often means sacrificing performance.

That's a bad excuse. There are other multiplatform GUI frameworks that, also being very different from Win API, have very good performance (look at Qt for example). But it's not like .net GUI apps have very good performance either (although generally better than Java).

Quote:

There's a lot of redundancy that just doesn't make sense

You mean, like java's int vs Integer? :-/ I hated Java, as a language, just because of that :-X:P.

edit:

bamccaig said:

Instead of teaching them a language that holds their hand, they should throw them to the wolves and teach them C++ with GCC from the command line.

The best is to teach the best language for the problem at hand. At my uni, indeed they start teaching Java (it used to be Modula-2 before) in introductory courses, but then, when it comes to abstract data types, it's done in C++; OOP is done in Eiffel (and sometimes Java); system/OS programming in C and assembly. Then other more obscure languages, like Lisp and Prolog for artificial intelligence.

Neil Walker

I think it's just all down to doing it the proper way.

in float x=0, you're widening which is just an implicit cast as it's fine, but you'd add the explicit cast just because, maybe to show you haven't made a daft mistake in type or value.

If you have 'float x=0.0' that would fail because floating point numbers are double not float so the compiler thinks you're trying to narrow. I guess (float)0.0 and 0.0f are both just explicit casts and equal, just convention makes you use 0.0f as it's a literal, but there's nothing wrong with (float)0.0

[edit]
Indeed, if you are using Eclipse and enter 'float a=0.0;' the automatic solution to cast it changes it to (float)0.0 and not 0.0f.

CursedTyrant
bamccaig said:

What's wrong with this:

0 is probably a bad example, but that's the one he used. Consider trying to use 0.1, then the best way is to use 0.1f, and not (float)0.1. :P

Even if they're equivalent, writing 0.1f is faster than (float)0.1.

bamccaig

Even if they're equivalent, writing 0.1f is faster than (float)0.1.

There's no reason to think that is the case. The compiler should turn that into identical byte-code (i.e., no run-time conversation is needed).

Arthur Kalliokoski

IIRC I had a compiler (Borland?) a dozen years ago that would stuff the integer representation into a float variable.

float num = 16;

so the floating point representation would take it as a quiet nan (?), exponent was zero. Then I saw in Allegro code that just the decimal point would fix it.

float num = 16.;

Thomas Fjellstrom
bamccaig said:

There's no reason to think that is the case. The compiler should turn that into identical byte-code (i.e., no run-time conversation is needed).

I think he meant typing 0.1f is faster than (float)0.1

bamccaig

I think he meant typing 0.1f is faster than (float)0.1

Touché. :-[ I agree with that much. :P It's also easier to read.

jmasterx
bamccaig said:

Instead of teaching them a language that holds their hand, they should throw them to the wolves and teach them C++ with GCC from the command line. >:( If they can't succeed in that environment then they shouldn't graduate, IMHO.

Yes I completely agree with this. In my college programming class (in Java) we did not even cover what a package is or why they exist :O . We also did not cover any version control. If students are not even aware of compilers, linkers, version control, and in Java, packages, then how are they expected to succeed in the field just knowing:

JButton myButton = new JButton("I'm a Java Programmer!!!");

Because really the jist of what we covered were controls and action listeners.

Quote:

The transition from C++ to Java is much easier than the other way around, so there's no reason it should be a problem for anyone.

I really agree with this. I learned C++ on my own and then had my Java course. I never read a single page of the proposed Java book and finished the course with a perfect 100.0 . I must say, understanding pointers from C++ made it so easy when I transitioned to Java. I understood WHY ArrayLists<T> cannot use primitive types, and HOW Java, as my teacher puts it "magically" does things like memory management and polymorphism. Understanding function pointers and reference counted pointers from C++ made these concepts very easy to understand.

Therefore, even though a student may never need to use C++ in their every day work, if it is taught well, it makes every other language such as PHP, C#, Java etc very easy to learn. In real life I believe it is more of an asset to understand programming at a fairly low level in order to enable you to easily pick up any other language you are faced with because the reality is, you cannot just go job hunting for only Java Programmer positions, I fully expect my career as a programmer to encompass a variety of languages. The fundamental concepts I learned with C++ however will make learning new languages easier.

I should however note that in my Java Programming course, around 20% failed the course and around 40% were between 60 and 70 (60 is the passing grade in my part of Canada). Therefore I'm sure the argument most teachers would have is that they want students to pass. However, I do not think it is doing them a favor in the real world of programming. In the course I was in, with its difficulty, I'd say any grade below 90 was a failure to me.

bamccaig

^ This.

Today I stumbled across a rather good example of how shitty .NET actually is: System.UriBuilder. It's basically just a generic class for parsing and manipulating a URI. It consists of the URI scheme, username, password, host, port, path, query, and "fragment" (the part after the '#'). Pretty normal stuff. Look at this contrived example though:

Program.cs#SelectExpand
1using System; 2using System.IO; 3 4namespace Application 5{ 6 class Program 7 { 8 public static int Main(string[] args) 9 { 10 const string uri = "http://castopulence.org/fake?q=foo#bar"; 11 12 var builder = new UriBuilder(uri); 13 14 Console.WriteLine(builder); 15 16 // Oh, I want to modify the fragment, which is merely a dumb string:
17 builder.Fragment += "baz";
18 19 Console.WriteLine(builder); 20 } 21 } 22}

bamccaig@castopulence.org:~$ mcs Program.cs
bamccaig@castopulence.org:~$ mono Program.exe
http://castopulence.org:80/fake?q=foo#bar
http://castopulence.org:80/fake?q=foo##barbaz
bamccaig@castopulence.org:~$ 

--

C:\Users\bamccaig>csc Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


C:\Users\bamccaig>Program.exe
http://castopulence.org:80/fake?q=foo#bar
http://castopulence.org:80/fake?q=foo##barbaz

C:\Users\bamccaig>

:o ???

Things to note:

  • The redundant, explicit port was added because the scheme was recognized. It's unnecessary and only serves to clutter the URI. It was not specified in the original.

  • The Fragment property getter returns the '#' prefix, but the setter expects no prefix and adds one whether or not the string already begins with one. If you want to append onto it then you'd need to do something like this:

        builder.Fragment = builder.Fragment.Substring(1) + "baz";

  • Apparently in versions of .NET prior to 2.0, modifying either of the Query or Fragment properties would actually clear (i.e., erase) the other. :o This is confirmed by using the version 1.1 Mono compiler, mcs. The output of the second WriteLine when compiled with version 1.1 is http://castopulence.org:80/fake##barbaz[1].

References

  1. I would like to prevent the hyperlink, but the markup engine doesn't seem to let me...
Steve++

I don't really care about Java for web applications because they tend to just be for stuffy corporate things that I never have to use.

Obviously you're referring to enterprise editions earlier than version 6. JSF 2.0 + JPA 2.0 + EJB 3.1 + CDI 1.0 on GlassFish 3.1.1 is an excellent platform for building web apps that scale. Boilerplate code is almost non-existent. This version of the EE spec makes third party frameworks such as Spring and Struts irrelevant. I would agree that J2EE (i.e. 1.4 and earlier) were for big stuffy corporations with more money than sense. Java EE 5 was somewhere in the middle. Java EE 6 is made for the public web.

JSF 2.0 is leagues ahead of any ASP.NET MVC crap that Microsoft has released.

Compare the time spent installing Visual Studio 2010 (Professional or Premium) vs. JDK7 + NetBeans 7.0.1. Visual Studio is much slower.

Matthew Leverton

But who uses JSF? I've never run across (Chicago area) for-hire "agile" web developer groups who use any Java related technologies as part of their core solution. In-house teams use Java, but only because the man upstairs says to. That's not to say JSF is no good; it's just a bit strange that no developers who actually get to pick their poison seem to use it.

I personally dislike Java and .NET for web applications because they are just too ridiculously convoluted and removed from actual web programming. They seem to solve problems that don't really exist except to the person who doesn't understand basic principles of web programming.

Steve++

I personally dislike Java and .NET for web applications because they are just too ridiculously convoluted and removed from actual web programming. They seem to solve problems that don't really exist except to the person who doesn't understand basic principles of web programming.

I guess that's just down to your taste and perhaps the type of projects you undertake. The subset of Java EE 6 I'm using is a very nice fit for my project. I had started with php, but it got too messy too quickly.

I'll admit, the learning curve for JSF 2.0 (even assuming you have a good working knowledge of Java, EJB 3.1 and JPA 2.0) is much steeper than that of PHP. But the problem with PHP is you inevitably need a framework to manage the complexity and cross-cutting concerns of larger web applications, whether that be your own framework or someone else's.

Quote:

But who uses JSF? I've never run across (Chicago area) for-hire "agile" web developer groups who use any Java related technologies as part of their core solution. In-house teams use Java, but only because the man upstairs says to. That's not to say JSF is no good; it's just a bit strange that no developers who actually get to pick their poison seem to use it.

I agree. It's hard to find a decent sized JSF2 community outside stackoverflow. My guess is that, just like EJB 3.x, JSF 2.0 suffers from the bad reputation earned by the previous version, 1.1. Although 2.0 is an evolution rather than a revolution, it's a pretty damn big step up, especially the AJAX support. Another thing to consider is that JSF 2.0 isn't available to organizations until they upgrade their application servers to the Java EE 6 compliant versions. As usual, the industry drags its heels when it comes to implementing the latest EE version.

J-Gamer
bamccaig said:

Instead of teaching them a language that holds their hand, they should throw them to the wolves and teach them C++ with GCC from the command line. >:( If they can't succeed in that environment then they shouldn't graduate, IMHO. The transition from C++ to Java is much easier than the other way around, so there's no reason it should be a problem for anyone. (And no, don't waste your breath saying that we should all be taught to program in assembly ... That's not the same thing and you know it :P)

We have learned the basics of OOP with Python, and after 6 weeks we transitioned to C++(and we had to compile our first programs from the command line :p). A week later, in another class, we started learning MIPS Assembly. Happy now? :D

PS: If we don't comment our code well enough, or don't keep to the code conventions, proper OOP etc. we won't be able to get much points...
I guess our university is the exception to the rule... All other universities teach Java.

l j

We had to start programming in Java and first had to compile and run everything from the command line.

They haven't taught us proper programming yet (I think they will though), but the teachers (or some of them...) do assume that we are smart enough not to write shit code. Just making the program work does not guarantee a good score.

Oh and we have also been taught a little bit of assembly.

james_lohr
bamccaig said:

Instead of teaching them a language that holds their hand, they should throw them to the wolves and teach them C++ with GCC from the command line. If they can't succeed in that environment then they shouldn't graduate, IMHO.

Practical content like this is boring to teach and boring to learn. A CS Degree is supposed to be theoretical. If you want to learn language/platform specific crap like this, then go study at some shitty polytechnic. This is the type of stuff that people can work out in their own time, and it most certainly should not be part of any self-respecting CS degree.

Thomas Fjellstrom

This is the type of stuff that people can work out in their own time, and it most certainly should not be part of any self-respecting CS degree.

Except MOST people don't, and won't.

james_lohr

Except MOST people don't, and won't.

Which isn't really an issue. If they were smart and conscientious enough to get good grades at a good university, then they'll be able to pick this type of stuff up pretty quickly on the job. ...or they'll fail the tech-test and not get a job in the first place.

It's not really the University's problem. University is there to teach cool theory, not to create good/employable programmers. The less this is polluted by practical stuff that really belongs in a polytechnic, the better.

Thomas Fjellstrom

or they'll fail the tech-test and not get a job in the first place.

Except that doesn't happen. There are a lot of completely unqualified people getting jobs in IT. Probably because the people doing the hiring are just as unqualified.

Quote:

It's not really the University's problem. University is there to teach cool theory, not to create good/employable programmers. The less this is polluted by practical stuff that really belongs in a polytechnic, the better.

Are you trolling? I thought the point of university was to educate, and produce productive individuals. Or is it really that the only reason to go to university is if you want to become a professor, or research theorist?

Matthew Leverton

Are you trolling?

Of course he is. There is some truth to what he's saying, but it's overstated. The term "computer science" is very general and means different things in different universities, but all of them should require proficiency in at least one language.

I majored in Theoretical Computer Science and took pattern recognition courses, AI, software design, etc. Most of those things would be very difficult to teach without presenting some practical problems that require one to program a solution.

But universities should focus on teaching programming concepts as opposed to going into lots of depth in a single language. Learning how to build your own data structure in C is more important than learning how to use the STL containers. (My university actually teaches IBM z/OS assembly as its introductory course.)

james_lohr

Are you trolling?

Always.

Quote:

I thought the point of university was to educate, and produce productive individuals. Or is it really that the only reason to go to university is if you want to become a professor, or research theorist?

Its purpose is to provide a strong theoretical basis, and to broaden the mind. Produce productive individuals? Are you trolling? :P

bamccaig

Practical content like this is boring to teach and boring to learn. A CS Degree is supposed to be theoretical. If you want to learn language/platform specific crap like this, then go study at some shitty polytechnic. This is the type of stuff that people can work out in their own time, and it most certainly should not be part of any self-respecting CS degree.

Which isn't really an issue. If they were smart and conscientious enough to get good grades at a good university, then they'll be able to pick this type of stuff up pretty quickly on the job. ...or they'll fail the tech-test and not get a job in the first place.

It's not really the University's problem. University is there to teach cool theory, not to create good/employable programmers. The less this is polluted by practical stuff that really belongs in a polytechnic, the better.

I completely agree. And with that in mind, a university degree should NOT be enough to get you a job in the industry. >:( They aren't teaching you to actually be useful so you shouldn't expect to be hired until you've proven yourself practically useful by other means (e.g., a portfolio of source code or a practical diploma). Unfortunately, that isn't what happens. University graduates are considered smarter and more useful, so they are picked first, and payed extra, but all too often they're actually useless because they don't know how to apply the theory that they've learned and mostly forgotten. Then they end up doing brilliant things like creating a new table in the database for every record and one of the "polytechnic" graduates has to come along and shred -uz their work and start over (with the budget already gone). >:(

I wish I could remember what this one graduate's thesis was about. It would make you cringe. They graduated cum load laude from their "university" though, IIRC.

Thomas Fjellstrom

Its purpose is to provide a strong theoretical basis, and to broaden the mind. Produce productive individuals? Are you trolling?

So basically there is no practical reason to go to university?

james_lohr

So basically there is no practical reason to go to university?

Of course there is: to provide a theoretical foundation to anything practical you might do.

type568

So basically there is no practical reason to go to university?

Wo-hooooooo! I leave that thing then!

verthex

Practical content like this is boring to teach and boring to learn. A CS Degree is supposed to be theoretical. If you want to learn language/platform specific crap like this, then go study at some polytechnic. This is the type of stuff that people can work out in their own time, and it most certainly should not be part of any self-respecting CS degree.

You're correct except that a lot of folks don't stay in academia after earning a cs degree and they actually think they recieved a degree to run Oracle, microsoft servers, and other specific tools which require "certification". And no employer will hire someone in honolulu without one, even with a masters. Maybe in your geographic area its different.

james_lohr

You're having a laugh right? Oracle / Java / Microsoft Servers certification is such a joke that most companies consider it a negative to have it on a developer's CV. Sure, if you want to work for a "Helpdesk" or be a DBA, then this type of certification makes sense, but it's not what employers look for in developers.

[edit]

Between this and the WoW thread I've nearly completely satisfied the troll in me. ;D

Thomas Fjellstrom

You're having a laugh right? Oracle / Java / Microsoft Servers certification is such a joke that most companies consider it a negative to have it on a developer's CV.

Bullshit. In many places they are a requirement. No cert, no job.

verthex

Sure, if you want to work for a "Helpdesk" or be a DBA, then this type of certification makes sense, but it's not what employers look for in developers.

It has more to do with company resources and the lack of training involved with hiring someone new out of college. I'm serious, I'm not kidding.

james_lohr

I'll concede that that was one of my more blatant trollings of the today. ;D

But yeah, the number of "Certified Java Sun Programmer"s that fail our Java tech-test is amusing. :-X

verthex

But yeah, the number of "Certified Java Sun Programmer"s that fail our Java tech-test is amusing. :-X

Because that's company specific. You're company may need java for something more specialized besides what the Certified Java Sun Programmer"s taught them. Java is very broad based. If you're company named XYZ made a certification for whatever goals they required and were asked to give those to new recruits I'm sure they would pass those too. Running an oracle database by the way is mostly by the book. I'm not sure if they can fine tune the fucking thing like mysql.

Arthur Kalliokoski
verthex said:

You're company may need java for something more specialized besides what the Certified Java Sun Programmer"s taught them.

It seems to me that if you're certified at a language, you can use all aspects of that language, not certified that you've memorized a few specific algorithms to use with that language.

verthex

It seems to me that if you're certified at a language, you can use all aspects of that language, not certified that you've memorized a few specific algorithms to use with that language.

Right and I can remember all the jargon off the top of my head and put that down on a test. Java2s is a great site for filling in those blanks. But can you use that on a test? NOOOOOOOOOOO!

james_lohr
verthex said:

Because that's company specific.

Our company test is extremely general. Any reasonably good and experienced programmer (java/C/C++) will pass it comfortably. Our conclusion was that this particular Certification is not to be taken seriously.

Quote:

Running an oracle database by the way is mostly by the book. I'm not sure if they can fine tune the ing thing like mysql.

Oracle is a monstrosity. There is almost no limit to much depth you can go into fine-tuning the beast. It's horrifyingly complex compared to the more modern databases.

BAF
bamccaig said:

For example, WinForms is effectively a wrapper over the Windows API (i.e., not really portable at all). Java, on the other hand, had a goal of being portable from day one, so I think that more effort is put into developing platform independence (something Microsoft doesn't really want and settles for as a compromise), which often means sacrificing performance. I don't know of any Java frameworks that use the native Windows GUI, but then I'm not a Java programmer so they might well exist.

Well, let's compare the quality of Java UIs with that of WPF or Winforms. Portable GUI code is nothing but problematic anyway; for a good user experience, the UI should not be portable, IMO.

Quote:

Google Web Toolkit (GWT) is effectively a Java-compiler that compiles Java down into JavaScript. IIRC, the justification for this was that they already use a lot of Java and it's something that they embraced.
Of course, there's Android, which is entirely built on the Java platform. Again, I think the reason for this is that they are already intimately familiar with it, and it has a number of advantages when you want code to be easily portable across hardware and OS releases.

These two are totally irrelevant, especially GWT. You could just as easily compile a subset of C# down to javascript with the same result. And Android could have just as easily been built on mono instead of dalvik. These two show nothing about Java, especially when you consider they aren't using the official runtime or anything.

Quote:

but I am regularly bitten by little or no documentation for parts of .NET, or at the very least hard to find documentation, and the ecosystem around .NET isn't very helpful.

Strange, because I've had exactly the opposite experience. Usually, the APIs are so well put together that you don't even need documentation, and when you do, I've never had a problem finding anything. Maybe you're just using shitty third party libraries or something. Or, you just don't know how to read? ???

bamccaig said:

Today I stumbled across a rather good example of how .NET actually is: System.UriBuilder.

Is this another example of "being bitten by little or no documentation for parts of .NET?" Because in under 30 seconds, I found that the fragment issue is well documented, as well as the output of the port numbers. A quick click over to the constructor you're using shows that the port value is assigned, and therefore will be included in the output. Nothing mysterious going on here, it's all 100% documented.

torhu

The UriBuilder issue does look a bit like a case of implementation and docs disagreeing. ::)

MSDN said:

The display string does not contain the Port property value if the Port property was not set and a port was not specified when the UriBuilder was constructed.

bamccaig
BAF said:

These two are totally irrelevant, especially GWT. You could just as easily compile a subset of C# down to javascript with the same result. And Android could have just as easily been built on mono instead of dalvik. These two show nothing about Java, especially when you consider they aren't using the official runtime or anything.

What the fuck does this have to do with anything? Google choses to use Java. That's the only point that I was making... There are many implementations of the Java runtime. Sun's implementation isn't the only one. Also, if we're only talking about "official" implementations then .NET isn't even cross platform. ::) n00b.

BAF said:

Usually, the APIs are so well put together that you don't even need documentation,...

Herp derp, I'm going to push this code into production without reading the documentation to know that it implicitly drops the database...[1] ::)

BAF said:

Is this another example of "being bitten by little or no documentation for parts of .NET?" Because in under 30 seconds, I found that the fragment issue is well documented, as well as the output of the port numbers. A quick click over to the constructor you're using shows that the port value is assigned, and therefore will be included in the output. Nothing mysterious going on here, it's all 100% documented.

I don't give a fuck if stupid behavior is documented. It's still stupid. You're not helping your argument any...

References

  1. There actually are APIs in .NET that do something along these lines...
BAF
torhu said:

The UriBuilder issue does look a bit like a case of implementation and docs disagreeing.

The docs clearly state that the constructor he is using assigns the port property.

bamccaig said:

What the does this have to do with anything? Google choses to use Java. That's the only point that I was making... There are many implementations of the Java runtime. Sun's implementation isn't the only one. Also, if we're only talking about "official" implementations then .NET isn't even cross platform. n00b.

The whole discussion at that point was about Java sucking up resources and running like shit. So bringing GWT and Android in as arguments is like comparing apples to oranges at that point.

Quote:

I don't give a if stupid behavior is documented. It's still stupid. You're not helping your argument any...

You were ranting about the class doing strange things, and hinting at it being undocumented, and making it sound as if you had to do a bunch of experimentation to figure out what was going on. I was pointing out that it is fully documented, and not mysterious. Of course, the fact that Mono and .NET had the same exact output probably should have tipped you off as well.

If you don't want the port shown, clear the port property. When you parse the URI, you have to assign port to something (it's likely deferring to the Uri class for handling that), and at that point, it has no knowledge if it's default or not. It doesn't seem stupid at all to me.

I'm not sure about the other issue. I don't know enough about the use case or what's going on to know if it's stupid or not.

The bottom line is, contrary to your previous argument, there is nothing mystical and undocumented going on here.

bamccaig
BAF said:

The docs clearly state that the constructor he is using assigns the port property.

Merely assigning the port property is irrelevant. It would make sense if my URI actually had a port in it that it should assign the port. If there's no port then it should not because there's actually no port specified to assign. A URI is just a dumb URI. A URI parser should represent exactly what was parsed, and the port was not specified and is never needed when the scheme maps to a single default port (all implementations know the port and it's redundant to specify it). Therefore, adding that is completely useless clutter, and might even confuse some users of software that does explicitly specify the port.

BAF said:

The whole discussion at that point was about Java sucking up resources and running like shit. So bringing GWT and Android in as arguments is like comparing apples to oranges at that point.

No, you disputed the fact that Google uses a lot of Java and I provided examples known to me that suggest that Google does indeed use a lot of Java. That's what the discussion at that point was about. n00b.

BAF said:

You were ranting about the class doing strange things, and hinting at it being undocumented, and making it sound as if you had to do a bunch of experimentation to figure out what was going on. I was pointing out that it is fully documented, and not mysterious. Of course, the fact that Mono and .NET had the same exact output probably should have tipped you off as well.

I made absolutely no reference to documentation in the aforementioned post. The only thing that I said about the port is that it's unnecessary, redundant, clutter and misrepresents the original URI (there is a distinction between equivalence and equality).

BAF said:

If you don't want the port shown, clear the port property. When you parse the URI, you have to assign port to something...

Why should somebody have to take extra action for normal behavior instead of somebody that wants abnormal behavior taking special action? Your argument does not make sense. I'm arguing that it was designed stupidly. You're arguing that it can be worked around. That's a null argument.

BAF said:

...(it's likely deferring to the Uri class for handling that), and at that point, it has no knowledge if it's default or not. It doesn't seem stupid at all to me.

Firstly, it seems completely redundant to have a Uri class that can already parse a URI and also having a UriBuilder which doesn't seem to add any additional [useful] functionality. Which seems to only support my argument that .NET is both poorly organized and poorly designed.

Secondly, there's no reason the UriBuilder can't track whether or not the port was explicitly set and undo any "damage" or obscuring that the internal implementation may cause. That's sort of the point of classes and encapsulation. I don't care how you do what you do internally. I only care that you expose something sensible to me. That's the whole fucking point of a [well-written] library or framework[, which .NET clearly is not].

torhu
BAF said:

The docs clearly state that the constructor he is using assigns the port property.

Not that clearly as far as I can tell...

From [UriBuilder Constructor (String):

Quote:

This constructor initializes a new instance of the UriBuilder class with the Fragment, Host, Path, Port, Query, Scheme, and Uri properties set as specified in uri.

From UriBuilder.Port Property:

Quote:

If a port is not specified as part of the URI, the Port property returns the value of -1 to indicate that the default port value for the protocol scheme will be used to connect to the host.

From UriBuilder.ToString Method :

Quote:

The display string does not contain the Port property value if the Port property was not set and a port was not specified when the UriBuilder was constructed. The display string also does not contain the Port property value if the Port property or port number for the constructor was set to a value of -1.

Steve++
BAF said:

Well, let's compare the quality of Java UIs with that of WPF or Winforms. Portable GUI code is nothing but problematic anyway; for a good user experience, the UI should not be portable, IMO.

Let's not. As much as I like Java (EE 6) for web development, I'll concede that Java was never a serious contender in the desktop space. You're wrong, though, about Swing's poor quality (which I see mainly as a lack of features) being a result of its portability. You could have all sorts of bells and whistles and eye candy in a portable UI framework. WPF is a good example of a portable (in principle, though no one has done it) UI framework with loads of features and eye candy. Perhaps the thing that held the Java team back was that they supplied a native look-and-feel for each operating system and could only do so by targeting the lowest common denominator.

bamccaig
I said:

BAF said:

If you don't want the port shown, clear the port property. When you parse the URI, you have to assign port to something...

Why should somebody have to take extra action for normal behavior instead of somebody that wants abnormal behavior taking special action? Your argument does not make sense. I'm arguing that it was designed stupidly. You're arguing that it can be worked around. That's a null argument.

More importantly, if the URI being parsed is entirely dynamic then my application can't know if the port was specified or not without parsing the URI; which was sort of the point of using UriBuilder in the first fucking place. If I need to manually parse a URI anyway then .NET isn't doing me any favors. Which is exactly the point that I was making.

verthex

Oracle is a monstrosity. There is almost no limit to much depth you can go into fine-tuning the beast. It's horrifyingly complex compared to the more modern databases.

I know there is an autotune feature. I'm pretty sure that's more modern than mysql.

james_lohr

By "modern" I mean databases which have been born (or reborn) more recently than Oracle. Oracle is certainly up-to-date with the most advanced features, and probably still the most reliable and powerful database: it is, after all, still the de facto industry database ...but it is extremely (and unnecessarily) complicated because it is bloated with legacy features which can't be pulled because so many businesses are dependant upon them.

Steve++

bloated with legacy features which can't be pulled because so many businesses are dependant upon them

And it is so bloated, in fact, that there is no appetite for introducing paradigm-shifting features such as boolean columns and identifiers longer than 30 characters.

But who uses JSF?

More on this... The PrimeFaces group on facebook currently has 1,470 approved members. Outside of facebook, the forum has over 10,000 users with almost 50,000 posts. PrimeFaces users represent only a subset of JSF 2 developers. There are communities around other component suites such as IceFaces, RichFaces, Trinidad, etc. So they're definitely out there and likely number in the tens of thousands. And that's despite the face that you can barely find a job listing anywhere for JSF 2.

Matthew Leverton

If this is any indication of relative popularity, on StackOverflow: 174K PHP tags vs 103K ASP.NET tags vs 7K JSF tags.

Thomas Fjellstrom

If this is any indication of relative popularity

It may be. But it may also be an indication of relative intelligence.

bamccaig

^ This. :-/

Matthew Leverton

But it may also be an indication of relative intelligence.

Yes, it is mostly an indication of how many n00bs are asking questions. But that is probably highly correlated with the total number of users.

gnolam

OT: every time I read the thread title I think of this clip from Invader Zim:

video

Steve++

7K JSF tags

More like 8.5K if you include jsf-2.0, although it's still in the ballpark. But that's all beside the point because it's just a snapshot. Compare the node.js tag, for example, and you'll see what I mean. Version 2 of the JSF spec is quite new and has been steadily gaining in popularity.

verthex
Steve++ said:

So they're definitely out there and likely number in the tens of thousands. And that's despite the face that you can barely find a job listing anywhere for JSF 2.

What about Erlang?

Steve++

Erwhat?

Neil Walker

I know a bloke called Erland.

verthex
Quote:

Erwhat?

Its a programming language very much unheard of in the real world. I've yet to find one job listing for someone with skills to use Erlang. And believe me I've gone to interviews for systems that use COBOL.

Karadoc ~~
verthex said:

Its a programming language very much unheard of in the real world. I've yet to find one job listing for someone with skills to use /x/

That description would fit many many different languages, wouldn't it?

verthex

That description would fit many many different languages, wouldn't it?

True but its in context to Java.

Steve++

When Java arrived on the scene, C++ was in its heyday. C++ is a complex language with multiple implementations and no standards for class formats. All but the hardest of hardcore template metaprogrammers use only a subset of the language they feel safe with. The standard libraries (STL and the C standard library) are fairly sparse in the functionality they offer, leaving programmers in an ecosystem with multiple third-party options to perform the most basic tasks such as building a basic desktop UI.

Then Java came along. It offered a simple, compact language, a managed platform instead a loaded gun pointing at your foot, binary compatibility between multiple platforms and implementations of networking standards such as TCP/IP and HTTP, just to name a few of the features. Sure, there were the performance drawbacks of bytecode interpretation and unpredictability of garbage collection, so C++ always had its place, but that's been shrinking to a narrow niche for a long time because very few applications need that kind of performance. And Java's performance has improved considerably over the last 16 or so years.

Arthur Kalliokoski
Steve++ said:

a loaded gun pointing at your foot

Java

You write a program to shoot yourself in the foot and put it on the Internet. People all over the world shoot themselves in the foot, and everyone leaves your website hobbling and cursing.
You amputate your foot at the ankle with a fourteen-pound hacksaw, but you can do it on any platform.
http://www.toodarkpark.org/computers/humor/shoot-self-in-foot.html

bamccaig
Quote:

  • Perl

    • You separate the bullet from the gun with a hyperoptimized regexp, and then you transport it to your foot using several typeglobs. However, the program fails to run and you can't correct it since you don't understand what the hell it is you've written.

    • You stab yourself in the foot repeatedly with an incredibly large and very heavy Swiss Army knife.

    • You shoot yourself in the foot and then decide it was so much fun that you invent another six completely different ways to do it.

    • There are so many ways to shoot yourself in the foot that you post a query to comp.lang.perl.misc to determine the optimal approach. After sifting through 500 replies (which you accomplish with a short Perl script), not to mention the cross-posts to the perl5-porters mailing list for which you upgraded your first sifter into a package, which of course you uploaded to CPAN for others who might have a similar problem (which, of course, is the problem of sorting out e-mail and news, not the problem of shooting yourself in the foot), you set to the task of simply and elegantly shooting yourself in the foot, until you discover that, while it works fine in most cases, NT, VMS, and various flavors of Linux, AIX, and Irix all let you shoot you in the foot sooner than your Perl script could.

8-)

verthex
Steve++ said:

All but the hardest of hardcore template metaprogrammers use only a subset of the language they feel safe with.

Java/C++ is like a coffin. The more you code with it the more you stay there.

Karadoc ~~

I've never tried coding with a coffin, so that's interesting information.

verthex

I've never tried coding with a coffin, so that's interesting information.

You could replace the word coffin with quicksand.

Matthew Leverton

I've never tried coding with a quicksand, so that's interesting information.

Specter Phoenix

Can't answer this as I've not messed with it outside the Hello World app.

Arthur Kalliokoski

I tried Hello World with a quicksand, but it looked more like Goodbye World until somebody pulled me out.

jmasterx

Output of helloworld.c with a quicksand:

#SelectExpand
1H 2^^E^^^^^ 3^^^^^^^^^ 4^^L^^^^^^ 5~~~~~~~~~ 6~~~~~~~~~ 7~~~L~~~~~ 8~~~~~~~~~ 9~~~~~~~~~ 10-----O--- 11----- --- 12-----W--- 13-----O--- 14-----R--- 15.....L.... 16.....D.... 17.....!....

Arvidsson

I prefer a coffin.

Thread #609060. Printed from Allegro.cc