Code reviews. Make sure everybody on the team has seen everyone else's code and understands it. Do regular (monthly, bi-weekly, whatever) code reviews. Code quality will go up.
Egoless programming. Don't allow anybody to become a rock star or the only person who can read or write any bit of the code. Everybody must be cross-trained on someone else's code, at least. The team is responsible for the code, so make sure people are polite during code reviews. Polite doesn't mean downplaying problems. It means pointing out problems without being an internet jackass. Nobody "wins" at code review, but the code quality goes up. This works as well as any other software development methodology, with lower overhead, less dedication and no cargo cult behavior.
Professionalism. Foosball tables and other wank infantilize the staff. You're adults, you're there to write high quality code. Keep regular hours, understand that you're there to code, you don't want anybody pulling all-nighters or living in their office. Code quality will go up because it's taken seriously.
Encourage openness. Encourage experimentation. Allow radical changes once in a while. Good programmers want to be understood, respected, listened to and believed. They don't want to be pigeonholed into some kind of geek stereotype, they don't want internet fame and glory, they don't need you to do their laundry for them, they don't need to be coddled.
Reduce (but don't eliminate) time pressure. Code quality wants to go up. It's prevented from going up because management wants you to get to market as fast as possible. Everything you do that improves quality takes time away from feature development. Make it clear that moving deadlines up means fewer features *always*, lower quality *never*. Never sacrifice quality to satisfy a suit.
+1. I haven't yet seen an empirical argument (as opposed to an argument from first principles) that biodiversity is necessary. I wouldn't want to throw it away, but in this world everything is a tradeoff, and the value of warm fuzzy feelings diminishes rapidly when lives—or simply ways of life—are on the line. When scientists warn of catastrophic species loss, the wooey green types are invited to imagine Bambi and her friendly woodland friends rather than the lichens and cockroaches with different colored dots on them that are what's being discussed. We can lose as many species as it takes to keep this species alive; an Earth without humans is absolutely meaningless and absurd. Let's see the proof, rather than conjecture and assumption founded on essentially religious notions of the "earth mother," that it actually matters before we decide to halt human progress in its tracks.
Most programmers doing these kinds of calculations are using floating point numbers, which already have interesting rounding error failure modes that most programmers don't understand. This is going to exacerbate the problem.
Decreasing hardware intelligence and counting on programmers to make up the difference hasn't been a winning proposition in a long time.
Juries have zero power and one responsibility: to determine based on the facts and testimony they've seen, whether or not the law has been broken. They may make a sentencing recommendation, which the judge is then free to ignore. They are not wielding some kind of absolute power. Additionally, death penalty cases are a rounding error compared to the bulk of cases.
That is absolutely the most harebrained scheme I've ever seen floated on Slashdot, possibly the entire internet, and I've been here a while. Think harder. How exactly are juries supposed to remain impartial if they're on the hook for their decisions? Their purpose is not to invent the law or implement it. It is simply to decide, fairly, whether some party has violated the law. Punishing them for the outcomes of their decisions amounts to punishing 12 randomly selected people for making the mistake of having a public address, or the mistake of living in the wrong country.
As your average white guy, I tend to bristle when I feel the race card is being played, and you're right, the media is definitely intentionally making things worse, because it's better for ratings. But on the other hand, I have seen a lot of insane "I'm not a racist, but <insert racist thing>" going on lately, and not just racism, but sexism and all kinds of other bigotry. Even if there isn't as much outright racism in the country now, there is still a lot of unnecessary, unhelpful fear based on racial stereotyping, and that fear is great for escalating situations that really shouldn't be that serious.
It sounds very similar to the phenomenon Malcolm Gladwell discusses in Blink where both sides were primed to expect trouble, so trouble happened. In the book he describes a situation in which some cops gunned down an unarmed black kid because they thought he was reaching for his own gun, and not his wallet. In that situation, there was no reason to assume this kid was dangerous, it was just that the kid was black and it was late at night in a bad part of town.
Whoever is determined to be at fault for this death, it's clearly working as a great proxy for the overall distrust and discomfort between black and white America that most of us are aware of but don't like to talk about and like to pretend went away in the 80's. Depending on how it all shakes out, it could improve the situation, or it could just widen the divide.
The counter-techincal argument is that those users already don't get h.264 on XP. So what's the difference between not having it because the browser doesn't let you use the system libraries and not having it because there are no system libraries? As presented, the difference appears to be that you aren't really getting the same browser on different OSes if there are dependencies on your OS and OS version.
I think the technical retort there doesn't hold a lot of water. After all, your OS probably came with a browser that isn't Mozilla-based which will gladly use native libraries for this kind of thing. Moreover, whether or not they decide to do this, the amount of work developers have to do to support the ridiculous WebM format alongside H.264 isn't going to change: you'll still have to have your content encoded twice and you'll still have to sniff out which version to show.
I think if you frame the argument as "why aren't we doing this?" instead of "why should we do this?" it becomes a lot more clear which course of action is the right one: the one that means a better experience for your users, which means better OS and hardware integration and better battery life when using your browser. Users plural may care about consistency, but a single user is much more interested in features and performance.
One thing I remember very clearly from my college physics course was an explanation of how going faster than the speed of light leads to causality violations. I suppose it's possible that causality isn't something we "need" but it's going to be very hard to have a sensible concept of physics if "A causes B" has to be thrown out the window. I find the probability that ONE instrument doing ONE experiment that shows that maybe something went faster than light a lot less likely to be true than "A causes B" being true and that ONE experiment simply being bad.
I quite agree with you about strings, but FTL is completely insane.
I agree. The scandals, if there are any real ones, are going to amount to fancy new kinds of insider trading and tax evasion, with some outing of dirty politicians on the side.
The problem is that we have one peephole and one organization looking through it and crying wolf. Under normal scientific circumstances, if you say something preposterous, I go spend my $20 replicating your experiment and prove you're a fool. But when your instrument costs us billions dollars and you use it to make absurd, demonstrably insane claims, only to admit you're working the instrument wrong—and you do this repeatedly—you make us all look like fools for spending the money on you. Which is a shame, because the world would be a better place with more research.
Map data structure (in my programming language) direct to data storage (in my database), with little in between, even if my data structure is on one physical machine, and my storage is on another.
That's the crux of the problem. You see the programming language as having the actual structure, and that dusty databasey thingie over there as having some sort of optimized-for-storage representation of the data. In reality, that database has a much richer notion of your data than your program does, and your program has an optimized-for-this-calculation representation.
The proof WaffleMonster submits is the CREATE VIEW statement. This little feature isn't a way of making your SELECTs shorter. It's a way of allowing your applications to restructure the data being stored without introducing copies. It's a way to ensure that when the database is refined (i.e. storing more in more complex ways) the applications you already have don't need to be rewritten to participate.
It depends on how you define ACID
Not really. Every distributed database forgoes some aspect of ACID compliance. Take my shitty iTunes Match service. Just today, I had to delete 28,000 copies of a playlist from iTunes. Why? Because iTunes Match doesn't know who to believe when two devices disagree about a playlist having been made, so it defaults to resolving the conflict by creating a playlist rather than deleting. In a distributed scenario, you are going to have to decide how to handle conflicting versions of the truth. MySQL cluster is marketed as if you don't need to do that, but as someone who has run MySQL with replication, I can tell you, it's extremely fragile. The PostgreSQL version is much harder to set up. Why? Because there are hard questions there that you have to be able to answer, but if you are essentially a front-end engineer who's really excited about Node.js, you have no fucking idea what a hard problem is.
The absolute irony about this whole situation is that all this effort is being made to enable distributed data storage why? So we can have one domain with all our data on it: Facebook, Twitter or whatever. Wouldn't it be neat if, instead of having these massive centralized systems we had some kind of distributed way of hooking computers together?
Plenty of apps try to use offline storage as a cache when disconnected from the main data store, for example.
Yes, and how many of them get it right? Using a local store as a cache is explicitly giving up on ACID compliance: you have to be able to anticipate the situation where your changes can't be applied to the server, and what to do if that happens. This is an application-level problem that can't be swallowed by the database. In some apps, the server will always be right, in some apps the client will always be right, but in most apps, it will be a nasty ad-hoc combination of the two that will demand mental effort to reconcile.
That's not necessarily true if your code is the interface to your database and if your code enforces the necessary constraints so that your database can play dumb.
If you're doing this, you're wasting your database and you're lying to yourself. You're lying to yourself because you think you can shoulder the burden of writing integrity into your application. You're also lying to yourself if you think you can manage concurrency correctly, and you're lying to yourself if you think that your application or library is the only one that's going to access your data and can be the gatekeeper. If any of these things seems reasonable to you, come back here in a decade and let's talk about how it worked out for you.
Relational databases, the good ones anyway, have 30-40 years of debugging and optimization poured into them. If you want to take a year and do your little "database" proj
You can't call it an ORM solution if the backend isn't a relational database. Where are the relations? There aren't any. There's just documents. Not an ORM. This is not 'Nam, there are rules.
Moreover, this has nothing to do with the actual problem. The reason MongoDB et. al. are gaining steam is precisely because there are these "web scale" morons running around ignoring real problems like data validity in favor of starry-eyed dreamland problems like scalability. You can write nice happy OO-like bindings to any document store and make the same claims.
The actual problem underlying the O/R mismatch is that the relational database is a high-level, declarative tool. How do you wrap something high-level in something low-level? You don't, or you reimplement 90% of it. The ORMs that make egregious assumptions and overcomplicate things are the problem (I'm talking about ActiveRecord and Hibernate). There are other, better ORMs which work because they have an appreciation of the difficulty of the task and actually attempt to bridge the gap (yeah, SQL Alchemy).
You obviously haven't heard of functional reactive programming, which greatly simplifies writing interactive apps. You don't wind up needing state monads for everything.
I agree that it isn't the right tool for this situation, but the main problem is the state of the GUI libraries. Getting GTK installed is not easy (but getting easier). Not something I have desperately wanted to do though. Though it certainly can be done, it would be tremendous effort, and since the OP is asking here for a recommendation he probably isn't swift enough with Haskell that it wouldn't be a huge effort on top of doing his GUI experimentation. Learning Haskell is hard, and it will be an impediment.
I'm into this stuff, but reactive-banana isn't even a GUI library. I know Haskell pretty well and haven't dared enter the sticky world of writing a GUI in it. I would say it's a long way from being a good choice for GUI experimentation.
Hey, at least Steve-o paid people to put up with his bullshit. Open source necessarily entails community; corporations do not.
The agribusinesses are right, it is anti-science, and it is bullshit. In this case, the side with the truth also has the money. Imagine that.
Code reviews. Make sure everybody on the team has seen everyone else's code and understands it. Do regular (monthly, bi-weekly, whatever) code reviews. Code quality will go up.
Egoless programming. Don't allow anybody to become a rock star or the only person who can read or write any bit of the code. Everybody must be cross-trained on someone else's code, at least. The team is responsible for the code, so make sure people are polite during code reviews. Polite doesn't mean downplaying problems. It means pointing out problems without being an internet jackass. Nobody "wins" at code review, but the code quality goes up. This works as well as any other software development methodology, with lower overhead, less dedication and no cargo cult behavior.
Professionalism. Foosball tables and other wank infantilize the staff. You're adults, you're there to write high quality code. Keep regular hours, understand that you're there to code, you don't want anybody pulling all-nighters or living in their office. Code quality will go up because it's taken seriously.
Encourage openness. Encourage experimentation. Allow radical changes once in a while. Good programmers want to be understood, respected, listened to and believed. They don't want to be pigeonholed into some kind of geek stereotype, they don't want internet fame and glory, they don't need you to do their laundry for them, they don't need to be coddled.
Reduce (but don't eliminate) time pressure. Code quality wants to go up. It's prevented from going up because management wants you to get to market as fast as possible. Everything you do that improves quality takes time away from feature development. Make it clear that moving deadlines up means fewer features *always*, lower quality *never*. Never sacrifice quality to satisfy a suit.
+1. I haven't yet seen an empirical argument (as opposed to an argument from first principles) that biodiversity is necessary. I wouldn't want to throw it away, but in this world everything is a tradeoff, and the value of warm fuzzy feelings diminishes rapidly when lives—or simply ways of life—are on the line. When scientists warn of catastrophic species loss, the wooey green types are invited to imagine Bambi and her friendly woodland friends rather than the lichens and cockroaches with different colored dots on them that are what's being discussed. We can lose as many species as it takes to keep this species alive; an Earth without humans is absolutely meaningless and absurd. Let's see the proof, rather than conjecture and assumption founded on essentially religious notions of the "earth mother," that it actually matters before we decide to halt human progress in its tracks.
Most programmers doing these kinds of calculations are using floating point numbers, which already have interesting rounding error failure modes that most programmers don't understand. This is going to exacerbate the problem.
Decreasing hardware intelligence and counting on programmers to make up the difference hasn't been a winning proposition in a long time.
They work equally well, but only one of them extends your life and reduces your stress level.
I'm sure your anger and ranting has been a tremendous political boon to wherever it is you live. It seems to be working just as well over here.
Make sure to read "Travels in Siberia" first. If the thought of most of your travel expenses going towards bribes bothers you, reconsider it.
You must have missed the "Let's not start any mudslinging" portion of the parent post.
Juries have zero power and one responsibility: to determine based on the facts and testimony they've seen, whether or not the law has been broken. They may make a sentencing recommendation, which the judge is then free to ignore. They are not wielding some kind of absolute power. Additionally, death penalty cases are a rounding error compared to the bulk of cases.
That is absolutely the most harebrained scheme I've ever seen floated on Slashdot, possibly the entire internet, and I've been here a while. Think harder. How exactly are juries supposed to remain impartial if they're on the hook for their decisions? Their purpose is not to invent the law or implement it. It is simply to decide, fairly, whether some party has violated the law. Punishing them for the outcomes of their decisions amounts to punishing 12 randomly selected people for making the mistake of having a public address, or the mistake of living in the wrong country.
As your average white guy, I tend to bristle when I feel the race card is being played, and you're right, the media is definitely intentionally making things worse, because it's better for ratings. But on the other hand, I have seen a lot of insane "I'm not a racist, but <insert racist thing>" going on lately, and not just racism, but sexism and all kinds of other bigotry. Even if there isn't as much outright racism in the country now, there is still a lot of unnecessary, unhelpful fear based on racial stereotyping, and that fear is great for escalating situations that really shouldn't be that serious.
It sounds very similar to the phenomenon Malcolm Gladwell discusses in Blink where both sides were primed to expect trouble, so trouble happened. In the book he describes a situation in which some cops gunned down an unarmed black kid because they thought he was reaching for his own gun, and not his wallet. In that situation, there was no reason to assume this kid was dangerous, it was just that the kid was black and it was late at night in a bad part of town.
Whoever is determined to be at fault for this death, it's clearly working as a great proxy for the overall distrust and discomfort between black and white America that most of us are aware of but don't like to talk about and like to pretend went away in the 80's. Depending on how it all shakes out, it could improve the situation, or it could just widen the divide.
...but maybe it's time to get off the fucking cloud.
That makes the technical argument even weaker.
The counter-techincal argument is that those users already don't get h.264 on XP. So what's the difference between not having it because the browser doesn't let you use the system libraries and not having it because there are no system libraries? As presented, the difference appears to be that you aren't really getting the same browser on different OSes if there are dependencies on your OS and OS version.
I think the technical retort there doesn't hold a lot of water. After all, your OS probably came with a browser that isn't Mozilla-based which will gladly use native libraries for this kind of thing. Moreover, whether or not they decide to do this, the amount of work developers have to do to support the ridiculous WebM format alongside H.264 isn't going to change: you'll still have to have your content encoded twice and you'll still have to sniff out which version to show.
I think if you frame the argument as "why aren't we doing this?" instead of "why should we do this?" it becomes a lot more clear which course of action is the right one: the one that means a better experience for your users, which means better OS and hardware integration and better battery life when using your browser. Users plural may care about consistency, but a single user is much more interested in features and performance.
You know, until they shut down the service in 18 months because it isn't popular enough...
One thing I remember very clearly from my college physics course was an explanation of how going faster than the speed of light leads to causality violations. I suppose it's possible that causality isn't something we "need" but it's going to be very hard to have a sensible concept of physics if "A causes B" has to be thrown out the window. I find the probability that ONE instrument doing ONE experiment that shows that maybe something went faster than light a lot less likely to be true than "A causes B" being true and that ONE experiment simply being bad.
I quite agree with you about strings, but FTL is completely insane.
I agree. The scandals, if there are any real ones, are going to amount to fancy new kinds of insider trading and tax evasion, with some outing of dirty politicians on the side.
The problem is that we have one peephole and one organization looking through it and crying wolf. Under normal scientific circumstances, if you say something preposterous, I go spend my $20 replicating your experiment and prove you're a fool. But when your instrument costs us billions dollars and you use it to make absurd, demonstrably insane claims, only to admit you're working the instrument wrong—and you do this repeatedly—you make us all look like fools for spending the money on you. Which is a shame, because the world would be a better place with more research.
How many gratuitous errors and claimed impossibilities do you generally consider acceptable in your version of science?
That, and had an underlying theory of data storage, management and querying based on math. Apart from all that, yeah.
That's the crux of the problem. You see the programming language as having the actual structure, and that dusty databasey thingie over there as having some sort of optimized-for-storage representation of the data. In reality, that database has a much richer notion of your data than your program does, and your program has an optimized-for-this-calculation representation.
The proof WaffleMonster submits is the CREATE VIEW statement. This little feature isn't a way of making your SELECTs shorter. It's a way of allowing your applications to restructure the data being stored without introducing copies. It's a way to ensure that when the database is refined (i.e. storing more in more complex ways) the applications you already have don't need to be rewritten to participate.
Not really. Every distributed database forgoes some aspect of ACID compliance. Take my shitty iTunes Match service. Just today, I had to delete 28,000 copies of a playlist from iTunes. Why? Because iTunes Match doesn't know who to believe when two devices disagree about a playlist having been made, so it defaults to resolving the conflict by creating a playlist rather than deleting. In a distributed scenario, you are going to have to decide how to handle conflicting versions of the truth. MySQL cluster is marketed as if you don't need to do that, but as someone who has run MySQL with replication, I can tell you, it's extremely fragile. The PostgreSQL version is much harder to set up. Why? Because there are hard questions there that you have to be able to answer, but if you are essentially a front-end engineer who's really excited about Node.js, you have no fucking idea what a hard problem is.
The absolute irony about this whole situation is that all this effort is being made to enable distributed data storage why? So we can have one domain with all our data on it: Facebook, Twitter or whatever. Wouldn't it be neat if, instead of having these massive centralized systems we had some kind of distributed way of hooking computers together?
Yes, and how many of them get it right? Using a local store as a cache is explicitly giving up on ACID compliance: you have to be able to anticipate the situation where your changes can't be applied to the server, and what to do if that happens. This is an application-level problem that can't be swallowed by the database. In some apps, the server will always be right, in some apps the client will always be right, but in most apps, it will be a nasty ad-hoc combination of the two that will demand mental effort to reconcile.
If you're doing this, you're wasting your database and you're lying to yourself. You're lying to yourself because you think you can shoulder the burden of writing integrity into your application. You're also lying to yourself if you think you can manage concurrency correctly, and you're lying to yourself if you think that your application or library is the only one that's going to access your data and can be the gatekeeper. If any of these things seems reasonable to you, come back here in a decade and let's talk about how it worked out for you.
Relational databases, the good ones anyway, have 30-40 years of debugging and optimization poured into them. If you want to take a year and do your little "database" proj
You can't call it an ORM solution if the backend isn't a relational database. Where are the relations? There aren't any. There's just documents. Not an ORM. This is not 'Nam, there are rules.
Moreover, this has nothing to do with the actual problem. The reason MongoDB et. al. are gaining steam is precisely because there are these "web scale" morons running around ignoring real problems like data validity in favor of starry-eyed dreamland problems like scalability. You can write nice happy OO-like bindings to any document store and make the same claims.
The actual problem underlying the O/R mismatch is that the relational database is a high-level, declarative tool. How do you wrap something high-level in something low-level? You don't, or you reimplement 90% of it. The ORMs that make egregious assumptions and overcomplicate things are the problem (I'm talking about ActiveRecord and Hibernate). There are other, better ORMs which work because they have an appreciation of the difficulty of the task and actually attempt to bridge the gap (yeah, SQL Alchemy).
The problem is overhyped and so is the solution.
You obviously haven't heard of functional reactive programming, which greatly simplifies writing interactive apps. You don't wind up needing state monads for everything.
I agree that it isn't the right tool for this situation, but the main problem is the state of the GUI libraries. Getting GTK installed is not easy (but getting easier). Not something I have desperately wanted to do though. Though it certainly can be done, it would be tremendous effort, and since the OP is asking here for a recommendation he probably isn't swift enough with Haskell that it wouldn't be a huge effort on top of doing his GUI experimentation. Learning Haskell is hard, and it will be an impediment.
I'm into this stuff, but reactive-banana isn't even a GUI library. I know Haskell pretty well and haven't dared enter the sticky world of writing a GUI in it. I would say it's a long way from being a good choice for GUI experimentation.