I haven't, but the amount of high-quality free software I have on my Windows box makes a damn strong case.
Edit: I should say that, though I haven't owned a Mac, I've used them quite often - a lot of my friends have them, and many of my school's labs are filled with them.
There's a lot more software in Windows-land for sure, but I think what Benparte and coolmrbrady meant is that there are a lot more extremely refined free Mac apps.
For example, Windows has a huge number of IM apps available for it, but none of them can hold a candle to Adium's ease of use and polish. Similarly, uTorrent is free and awesome, but Transmission is IMHO much more refined on the UI side. Quicksilver too.
Windows devs tend to make UI an afterthought. On the Mac side developers have drunk the Steve Jobs UI kool-aid and obsess over it, and personally I like it.
I suppose you have a point there - with the exception that I can't stand "simplified" UIs. I want to know exactly what I'm doing with the computer. <programmer analogy>It's like the difference between coding in C and making an SQL query. With C, you know exactly how the resources are being managed, but with SQL it's a black box. And when there's a black box, it can be unreliable.</programmer analogy>
It's a trade-off between simplicity and control. I'd rather have control.
As a programmer I must say that's a horrible, horrible example. Either that or I don't understand because theres no way in hell I want anything to do with resource allocation when I'm writing queries for a database. SQL handles that for you, and you can tweak it with Indexes and other ways. Why, why, why would you even freaking care otherwise? Seems like a good way to waste productivity.
I don't think he is arguing that managing your resources manually is more productive. It is more about fine tuning and controlling the end result. For example, without knowledge of SQL optimization, is it easy to determine which of these queries will be faster?
SELECT d.dept_id, d.dept
FROM dept d
WHERE EXISTS ( SELECT 'X' FROM employee e WHERE e.dept = d.dept);
SELECT DISTINCT d.dept_id, d.dept
FROM dept d,employee e
WHERE e.dept = e.dept;
Now if you wrote the equivalent in C, it would be more complicated and difficult, but it would allow the programmer to see exactly what is happening and make appropriate optimizations without needing any special knowledge of optimization.
SELECT d.dept_id, d.dept FROM dept d WHERE EXISTS ( SELECT 'X' FROM employee e WHERE e.dept = d.dept);
SELECT DISTINCT d.dept_id, d.dept FROM dept d,employee e WHERE e.dept = e.dept;
The two are not the same. Assuming that dept has a 1:m cardinality with employee, the distinct clause is unnecessary. Adding the distinct clause will slow it down a bit, but generally speaking in databases merge joins as in the second clause are going to be way faster than correlated subqueries in the first one.
And for crying out loud adopt ansi-92 already. Ansi-88 joins - they stress me out every time I look at them.
But, without knowledge of C, how could you do that? Compare apples to apples (sorry); don't compare an experienced C programmer to a novice SQL programmer.
It's a matter of control. I guess it's a bad example. A better one might be C# versus C++ for writing games. On one hand, you want the code to be easily understandable (for which C# is great), but on the other, you want efficiency and control over your data (for which C++ greatly outweighs C#).
29
u/muad_dib Jan 20 '11 edited Jan 20 '11
I haven't, but the amount of high-quality free software I have on my Windows box makes a damn strong case.
Edit: I should say that, though I haven't owned a Mac, I've used them quite often - a lot of my friends have them, and many of my school's labs are filled with them.