You're absolutely correct. In the end,.NET apps written on windows will not work on Linux. But.NET apps written on Linux will surely work on windows. How this gives people incentive to move towards linux(as opposed to away from it) I will never understand. I want to see MS write MS Office in.NET so that it runs on linux. You think they'll do that? Yeah Right!
MS would NEVER let this happen. Have you ever heard of J++? Once.NET grabs hold MS would extend it in such a way as to make apps written in C# incompatible with their non-ms bretheren. Exactly what they did with J++. The difference here is that Sun owned Java and sued MS for extending Java without their permission. In this case will Mono sue MS for extending C#? MS owns it! In your theory MS's killer application MS Office will be rewritten in.NET and run on Linux. Do you honestly think MS would allow this?
Additionally, you make it sound like it would bring more developers to linux. The opposite would actually be true. If all apps run on windows and linux, what is the incentive to switch to linux for the average user? Linux needs a killer application that can't run on windows in order to give people the incentive to switch.
Given enough redundancy, you could make MS Access work;-) kidding kidding kidding
It's all going to depend on your SLA, with Oracle or whoever. If you want/need to have a 4 hour response you can get that if you've got the money. I assume you could get this level of support from a Postgres related company as well, but based on the number of employees those companies have, I'd say its not typical.
Back to my original point, if your company is in the scenario where your business critical revenue generating functions rely on your database, you really want to look beyond brand names, open source, and especially marketing(FUD). In the end it goes beyond performance and cost. Oracle is not the only option out there...
That wasn't my point. My point was that given the current information his question cannot be answered. I then gave two examples. If his company wants a database for a scenario that is a read-only webpage scenario, it doesn't really matter if you use an open source db or a commercial one. Whatever works best and cheapest.
On the other hand, if his companies business is reliant on this database for its core revenue generation then this is a business decision and not a technical one. Cost is only a minor factor in this decision. And actually, open source vs. commercial is a minor factor as well. If postgres offers equivalent uptime, equivalent performance, equivalent service, equivalent ability to hire skilled resources worldwide, etc then it should be a no-brainer.
Assuming the relational database is storing relational data, its hard to imagine a 2G database needed to store read only pages. Of course, some people store pdf's, word docs, etc into relational db's as clobs. This is a complete waste of resources. I would use MySQL in a read-only scenario where transactions are unneeded.
I am also assuming that the guy who is posing this question IS the DBA. At least I sure hope so, for whoever is the DBA's sake. Your scenario is a best case recovery scenario using point-in-time recovery. What if its the point-in-time recovery that is broken/buggy? As a DBA, who do you want to deal with? Who are you gonna call?
Is your companies website essentially read-only page loading? If so, why not just go with MySQL. Do you really need MVCC in a read-only scenario?
On the other hand, If your company is doing transaction processing, like a customer facing product ordering system (think amazon), its a lot more than just having to sustain certain volumes. The reputation of your company and its ability to make money by selling products will rely entirely on your database. In a best case scenario there may be no difference between oracle and postgres. But imagine the worst case scenario. Peak volume, company is making $1M/hour in sales on the web, db dies and won't come up....who you gonna call?
There's more to the equation than up front cost and ability to handle volumes....
Only as far as the business requirements do not change after the analysis or the initial analysis anticipates changes in business requirements accurately.
I think you're talking about two things here. The first is the reduction of scope of a large project. Where we know we'll have to do X, but we'll only do x for now. We'll incorporate into our desing the knowledge that we will eventually have to do X. The second is anticipation or prediction of related requirements. As in, I am doing an email client, of course they will want a spell checker so we can anticipate that.
Neither of these things is what I am talking about, or have experienced in my career. My experiences are more along the lines of, "lets build a transaction processing system to do these overly broad things because we really don't know what is going to sell". The development team works on requirements as they see them, very little customer input or involvement. We're told to "just get something together so it can be sold to customers and we can figure out what they really want". A few months later a "product" is produced and sales can't sell it because it doesn't align with the customers needs. They come back with statements that it needs feature X, Y, Z. And of course, every sales person needs different X, Y, Z features. High priority. Management now says, "OK, we've determined that these three features are the highest priorities, now get them done". These three features are usually products in and of themselves. An example would be, adding a complete realtime business intelligence layer on top of a transaction processing app. When we try to explain that these two systems are fundamentally different architectures management will usually say that we should be "agile" and our design must be insufficiently robust to handle "change".
Don't get me wrong, everyone knows requirements change. Requirement changes within the scope of the application are manageable. The issue is when people take the XP/Agile ideas and use them as a replacement for solid upfront product research or customer input.
Your comment is doing exactly what I complained about above...
...there are ways to reduce those costs dramatically.
I don't doubt there are ways to reduce those costs dramatically. But reducing those costs increases costs in other places. Change is not free. You aren't reducing overall costs, you're just moving them around. You can simplify your design, make it completely decoupled and resilient to change. But, again, this is not free. These decisions have costs. Especially in terms of technologies, performance, etc, etc. XP offloads up front work onto developers later in the project. They don't tell you that the entire project will cost more and take longer, they leave that part off. Management only see, "As requirements change, your software changes". Your comment is an example of how XP fools management into thinking that reducing costs in one area do not impact costs in other areas.
Managers tend to think that gathering proper input, leading to proper requirements, is "hard". But doing this upfront work is required to properly analyze/design/estimate a programming effort. Along comes XP/Agile whatever you want to call it. They say, you don't need everything up front, you can change things as we go, we're "agile". This is what managers want. Every month along the project the requirements change, the design changes, we adapt, this is great. The part they keep leaving out is the fact that change is not any cheaper. With any method you pick, as everyone knows, the later in the project you make changes the more they cost. They always leave off that part.
I can't recall where, but I remember reading the quote somewhere, "you can't refactor an elephant into a cheetah". I don't think many managers truly understand that...
To me XP/Agile is just an excuse that allows marketing and management to not have to do their job.
I have a question, is miguel de icaza on your payroll? And how much do you pay him? There is no other reason why somebody would want to port.NET to linux.
Before you go arguing with a creationist, ask the creationist one thing. Ask him/her, How can I prove to you that evolution is correct? Seriously, ask them what exactly it would take for you to prove to them that evolution is real. I've gotten answers from "nothing", to skeletal remains of every change from the beginning of time. No matter what the answer, you'll realize that your attempt is futile. If you start out your argument with this basic question, it'll be over before you start.
My career wasn't mixing concrete, it was plumbing. I had to mix quite a bit of concrete to repair floors after laying sewers. I didn't read the bags of concrete, but even if I did, it couldn't be as bad working in sewers filled with crap and drano all day. I would have ignored it anyway.
In a former career I spent time mixing cement. One day I was mixing a small amount in a 5 gallon bucket. At the time I had nothing to mix it with so I used my hand. After mixing I washed my hand and it was amazingly smooth. I didn't think much more about it. The next day the skin on my hand was very sore. I looked at it and noticed that the mixing had worn down the top layes of skin on my hand. To the point where I barely had any fingerprints at all. So if you want to remove your fingerprints temporarily in a somewhat painful(but not excruciating) way, just mix up a bucket of concrete with your hand..... Hmmmm, is this a circumvention device?
They're separate? Interesting, I pay a penalty every month for cable internet access because I don't use their cable service for my television. If they were truly separate the pricing would not be dependant on each other.....
Comcast should have to separate their internet service and their cable. I use directv/tivo so therefore I must pay a penalty extra price for cable internet access. If DSL and phone run over the same line, but are separate features, then cable and internet access over the same cable should be separate features as well. Customers shouldn't pay extra for internet just because they don't want to use one of your other services.
Let me get this straight. It's your opinion that learning things such as pointers, references, pass-by-value, method pointers, macro's, STL, virtual, pure virtual, operator overloading, destructors, no-GC, etc, etc is perfectly fine to learn all in one shot without any prior knowledge. Remeber, that Java has no analogous to A LOT of these things. I would hate to have to see the code of some experienced Java coder having to see all of these things at once. But apparently you have different opinion.
My learning went from assembly ==> C ==> C++ ==> Java, and my advice to you is to not go from Java to C++. If you remember venn diagrams, imagine one circle as Java, Then draw circle next to it without intersection and call that one C. Now draw a circle that intersects Java and C, but also has its own distinct characteristics, and that circle would be C++. There is no way to learn C++ without learning C. If I were you, I'd learn C. Then once you learn C, your OO knowledge will make you question some things. Then C++ will make sense to bridge that gap. Learning C++, or C for that matter, is not going to be fast. And anyone who does learn it fast will be in trouble unless they're really talented. One thing is for sure, once you learn C/C++ you will REALLY appreciate Java. Good Luck.
For the most part I think we agree, but the attitude shows up again in the following two statements:
>CS majors have a hard time realizing that 9 times out of 10 time to market is more critical than computational costs.
I'm glad that they are the ones writing code for life critical systems. I'll have an MBA in addition to my CS in three weeks, and I can tell you: Ther are no classes about depending on programmers for advice concerning time to market, that's not thier job.
The programmers/CS people are of least concern to a Product, which is exactly my point. Whether your a seasoned MSCS or a guy with 2 week experience in India the MBA does not care. This is plainly obvious by witnessing the continued outsourcing to the cheapest country. By moving work to the cheapest country you can afford more simultaneous resources which in theory should produce a product faster. Nested loops or not, it doesn't make any difference. This was my point by 9 times out of 10 it doesn't matter how fast your loops are. A page of mathematical proof is not going to matter a bit.
As a side note, CS people have a hard time being told by a manager "Do your job fast and produce a substandard product so I can do my job well". Does that surprise you?
This is the crux of my point. CS people think they run the product. As a future manager I think you will find this is not true. Writing code is not the hard part. Coming up with an outstanding product idea is the hard part. In fact, if you look at the current trends, CS people get outsourced left and right because they don't do it cheapest or fastest. Just as car manufacturing has moved to mexico and elsewhere. In the business world quality code doesn't mean squat. In fact it seems to be inversely proprortional. If you look at the most successful businesses you usually see the worst code. Additionally, these successful companies can and do hire the best CS students available every year to work for them. Strange isn't it?
What a modern manager would really say and care about is "Do your job fast so I can get this product out the door before our competitor over there. If you don't we'll be outsourcing your job to india so we can hire 5 of them for the cost of one of you. I could care less about the mathematics behind your nested loops."
Just think about it. If you take your MBA and start your own company. If you hire the best coders in the world who are guaranteed to produce the most efficient code does this help you produce a successful product? This is where the MBA/CS division becomes plainly obvious.
Your post displays an interesting point. Using an advanced data structure versus two nested loops is an obvious choice. Or is it? You see, it depends. There is no "one true way". The "cost" of a program is more than its computational time. If you were an employer which you would prefer:
Nested Loops:
Written in shorter time
Easier to maintain
Executes in 4 seconds
Advanced Data Structure:
Takes longer to write
harder for someone to maintain
Executes in 1 second
CS majors have a hard time realizing that 9 times out of 10 time to market is more critical than computational costs. Is it good to know advanced data structures? Of course. But more important is knowing when to use them and when not to use them.
Seriously, I have 3 or 4 options right now for broadband. If comcast is going to monitor my usage then I'll decide to go elsewhere for service. The only way they'll stop this kind of activity is if they lose customers by doing it.
If Java was a standard what would stop MS from extending it into J++ again? If C# gets a user base thats exactly what they will do with C# as well.
Wow, MS is so kind. In no time they'll be rewriting MS Office in .NET and we'll be able to use Office on Linux! Don't hold your breath...
You're absolutely correct. In the end, .NET apps written on windows will not work on Linux. But .NET apps written on Linux will surely work on windows. How this gives people incentive to move towards linux(as opposed to away from it) I will never understand. I want to see MS write MS Office in .NET so that it runs on linux. You think they'll do that? Yeah Right!
MS would NEVER let this happen. Have you ever heard of J++? Once .NET grabs hold MS would extend it in such a way as to make apps written in C# incompatible with their non-ms bretheren. Exactly what they did with J++. The difference here is that Sun owned Java and sued MS for extending Java without their permission. In this case will Mono sue MS for extending C#? MS owns it! In your theory MS's killer application MS Office will be rewritten in .NET and run on Linux. Do you honestly think MS would allow this?
Additionally, you make it sound like it would bring more developers to linux. The opposite would actually be true. If all apps run on windows and linux, what is the incentive to switch to linux for the average user? Linux needs a killer application that can't run on windows in order to give people the incentive to switch.
Given enough redundancy, you could make MS Access work ;-) kidding kidding kidding
It's all going to depend on your SLA, with Oracle or whoever. If you want/need to have a 4 hour response you can get that if you've got the money. I assume you could get this level of support from a Postgres related company as well, but based on the number of employees those companies have, I'd say its not typical.
Back to my original point, if your company is in the scenario where your business critical revenue generating functions rely on your database, you really want to look beyond brand names, open source, and especially marketing(FUD). In the end it goes beyond performance and cost. Oracle is not the only option out there...
That wasn't my point. My point was that given the current information his question cannot be answered. I then gave two examples. If his company wants a database for a scenario that is a read-only webpage scenario, it doesn't really matter if you use an open source db or a commercial one. Whatever works best and cheapest.
On the other hand, if his companies business is reliant on this database for its core revenue generation then this is a business decision and not a technical one. Cost is only a minor factor in this decision. And actually, open source vs. commercial is a minor factor as well. If postgres offers equivalent uptime, equivalent performance, equivalent service, equivalent ability to hire skilled resources worldwide, etc then it should be a no-brainer.
Assuming the relational database is storing relational data, its hard to imagine a 2G database needed to store read only pages. Of course, some people store pdf's, word docs, etc into relational db's as clobs. This is a complete waste of resources. I would use MySQL in a read-only scenario where transactions are unneeded.
I am also assuming that the guy who is posing this question IS the DBA. At least I sure hope so, for whoever is the DBA's sake. Your scenario is a best case recovery scenario using point-in-time recovery. What if its the point-in-time recovery that is broken/buggy? As a DBA, who do you want to deal with? Who are you gonna call?
Is your companies website essentially read-only page loading? If so, why not just go with MySQL. Do you really need MVCC in a read-only scenario?
On the other hand, If your company is doing transaction processing, like a customer facing product ordering system (think amazon), its a lot more than just having to sustain certain volumes. The reputation of your company and its ability to make money by selling products will rely entirely on your database. In a best case scenario there may be no difference between oracle and postgres. But imagine the worst case scenario. Peak volume, company is making $1M/hour in sales on the web, db dies and won't come up....who you gonna call?
There's more to the equation than up front cost and ability to handle volumes....
Only as far as the business requirements do not change after the analysis or the initial analysis anticipates changes in business requirements accurately.
I think you're talking about two things here. The first is the reduction of scope of a large project. Where we know we'll have to do X, but we'll only do x for now. We'll incorporate into our desing the knowledge that we will eventually have to do X. The second is anticipation or prediction of related requirements. As in, I am doing an email client, of course they will want a spell checker so we can anticipate that.
Neither of these things is what I am talking about, or have experienced in my career. My experiences are more along the lines of, "lets build a transaction processing system to do these overly broad things because we really don't know what is going to sell". The development team works on requirements as they see them, very little customer input or involvement. We're told to "just get something together so it can be sold to customers and we can figure out what they really want". A few months later a "product" is produced and sales can't sell it because it doesn't align with the customers needs. They come back with statements that it needs feature X, Y, Z. And of course, every sales person needs different X, Y, Z features. High priority. Management now says, "OK, we've determined that these three features are the highest priorities, now get them done". These three features are usually products in and of themselves. An example would be, adding a complete realtime business intelligence layer on top of a transaction processing app. When we try to explain that these two systems are fundamentally different architectures management will usually say that we should be "agile" and our design must be insufficiently robust to handle "change".
Don't get me wrong, everyone knows requirements change. Requirement changes within the scope of the application are manageable. The issue is when people take the XP/Agile ideas and use them as a replacement for solid upfront product research or customer input.
Your comment is doing exactly what I complained about above...
...there are ways to reduce those costs dramatically.
I don't doubt there are ways to reduce those costs dramatically. But reducing those costs increases costs in other places. Change is not free. You aren't reducing overall costs, you're just moving them around. You can simplify your design, make it completely decoupled and resilient to change. But, again, this is not free. These decisions have costs. Especially in terms of technologies, performance, etc, etc. XP offloads up front work onto developers later in the project. They don't tell you that the entire project will cost more and take longer, they leave that part off. Management only see, "As requirements change, your software changes". Your comment is an example of how XP fools management into thinking that reducing costs in one area do not impact costs in other areas.
Managers tend to think that gathering proper input, leading to proper requirements, is "hard". But doing this upfront work is required to properly analyze/design/estimate a programming effort. Along comes XP/Agile whatever you want to call it. They say, you don't need everything up front, you can change things as we go, we're "agile". This is what managers want. Every month along the project the requirements change, the design changes, we adapt, this is great. The part they keep leaving out is the fact that change is not any cheaper. With any method you pick, as everyone knows, the later in the project you make changes the more they cost. They always leave off that part.
I can't recall where, but I remember reading the quote somewhere, "you can't refactor an elephant into a cheetah". I don't think many managers truly understand that...
To me XP/Agile is just an excuse that allows marketing and management to not have to do their job.
I have a question, is miguel de icaza on your payroll? And how much do you pay him? There is no other reason why somebody would want to port .NET to linux.
Its actually very simple going the other way. Show me one creationist scientific theory that is backed by scientific evidence.
Before you go arguing with a creationist, ask the creationist one thing. Ask him/her, How can I prove to you that evolution is correct? Seriously, ask them what exactly it would take for you to prove to them that evolution is real. I've gotten answers from "nothing", to skeletal remains of every change from the beginning of time. No matter what the answer, you'll realize that your attempt is futile. If you start out your argument with this basic question, it'll be over before you start.
because today is my birthday, seriously (29). I had no idea I shared my birthday with Linux.
My career wasn't mixing concrete, it was plumbing. I had to mix quite a bit of concrete to repair floors after laying sewers. I didn't read the bags of concrete, but even if I did, it couldn't be as bad working in sewers filled with crap and drano all day. I would have ignored it anyway.
In a former career I spent time mixing cement. One day I was mixing a small amount in a 5 gallon bucket. At the time I had nothing to mix it with so I used my hand. After mixing I washed my hand and it was amazingly smooth. I didn't think much more about it. The next day the skin on my hand was very sore. I looked at it and noticed that the mixing had worn down the top layes of skin on my hand. To the point where I barely had any fingerprints at all. So if you want to remove your fingerprints temporarily in a somewhat painful(but not excruciating) way, just mix up a bucket of concrete with your hand..... Hmmmm, is this a circumvention device?
They're separate? Interesting, I pay a penalty every month for cable internet access because I don't use their cable service for my television. If they were truly separate the pricing would not be dependant on each other.....
Comcast should have to separate their internet service and their cable. I use directv/tivo so therefore I must pay a penalty extra price for cable internet access. If DSL and phone run over the same line, but are separate features, then cable and internet access over the same cable should be separate features as well. Customers shouldn't pay extra for internet just because they don't want to use one of your other services.
What would be the advantages of writing the server-side in Mono over Java? Not a flame, I'm sincerely curious.
Let me get this straight. It's your opinion that learning things such as pointers, references, pass-by-value, method pointers, macro's, STL, virtual, pure virtual, operator overloading, destructors, no-GC, etc, etc is perfectly fine to learn all in one shot without any prior knowledge. Remeber, that Java has no analogous to A LOT of these things. I would hate to have to see the code of some experienced Java coder having to see all of these things at once. But apparently you have different opinion.
My learning went from assembly ==> C ==> C++ ==> Java, and my advice to you is to not go from Java to C++. If you remember venn diagrams, imagine one circle as Java, Then draw circle next to it without intersection and call that one C. Now draw a circle that intersects Java and C, but also has its own distinct characteristics, and that circle would be C++. There is no way to learn C++ without learning C. If I were you, I'd learn C. Then once you learn C, your OO knowledge will make you question some things. Then C++ will make sense to bridge that gap. Learning C++, or C for that matter, is not going to be fast. And anyone who does learn it fast will be in trouble unless they're really talented. One thing is for sure, once you learn C/C++ you will REALLY appreciate Java. Good Luck.
For the most part I think we agree, but the attitude shows up again in the following two statements:
>CS majors have a hard time realizing that 9 times out of 10 time to market is more critical than computational costs. I'm glad that they are the ones writing code for life critical systems. I'll have an MBA in addition to my CS in three weeks, and I can tell you: Ther are no classes about depending on programmers for advice concerning time to market, that's not thier job.
The programmers/CS people are of least concern to a Product, which is exactly my point. Whether your a seasoned MSCS or a guy with 2 week experience in India the MBA does not care. This is plainly obvious by witnessing the continued outsourcing to the cheapest country. By moving work to the cheapest country you can afford more simultaneous resources which in theory should produce a product faster. Nested loops or not, it doesn't make any difference. This was my point by 9 times out of 10 it doesn't matter how fast your loops are. A page of mathematical proof is not going to matter a bit.
As a side note, CS people have a hard time being told by a manager "Do your job fast and produce a substandard product so I can do my job well". Does that surprise you?
This is the crux of my point. CS people think they run the product. As a future manager I think you will find this is not true. Writing code is not the hard part. Coming up with an outstanding product idea is the hard part. In fact, if you look at the current trends, CS people get outsourced left and right because they don't do it cheapest or fastest. Just as car manufacturing has moved to mexico and elsewhere. In the business world quality code doesn't mean squat. In fact it seems to be inversely proprortional. If you look at the most successful businesses you usually see the worst code. Additionally, these successful companies can and do hire the best CS students available every year to work for them. Strange isn't it?
What a modern manager would really say and care about is "Do your job fast so I can get this product out the door before our competitor over there. If you don't we'll be outsourcing your job to india so we can hire 5 of them for the cost of one of you. I could care less about the mathematics behind your nested loops."
Just think about it. If you take your MBA and start your own company. If you hire the best coders in the world who are guaranteed to produce the most efficient code does this help you produce a successful product? This is where the MBA/CS division becomes plainly obvious.
Your post displays an interesting point. Using an advanced data structure versus two nested loops is an obvious choice. Or is it? You see, it depends. There is no "one true way". The "cost" of a program is more than its computational time. If you were an employer which you would prefer:
Nested Loops:
Written in shorter time
Easier to maintain
Executes in 4 seconds
Advanced Data Structure:
Takes longer to write
harder for someone to maintain
Executes in 1 second
CS majors have a hard time realizing that 9 times out of 10 time to market is more critical than computational costs. Is it good to know advanced data structures? Of course. But more important is knowing when to use them and when not to use them.
Seriously, I have 3 or 4 options right now for broadband. If comcast is going to monitor my usage then I'll decide to go elsewhere for service. The only way they'll stop this kind of activity is if they lose customers by doing it.