Are you suggesting that my company, the other companies I've worked at, and the companies my friends work at all exist in an alternate universe? That in your universe companies aren't able to work out the necessary security and legal details to allow developers to run unmanaged Linux boxes? That's a pretty wacky theory you've got there.
My theory is that the companies I've worked at *do* exist (no kidding -- they actually all still exist) and most other companies can do it, too, if only they commit a few resources to drawing up an acceptable policy. Claiming that it's legally or financially impossible is just a way to avoid defending the decision not to.
And hey, if you think this is just a developer vs. sysadmin thing, ask yourself who runs the network and does Windows support where I work. Yeah, we have sysadmins, too, and they're on board with the policy. Hell, half of them do their work from unmanaged Linux boxes. They would hold the executives' email hostage if someone tried to take away their Linux boxes.
Only from your point of view. From our point of view, we're just trying to do our jobs, within a set of constraints you refuse to understand or even consider, and to prevent you in your ignorance and sense of entitlement from undoing our hard work, ruining our weekends, or putting our employer into serious legal and financial jeopardy.
The funny thing is that plenty of large corporations manage to do accomodate all those requests under the burdens of regulatory compliance. How do I know? Because I'm a software developer who runs an unmanaged Linux workstation at my big faceless company, and we are certified to the highest level of PCI compliance.
In fact, developers have been allowed to run alternative platforms at all the (big faceless) companies I've worked at. The reason is obvious: If you don't let software developers work in the environment they're accustomed to, you're throwing away half the money you pay them. I am frankly astonished when I hear stories about IT support groups who aren't bothered by the wastefulness of this. A major responsibility of IT is making sure everyone is working as happily and efficiently as possible. In the case of allowing alternative platforms, the job obviously goes beyond IT -- at my current job, the chief of security and our lawyers are involved in making sure our IT policies stay in compliance with PCI (and presumably the demands of our insurance companies as well.) Still, even if IT staff don't have the authority to set policy, they should be concerned about morale and productivity. They should take the lead, if necessary, in prodding the company to develop new policies.
In any case, it's utter BS to claim something is impossible when many companies explicitly allow it, unless you can point to something unusual about your company that makes it an exception.
We met for lunch but she wasn't interested and was acting strangely alternating between acting nice and ignoring me / being pissy.
I've heard this a few times from friends, and each time, further interrogation reveals the true situation to have been this: The woman signals her lack of interest in a romantic involvement. The guy persists. She gets a bit pissy. He backs off. Then she attempts to continue the date on a friendly basis, and the guy suddenly thinks she's interested again, so he zooms back to full speed ahead. Again she gets pissy, and he backs off. "Okay" she thinks, "I think he gets it this time. Now we can just have a pleasant date and have some fun and not see each other again." So she attempts to restore the friendly mood, and repeat ad infinitum.
Women actually enjoy being friendly with members of the opposite sex they think they will never, ever have sex with.
You picked the wrong local bar or the wrong locale. Interesting people like to go out for a drink with friends, too. The question you have to answer is, where?
Oh, and joining brick-and-mortar clubs or organizations (I belong to several) seems, for some reason, to always mean a sausage-fest, ie: the more specialized the interest the more men.
If you want to meet women, you have to choose the interests that are had by women in your area.
I think you had the misfortune of getting the specifics wrong (*which* bar, *which* interests) and have made false generalizations about groups of people (nice people don't go to bars, women don't join special-interest organizations.) Try more-laid back local bars -- geeks seem to like shabby brewpubs -- and different interests like dancing (ballroom, swing,) cooking, and book clubs. Dance classes are especially good because women who like to dance *need* men to help them enjoy it, and women admire a man who can dance.
Your point is valid, but I think the overriding risk with ARM is that a full version of Windows might never ship on ARM, and if it did, there might not be many applications available. If it's a lot of work to get Windows Vista (or XP) and normal Windows apps running on ARM, Microsoft might prefer to write off ARM entirely rather than overhaul its entire codebase. Microsoft has already decided once before that it's cheaper to stay with x86-compatible architectures, even in areas where x86 offers inferior price/power/performance tradeoffs. If they can afford to stick with x86 and still be competitive, they will do it. Microsoft and x86 have traditionally survived together while technologically superior solutions have fallen by the wayside.
Addendum to explain my reasoning, in case it wasn't clear why I was dismissing the question as stated. The interest in permissive licensing is fishy. If he indends to quote significant chunks of a style guide for the wrong platform, then it's a very bad idea. Plus, there's ALREADY a style guide for his platform -- if he's working for any major desktop platform -- and it would be redundant to quote it. He can just tell his coworkers to go read the damn thing, and he can provide a project-specific appendix (which would be modeled after the standard style guide for his platform, to ensure consistency in terminology and style.)
So, what has he actually been tasked to create? He says he doesn't want it to be "technologically dependent" which makes it sound like he has been tasked with educating beginning UI programmers on general UI design principles. That's consistent with his company putting a guy with no training in UI design (which also means not much experience, or he wouldn't have mentioned it) in charge of the effort.
OSX, GNOME, and KDE are all very usable environments, but style guides mostly tell you how to achieve consistency with other applications on the platform. If the OP is really asking for a style guide of this kind, he needs to tell us what platform he is developing on. Using an Apple style guide to create a Windows program will result in a less usable design, even if the Apple guidelines are superior to the Windows ones.
For an introduction to UI design, here are some good resources:
Not to mention that the ten-minute solution contains proportionally less code, less complexity, and fewer bugs than the two-hour solution. Scale that up to two weeks versus six months, and you're looking at a small, clean piece of code you can forget about versus a big project that requires frequent maintenance. Mediocre programmers create complex, expensive solutions.
Second, you are wrong when you say impressing one's boss won't lead to a management positions. You mistake looking professional and impressing one's boss with sucking up and being a yes-man.
Thank you for pointing this out. From top to bottom, managers filling a position sincerely want to promote the people who will be the most successful. Who they hire reflects on them; their ability to read people and accurately size them up is one of the most highly treasured management skills. Of course, everyone has prejudices and blind spots that affect their judgment, and the classic prejudices of managers are especially easy to pick on because they're predictable.
Obviously, people who intentionally or unwittingly exploit a manager's prejudices will have an advantage. It's a fact of life. Geeks can't get too worked up over this, because they aren't much better in this regard, if they are better at all.
I'm painting an unflattering picture of "geeks" here -- please, nobody have an aneurysm. I like geeks and probably am one myself, though I leave that judgment up to other people. Allow me to paint this picture of geeks, just for rhetorical purposes. I don't think that this is an accurate picture, just that it might be worthwhile to see geeks through this lens.
Geeks have their own blind spots, which they dearly love. Geeks will rationalize all day long to convince themselves that their particular prejudices are not prejudices but accurate heuristics, or that in the end their biases do not affect their judgments of other people. Geeks say many things with what they call "irony," but which is really a double irony, also known as "ha ha only kidding." Under the guise of irony, they proudly broadcast their shortcomings: their disdain for other cultures, their inability to take women seriously, their laziness, their inability to care about the effects of their job on other people. Like other practitioners of this double irony, they do this because it helps them establish the social acceptability of their shortcomings. They become comfortable with the fact that they can't interact with women without being simultaneously obsequious and condescending. It becomes a badge of group membership. People who do not indulge in double irony seem dreadfully stupid and earnest, but at least they do not so easily become proud of their vices.
Geeks are hypocritical about personal grooming. Each geek has his own aesthetic judgment, standards of appearance, and standards of hygiene. Violation of those standards produces an emotional response of disdain or disgust. An especially cool t-shirt wins praise and admiration. Yet, geeks condemn managers for having different aesthetic judgment or higher standards of hygiene. By some logic, managers are morally obligate to purge these normal human reactions from their psyche, but geeks are allowed to revel in them.
Geeks are also hypocrites about their political and social sensitivity. They consider themselves quite enlightened, yet they flaunt their sexism, which they try to pass off as sexual self-deprecation. They use geek shibboleths to identify and aggressively exclude outsiders, passing this off as self-defense against the jocks, managers, and other oppressors. Anyone entering an IT job without the requisite cultural background, or without the proper reverence for the requisite cultural background, faces an uphill battle to receive the same credit, assistance, and inclusion as a sci fi-loving, Slashdot-reading, Penny Arcade-quoting geek. I've sometimes felt the same pressure to start playing first-person shooters that management types must feel to take up golf: "My coworkers are spending a huge amount of time bonding together outside of work. They exchange vital information that doesn't get communicated at the office. Crap, maybe I have to spend hours playing this inane game just so I can stay on top of things." Somehow it's fine to bond over Call of Duty, but when the management guys do it over golf, it
I don't give a shit if it uses 0.0001% of a second core to update the GUI while it maxes out another core encoding something.
If using 0.0001% of the second core increases the responsiveness of the GUI, I give a shit. For whatever reason (I'm not an OS implementer, so I won't speculate), some programs can hurt the responsiveness of other parts of the system. Getting a dual-core processor reduced this effect significantly for me under both Windows and Linux.
It has to actually max out other cores!
Why in the world would it have to max out all the cores? When I was a teenager, my family had three cars and three drivers. There was usually at least one sitting idle in the driveway, but life would have been immensely more difficult if we had tried to get by with two cars.
Anything beyond a quad belongs in a server unless you actually have a multi-core useful program.
Or unless you want to type an email to your friend (using your Ajaxy web mail) about the video you're watching, while half a dozen pages in your browser tabs run Javascript and Flash, and at the same time your computer is installing package updates, compiling code, or ripping a CD.
I got fed up with being anal about how I use computing power long ago. If I want to read a web page later, I don't want to bookmark it and close it. I want to leave it open. I don't want to think about what I'm going to be doing in the next hour before I decide to start a compute-intensive job. And I don't want to start a long-running job and think, "Damn it, this job will barely finish before I go to bed. If I want to do anything with the results tonight, I'd better not do anything intense with the computer until it's done." Screw that! I want to watch my video and play my Flash game now! Give me four cores so I can forget about all that.
Plus, application toolkits these days usually have some concept of a "job" that gets farmed out to worker threads, and they typically spawn three or four threads by default to handle those jobs. A good GUI programmer uses the job framework to handle operations that have the potential to take more than, say, half a second. These frameworks are making multithreading for performance and responsiveness much more accessible to everyday programmers. Eclipse is a good example of a framework with a jobs API. Just run any Eclipse-based application (such as the Eclipse IDE) on a multicore system, and you're likely to see that all potentially lengthy operations are farmed off to worker threads while the GUI continues to respond. Obviously not all application programmers are so considerate, but you only need one well-written, CPU-intensive GUI application to make the extra cores worth it.
For those of us who want smaller government, lower spending, less taxes, individual rights, personal liberties and freedoms, etc we don't have a choice anymore:-(
Did you ever have a choice? Bush and Reagan gave us spending increases (aka deferred tax increases), the Meese commission, and the Patriot Act. The small government, low-spending guys may live somewhere on the right and have more power over Republican rhetoric than Democratic rhetoric, but that doesn't seem to have much influence on how elected Republicans govern. Nor did the Democrats' supposed affinity for big spending stop a Democratic president from leading the effort to balance the budget when it was politically profitable to do so.
Civil liberties are always the priority of the party out of power -- witness how the right raved about privacy and black helicopters while Bill Clinton was president and then completely lost interest in civil liberties under Bush, even though Bush expanded the surveillance and detention powers of exactly the same government agencies they were so afraid of under Clinton. Under Bush, the outrage over wiretapping and detention came from the left.
Likewise, a move towards fiscal responsibility is always bipartisan, like it was in the nineties under Clinton. When politicians bring the bad news home, they need somebody to blame it on. "Sorry, honey, I had to slash the budget because otherwise the goddamn [insert other party here] would have wasted it all." (Notice how the balanced-budget guys the right never got any traction under Reagan and Bush? They might as well have been on vacation for twelve years. They should have had help from the Democrats, but the balanced-budget guys on the left made the stupid political mistake of concentrating on the most outrageous part of the budget, military spending, which in the public's mind is magically irrelevant to fiscal responsibility. As a result there was no bipartisan traction for reining in spending.)
My point is that civil liberties and fiscal responsibility aren't achieved at election time. They're achieved between elections, when politicians on both sides, who would all inevitably become bread-and-circuses emperors if given unlimited power (whether they liked it or not), struggle for advantage by offering concessions to powerful interests. The public has power, and the public gets (a little bit of) whatever it happens to show the most interest in at those times.
When can you get wired ethernet but not wireless? A third world internet cafe? Your wireless network at home might get misconfigured and need to be fixed using a wired connection, but you just have to keep a USB ethernet adapter sitting around. Granted, if you work in IT, the situation is different, but I don't think anyone is envisioning IT guys carrying the Macbook Air around to do network troubleshooting or to use as a terminal in the data center.
It makes sense: Much of the criticism of the MacBook Air are of it's clearly advertised lack of big features
And much of the criticism comes from people who don't use those features at all. Case in point: My office, where nobody uses optical media, nobody bothers with ethernet cables (despite occasional problems with the wireless), and nobody ever plugs in more than one USB device at a time. People still call the Macbook Air "worthless" even though a moment's thought would demonstrate that it is quite adequately equipped to do what they actually do with their laptops.
Lugging around extra ounces and extra cubic inches just so you can have features that you might use once or twice in the lifetime of the laptop is stupid.
Too bad it doesn't come with the Thinkpad's nipple pointer or I'd blow the money on it in a heartbeat. I'm spoiled by the nipple and can't stand touchpads anymore:-(
x86, RISC, and CISC aren't just kinds of instruction sets. Those names are also used to refer to the families of processor design that coevolved with the instruction sets.
RISC was invented because it allowed processors to be implemented in a much simpler and faster way than the current CISC processors. The performance downside of RISC was that certain CISC instructions had to be replaced by several RISC instructions, inflating binary code size a bit, which meant a few more cache misses. Still, it was a massive performance win at the time. As chip technology advanced, the austerity of RISC processors became less important, and the complex CISC instruction decoders started to look less costly. There was more room on the chips to implement complex operations that could not be expressed in minimalistic "true RISC" instruction sets, and memory became a more frequent bottleneck than CPU. This allowed the performance pendulum to swing back towards x86.
Meanwhile, the x86 chip designs assimilated the wisdom of RISC. Current x86 processors have an essentially RISC core hidden behind the instruction decoder. This allows them to have fast RISC internals while programs and libraries can be expressed in a featureful, compact, backwords-compatible CISC instruction set. It is a hybrid.
I'm skeptical -- not skeptical that people can be taught to think, but skeptical that anyone knows how. I've seen people gain knowledge and sophistication but never seen anyone start to apply their knowledge more abstractly than they habitually have since the age of twelve.
I don't think any decline in education can be blamed. When I look to the past, I see exactly what we have today. In every age back to the dawn of the Greeks, contemporary education has been held up to ridicule, the mediocrity of its products mocked, the value of clear, critical thinking extolled, and quite often some bygone golden era of intelligence and practical education lamented. I think it's a healthy attitude not to regard our current institutions as adequate, but I don't think it makes sense to look to the past for answers. The literature of every age records that institutionalized systems of education have always turned out plenty of dullards. (And, it seems, every system has given up as hopeless people who later achieved extraordinary things.)
As for the "CTCL" website you linked, teaching people to think has been a selling point of small liberal arts colleges since long before I did my college search over a decade ago. I haven't seen any evidence that it's more than marketing. They don't even have a monopoly on the marketing anymore -- watch any college bowl game, and you'll see ads for mega-universities and mediocre state schools claiming to use innovative and/or timeless techniques to teach self-reliance, creativity, and critical thinking.
The only thing I've seen in graduates of small liberal arts colleges that is tragically missing in many graduates from elite schools is self-assurance. Some students have been so deeply scarred by the experience of working ten hours days to pull a B- in a class filled with brilliant students, taught by a Nobel Laureate, that they can't look within themselves for a good idea. Put them in a room full of monkeys and they'll start flinging shit at the walls because they're still afraid of falling behind. Students from small liberal arts colleges are perhaps a little towards the other extreme, but that's less tragic and more easily cured.
You actually read the summaries? I just jump straight to the posts and try and recreate TFA from the threads.
You try to recreate TFA from the thread? The single post I'm replying to and whatever I was thinking of when I read it is enough context for me. It's people like you who hold back OSS from displacing Microsoft in the enterprise.
I would consider you an exception rather than the rule. My experience is that "programmers" without solid computer architecture-level training have a very hard time understanding embedded/realtime systems development.
Most programmers have to be hand-held through anything for the first few weeks or months, and God help them if they can't find a decrepit, boring company that lets them do the same kind of programming for years at a time. The mistake is when companies that don't have time to train those kinds of programmers hire them and expect them to adapt to new conditions and requirements on their own. It doesn't work, and the company blames the programmers' training.
In other words, the real issue is that only a minority of programmers are able to take skills developed in one context and apply them in a different context. Other programmers have to be retrained in each new context. Companies need to adapt their hiring practices to this reality. Either they only hire good (expensive) programmers, or they devise some scheme of using the mediocre ones effectively. (From reading project management books, it seems that the second option hasn't been seriously considered since Fred Brooks proposed his small team master-slave architecture.) Either way requires companies to lower their expectations. You can't just hire a random CS grad at prevailing rates and expect to get someone adaptable. That would only be possible if CS grads were much smarter than the average college graduate.
I feel that C++, *.NET, Java, etc. is the entire reason that computers need to be consistently faster and have more cores.
C++? That's confusing. C++ is the language of choice for people worried about low-level efficiency. You can write plain C in C++, if needed. As for Java and.NET: Nah, not really. Garbage-collected VM language platforms like Java and.NET perform quite well CPU-wise compared to C. What they need is more memory, not more cores.
they simply are paid to get the programs out the door as quick as possible, regardless of the performance. Embedded Engineers have to do things a completely different way.
Not true at all. Embedded programmers and Java server programmers both have schedule pressure and performance requirements determined by business considerations. Embedded systems occasionally get hustled out the door with bugs and crappy performance, just like non-embedded systems. Non-embedded systems occasionally get withheld from the market and sent back to development because of unacceptable performance, just like embedded systems.
The reason, being Object Oriented programming.
OO means a lot of things to a lot of people. Perhaps to you it means expensive runtime systems, dynamic everything, extensive use of the heap, and architecture-astronaut designs? In C++, OO is just a way of organizing source code. The resulting object code is just as fast, perhaps faster in some cases when optimized vtable lookups replace C idioms for doing the same thing. There's nothing inherently slow or bloated about object-oriented programming, if only because the term encompasses such a wide variety of programming practices.
I think by "Object Oriented Programming" and "C++, *.NET, Java" you mean "programmers who overengineer their designs." In that case, then you're right, embedded programming is one place where overengineering is deadly. In server and applications development, a certain amount of overengineering is rational, especially when you don't have an agile development process. In embedded programming (at least in my experience) a successful product release does not result in the deluge of feature requests that are the real reason for "bloated" software. A programmer who assumes that version 1.1 will have twenty times as many features as version 1.0 will design in a bunch of hooks and architecture so that version 1.1 can be released in a timely manner. Agile/XP programming provides a way to avoid overengineering to a certain extent, but one thing that agile/XP doesn't address is that it's much easier to delay version 1.0 than to delay version 1.1, because you don't have customers breathing down your neck yet.
They all wanted to become GAME PROGRAMMERS!
Um, content creation and game scripting aside, isn't game programming one of the few remaining desktop programming domains where performance is paramount?
It surely cuts into most people's productivity. The extremely competitive (bullies) do better in heavy competition, but the more intelligent & creative types tend to hide in our foxholes until the shells stop flying, which is generally never, so it always looks like we don't get much done. I used to try to stand up to the bullies, and have a few times, but it's very draining.
I agree. I'm a bit of a show-off technically (within the constraints of sharing code) but I don't bother standing up to bullies, other than making my technical judgment known. Even when you don't fight them, it's dispiriting (draining is an excellent way to put it) to watch them get their way time after time, just because nobody wants to be a martyr and make the massive investment of time and emotional energy necessary to oppose them. Organizations that tolerate such people will get what they deserve, such as people like me leaving for a better job -- yay! I did it just last year, and I still feel happy about it:-D Preserve your sanity above all else.
As a math major who never took any CS classes as an undergrad and then took CS classes at very, very, very lowbrow places (including a local community college) to "round out my education" while I was unemployed, let me tell you that it isn't the teachers' or fault or the fault of the curricula. Teachers can drill finite automata, deadlock analysis, and regular languages all semester, but many students will just never get it. Marketing, on the other hand, is designed to be accessible to everybody. Stop blaming the teachers and programs; start blaming the students for being so stupid, lazy, and gullible that they can sit through years of theory without learning anything of value but can regurgitate shallow marketing slogans after the most fleeting exposure.
The problem is compounded by CS students who have no interest whatsoever in programming or computer systems. When someone struggles and fights their way through a law or medical program, I admire their ambition and discipline. When someone fights and blunders and barely survives a program in social work, I admire their idealism. When a person with no talent or interest in computers insists on slogging their way through a CS program, I think, "WHAT ARE YOU DOING YOU STUPID EVIL IDIOTIC SHIT? YOU ARE MAKING THE WORLD A MORE MISERABLE PLACE. DIE, PLEASE, BEFORE I HAVE TO SPEND ANOTHER SEMESTER IN THE SAME CLASSROOM WITH YOU." Seriously, what is the point of doggedly pursuing a field that you don't enjoy and in which you have no talent and in which what little talent you have will be relatively underpaid because so many people love the field and are, um, somewhat socially unsuited any other kind of decently paid work? Foreign students in the U.S. seem particularly prone to this fate. I'm hesitant to judge them because I don't know what kinds of conditions are placed on their status here, their scholarships, etc., but if there is some institutional bias set up to force them to stick with CS even if they hate it, then that is the most pointlessly evil thing in the world -- a plague on those it directly coerces into CS, and a plague on those who must work with them in school and beyond.
Anyway, I can testify that most of the students I was exposed to matched your description quite well (know nothing more than buzzword garbage) despite being exposed to decent theoretical curricula and some very bright teachers. You can't put the responsibility on the curricula or even the teachers. Actually, I was pleasantly surprised by the teachers I encountered; a fair number were incompetent idiots, as you would expect in the lowbrow classes I took, but many were quite good, and the most lucid lecturer I've ever had in any classroom (including graduate math classes at a real university) taught a beginning digital design class at a night class offered by a crappy state university extension. He had a PhD from an excellent school, had worked on microprocessor design for Motorola, and was VP of technology for a local startup. That didn't stop his students from glazing over during his lectures about design verification techniques and then asking half-baked AMD vs. Intel questions based on Ars Technica articles they skimmed at Starbucks.
I'm buying an iPhone the instant I can get it on another provider. I haven't owned an Apple product since the Apple IIgs, and I'm determinedly unstylish to the point of feeling uncomfortable carrying something that might be perceived as stylish, but damn is it better than anything else out there.
I'm very disappointed with the lack of catch-up by other phone makers. We're well into 2008, and nothing is available that even touches it. (If I wanted a Blackberry-type device, I suppose I might be happy with the choices, but I don't want that.) Hey Nokia, Motorola, LG, etc: get on the ball, people! I'm tired of surfing the web looking for your mythical superphones. I hear about this wonderful phone which just happens to be unavailable in the U.S., and I hunt down an English-language review that lists a bunch of kick-ass specs followed by "This is a really exciting phone with a kick-ass feature list, and while the current incarnation is basically a painful piece of shit, this is merely because the Malaysian/Uzbeki/New Jersey/Romanian market doesn't really give a crap about usability or functionality or anything else at all. The U.S. will soon see a version with all the kinks worked out. This phone proves that U.S. cell phone buyers have soooooo much to look forward to in [2004... 2006... 2008... now 2010]."
Today these mythical superphones get pitched as "iPhone competitors" or even "iPhone killers", but they're the same old fairy tale. Apple made a great phone, and they didn't need to practice by making crappy phones for foreign markets first. Cell company executive: "What are you saying? Making crappy feature-orgy phones for foreign markets isn't the right and natural first step in developing a well-designed phone for the U.S. market? Ahhhhh, my world is crumbling!"
Yet the same is true of theory, too. Theoretical breakthroughs require both open-mindedness and critical thought. When you combine those two, you end up looking at *lots* of stupid-seeming ideas, trying to figure out which ones are insights in disguise. (If you limit yourself to one or the other, then you never have the experience of working with ugly ideas.) A theory that seems unworkable on first glance may actually be brilliant, if only someone puts in the effort to make it work. Then, in retrospect, the theory is quite simple.
A good example is Einstein's thought experiments that led to general relativity. Anyone who tried those thought experiments were led immediately to absurdities, which to most people would have meant that they led to no insight. Einstein struggled with the absurdities until he shaped them into something coherent.
Are you suggesting that my company, the other companies I've worked at, and the companies my friends work at all exist in an alternate universe? That in your universe companies aren't able to work out the necessary security and legal details to allow developers to run unmanaged Linux boxes? That's a pretty wacky theory you've got there.
My theory is that the companies I've worked at *do* exist (no kidding -- they actually all still exist) and most other companies can do it, too, if only they commit a few resources to drawing up an acceptable policy. Claiming that it's legally or financially impossible is just a way to avoid defending the decision not to.
And hey, if you think this is just a developer vs. sysadmin thing, ask yourself who runs the network and does Windows support where I work. Yeah, we have sysadmins, too, and they're on board with the policy. Hell, half of them do their work from unmanaged Linux boxes. They would hold the executives' email hostage if someone tried to take away their Linux boxes.
In fact, developers have been allowed to run alternative platforms at all the (big faceless) companies I've worked at. The reason is obvious: If you don't let software developers work in the environment they're accustomed to, you're throwing away half the money you pay them. I am frankly astonished when I hear stories about IT support groups who aren't bothered by the wastefulness of this. A major responsibility of IT is making sure everyone is working as happily and efficiently as possible. In the case of allowing alternative platforms, the job obviously goes beyond IT -- at my current job, the chief of security and our lawyers are involved in making sure our IT policies stay in compliance with PCI (and presumably the demands of our insurance companies as well.) Still, even if IT staff don't have the authority to set policy, they should be concerned about morale and productivity. They should take the lead, if necessary, in prodding the company to develop new policies.
In any case, it's utter BS to claim something is impossible when many companies explicitly allow it, unless you can point to something unusual about your company that makes it an exception.
Women actually enjoy being friendly with members of the opposite sex they think they will never, ever have sex with.
I think you had the misfortune of getting the specifics wrong (*which* bar, *which* interests) and have made false generalizations about groups of people (nice people don't go to bars, women don't join special-interest organizations.) Try more-laid back local bars -- geeks seem to like shabby brewpubs -- and different interests like dancing (ballroom, swing,) cooking, and book clubs. Dance classes are especially good because women who like to dance *need* men to help them enjoy it, and women admire a man who can dance.
Your point is valid, but I think the overriding risk with ARM is that a full version of Windows might never ship on ARM, and if it did, there might not be many applications available. If it's a lot of work to get Windows Vista (or XP) and normal Windows apps running on ARM, Microsoft might prefer to write off ARM entirely rather than overhaul its entire codebase. Microsoft has already decided once before that it's cheaper to stay with x86-compatible architectures, even in areas where x86 offers inferior price/power/performance tradeoffs. If they can afford to stick with x86 and still be competitive, they will do it. Microsoft and x86 have traditionally survived together while technologically superior solutions have fallen by the wayside.
Addendum to explain my reasoning, in case it wasn't clear why I was dismissing the question as stated. The interest in permissive licensing is fishy. If he indends to quote significant chunks of a style guide for the wrong platform, then it's a very bad idea. Plus, there's ALREADY a style guide for his platform -- if he's working for any major desktop platform -- and it would be redundant to quote it. He can just tell his coworkers to go read the damn thing, and he can provide a project-specific appendix (which would be modeled after the standard style guide for his platform, to ensure consistency in terminology and style.)
So, what has he actually been tasked to create? He says he doesn't want it to be "technologically dependent" which makes it sound like he has been tasked with educating beginning UI programmers on general UI design principles. That's consistent with his company putting a guy with no training in UI design (which also means not much experience, or he wouldn't have mentioned it) in charge of the effort.
For an introduction to UI design, here are some good resources:
Not to mention that the ten-minute solution contains proportionally less code, less complexity, and fewer bugs than the two-hour solution. Scale that up to two weeks versus six months, and you're looking at a small, clean piece of code you can forget about versus a big project that requires frequent maintenance. Mediocre programmers create complex, expensive solutions.
Now I'm sure some exclusionary bastard will try to revoke my geek card ;-)
Thank you for pointing this out. From top to bottom, managers filling a position sincerely want to promote the people who will be the most successful. Who they hire reflects on them; their ability to read people and accurately size them up is one of the most highly treasured management skills. Of course, everyone has prejudices and blind spots that affect their judgment, and the classic prejudices of managers are especially easy to pick on because they're predictable.
Obviously, people who intentionally or unwittingly exploit a manager's prejudices will have an advantage. It's a fact of life. Geeks can't get too worked up over this, because they aren't much better in this regard, if they are better at all.
I'm painting an unflattering picture of "geeks" here -- please, nobody have an aneurysm. I like geeks and probably am one myself, though I leave that judgment up to other people. Allow me to paint this picture of geeks, just for rhetorical purposes. I don't think that this is an accurate picture, just that it might be worthwhile to see geeks through this lens.
Geeks have their own blind spots, which they dearly love. Geeks will rationalize all day long to convince themselves that their particular prejudices are not prejudices but accurate heuristics, or that in the end their biases do not affect their judgments of other people. Geeks say many things with what they call "irony," but which is really a double irony, also known as "ha ha only kidding." Under the guise of irony, they proudly broadcast their shortcomings: their disdain for other cultures, their inability to take women seriously, their laziness, their inability to care about the effects of their job on other people. Like other practitioners of this double irony, they do this because it helps them establish the social acceptability of their shortcomings. They become comfortable with the fact that they can't interact with women without being simultaneously obsequious and condescending. It becomes a badge of group membership. People who do not indulge in double irony seem dreadfully stupid and earnest, but at least they do not so easily become proud of their vices.
Geeks are hypocritical about personal grooming. Each geek has his own aesthetic judgment, standards of appearance, and standards of hygiene. Violation of those standards produces an emotional response of disdain or disgust. An especially cool t-shirt wins praise and admiration. Yet, geeks condemn managers for having different aesthetic judgment or higher standards of hygiene. By some logic, managers are morally obligate to purge these normal human reactions from their psyche, but geeks are allowed to revel in them.
Geeks are also hypocrites about their political and social sensitivity. They consider themselves quite enlightened, yet they flaunt their sexism, which they try to pass off as sexual self-deprecation. They use geek shibboleths to identify and aggressively exclude outsiders, passing this off as self-defense against the jocks, managers, and other oppressors. Anyone entering an IT job without the requisite cultural background, or without the proper reverence for the requisite cultural background, faces an uphill battle to receive the same credit, assistance, and inclusion as a sci fi-loving, Slashdot-reading, Penny Arcade-quoting geek. I've sometimes felt the same pressure to start playing first-person shooters that management types must feel to take up golf: "My coworkers are spending a huge amount of time bonding together outside of work. They exchange vital information that doesn't get communicated at the office. Crap, maybe I have to spend hours playing this inane game just so I can stay on top of things." Somehow it's fine to bond over Call of Duty, but when the management guys do it over golf, it
I got fed up with being anal about how I use computing power long ago. If I want to read a web page later, I don't want to bookmark it and close it. I want to leave it open. I don't want to think about what I'm going to be doing in the next hour before I decide to start a compute-intensive job. And I don't want to start a long-running job and think, "Damn it, this job will barely finish before I go to bed. If I want to do anything with the results tonight, I'd better not do anything intense with the computer until it's done." Screw that! I want to watch my video and play my Flash game now! Give me four cores so I can forget about all that.
Plus, application toolkits these days usually have some concept of a "job" that gets farmed out to worker threads, and they typically spawn three or four threads by default to handle those jobs. A good GUI programmer uses the job framework to handle operations that have the potential to take more than, say, half a second. These frameworks are making multithreading for performance and responsiveness much more accessible to everyday programmers. Eclipse is a good example of a framework with a jobs API. Just run any Eclipse-based application (such as the Eclipse IDE) on a multicore system, and you're likely to see that all potentially lengthy operations are farmed off to worker threads while the GUI continues to respond. Obviously not all application programmers are so considerate, but you only need one well-written, CPU-intensive GUI application to make the extra cores worth it.
Civil liberties are always the priority of the party out of power -- witness how the right raved about privacy and black helicopters while Bill Clinton was president and then completely lost interest in civil liberties under Bush, even though Bush expanded the surveillance and detention powers of exactly the same government agencies they were so afraid of under Clinton. Under Bush, the outrage over wiretapping and detention came from the left.
Likewise, a move towards fiscal responsibility is always bipartisan, like it was in the nineties under Clinton. When politicians bring the bad news home, they need somebody to blame it on. "Sorry, honey, I had to slash the budget because otherwise the goddamn [insert other party here] would have wasted it all." (Notice how the balanced-budget guys the right never got any traction under Reagan and Bush? They might as well have been on vacation for twelve years. They should have had help from the Democrats, but the balanced-budget guys on the left made the stupid political mistake of concentrating on the most outrageous part of the budget, military spending, which in the public's mind is magically irrelevant to fiscal responsibility. As a result there was no bipartisan traction for reining in spending.)
My point is that civil liberties and fiscal responsibility aren't achieved at election time. They're achieved between elections, when politicians on both sides, who would all inevitably become bread-and-circuses emperors if given unlimited power (whether they liked it or not), struggle for advantage by offering concessions to powerful interests. The public has power, and the public gets (a little bit of) whatever it happens to show the most interest in at those times.
When can you get wired ethernet but not wireless? A third world internet cafe? Your wireless network at home might get misconfigured and need to be fixed using a wired connection, but you just have to keep a USB ethernet adapter sitting around. Granted, if you work in IT, the situation is different, but I don't think anyone is envisioning IT guys carrying the Macbook Air around to do network troubleshooting or to use as a terminal in the data center.
And much of the criticism comes from people who don't use those features at all. Case in point: My office, where nobody uses optical media, nobody bothers with ethernet cables (despite occasional problems with the wireless), and nobody ever plugs in more than one USB device at a time. People still call the Macbook Air "worthless" even though a moment's thought would demonstrate that it is quite adequately equipped to do what they actually do with their laptops.
Lugging around extra ounces and extra cubic inches just so you can have features that you might use once or twice in the lifetime of the laptop is stupid.
Too bad it doesn't come with the Thinkpad's nipple pointer or I'd blow the money on it in a heartbeat. I'm spoiled by the nipple and can't stand touchpads anymore
x86, RISC, and CISC aren't just kinds of instruction sets. Those names are also used to refer to the families of processor design that coevolved with the instruction sets.
RISC was invented because it allowed processors to be implemented in a much simpler and faster way than the current CISC processors. The performance downside of RISC was that certain CISC instructions had to be replaced by several RISC instructions, inflating binary code size a bit, which meant a few more cache misses. Still, it was a massive performance win at the time. As chip technology advanced, the austerity of RISC processors became less important, and the complex CISC instruction decoders started to look less costly. There was more room on the chips to implement complex operations that could not be expressed in minimalistic "true RISC" instruction sets, and memory became a more frequent bottleneck than CPU. This allowed the performance pendulum to swing back towards x86.
Meanwhile, the x86 chip designs assimilated the wisdom of RISC. Current x86 processors have an essentially RISC core hidden behind the instruction decoder. This allows them to have fast RISC internals while programs and libraries can be expressed in a featureful, compact, backwords-compatible CISC instruction set. It is a hybrid.
I'm skeptical -- not skeptical that people can be taught to think, but skeptical that anyone knows how. I've seen people gain knowledge and sophistication but never seen anyone start to apply their knowledge more abstractly than they habitually have since the age of twelve.
I don't think any decline in education can be blamed. When I look to the past, I see exactly what we have today. In every age back to the dawn of the Greeks, contemporary education has been held up to ridicule, the mediocrity of its products mocked, the value of clear, critical thinking extolled, and quite often some bygone golden era of intelligence and practical education lamented. I think it's a healthy attitude not to regard our current institutions as adequate, but I don't think it makes sense to look to the past for answers. The literature of every age records that institutionalized systems of education have always turned out plenty of dullards. (And, it seems, every system has given up as hopeless people who later achieved extraordinary things.)
As for the "CTCL" website you linked, teaching people to think has been a selling point of small liberal arts colleges since long before I did my college search over a decade ago. I haven't seen any evidence that it's more than marketing. They don't even have a monopoly on the marketing anymore -- watch any college bowl game, and you'll see ads for mega-universities and mediocre state schools claiming to use innovative and/or timeless techniques to teach self-reliance, creativity, and critical thinking.
The only thing I've seen in graduates of small liberal arts colleges that is tragically missing in many graduates from elite schools is self-assurance. Some students have been so deeply scarred by the experience of working ten hours days to pull a B- in a class filled with brilliant students, taught by a Nobel Laureate, that they can't look within themselves for a good idea. Put them in a room full of monkeys and they'll start flinging shit at the walls because they're still afraid of falling behind. Students from small liberal arts colleges are perhaps a little towards the other extreme, but that's less tragic and more easily cured.
In other words, the real issue is that only a minority of programmers are able to take skills developed in one context and apply them in a different context. Other programmers have to be retrained in each new context. Companies need to adapt their hiring practices to this reality. Either they only hire good (expensive) programmers, or they devise some scheme of using the mediocre ones effectively. (From reading project management books, it seems that the second option hasn't been seriously considered since Fred Brooks proposed his small team master-slave architecture.) Either way requires companies to lower their expectations. You can't just hire a random CS grad at prevailing rates and expect to get someone adaptable. That would only be possible if CS grads were much smarter than the average college graduate.
I think by "Object Oriented Programming" and "C++, *.NET, Java" you mean "programmers who overengineer their designs." In that case, then you're right, embedded programming is one place where overengineering is deadly. In server and applications development, a certain amount of overengineering is rational, especially when you don't have an agile development process. In embedded programming (at least in my experience) a successful product release does not result in the deluge of feature requests that are the real reason for "bloated" software. A programmer who assumes that version 1.1 will have twenty times as many features as version 1.0 will design in a bunch of hooks and architecture so that version 1.1 can be released in a timely manner. Agile/XP programming provides a way to avoid overengineering to a certain extent, but one thing that agile/XP doesn't address is that it's much easier to delay version 1.0 than to delay version 1.1, because you don't have customers breathing down your neck yet.
Um, content creation and game scripting aside, isn't game programming one of the few remaining desktop programming domains where performance is paramount?The problem is compounded by CS students who have no interest whatsoever in programming or computer systems. When someone struggles and fights their way through a law or medical program, I admire their ambition and discipline. When someone fights and blunders and barely survives a program in social work, I admire their idealism. When a person with no talent or interest in computers insists on slogging their way through a CS program, I think, "WHAT ARE YOU DOING YOU STUPID EVIL IDIOTIC SHIT? YOU ARE MAKING THE WORLD A MORE MISERABLE PLACE. DIE, PLEASE, BEFORE I HAVE TO SPEND ANOTHER SEMESTER IN THE SAME CLASSROOM WITH YOU." Seriously, what is the point of doggedly pursuing a field that you don't enjoy and in which you have no talent and in which what little talent you have will be relatively underpaid because so many people love the field and are, um, somewhat socially unsuited any other kind of decently paid work? Foreign students in the U.S. seem particularly prone to this fate. I'm hesitant to judge them because I don't know what kinds of conditions are placed on their status here, their scholarships, etc., but if there is some institutional bias set up to force them to stick with CS even if they hate it, then that is the most pointlessly evil thing in the world -- a plague on those it directly coerces into CS, and a plague on those who must work with them in school and beyond.
Anyway, I can testify that most of the students I was exposed to matched your description quite well (know nothing more than buzzword garbage) despite being exposed to decent theoretical curricula and some very bright teachers. You can't put the responsibility on the curricula or even the teachers. Actually, I was pleasantly surprised by the teachers I encountered; a fair number were incompetent idiots, as you would expect in the lowbrow classes I took, but many were quite good, and the most lucid lecturer I've ever had in any classroom (including graduate math classes at a real university) taught a beginning digital design class at a night class offered by a crappy state university extension. He had a PhD from an excellent school, had worked on microprocessor design for Motorola, and was VP of technology for a local startup. That didn't stop his students from glazing over during his lectures about design verification techniques and then asking half-baked AMD vs. Intel questions based on Ars Technica articles they skimmed at Starbucks.
I'm very disappointed with the lack of catch-up by other phone makers. We're well into 2008, and nothing is available that even touches it. (If I wanted a Blackberry-type device, I suppose I might be happy with the choices, but I don't want that.) Hey Nokia, Motorola, LG, etc: get on the ball, people! I'm tired of surfing the web looking for your mythical superphones. I hear about this wonderful phone which just happens to be unavailable in the U.S., and I hunt down an English-language review that lists a bunch of kick-ass specs followed by "This is a really exciting phone with a kick-ass feature list, and while the current incarnation is basically a painful piece of shit, this is merely because the Malaysian/Uzbeki/New Jersey/Romanian market doesn't really give a crap about usability or functionality or anything else at all. The U.S. will soon see a version with all the kinks worked out. This phone proves that U.S. cell phone buyers have soooooo much to look forward to in [2004... 2006... 2008... now 2010]."
Today these mythical superphones get pitched as "iPhone competitors" or even "iPhone killers", but they're the same old fairy tale. Apple made a great phone, and they didn't need to practice by making crappy phones for foreign markets first. Cell company executive: "What are you saying? Making crappy feature-orgy phones for foreign markets isn't the right and natural first step in developing a well-designed phone for the U.S. market? Ahhhhh, my world is crumbling!"
A good example is Einstein's thought experiments that led to general relativity. Anyone who tried those thought experiments were led immediately to absurdities, which to most people would have meant that they led to no insight. Einstein struggled with the absurdities until he shaped them into something coherent.