b) Open source software written in Java that already exists will get a boost in interest and visibility, as it is no longer using a language that is non-free.
I don't see this making a big difference. Most of the open-source Java software I've seen is aimed at accomplishing a particular task in Java, so the people who would consider using it have already bought in to Java itself. I'm thinking mostly of web development frameworks like Hibernate, Struts, and Webwork. The people using them have already made the decision to do server-side Java; the fact that it's now open-source is nice but not really that big a deal. Maybe I'm biased because I mostly do server-side Java development, and everyone I know who writes that sort of software already uses plenty of open-source libraries.
Your diabetes appeared to "dissappear" because you lost a lot of weight.
That's what I was expecting too, but it's not what happened. It went away immediately, right after the surgery, not months later after I'd lost all that weight. I don't know exactly why it happened; my food intake was definitely much lower than it had been before, but I was still eating. The same thing has happened to other patients I know personally, and anecdotally I've heard of one person who had the surgery to "cure" his type 2 diabetes even though he wasn't overweight. (I don't think I'd have been willing to take that risk myself.)
I don't think the surgeons really know why the surgery has this effect yet. There are one or two research papers floating around, but they seemed pretty speculative when I read them. (I can't find them now, but if I come across the links I'll post them.)
The best you can do is teach your children to take care of their body, monitor their sugar and get out and exercise regularly.
Definitely. Even if this development turns out to be real, it's years off, and the damage from high blood sugar is cumulative and irreversible, at least so far.
The new PC I built a home a couple of months ago had a Core 2 Duo in it, so it's 64-bit by definition. It's still running the 32-bit version of XP, though. I only put 2 Gb of RAM in it, so there didn't seem to be much point in installing XP-64. (I'm tempted to install Ubuntu on it instead, but I still use Photoshop and Quicken and a few other Windows-only apps occasionally.)
At work, I use a workstation with a 64-bit processor and 4 Gb of RAM. It's running a 64-bit Linux kernel but most apps run in a 32-bit user space. I'm not much of a Linux expert, but it seems to work quite well. All of the 32-bit desktop apps like Firefox and Flash work just fine, but I can still use all of the memory on the box and can run applications compiled for 64-bit mode when I need to. Now I just have to talk someone into buying me a box with a faster processor and even more RAM.
I am (or was) a type 2 diabetic myself, so I know about getting my hopes up. A lot of strange things are happening in diabetes research lately, though, and it's starting to look like nobody really understood how it worked. Maybe they still don't, but they're at least starting to get a clue.
As for myself, I finally gave up on dieting last summer and opted for weight loss surgery. For some reason that nobody really understands yet, some forms of weight loss surgery cure type 2 diabetes about 75% of the time. Those were good enough odds for me, and I got lucky: it worked. I've been off of all the diabetes medications since the day I got out of the hospital. My blood sugar, while not quite down in the normal range yet, is lower than it was before then surgery when I was taking the medications. And losing 75 pounds probably didn't hurt either.:-) This isn't for everyone, but at least there are starting to be options.
My current favorite Java programming book is Java Concurrency in Practice by Broan Goetz and others. It's not for beginners, but if you really want to understand how to write multi-threaded code in Java you need to read this book. Several times, probably, because it's a tricky subject.
Other books I like for Java are Effective Java (though he needs to update it for Java 1.5) and Java Puzzlers.
I don't know of any books that are good descriptions of the Java 1.5 features for experienced programmers. Some people like Thinking in Java, but it seems pretty wordy to me. I originally learned Java from Java in a Nutshell but it's been something like 8 years, so I don't know if the newer editions are any good.
Disclaimer: some of the authors of these books are my co-workers, though I don't know them very well.
That's pure genius! Perhaps we could have professionals bidding on this market place and call them "auction brokers" and we can then have all these professionals work in a place we call the "auction exchange".
I'm sorry, but I've patented that business method. Want to license it?
It is sometimes entertaining having an inside perspective when there's so much speculation floating around. The same thing has happened when I've worked for other companies that occasionally made the news, so it's not unique to Google, but it's more frequent.
I occasionally try to chime in and correct things. But I know fairly little about what's going on in most parts of the company, so I often don't know what's confidential and what isn't. Most of the time I just play it safe and keep my mouth in order to avoid putting my foot in it.
What I usually say when interview candidates ask about this is that back-end and data crunching code tends to be C++, web GUI front-end stuff tends to be Java and Javascript, and scripts tend to be Python. Whatever tool works best for the job. It's not much different from what I've seen at other jobs, except for using Python instead of something like Perl. But there are no hard and fast rules. For example, there was a slashdot article last week about an internal web app written in Python. Here's an older article that talks a bit about Google's philosophy for choosing tools. There are various articles on Google technologies floating around on the web site too. Before anyone asks, I have no idea what the relative size of the code base in each language is.
I'm not sure why this is news. People in the software business say this kind of thing about the press all the time. After all, do you trust the software and internet industry rags to get things right? If they don't have a story to report they'll report rumors. Sometimes it seems like if they don't have rumors they'll just make something up, though I hope they're not quite that bad.
The network servers remember what has been scanned at each log-in, and grant a grace period before requiring a rescan. Frequent users of the VPN can often log into the network in under a minute.
Wow. I can log into our VPN in about 15 seconds, and that includes the time it takes me to enter my password into the smart card. I'd keep the VPN open all the time too if it took that long to log in.
We have some Tandberg systems in small conference rooms and offices at work and they work pretty well. They're an older version of this one, I think. I have no idea what they cost, how hard they are to set up, or how much bandwidth they use, though.
Agreed. I use this too, and it's great, especially if you feel like being a Code Nazi and making nit-picky comments about code that you're reviewing. You just double-click on the line you don't like and type in your comment. It's much easier to use than reading the code in a diff tool and then typing your comments into a separate email window.
As far as perforce vs. CVS goes: I used CVS at my previous company and liked it. It was certainly a big improvement over CMVC when I was IBM and the SCCS wrapper that Sun used for Java when I worked on it. But CVS had its problems, mostly because it doesn't support atomic commits and checkouts. Perforce fixes that. Its command line takes a little bit of getting used to: "submit" instead of "commit" and so on. And the branching, while much more powerful than what you can do in CVS, takes a while to get your head around. But once you understand it, the power it gives you is wonderful. Perforce also has a few scalability problems, but they're mostly solvable.
I also have to agree with the parent poster that it's great, but bizarre, working a company where the internal code review system is front-page news on Slashdot.
or being some Google-head's code slave for a summer
But I want a code slave. How can I be an evil overlord if I don't have minions?:-)
Seriously, Google does have an internship program, but I haven't heard of us or any other big companies in the valley accepting high school students as interns. A company I worked for several jobs ago did have one employee who had just a high school diploma and was taking classes at a local college. He was very good, but I don't know if they would have hired him if he hadn't also been the son of another engineer who worked there. To get an internship (or any other job), it always helps to know somebody in order to get a foot in the door.
I'd second the suggestion that someone else made: start participating in an open source project to get some real-world experience and see if you enjoy programming in that environment. Coding contests like TopCoder can also be a way to get experience and build up your resume if you're into that sort of thing. (I'm not, personally.)
The ability to close and continue sessions later removes a major reason why many people kept their browsers open
To be fair, you could do that in FireFox 1.5 using the Tab Mix Plus extension. It works very well.
Back to the topic of the article: I've upgraded to FireFox 2.0 on my XP box at home (and next week I'll upgrade my Linux box at work). I haven't noticed any ill effects from the upgrade. I haven't noticed any major differences, for that matter, other than no longer needing Tab Mix Plus because most of its functionality is built into 2.0.
Here's the document I think he was referring to Original IPO Letter. Also, investor.google.com has various other stock- and IPO-related documents, I think.
Some of the ideas, such as test-driven development (although this concept is not restricted to XP), work well.
I agree. TDD takes a bit of time to get used to, but once you're doing it regularly it comes more naturally. Once you have the tests, it can really change your development style. Yesterday I started a fairly huge refactoring of part of our system, and I'd shudder to think what it would be like to do this "without a net" if we didn't have the test coverage.
Another aspect of XP that I like is the iterative planning, where you have fairly short iterations, empirically determine how many person-days or "points" of work you can get done in each iteration, and use that to plan the project. In my experience it provides a more accurate view of reality than most other planning methods. Of course, you still have to do a good job of breaking down your project into a bunch of small tasks that can be estimated semi-accurately. And this iterative planning isn't unique to XP. Lots of other agile methodologies like Scrum use it.
Others, such as pair programming just do not work in my opinion. Programmers are solo beasts
I used to feel this way. When I got put on a pilot XP project in our group a few years ago, the pair programming felt pretty unnatural, and I didn't enjoy it as much as solo programming. Part of that was just because it was new, I think. Also, the XP consultant I usually paired with was very good. I'm no slouch, but he'd been doing XP and pairing for years, had lots more experience developing Web applications than I did, and knew Javascript a lot better (that is to say at all). I was the expert in our company-specific infrastructure like DB persistence, build environment, etc. and a good Java programmer, but I wasn't as fast. And I was a "solo beast" and wasn't as articulate as he was.
It took some getting used to. I learned a lot, mostly about XP, TDD, and refactoring. But a lot of the time when we were pairing I either like I alternately had to struggle a bit to keep up ("What did you just do?") or just got bored when I wasn't at the keyboard, or I felt really slow and on display when I was driving.
After that I had a year or two off from doing much pairing and have gotten back to it only recently. I find that I like it a lot more this time around. Recently I took about 6 weeks off from work, and pairing made it much easier to get back into the project when I came back. The pairing also helps when we're working on something tricky in our implementation, or when we think about changing the API of our subsystem. But there are times when pairing doesn't make as much sense, for example when you're just tweaking visual bits of a UI to make the designers happy. There's little point in two people sitting through something tedious like that.
I have mixed but mostly positive feelings about the rest of XP and Agile. The iterative planning seems to work quite well, at least for medium-term projects like the one I'm working on right now. The only trick is breaking things down into small enough tasks, and in finding all of the tasks early enough that you get a good picture of how long the overall project will take. I mostly like the test-driven development. Sometimes I'll still start changing or adding to the implementation without writing tests first -- when I don't know what I want to do in advance, it can be easier to explore that way. But I won't submit the code without adding tests for the new functionality.
The one thing I dislike a bit about XP is the lack of too much up-front planning and the attitude that you can refactor your way to the right design. I think that's true to some extent, but not universally. For example, when you're desiging an API that other people are going to use, it pays to do a bit more up-front design. You still won't get it right on the first try, but it can lead to less refactoring and less pain for your clients if they start using the code early on. Performance is also an i
This talk on Google Video has a bit of info about CAPTCHAs. Apparently some porn sites are displaying occasional CAPTCHAs that their users have to solve before seeing the next page of porn, and then using these solved CAPTCHAs to spam blogs and other sites. The developers get bonus points for creativity, anyway.
You can also rely on any good book about the UML (i recommend Addison-Wesley Object Technology Series).
My favorite is UML Distilled by Martin Fowler. It tells you what all the symbols and diagrams mean, without getting bogged down in lots of methodology that most people don't care about. If you're just going to use UML as a standard way of drawing design diagrams, you don't really need a 2" thick book on it.
I thought to myself, oh great, another preachy antipiracy message. Unfortunately I was on the phone at the time, so I didn't really catch what message (if any) he was presenting
It was a joke, not a message. After checking his camera, he found the One Ring in his Crackerjack box, put it on, and was teleported into a bunch of movies. The highlight was probably seeing Michael Moore squashed by one of the Mumakil. Later he cracked a joke about Johnny Depp's "slightly gay pirate" in Pirates of the Caribbean being Jack Valenti's worst nightmare.
I don't see this making a big difference. Most of the open-source Java software I've seen is aimed at accomplishing a particular task in Java, so the people who would consider using it have already bought in to Java itself. I'm thinking mostly of web development frameworks like Hibernate, Struts, and Webwork. The people using them have already made the decision to do server-side Java; the fact that it's now open-source is nice but not really that big a deal. Maybe I'm biased because I mostly do server-side Java development, and everyone I know who writes that sort of software already uses plenty of open-source libraries.
Your diabetes appeared to "dissappear" because you lost a lot of weight.
That's what I was expecting too, but it's not what happened. It went away immediately, right after the surgery, not months later after I'd lost all that weight. I don't know exactly why it happened; my food intake was definitely much lower than it had been before, but I was still eating. The same thing has happened to other patients I know personally, and anecdotally I've heard of one person who had the surgery to "cure" his type 2 diabetes even though he wasn't overweight. (I don't think I'd have been willing to take that risk myself.)
I don't think the surgeons really know why the surgery has this effect yet. There are one or two research papers floating around, but they seemed pretty speculative when I read them. (I can't find them now, but if I come across the links I'll post them.)
The best you can do is teach your children to take care of their body, monitor their sugar and get out and exercise regularly.
Definitely. Even if this development turns out to be real, it's years off, and the damage from high blood sugar is cumulative and irreversible, at least so far.
The new PC I built a home a couple of months ago had a Core 2 Duo in it, so it's 64-bit by definition. It's still running the 32-bit version of XP, though. I only put 2 Gb of RAM in it, so there didn't seem to be much point in installing XP-64. (I'm tempted to install Ubuntu on it instead, but I still use Photoshop and Quicken and a few other Windows-only apps occasionally.)
At work, I use a workstation with a 64-bit processor and 4 Gb of RAM. It's running a 64-bit Linux kernel but most apps run in a 32-bit user space. I'm not much of a Linux expert, but it seems to work quite well. All of the 32-bit desktop apps like Firefox and Flash work just fine, but I can still use all of the memory on the box and can run applications compiled for 64-bit mode when I need to. Now I just have to talk someone into buying me a box with a faster processor and even more RAM.
I am (or was) a type 2 diabetic myself, so I know about getting my hopes up. A lot of strange things are happening in diabetes research lately, though, and it's starting to look like nobody really understood how it worked. Maybe they still don't, but they're at least starting to get a clue.
As for myself, I finally gave up on dieting last summer and opted for weight loss surgery. For some reason that nobody really understands yet, some forms of weight loss surgery cure type 2 diabetes about 75% of the time. Those were good enough odds for me, and I got lucky: it worked. I've been off of all the diabetes medications since the day I got out of the hospital. My blood sugar, while not quite down in the normal range yet, is lower than it was before then surgery when I was taking the medications. And losing 75 pounds probably didn't hurt either. :-) This isn't for everyone, but at least there are starting to be options.
My current favorite Java programming book is Java Concurrency in Practice by Broan Goetz and others. It's not for beginners, but if you really want to understand how to write multi-threaded code in Java you need to read this book. Several times, probably, because it's a tricky subject.
Other books I like for Java are Effective Java (though he needs to update it for Java 1.5) and Java Puzzlers.
I don't know of any books that are good descriptions of the Java 1.5 features for experienced programmers. Some people like Thinking in Java, but it seems pretty wordy to me. I originally learned Java from Java in a Nutshell but it's been something like 8 years, so I don't know if the newer editions are any good.
Disclaimer: some of the authors of these books are my co-workers, though I don't know them very well.
That's pure genius! Perhaps we could have professionals bidding on this market place and call them "auction brokers" and we can then have all these professionals work in a place we call the "auction exchange".
I'm sorry, but I've patented that business method. Want to license it?
(Sorry, I couldn't resist.)
Are you getting a kick out of these replies?
It is sometimes entertaining having an inside perspective when there's so much speculation floating around. The same thing has happened when I've worked for other companies that occasionally made the news, so it's not unique to Google, but it's more frequent.
I occasionally try to chime in and correct things. But I know fairly little about what's going on in most parts of the company, so I often don't know what's confidential and what isn't. Most of the time I just play it safe and keep my mouth in order to avoid putting my foot in it.
What I usually say when interview candidates ask about this is that back-end and data crunching code tends to be C++, web GUI front-end stuff tends to be Java and Javascript, and scripts tend to be Python. Whatever tool works best for the job. It's not much different from what I've seen at other jobs, except for using Python instead of something like Perl. But there are no hard and fast rules. For example, there was a slashdot article last week about an internal web app written in Python. Here's an older article that talks a bit about Google's philosophy for choosing tools. There are various articles on Google technologies floating around on the web site too. Before anyone asks, I have no idea what the relative size of the code base in each language is.
Disclaimer: I work for Google.
I'm not sure why this is news. People in the software business say this kind of thing about the press all the time. After all, do you trust the software and internet industry rags to get things right? If they don't have a story to report they'll report rumors. Sometimes it seems like if they don't have rumors they'll just make something up, though I hope they're not quite that bad.
The network servers remember what has been scanned at each log-in, and grant a grace period before requiring a rescan. Frequent users of the VPN can often log into the network in under a minute.
Wow. I can log into our VPN in about 15 seconds, and that includes the time it takes me to enter my password into the smart card. I'd keep the VPN open all the time too if it took that long to log in.
That's what you think. God has to pay the Windows Tax just like any other manufacturer.
We have some Tandberg systems in small conference rooms and offices at work and they work pretty well. They're an older version of this one, I think. I have no idea what they cost, how hard they are to set up, or how much bandwidth they use, though.
Agreed. I use this too, and it's great, especially if you feel like being a Code Nazi and making nit-picky comments about code that you're reviewing. You just double-click on the line you don't like and type in your comment. It's much easier to use than reading the code in a diff tool and then typing your comments into a separate email window.
As far as perforce vs. CVS goes: I used CVS at my previous company and liked it. It was certainly a big improvement over CMVC when I was IBM and the SCCS wrapper that Sun used for Java when I worked on it. But CVS had its problems, mostly because it doesn't support atomic commits and checkouts. Perforce fixes that. Its command line takes a little bit of getting used to: "submit" instead of "commit" and so on. And the branching, while much more powerful than what you can do in CVS, takes a while to get your head around. But once you understand it, the power it gives you is wonderful. Perforce also has a few scalability problems, but they're mostly solvable.
I also have to agree with the parent poster that it's great, but bizarre, working a company where the internal code review system is front-page news on Slashdot.
"we need to replace the Document Browser with an Application Browser."
I think an application browser was called an "Operating System" last time I checked.
Damn is that man long-winded!
I've prepared by deciding not to install it. Problem solved!
Not a lot, actually. Though Apple makes a profit on iTMS, haven't they said publicly that the main point is that iTMS helps sell lots of iPods?
But I want a code slave. How can I be an evil overlord if I don't have minions? :-)
Seriously, Google does have an internship program, but I haven't heard of us or any other big companies in the valley accepting high school students as interns. A company I worked for several jobs ago did have one employee who had just a high school diploma and was taking classes at a local college. He was very good, but I don't know if they would have hired him if he hadn't also been the son of another engineer who worked there. To get an internship (or any other job), it always helps to know somebody in order to get a foot in the door.
I'd second the suggestion that someone else made: start participating in an open source project to get some real-world experience and see if you enjoy programming in that environment. Coding contests like TopCoder can also be a way to get experience and build up your resume if you're into that sort of thing. (I'm not, personally.)
To be fair, you could do that in FireFox 1.5 using the Tab Mix Plus extension. It works very well.
Back to the topic of the article: I've upgraded to FireFox 2.0 on my XP box at home (and next week I'll upgrade my Linux box at work). I haven't noticed any ill effects from the upgrade. I haven't noticed any major differences, for that matter, other than no longer needing Tab Mix Plus because most of its functionality is built into 2.0.
Disclaimer: I work at Google.
I agree. TDD takes a bit of time to get used to, but once you're doing it regularly it comes more naturally. Once you have the tests, it can really change your development style. Yesterday I started a fairly huge refactoring of part of our system, and I'd shudder to think what it would be like to do this "without a net" if we didn't have the test coverage.
Another aspect of XP that I like is the iterative planning, where you have fairly short iterations, empirically determine how many person-days or "points" of work you can get done in each iteration, and use that to plan the project. In my experience it provides a more accurate view of reality than most other planning methods. Of course, you still have to do a good job of breaking down your project into a bunch of small tasks that can be estimated semi-accurately. And this iterative planning isn't unique to XP. Lots of other agile methodologies like Scrum use it.
Others, such as pair programming just do not work in my opinion. Programmers are solo beasts
I used to feel this way. When I got put on a pilot XP project in our group a few years ago, the pair programming felt pretty unnatural, and I didn't enjoy it as much as solo programming. Part of that was just because it was new, I think. Also, the XP consultant I usually paired with was very good. I'm no slouch, but he'd been doing XP and pairing for years, had lots more experience developing Web applications than I did, and knew Javascript a lot better (that is to say at all). I was the expert in our company-specific infrastructure like DB persistence, build environment, etc. and a good Java programmer, but I wasn't as fast. And I was a "solo beast" and wasn't as articulate as he was.
It took some getting used to. I learned a lot, mostly about XP, TDD, and refactoring. But a lot of the time when we were pairing I either like I alternately had to struggle a bit to keep up ("What did you just do?") or just got bored when I wasn't at the keyboard, or I felt really slow and on display when I was driving.
After that I had a year or two off from doing much pairing and have gotten back to it only recently. I find that I like it a lot more this time around. Recently I took about 6 weeks off from work, and pairing made it much easier to get back into the project when I came back. The pairing also helps when we're working on something tricky in our implementation, or when we think about changing the API of our subsystem. But there are times when pairing doesn't make as much sense, for example when you're just tweaking visual bits of a UI to make the designers happy. There's little point in two people sitting through something tedious like that.
I have mixed but mostly positive feelings about the rest of XP and Agile. The iterative planning seems to work quite well, at least for medium-term projects like the one I'm working on right now. The only trick is breaking things down into small enough tasks, and in finding all of the tasks early enough that you get a good picture of how long the overall project will take. I mostly like the test-driven development. Sometimes I'll still start changing or adding to the implementation without writing tests first -- when I don't know what I want to do in advance, it can be easier to explore that way. But I won't submit the code without adding tests for the new functionality.
The one thing I dislike a bit about XP is the lack of too much up-front planning and the attitude that you can refactor your way to the right design. I think that's true to some extent, but not universally. For example, when you're desiging an API that other people are going to use, it pays to do a bit more up-front design. You still won't get it right on the first try, but it can lead to less refactoring and less pain for your clients if they start using the code early on. Performance is also an i
This talk on Google Video has a bit of info about CAPTCHAs. Apparently some porn sites are displaying occasional CAPTCHAs that their users have to solve before seeing the next page of porn, and then using these solved CAPTCHAs to spam blogs and other sites. The developers get bonus points for creativity, anyway.
My favorite is UML Distilled by Martin Fowler. It tells you what all the symbols and diagrams mean, without getting bogged down in lots of methodology that most people don't care about. If you're just going to use UML as a standard way of drawing design diagrams, you don't really need a 2" thick book on it.
And this surprises you?
It was a joke, not a message. After checking his camera, he found the One Ring in his Crackerjack box, put it on, and was teleported into a bunch of movies. The highlight was probably seeing Michael Moore squashed by one of the Mumakil. Later he cracked a joke about Johnny Depp's "slightly gay pirate" in Pirates of the Caribbean being Jack Valenti's worst nightmare.