You don't need to hire an expert in language X, you can and should look for expert programmers that are willing to learn language X. An expert can easily cross over from being a novice in any language in a matter of a few weeks.
I read this a lot, but it's misleading, and raises wrong expectations. While learning a new syntax and grammar can be done in hours, it doesn't buy you much. To get to that 10x productivity level on a real-world project, you have to master the whole ecosystem surrounding a language - standard libraries, open-source libraries, tools, idiomatic use, patterns, conventions, best practices, common architectures etc.
As an example, coming from Java, if I switch to Ruby, how long before my code truly follows "the ruby way"? How long before I know the ins and outs of Ruby on Rails and the standard libraries including their gotchas? How long before I can architect a serious ruby application that makes good use of its meta programming facilities, instead of one that looks as if it was ported from Java?
Or, as another example, if you switch from Ruby to Java, let's say on a web project: How long before you can make a informed choice which web framework to pick? How long before you know the architecture implications of picking Hibernate, and when iBatis would be a better match? To know what Spring can do for you, and what you are giving up by not using it? Until you know even a standard set of tools like Eclipse plus which plugins to use, FindBugs, Ant, Cruise Control, Emma,..., plus another dozen or more libraries typically used even on a small Java web project.
Of course, you can be productive even when you don't yet know all these things, and are still learning - but you won't be productive on the expert / 10x level we are talking about. By all means, become an expert in as many languages as you can - but don't plan on getting there in 24 hours, days or even weeks.
(Disclaimer: Switching between fairly similar environments, e.g. Java C#, is of course much easier).
I've been looking for an RDBMS for running on OpenBSD and Postgresql doesnt quite cut it with the lack of certain features.
Come on, don't tease us;) - which ones?
Postgresql holds a niche, the spot between baby databases like mysql/sqlite and RDBMSes
One of the open-source, "real" RDBMSes that has been missing in the discussion so far, is MaxDB, former SAP DB. We've got it in production in a "serious" app (real money, heavy load), and so far it really does scale well with bigger hardware (additional processors, RAM, disks).
One disadvantage with MaxDB is that it is lacking in mindshare compared to some others, although that is slowly improving - Google already finds three times more hits for MaxDB than SAP DB. Until now, there are no good books about it.
Another disadvantage is its stored procedure language - rather primitive and heavily underdocumented. PostgreSQL, for example, shines in that respect.
COVER STORY: - SQL:2003: including XML and administration of external data
TESTLAB: - Suse Linux Enterprise Server 9 - Middcor.Net:.Net cooperating with J2EE and CORBA - Server Management: Tatung's TUD 4010 and Fujitsu-Siemens-Computers' BX 600
REPORT: - Programming lightweight, powerful clients - Software components in the.Net framework - ITIL for better IT
KNOW-HOW: - Schema language Relax NG - Jakarta offshoot Slide
HANDS-ON: - Doctype switching decides rendering of (X)HTML - Hard disk management under Linux
Some NEWS, mostly conference reports (Siggraph, Linux fair, 60th IETF meeting, KDE Community World Summit, CHES 2004 Crypto-conference)
P.S.: I read iX only from time to time, because it's not my main area of interest. But the articles are IMHO of good technical depth and detail, and thoroughly researched.
Personally, I'm less than impressed. Why should I cheer and hooray about PHP introducing some OO features in PHP in 2004 almost all of which Java has had since version 1.0 in 1995? Is that supposed to be a great feat?!
mean, you can't possibly know all that is J2EE properly. But what should one concentrate on, and roughly in what order?
First, "J2EE" can mean two things. Some people use as a somewhat sloppy catch-all-term for "server-side Java", but really just mean something like e.g. Java/JSP/Servlets/Struts/Hibernate/Tomcat. Some reserve "J2EE" for projects which, in addition, use EJBs and a full-blown J2EE server like JBoss, which Tomcat is not.
Why is this relevant? Because, of course, the second variant includes even more stuff, but many many projects use the first variant, so I would start with that and ignore EJBs for the moment.
But even the technologies in a project of the first kind are too many and too big to learn all at once, so I would pick one end to start from, either from the frontend (HTML etc. -> JSP, JSTL -> Custom Tags, Servlets -> e.g. Struts etc.) or from the backend (DB/SQL -> JDBC -> Hibernate||JDO||iBatis... -> etc.), and only later expand up (EJB) and out (know back to front and more frameworks).
And, remember: Q: How do you eat an elephant? A: One bite at a time...
Somebody might be able to explain some of these better, but I thought I'd post this anyway before anybody asks...
Apache - It's not just the web server, it's also short for an umbrella organization / foundation for a number of cool / leading open source projects, especially concerning Java technologies (Jakarta). This foundation is abbreviated as...
ASF - Apache Software Foundation
J2EE - Java 2 Enterprise Edition, as opposed to the J2SE / Java 2 Standard Edition that might be installed on your desktop (actually, it's a super-set); consists of a number of libraries, specifications, and tests which can be implemented by application servers aimed at the enterprise market.
Geronimo - One such J2EE application server, open source; relatively new but going strong.
TCK - Technology Compatibility Kit - The test suite by Sun I mentioned, which application servers have to pass to be considered J2EE compatible.
Apache Incubator - A virtual area where projects live that are not (yet) accepted as top-level projects.
[...] the presentation and integration of these enterprise extensions as a part of the standard language is not beneficial to Java's perceived suitability for everyday programming work.
None of these projects is part of the standard Java library. JDO is a separate package. Hibernate is an open source library. So is Spring. EJBs are part of the J2EE package (hint: EE = Enterprise Edition), but not of the J2SE package (hint: SE = Standard Edition). Your point being?
Unlike EJB CMP CMR and like JDO, Hibernate can work inside of or outside of a J2EE container, which is a boon for those of us doing TDD and agile development.
Acronym hell. Java used to be pretty easy to understand. There was Swing, there was AWT
I call bullshit, or at least Apples to Oranges! What are you talking about - developing a desktop GUI app? Then there still is Swing, and there is AWT, and not that much has changed.
Or are you talking about database-backed server applications? For smaller projects, there is JDBC for database connectivity, and there always has been.
For larger database-driven projects, you need a layer above that to be productive, and that's what the solutions mentioned above are for (has nothing to do with Swing/AWT). If you are not doing that kind of project, feel free to ignore them. But just because you don't need these projects doesn't mean I don't need them (I do).
Oh? You did understand that the discussion was about portability between database products (e.g.: port your application from Oracle to SAP DB), not between operating systems, didn't you?
I don't know about other RDBMs, but postgres supports perl, tcl, and others.
Well, the others don't. Almost every db that I know of has their own choice of stored procedure language.
[...] I've poked around google for hard facts, and couldn't really find any evidence from the past 1 to 1-1/2 years of particular problems with *any* of the major filesystems. All I came up with were anecdotes, and not only that: There were just about as many with horror stories about ext2 and ext3 as with Reiser!!! [...]
As ext2/ext3 are probably much much more widely used than ReiserFS, if there are the same absolute number of problems reported with both, that would of course speak strongly against ReiserFS's reliability.
"Java was the popular thing of it's time. If you didn't know it at the apogee of the internet bubble[...]
Let me guess, you are one of those who still think Java is mainly about applets, right? (OK, maybe you are not, but it's such a nice rhetorical opening question;)) Boy, are you wrong...
Here's a quick google statistic (mostly bogus, of course, as are most statistics) which, I hope, might shake your belief a little:
"Applet": about 3.4 million hits
"Java": about 61 million hits
"Servlet": about 10 million hits
"C#": about 4.4 million hits
From where I sit, Java on the server side (Servlets + JSPs) is the mainstream, applets are just a niche, and even C# is not there yet.
What I did was getting myself a nice classic-sized fountain pen. These are much thicker than a standard office pen, which will have a subtle effect on how you hold it your hand.
Even more important is a high-quality, relatively flexible nib. Not all fountain pen brands have a flexible nib, so you may need to shop around on that. One company known for these is Pelikan (no relation), so I bought a used M800 (see here, for example) from ebay, and I love it. For one, it's just beautiful. Then, it gives a totally different feeling whent writing. After a few days getting used to it, writing with a normal ballpoint pen felt like writing with a nail.
When I was in school, teachers told us not to use ballpoint pens because they destroy your handwriting. I thought it was bogus back then, but, in retrospect, there seems to be some truth about it.
"Steve: I just wanted to point out that I think it's a great leap of faith for IBM to let this out from underneath their wing.
Skip: Yeah, IBM is betting it's business on this, but the total number of developers that IBM is committing is going up and not going down."
Isn't that the essential open source strategy, giving up some measure of control in return for a bigger growth of the market? Remarkable, some people at IBM seem to get OSS on a strategic level, not just superficially.
It's an interesting interview, by the way. Consider actually reading it if you haven't.;-)
Oh, yeah, right, with a whole college programming class you are certainly qualified to decree which programming approach is to be seen as realistic and which is artificial.
You do know XP was developed in the trenches, during a real-life project, by veteran programmers, don't you?
In just a few years, Hitler managed to transform Germany from an highly agricultural, economically decrepit country into a modern, industrial, profitable one.
While I'm not sure what this has to do with anything: No, not even this. Economic swings up and down were stronger than today back then, and when Hitler came to power, the economic recovery was already well in progress. So, the best you could say about his economic "achievements" is that he had luck with his timing, and good marketing.
Anyway, with Hitler's being one of mankinds most crazy and evil assholes of all time, what does it matter how he did economically??
No, you should not - throwing out a significant body of tested, working code in favour of "new, better!" code is not a good idea generally. A well-known article by Joel Spolsky eloquently explains
some of the reasons.
Instead, try to improve your current solution an bring its cost down:
If you are scaling up by adding servers, see if you cannot add something like two Linux servers instead of one Sun (for a fraction of the price, naturally).
You haven't said which software packages bring up the license cost (besides Oracle, of course). But for most, there are open source alternatives. Sure, they might take more work to set up in some cases, but certainly less than rewriting the whole application, no?
You might even want to evaluate if you can replace your Oracle by a SAP DB instance if that is not your bottleneck (Hint: Caching! Caching!).
If, as you say, hundreds of KB are used up for every logged in user, then, in all likelihood, there are big inefficiencies in your code. You should profile it / have it profiled for both CPU and memory efficiency. Then tune the 5% of the code that use 95% of the resources, instead of throwing away 100%.
Are the outsourced programmers up to snuff? Maybe have the code checked by a third party (who could also do the profiling / tuning). Because a bad programmer can bring down any infrastructure, be it J2EE,.NET, PHP or whatever. It's the man, not the machine.
JBoss is a "J2EE container". J2EE, "Java 2 Enterprise Edition", is an "industry standard" and technology by Sun to help writing the back-end part of high-end server software. You can write software ("components") according to certain specifications, and then run that software within any server that conforms to the J2EE specification, of which there are many (JBoss, IBM WebSphere, Bea Weblogic........).
J2EE is quite different from the kind of Java that runs on your desktop (so-called J2SE - Java 2 Standard Edition) in that it contains a huge set of additional libraries and specifications, both for those writing the J2EE container, and for those writing the software components. This way, both sides - container and components - can make strong assumptions about each other. Because of this, and since the component is running "inside" the container, the container can provide a lot of services (read: "magically available features") to the components, much more easily than if the component writer had to call and coordinate several libraries.
These features include:
clustering and failover
transactions that span more than one database, or include systems other than databases (so you can't just use database transactions)
a standard way to connect to mainframes and ERP software (JCA)
saving your objects to database tables, including cluster-safe caching
connecting to secure message queues
interfacing with directory services (ldap, active directory etc.)
etc. etc.
If you really need more than one of the above, maybe you should take a closer look at J2EE. If not, don't bother - J2EE is very large, and takes a considerable effort to learn well.
Java is good at many things - huge standardized thoroughly documented libraries, lots and lots of commercial and oss tools and projects, availability of and demand for Java programmers etc. etc.
But there's one kind of problem that you can only solve in a reasonable way with Java, AFAIK: huge "enterprise" apps. These apps require a technology that, among others...
is cluster-capable
can scale to big iron (dozens of cpus upwards)
can interface with mainframe apps
supports transactions where a single transaction can span several databases and/or mainframe apps and/or message queues
supports web services, web front ends and GUI clients
What other technology can support this? Correct me if I'm wrong, but AFAIK, with C++/Corba, you have to build a lot of that yourself, or integrate several non-standard solutions to do it. With.NET, you are limited to Windows (Mono is not there yet), and Windows doesn't run on big iron.
I like PHP alot for web development. I found it easier and less to code when compared to perl (I've done both for 3 years each). You've made a good choice with it. I haven't tried python, but i do hear good things about it. You've made a good choice with it.
So you know two languages for web development, and have "heard about" a third, and feel knowledgeable enough to put out a general recommendation?
Yes, glad you asked. Prevayler is also about 9000 times less effort to use, compared to (Entity) EJBs.
Well, not 9000 times exactly, but a lot, at least for small projects/prototypes, and unless you have the whole infrastructure for EJBs already in place and know how to use it.
You don't need to hire an expert in language X, you can and should look for expert programmers that are willing to learn language X. An expert can easily cross over from being a novice in any language in a matter of a few weeks.
..., plus another dozen or more libraries typically used even on a small Java web project.
I read this a lot, but it's misleading, and raises wrong expectations. While learning a new syntax and grammar can be done in hours, it doesn't buy you much. To get to that 10x productivity level on a real-world project, you have to master the whole ecosystem surrounding a language - standard libraries, open-source libraries, tools, idiomatic use, patterns, conventions, best practices, common architectures etc.
As an example, coming from Java, if I switch to Ruby, how long before my code truly follows "the ruby way"? How long before I know the ins and outs of Ruby on Rails and the standard libraries including their gotchas? How long before I can architect a serious ruby application that makes good use of its meta programming facilities, instead of one that looks as if it was ported from Java?
Or, as another example, if you switch from Ruby to Java, let's say on a web project: How long before you can make a informed choice which web framework to pick? How long before you know the architecture implications of picking Hibernate, and when iBatis would be a better match? To know what Spring can do for you, and what you are giving up by not using it? Until you know even a standard set of tools like Eclipse plus which plugins to use, FindBugs, Ant, Cruise Control, Emma,
Of course, you can be productive even when you don't yet know all these things, and are still learning - but you won't be productive on the expert / 10x level we are talking about. By all means, become an expert in as many languages as you can - but don't plan on getting there in 24 hours, days or even weeks.
(Disclaimer: Switching between fairly similar environments, e.g. Java C#, is of course much easier).
I've been looking for an RDBMS for running on OpenBSD and Postgresql doesnt quite cut it with the lack of certain features.
Come on, don't tease us ;) - which ones?
Postgresql holds a niche, the spot between baby databases like mysql/sqlite and RDBMSes
One of the open-source, "real" RDBMSes that has been missing in the discussion so far, is MaxDB, former SAP DB. We've got it in production in a "serious" app (real money, heavy load), and so far it really does scale well with bigger hardware (additional processors, RAM, disks).
One disadvantage with MaxDB is that it is lacking in mindshare compared to some others, although that is slowly improving - Google already finds three times more hits for MaxDB than SAP DB. Until now, there are no good books about it.
Another disadvantage is its stored procedure language - rather primitive and heavily underdocumented. PostgreSQL, for example, shines in that respect.
COVER STORY:
.Net cooperating with J2EE and CORBA
.Net framework
- SQL:2003: including XML and administration of external data
TESTLAB:
- Suse Linux Enterprise Server 9
- Middcor.Net:
- Server Management: Tatung's TUD 4010 and Fujitsu-Siemens-Computers' BX 600
REPORT:
- Programming lightweight, powerful clients
- Software components in the
- ITIL for better IT
KNOW-HOW:
- Schema language Relax NG
- Jakarta offshoot Slide
HANDS-ON:
- Doctype switching decides rendering of (X)HTML
- Hard disk management under Linux
Some NEWS, mostly conference reports
(Siggraph, Linux fair, 60th IETF meeting,
KDE Community World Summit, CHES 2004 Crypto-conference)
P.S.: I read iX only from time to time, because it's not my main area of interest.
But the articles are IMHO of good technical depth and detail, and thoroughly researched.
Searching for the phrase "stellar performance" on google returns over 50000 hits. The author must have many friends...
BTW, I'm not a native speaker of english, and I understood the phrase just fine. Maybe you should brush up your english a bit...
Personally, I'm less than impressed. Why should I cheer and hooray about PHP introducing some OO features in PHP in 2004 almost all of which Java has had since version 1.0 in 1995? Is that supposed to be a great feat?!
mean, you can't possibly know all that is J2EE properly. But what should one concentrate on, and roughly in what order?
First, "J2EE" can mean two things. Some people use as a somewhat sloppy catch-all-term for "server-side Java", but really just mean something like e.g. Java/JSP/Servlets/Struts/Hibernate/Tomcat. Some reserve "J2EE" for projects which, in addition, use EJBs and a full-blown J2EE server like JBoss, which Tomcat is not.
Why is this relevant? Because, of course, the second variant includes even more stuff, but many many projects use the first variant, so I would start with that and ignore EJBs for the moment.
But even the technologies in a project of the first kind are too many and too big to learn all at once, so I would pick one end to start from, either from the frontend (HTML etc. -> JSP, JSTL -> Custom Tags, Servlets -> e.g. Struts etc.) or from the backend (DB/SQL -> JDBC -> Hibernate||JDO||iBatis... -> etc.), and only later expand up (EJB) and out (know back to front and more frameworks).
And, remember: Q: How do you eat an elephant? A: One bite at a time...
... ask for references? I.e. people both who he as worked for, as well as people who have worked for him?
If he's not willing to give such references, especially of the second kind, that's an answer as well.
Somebody might be able to explain some of these better, but I thought I'd post this anyway before anybody asks...
Apache - It's not just the web server, it's also short for an umbrella organization / foundation for a number of cool / leading open source projects, especially concerning Java technologies (Jakarta). This foundation is abbreviated as...
ASF - Apache Software Foundation
J2EE - Java 2 Enterprise Edition, as opposed to the J2SE / Java 2 Standard Edition that might be installed on your desktop (actually, it's a super-set); consists of a number of libraries, specifications, and tests which can be implemented by application servers aimed at the enterprise market.
Geronimo - One such J2EE application server, open source; relatively new but going strong.
TCK - Technology Compatibility Kit - The test suite by Sun I mentioned, which application servers have to pass to be considered J2EE compatible.
Apache Incubator - A virtual area where projects live that are not (yet) accepted as top-level projects.
[...] the presentation and integration of these enterprise extensions as a part of the standard language is not beneficial to Java's perceived suitability for everyday programming work.
None of these projects is part of the standard Java library. JDO is a separate package. Hibernate is an open source library. So is Spring. EJBs are part of the J2EE package (hint: EE = Enterprise Edition), but not of the J2SE package (hint: SE = Standard Edition). Your point being?
Unlike EJB CMP CMR and like JDO, Hibernate can work inside of or outside of a J2EE container, which is a boon for those of us doing TDD and agile development.
Acronym hell. Java used to be pretty easy to understand. There was Swing, there was AWT
I call bullshit, or at least Apples to Oranges! What are you talking about - developing a desktop GUI app? Then there still is Swing, and there is AWT, and not that much has changed.
Or are you talking about database-backed server applications? For smaller projects, there is JDBC for database connectivity, and there always has been.
For larger database-driven projects, you need a layer above that to be productive, and that's what the solutions mentioned above are for (has nothing to do with Swing/AWT). If you are not doing that kind of project, feel free to ignore them. But just because you don't need these projects doesn't mean I don't need them (I do).
Procedural sql is reasonably portable.
I don't know about other RDBMs, but postgres supports perl, tcl, and others.
That portable enough for ya?
[...] I've poked around google for hard facts, and couldn't really find any evidence from the past 1 to 1-1/2 years of particular problems with *any* of the major filesystems. All I came up with were anecdotes, and not only that: There were just about as many with horror stories about ext2 and ext3 as with Reiser!!! [...]
As ext2/ext3 are probably much much more widely used than ReiserFS, if there are the same absolute number of problems reported with both, that would of course speak strongly against ReiserFS's reliability.
"Java was the popular thing of it's time. If you didn't know it at the apogee of the internet bubble[...]
Let me guess, you are one of those who still think Java is mainly about applets, right? (OK, maybe you are not, but it's such a nice rhetorical opening question ;)) Boy, are you wrong...
Here's a quick google statistic (mostly bogus, of course, as are most statistics) which, I hope, might shake your belief a little:
From where I sit, Java on the server side (Servlets + JSPs) is the mainstream, applets are just a niche, and even C# is not there yet.
What I did was getting myself a nice classic-sized fountain pen. These are much thicker than a standard office pen, which will have a subtle effect on how you hold it your hand.
Even more important is a high-quality, relatively flexible nib. Not all fountain pen brands have a flexible nib, so you may need to shop around on that. One company known for these is Pelikan (no relation), so I bought a used M800 (see here, for example) from ebay, and I love it. For one, it's just beautiful. Then, it gives a totally different feeling whent writing. After a few days getting used to it, writing with a normal ballpoint pen felt like writing with a nail.
When I was in school, teachers told us not to use ballpoint pens because they destroy your handwriting. I thought it was bogus back then, but, in retrospect, there seems to be some truth about it.
"Steve: I just wanted to point out that I think it's a great leap of faith for IBM to let this out from underneath their wing.
Skip: Yeah, IBM is betting it's business on this, but the total number of developers that IBM is committing is going up and not going down."
Isn't that the essential open source strategy, giving up some measure of control in return for a bigger growth of the market? Remarkable, some people at IBM seem to get OSS on a strategic level, not just superficially.
It's an interesting interview, by the way. Consider actually reading it if you haven't. ;-)
Oh, yeah, right, with a whole college programming class you are certainly qualified to decree which programming approach is to be seen as realistic and which is artificial.
You do know XP was developed in the trenches, during a real-life project, by veteran programmers, don't you?
While I'm not sure what this has to do with anything: No, not even this. Economic swings up and down were stronger than today back then, and when Hitler came to power, the economic recovery was already well in progress. So, the best you could say about his economic "achievements" is that he had luck with his timing, and good marketing.
Anyway, with Hitler's being one of mankinds most crazy and evil assholes of all time, what does it matter how he did economically??
http://www.google.de/search?num=20&hl=en&ie=UTF-8& oe=UTF-8&q=expectation.of.privacy+employee+compute r+data+purchase+workplace+public-sector&btnG=Googl e+Search
Instead, try to improve your current solution an bring its cost down:
Good Luck!
J2EE is quite different from the kind of Java that runs on your desktop (so-called J2SE - Java 2 Standard Edition) in that it contains a huge set of additional libraries and specifications, both for those writing the J2EE container, and for those writing the software components. This way, both sides - container and components - can make strong assumptions about each other. Because of this, and since the component is running "inside" the container, the container can provide a lot of services (read: "magically available features") to the components, much more easily than if the component writer had to call and coordinate several libraries.
These features include:
- clustering and failover
- transactions that span more than one database, or include systems other than databases (so you can't just use database transactions)
- a standard way to connect to mainframes and ERP software (JCA)
- saving your objects to database tables, including cluster-safe caching
- connecting to secure message queues
- interfacing with directory services (ldap, active directory etc.)
- etc. etc.
If you really need more than one of the above, maybe you should take a closer look at J2EE. If not, don't bother - J2EE is very large, and takes a considerable effort to learn well.- is cluster-capable
- can scale to big iron (dozens of cpus upwards)
- can interface with mainframe apps
- supports transactions where a single transaction can span several databases and/or mainframe apps and/or message queues
- supports web services, web front ends and GUI clients
What other technology can support this? Correct me if I'm wrong, but AFAIK, with C++/Corba, you have to build a lot of that yourself, or integrate several non-standard solutions to do it. WithForbidden
You don't have by mission ton of ACCESS/mycpu g.htm on this servers.
I like PHP alot for web development. I found it easier and less to code when compared to perl (I've done both for 3 years each). You've made a good choice with it. I haven't tried python, but i do hear good things about it. You've made a good choice with it.
So you know two languages for web development, and have "heard about" a third, and feel knowledgeable enough to put out a general recommendation?
Man, that is +1 funny!
"Two words... Enterprise JavaBeans"
Yes, glad you asked. Prevayler is also about 9000 times less effort to use, compared to (Entity) EJBs.
Well, not 9000 times exactly, but a lot, at least for small projects/prototypes, and unless you have the whole infrastructure for EJBs already in place and know how to use it.
Microsoft Works