I'm 43 and have been a programmer in Silicon Valley since 1995. From my personal perspective, the job market is red hot. However, having experienced countless interviews, from both sides of the table, I know how arbitrary and capricious hiring decisions are. I've worked at a lot of places and always kept my skill-set relevant, but if, for example, I had spent the last 12 years doing nothing but C++ for one employer, and suddenly found myself looking for work, I'm sure my age would be a liability. One thing I've noticed from recent experience interviewing candidates: mediocre interviewees with only a few years experience often get the benefit of the doubt, where people with 10 or more years experience who give an equally mediocre interview performance will get rejected outright. The rationale is that the junior person is likely to improve, whereas with the senior person, "what you see is what you get". Is this unfair? I don't know, I guess it depends on the situation, but it certainly illustrates the fact that as an interviewee, you are judged according to significantly varying standards depending on your age. This, by definition, is "discrimination".
given a negative attitude towards long comments, many bad programmers will likely simply respond by not commenting their code at all. That's not good.
I agree 100%, and would add that this can even happen with good programmers. A few years ago I worked at a company whose culture was deeply invested in the XP "comments are a code smell" philosophy. The engineers were all extremely bright, but as a newcomer I found the code to be difficult to work with, in part because there were no comments anywhere. No API docs, no explanations of hacky code (there was plenty of hacky code, by the way), no nothing. The idea was that 1) if code is not clear without comments, it should be rewritten to make it more simple, and 2) if you need help understanding someone's code, just walk over and ask him/her about it. Well, regarding 1), I was trying to maintain/improve some nasty code which had been touched by multiple people over several years and it didn't seem like its lack of comments had led to any kind of refactoring or simplification. And regarding 2), the company now no longer exists, and while the IP now belongs to another company, all of the original engineers have moved on to bigger and better places. I bet the people who had to take over the code would not have minded the additional "smell" of a few well-placed comments.:-)
When I first learned dvorak I forgot how to touchtype qwerty after just a month of. By then I'd become proficient at dvorak. About a year later I switched back, and promptly lost my dvorak proficiency. But then over time it became easier to switch back and forth, to the point where now I can switch from one to the other at will. (In fact, right now I'm sitting in front of two laptops, with a dvorak keyboard plugged into one of them, and I have no problem switching from one keyboard to another.) It's as if my brain initially overwrote the same memory space, but when I started using both mappings frequently, it was forced to devote separate gray matter for each. Makes me wonder what I had to forget to make that extra space...
You're right that the tendency to impose bans, with excessive punishments for violating the bans, is typically Singaporean. But to ban chewing gum because some people were sticking it on the elevator buttons takes it to a ridiculous extreme that took most Singaporeans by surprise. I was in Singapore in 1991, just before the ban, and by chance I happened to learn about it before it went into effect. When I told people that their government was about to ban chewing gum, they didn't believe me, and in fact thought I was making an insulting joke. Basically the gum-chewing ban was a terrible mistake. It made Singapore an international laughingstock, and it may have somewhat eroded many Singaporeans' respect for their government.
In short, it's a mistake to force Western notions of freedom and morality on a culture that already has its own conceptions of both.
I'm sure it wasn't meant to be, but in a way that seems like a condescending attitude. It's as if to say that we should apply lower standards of freedom or morality to Singapore, because some of their attitudes are different from mainstream Western attitudes, the implication being that Singapore is somehow inferior.
That's not the point. Hopefully it's just that the guy's too dumb to work a voting machine, and his friends lied about voting for him, but if it turns out that the machine did, for whatever reason, fail to accurately record the votes of a mere few dozen people, this has disturbing implications for the integrity of elections nationwide. I certainly hope they don't just shrug this off.
Agreed, although Vector and Hashtable are not really there for concurrency; they're there for backward compatibility, having been around since 1.0. They don't really support thread safety properly anyway, so there's really no reason to use them ever, unless you're communicating with an API that uses them.
I don't think that "they didn't think through the right way to do it before dashing in to an implementation and stuffing it into core Java" is a fair characterization at all, when it comes to Java's collections. History indicates otherwise, at least to me. Java 1.0, circa 1995, contained only three collection types - the primitive array type, Vector, and Hashtable. These provided adequate functionality for simple things, but certainly didn't provide full-fledged collection support. It wasn't until late 1998, with the release of 1.2, that the collection interfaces and classes were officially added to the JDK. So what happened in between? There were several independent efforts to provide more powerful collection support. One was a set of public domain classes developed by Doug Lea. (It's described here: http://g.oswego.edu/dl/classes/collections/.) The other was the Java Generic Library (JGL), which was essentially a port of C++'s STL. Prior to 1.2, JGL was quite popular, but Sun eventually went with a solution derived from Doug Lea's classes, rightfully so, in my opinion. (The old Vector and Hashtable classes had to be kept around for backward compatibility, but they were incorporated into the new framework, by being made to implement List and Map, respectively.) To me, this history shows that in the case of the collections, Sun certainly didn't dash in to an implementation and stuff it into the JDK. Had they done so, there wouldn't have been that 3 year delay, and we'd have ended up with something much worse than what is there now; and what is there now is not bad at all, IMHO.
Um. I think you're confused about the meaning of "complex". I find the JDK's collection classes to be decidedly lacking in unnecessary complexity. As a matter of fact, they reduce complexity, by hiding data structures behind generic interfaces. It's called polymorphism. In contrast, if all I had to work with were arrays, my application code would need to be much more complex.
Right now, the Asian tech industries excel at not innovation but copying and improving upon existing designs which typically originate elsewhere. This is not just a Chinese thing -- look at the Japanese auto industry...
Right. Because Toyota knows absolutely nothing about innovation...
Don't you think that if people weren't cheating to "pass" that class, then the instructors would recognize, through the excessive drop and failure rates, that the class was too hard, and changes would be made to make it more reasonable? Sounds like cheating is part of the problem, rather than the solution.
Web search tracking is in a whole other league from grocery store purchase tracking. The tracking of store purchases was only made possible by a concerted effort by the grocery store industry and the passive compliance of the public, most of whom either didn't know or didn't care about the real purpose of the cards. The ability to track web searches, on the other hand, already existed, due to the nature of search technology, but it only recently entered the public consciousness. I'm sure it comes as a shock to most people, the extent to which their on-line activities are being recorded. At any rate, web search tracking is a much bigger deal than grocery purchase tracking. The privacy threat of corporations having intimately detailed knowledge of one's junk food and condom preferences is bounded, whereas the potential harm from having one's every web search saved in perpetuity seems limitless. There's something really frightening about the notion that what one types into a search engine will be linked to one's name, and recorded and saved forever. This can and will ruin peoples' lives.
I'm 43 and have been a programmer in Silicon Valley since 1995. From my personal perspective, the job market is red hot. However, having experienced countless interviews, from both sides of the table, I know how arbitrary and capricious hiring decisions are. I've worked at a lot of places and always kept my skill-set relevant, but if, for example, I had spent the last 12 years doing nothing but C++ for one employer, and suddenly found myself looking for work, I'm sure my age would be a liability.
One thing I've noticed from recent experience interviewing candidates: mediocre interviewees with only a few years experience often get the benefit of the doubt, where people with 10 or more years experience who give an equally mediocre interview performance will get rejected outright. The rationale is that the junior person is likely to improve, whereas with the senior person, "what you see is what you get". Is this unfair? I don't know, I guess it depends on the situation, but it certainly illustrates the fact that as an interviewee, you are judged according to significantly varying standards depending on your age. This, by definition, is "discrimination".
given a negative attitude towards long comments, many bad programmers will likely simply respond by not commenting their code at all. That's not good.
I agree 100%, and would add that this can even happen with good programmers. A few years ago I worked at a company whose culture was deeply invested in the XP "comments are a code smell" philosophy. The engineers were all extremely bright, but as a newcomer I found the code to be difficult to work with, in part because there were no comments anywhere. No API docs, no explanations of hacky code (there was plenty of hacky code, by the way), no nothing. :-)
The idea was that 1) if code is not clear without comments, it should be rewritten to make it more simple, and 2) if you need help understanding someone's code, just walk over and ask him/her about it. Well, regarding 1), I was trying to maintain/improve some nasty code which had been touched by multiple people over several years and it didn't seem like its lack of comments had led to any kind of refactoring or simplification. And regarding 2), the company now no longer exists, and while the IP now belongs to another company, all of the original engineers have moved on to bigger and better places. I bet the people who had to take over the code would not have minded the additional "smell" of a few well-placed comments.
When I first learned dvorak I forgot how to touchtype qwerty after just a month of. By then I'd become proficient at dvorak. About a year later I switched back, and promptly lost my dvorak proficiency. But then over time it became easier to switch back and forth, to the point where now I can switch from one to the other at will. (In fact, right now I'm sitting in front of two laptops, with a dvorak keyboard plugged into one of them, and I have no problem switching from one keyboard to another.) It's as if my brain initially overwrote the same memory space, but when I started using both mappings frequently, it was forced to devote separate gray matter for each. Makes me wonder what I had to forget to make that extra space...
I'm sure it wasn't meant to be, but in a way that seems like a condescending attitude. It's as if to say that we should apply lower standards of freedom or morality to Singapore, because some of their attitudes are different from mainstream Western attitudes, the implication being that Singapore is somehow inferior.
That's not the point. Hopefully it's just that the guy's too dumb to work a voting machine, and his friends lied about voting for him, but if it turns out that the machine did, for whatever reason, fail to accurately record the votes of a mere few dozen people, this has disturbing implications for the integrity of elections nationwide. I certainly hope they don't just shrug this off.
Agreed, although Vector and Hashtable are not really there for concurrency; they're there for backward compatibility, having been around since 1.0. They don't really support thread safety properly anyway, so there's really no reason to use them ever, unless you're communicating with an API that uses them.
Sonny, I've written more Smalltalk code than you've had hot meals.
I don't think that "they didn't think through the right way to do it before dashing in to an implementation and stuffing it into core Java" is a fair characterization at all, when it comes to Java's collections. History indicates otherwise, at least to me. Java 1.0, circa 1995, contained only three collection types - the primitive array type, Vector, and Hashtable. These provided adequate functionality for simple things, but certainly didn't provide full-fledged collection support. It wasn't until late 1998, with the release of 1.2, that the collection interfaces and classes were officially added to the JDK. So what happened in between? There were several independent efforts to provide more powerful collection support. One was a set of public domain classes developed by Doug Lea. (It's described here: http://g.oswego.edu/dl/classes/collections/.)
The other was the Java Generic Library (JGL), which was essentially a port of C++'s STL. Prior to 1.2, JGL was quite popular, but Sun eventually went with a solution derived from Doug Lea's classes, rightfully so, in my opinion. (The old Vector and Hashtable classes had to be kept around for backward compatibility, but they were incorporated into the new framework, by being made to implement List and Map, respectively.)
To me, this history shows that in the case of the collections, Sun certainly didn't dash in to an implementation and stuff it into the JDK. Had they done so, there wouldn't have been that 3 year delay, and we'd have ended up with something much worse than what is there now; and what is there now is not bad at all, IMHO.
Um. I think you're confused about the meaning of "complex". I find the JDK's collection classes to be decidedly lacking in unnecessary complexity. As a matter of fact, they reduce complexity, by hiding data structures behind generic interfaces. It's called polymorphism. In contrast, if all I had to work with were arrays, my application code would need to be much more complex.
http://www.apologeticspress.org/articles/304
Right. Because Toyota knows absolutely nothing about innovation...
Don't you think that if people weren't cheating to "pass" that class, then the instructors would recognize, through the excessive drop and failure rates, that the class was too hard, and changes would be made to make it more reasonable? Sounds like cheating is part of the problem, rather than the solution.
Don't you know that a gramme is better than a damn?
Web search tracking is in a whole other league from grocery store purchase tracking.
The tracking of store purchases was only made possible by a concerted effort by the grocery store industry and the passive compliance of the public, most of whom either didn't know or didn't care about the real purpose of the cards. The ability to track web searches, on the other hand, already existed, due to the nature of search technology, but it only recently entered the public consciousness. I'm sure it comes as a shock to most people, the extent to which their on-line activities are being recorded.
At any rate, web search tracking is a much bigger deal than grocery purchase tracking. The privacy threat of corporations having intimately detailed knowledge of one's junk food and condom preferences is bounded, whereas the potential harm from having one's every web search saved in perpetuity seems limitless. There's something really frightening about the notion that what one types into a search engine will be linked to one's name, and recorded and saved forever. This can and will ruin peoples' lives.
because you cannot be found guilty of thinking about a crime
Wow. Maybe not, but you might be investigated.
And don't forget about the possibility of identity theft or even blackmail.
Can you imagine C after it "borrows" a few verbs (function calls) from say smalltalk?
Objective C?