I am a senior in college, majoring in computer science. I only need two more CS classes to finnish a BS. [...] So Here is the question to people out in the real world: Is it worth it to get a second degree?
Definitely go for it. I'd recommend an English degree.
1. They need good tools. Maybe have an afternoon or weekend where you demonstrate some tools and then let them play with them. I've seen many students trying to write software with only Notepad and javac. Show them Eclipse and JUnit. Don't show them vi or emacs, because it takes too long to figure out how to do useful things with those tools. Let them learn those tools when they need to edit config files or email.
2. They need to know how to use the debugger. I've seen many programmers who are afraid of the debugger because they have no idea how to use it. A good debugger is easy to use. (Perhaps there's one in Eclipse.)
3. Show them how to write code test-first. This will save them tons of time. When I first started programming, I spent a lot of time tracking down stupid little problems. Writing code test-first would have eliminated those problems (but you have to write all of it test-first, not just parts of it).
4. Get a bunch of them together in a room without computers and teach them OO skills. Draw some classes on the board (in English, not code). Somebody should be the VM and turn students into objects by constructing them out of classes on the board. Students could then send messages to each other. Some students won't be able to send certain messages because those messages are private or protected. Tell one student that his name is now Bob. Ask another student who is the same class what her name is. If she doesn't answer "Bob", she's probably on her way to understanding.
Teach them this: if you have to document the code, then you haven't written it clearly enough.
People look at me strangely when I say this, but I'm not the only person who thinks this. When the code changes, the comments don't always change. Out-of-sync comments are bad comments. Bad comments are worse than no comments at all.
Example:
float amount = base * rate; if ( hardware.cpuID == 80586 ) amount *= 1.0012;// correct for P3 Bug
You won't be able to upgrade the CPU or motherboard on your Mac very easily, so I'd suggest buying the cheapest one so you can replace it sooner. When you replace it, you can swap RAM and HDs from the old one into the new one.
Anyway, the cheap ones have a better $ per MHz value: an 800MHz G4 goes for $1600 ($2/MHz). The 933MHz version goes for $2300 ($2.46/MHz).
Back in college, I heard a story of some students who would intercept professors' exams as they were going from the professors' workstations to the printers.
(It would have been even funnier if the professors knew about the trick and printed fake exams over the network and the real exams locally.)
When I was hiring people a few years ago, most of them had degrees I'd never heard of from schools I'd never heard of (in a different country), so I had no idea if they had a real education.
The people who we called were the ones with clear resumes that explained what they personally did. (Most of them explained in great detail what their projects were all about, which we didn't care about at all.)
So if your resume hilights your experience well and minimizes your lack of education, you might be okay, at least with companies that don't have strict degree requirements.
For instance, at what point do you split that massive source file into multiple files?
You do it as soon as you notice the problem. If you have good tools, it will be simple and fun (yes, fun).
A refactoring browser like IDEA from IntelliJ makes it simple. Hilight a few lines of code, choose "Extract Method" from a menu, and the code is extracted into a new method with all the necessary parameters created and passed in and the necessary return type and assignment created. For example:
1: int a = 12, b = 9; 2: a += 43 * b + 12 / 4;
Hilight the expression afther the "+=" online 2 and extract method, calling it "foo":
1: int a = 12, b = 9; 2: a += foo( b );
3: private int foo( int c ) { 4: return 43 * c + 12 / 4; 5: }
At what point do two functions approaching similar functionality need to be merged, despite the cost of digging through the source and making changes to call the new function?
It also has a rename feature which will rename a method or variable and change all references to it, but doesn't change references to different variables or methods that happen to have the same name.
It has lots mroe features, but you can read about them for yourself and download the program and play it.
There are other refactoring browsers out there too, like the free Eclipse from IBM. With the right tools, you can easily make your code less messy.
I always thought that they used "$CALL" when the manufacturer had restrictions on price advertising. If I'm right, then there might not be much you can do about it, other than not carrying that company's products. (But writing "manufacturer doesn't allow us to display their prices on our ad" might be better (if a bit more wordy) than "$CALL".)
But don't assume that everybody wants to buy a solution. Personally, I want to buy a computer. I already know what I'm going to do with it, and there's no way somebody else can guess how I'm going to want to configure it based on their poor understanding of my needs.
A friend of mine used to work for a tiny company that sold medical billing software as well as the computers the software ran on (PCs running some flavor of Unix). They made some pretty good money on that.
But they made a killing by selling $10K/yr extended warranties. If anything went wrong (which was rare), someone would be there within hours working on it. My friend says that they rarely had to visit the clients, so most of the $10K (x 200+ clients) was pure profit. But the doctors knew that downtime would be a big pain in the butt so they paid the extra money. (I guess you can get that sort of support more cheaply these days, so perhaps you wouldn't be able to charge the full $10K unless you could offer things that Dell can't.)
The company made so much money on this that it had its own boat that the employees got to use on the weekends. The boat was 800 miles from the office and the company paid for the plane tickets.
How does Starbucks get away with charging $1.00 for a cup of coffee when you can buy a cup of Folgers for 50 cents?
Actually, I go to Starbucks because they are everywhere, and they're open when other stores aren't. (This Easter morning, when everyone was off at church, I was looking for some coffee and only Starbucks was open.)
I used to work in a very tall building that had an airline counter in the lobby. I'm sure most people who worked in that building used that airline because it was so convenient. So if you want to sell to businesses, try opening up the shop in a big building (or next door) and try to sell hardware and service to every company in the building.
Once you sell to a customer, send him a postcard every few months telling him how much it will cost to make certain upgrades based on what he bought before. For example, "For $120 (including labor and sales tax), we can double the speed of your computer". Or "DVD-ROM prices have really dropped since you bought your computer. We can install one in the free bay in your computer for only $99, including labor and taxes."
Also, perhaps offer free seminars teaching people about their computers. You'll only get a certain type of people showing up, but my guess is that type of person would be more inclined to upgrade in the future and also more inclined to talk to other people about your store.
And finally, don't screw the customer. Fry's motherboards are about 10% more expensive than online stores' motherboards, but Fry's memory is about double what I can find online. That's why I recently bought my upgrade hardware online instead of the more convenient local store.
What percentage of them are CS Ph.D.s who focused on something that relates directly to what Google does? Do they get paid significantly more than the average senior technical Google employee? Are they treated differently (as they often are in biotech), or are they mixed in with the rest of the folks? Do you feel that having so many Ph.D.s it is a competitive advantage so you sought them out, or is it just something that happened?
(It sounds like I'm asking because I'm considering getting a Ph.D., but I'm not. I'm just curious.)
Your web site says you have 10,000 servers to handle searching an archive of 2 billion pages at incredible speed (e.g., it took Google 0.05 seconds to find 225,000 matches for "Carlos Santana").
How many servers would you need to have if you only had one user? (That is, how many of the servers are there for faster searches, and how many are there for handling all the users?)
More than that, there's a belief...that xUnit allows the programmers to write the tests before writing the code, and that this "test first development" or "test driven development" leads to well designed code.
Not only well-designed code, but well-tested code, and code that does no more than necessary.
Test-first development is a huge shift in thinking. It makes writing code so much easier because it's simple to figure out if what you've written solves the problem correctly (and if it solves the correct problem).
Nor did I say he did. However, as you point out yourself, he said that XP consisted of various ideas. My point was that since it didn't invent any of them, and all of them are widely used elsewhere as well, there must be more to XP than that.
Yes, there's one more thing to it: you actually have to follow the practices. The difference between an XP team and a non-XP team is that the XP team is actually doing all those ideas that XP didn't invent.
The big problem however is that it does not account for programmer laziness and time constraints....the fact is most programmers will just write new code rather than rework existing stuff, especially if someone else wrote the original.
I think it accounts for it quite nicely. Another XP-ism is "shared code ownership", where everyone owns and works on all the code (instead of "Bob is in charge of module X and Fred is in charge of module Y"). If I see that Bob rewrote instead of reused, I'll refactor it.
Now if everyone is lazy, then you don't have a team of professional engineers and all you're going to get is crap anyway.
Eventually, Amazon and Half.com are going to really hurt the publishing industry too. We need to find some balanced, middle ground. I wish someone could suggest something.
What if used book sellers charged an extra 25 or 50 cents per used book sale that went directly to the author? That's probably as much as an author makes per copy of a new book anyway. No need to further reimburse the publisher, who has (theoretically) paid for printing and distribution by the first sale of the book.
I'm not suggesting that it become law, just standard practice agreed on by the industry.
I'd be happy to pay it; most authors could use the money. Though I wonder if used book sales are high enough for authors to make any serious income from such a scheme.
What about requiring all of your users to go through a terms of service page before accessing any parts of your site?
The page could have a form with "Accept TOS" and "Reject TOS" buttons. I wonder how many spambots would submit a form?
And to catch spambots that did submit the form, your TOS could have some clauses that make it a violation for evil spiders (ones that don't honor "robots.txt") to use the site. Maybe you could make||lose a few bucks suing the spambotters who go through the TOS and still harvest your email addresses.
You'll waste your college years if you treat it like a career school. Get a degree in whatever interests you most. If you're really worried about your career, take a couple computer classes on the side or something.
Why the heck do Linux developers copy Windows? A copy of a copy? Why not *pick* to copy Apple's HCI and adopt it for the Linux desktop?
Or (*gasp*) create something original. Just because Apple has had windows and icons and menus for 18 years doesn't mean that Linux needs to. Linux has lots of strengths (the community being the main one); it is those strengths that Linux should build upon to differentiate itself.
Definitely go for it. I'd recommend an English degree.
I wonder how many people who are old enough to have played these games when they came out still have time for playing games. I sure don't.
2. They need to know how to use the debugger. I've seen many programmers who are afraid of the debugger because they have no idea how to use it. A good debugger is easy to use. (Perhaps there's one in Eclipse.)
3. Show them how to write code test-first. This will save them tons of time. When I first started programming, I spent a lot of time tracking down stupid little problems. Writing code test-first would have eliminated those problems (but you have to write all of it test-first, not just parts of it).
4. Get a bunch of them together in a room without computers and teach them OO skills. Draw some classes on the board (in English, not code). Somebody should be the VM and turn students into objects by constructing them out of classes on the board. Students could then send messages to each other. Some students won't be able to send certain messages because those messages are private or protected. Tell one student that his name is now Bob. Ask another student who is the same class what her name is. If she doesn't answer "Bob", she's probably on her way to understanding.
Teach them this: if you have to document the code, then you haven't written it clearly enough.
People look at me strangely when I say this, but I'm not the only person who thinks this. When the code changes, the comments don't always change. Out-of-sync comments are bad comments. Bad comments are worse than no comments at all.
Example:
would be better written as:
Just google for data entry outsourcing.
Anyway, the cheap ones have a better $ per MHz value: an 800MHz G4 goes for $1600 ($2/MHz). The 933MHz version goes for $2300 ($2.46/MHz).
(It would have been even funnier if the professors knew about the trick and printed fake exams over the network and the real exams locally.)
The people who we called were the ones with clear resumes that explained what they personally did. (Most of them explained in great detail what their projects were all about, which we didn't care about at all.)
So if your resume hilights your experience well and minimizes your lack of education, you might be okay, at least with companies that don't have strict degree requirements.
You do it as soon as you notice the problem. If you have good tools, it will be simple and fun (yes, fun).
A refactoring browser like IDEA from IntelliJ makes it simple. Hilight a few lines of code, choose "Extract Method" from a menu, and the code is extracted into a new method with all the necessary parameters created and passed in and the necessary return type and assignment created. For example:
Hilight the expression afther the "+=" online 2 and extract method, calling it "foo":At what point do two functions approaching similar functionality need to be merged, despite the cost of digging through the source and making changes to call the new function?
It also has a rename feature which will rename a method or variable and change all references to it, but doesn't change references to different variables or methods that happen to have the same name.
It has lots mroe features, but you can read about them for yourself and download the program and play it.
There are other refactoring browsers out there too, like the free Eclipse from IBM. With the right tools, you can easily make your code less messy.
I always thought that they used "$CALL" when the manufacturer had restrictions on price advertising. If I'm right, then there might not be much you can do about it, other than not carrying that company's products. (But writing "manufacturer doesn't allow us to display their prices on our ad" might be better (if a bit more wordy) than "$CALL".)
But don't assume that everybody wants to buy a solution. Personally, I want to buy a computer. I already know what I'm going to do with it, and there's no way somebody else can guess how I'm going to want to configure it based on their poor understanding of my needs.
A friend of mine used to work for a tiny company that sold medical billing software as well as the computers the software ran on (PCs running some flavor of Unix). They made some pretty good money on that.
But they made a killing by selling $10K/yr extended warranties. If anything went wrong (which was rare), someone would be there within hours working on it. My friend says that they rarely had to visit the clients, so most of the $10K (x 200+ clients) was pure profit. But the doctors knew that downtime would be a big pain in the butt so they paid the extra money. (I guess you can get that sort of support more cheaply these days, so perhaps you wouldn't be able to charge the full $10K unless you could offer things that Dell can't.)
The company made so much money on this that it had its own boat that the employees got to use on the weekends. The boat was 800 miles from the office and the company paid for the plane tickets.
Actually, I go to Starbucks because they are everywhere, and they're open when other stores aren't. (This Easter morning, when everyone was off at church, I was looking for some coffee and only Starbucks was open.)
I used to work in a very tall building that had an airline counter in the lobby. I'm sure most people who worked in that building used that airline because it was so convenient. So if you want to sell to businesses, try opening up the shop in a big building (or next door) and try to sell hardware and service to every company in the building.
Also, perhaps offer free seminars teaching people about their computers. You'll only get a certain type of people showing up, but my guess is that type of person would be more inclined to upgrade in the future and also more inclined to talk to other people about your store.
And finally, don't screw the customer. Fry's motherboards are about 10% more expensive than online stores' motherboards, but Fry's memory is about double what I can find online. That's why I recently bought my upgrade hardware online instead of the more convenient local store.
When was the last time Google was taken offline (for upgrades, to fix a problem, etc.)?
What percentage of them are CS Ph.D.s who focused on something that relates directly to what Google does? Do they get paid significantly more than the average senior technical Google employee? Are they treated differently (as they often are in biotech), or are they mixed in with the rest of the folks? Do you feel that having so many Ph.D.s it is a competitive advantage so you sought them out, or is it just something that happened?
(It sounds like I'm asking because I'm considering getting a Ph.D., but I'm not. I'm just curious.)
How many servers would you need to have if you only had one user? (That is, how many of the servers are there for faster searches, and how many are there for handling all the users?)
Not only well-designed code, but well-tested code, and code that does no more than necessary.
Test-first development is a huge shift in thinking. It makes writing code so much easier because it's simple to figure out if what you've written solves the problem correctly (and if it solves the correct problem).
Yes, there's one more thing to it: you actually have to follow the practices. The difference between an XP team and a non-XP team is that the XP team is actually doing all those ideas that XP didn't invent.
I think it accounts for it quite nicely. Another XP-ism is "shared code ownership", where everyone owns and works on all the code (instead of "Bob is in charge of module X and Fred is in charge of module Y"). If I see that Bob rewrote instead of reused, I'll refactor it.
Now if everyone is lazy, then you don't have a team of professional engineers and all you're going to get is crap anyway.
What if used book sellers charged an extra 25 or 50 cents per used book sale that went directly to the author? That's probably as much as an author makes per copy of a new book anyway. No need to further reimburse the publisher, who has (theoretically) paid for printing and distribution by the first sale of the book.
I'm not suggesting that it become law, just standard practice agreed on by the industry.
I'd be happy to pay it; most authors could use the money. Though I wonder if used book sales are high enough for authors to make any serious income from such a scheme.
What about requiring all of your users to go through a terms of service page before accessing any parts of your site?
The page could have a form with "Accept TOS" and "Reject TOS" buttons. I wonder how many spambots would submit a form?
And to catch spambots that did submit the form, your TOS could have some clauses that make it a violation for evil spiders (ones that don't honor "robots.txt") to use the site. Maybe you could make||lose a few bucks suing the spambotters who go through the TOS and still harvest your email addresses.
You'll waste your college years if you treat it like a career school. Get a degree in whatever interests you most. If you're really worried about your career, take a couple computer classes on the side or something.
Or (*gasp*) create something original. Just because Apple has had windows and icons and menus for 18 years doesn't mean that Linux needs to. Linux has lots of strengths (the community being the main one); it is those strengths that Linux should build upon to differentiate itself.
Don't spend a big chunk of time refactoring it either. Waste of time too.
Instead, make slight refactorings as you go. But make sure you are doing what you are really being paid for: implementing business value.
And you'll find that you'll have much more courage to refactor if you have a full set of automated tests, so maybe you should work on tests first.