Do you love or hate software piracy?

This subject comes up every month or so, and every time I give my opinion which is always in the minority. Sometimes I think I'm the only one. So once again, as I prepare to get downmodded into oblivion, here goes...

You forgot Side 3 - I hate software piracy because it's wrong. Period. It's unethical, immoral, and illegal. And it's that simple. I don't even consider either of your 2 choices because both sidestep the question of right or wrong to examine other issues. This is situational ethics.

In all the years I've been in business, my number one concern has been ethical issues. The partner who disconnected his speedometer to increase his resale value. The vendor who raised his prices to get a personal "kickback". The employee who downloaded a customer list and sold it to a competitor. I could go on and on and on...

I've seen stuff like this so many times, and I ask the same question every time, "If they will compromise their ethics on something small, where do they draw the line?" I've seen multi-million dollar deals scuttled because someone didn't trust someone else because of their personal behavior on a "small" issue like this. Don't let yourself fall into this trap. It simply isn't worth it to save a few bucks.

I've heard all the counterarguments. "It's no big deal." "Everyone does it." "It's not hurting anybody." "I'll never get caught." Or the worst one of all, "They've already ripped me off, so I'm just getting them back." And you know and I know and everyone here knows it's all BS. We're just making excuses for what we all know is wrong.

Almost every proprietary software vendor has a complimentary "developer version" or a very cheap "student version". There are many other ways to get access to software or music without breaking the law or compromising your ethics. But a lot of us are just too lazy to take advantage of these things.

I would expect the Hacker News community, of all places, to be especially sensitive to this issue. After all, we are smart, hard working people who make software. But it seems like I'm always in the minority on this one.

So before you click that down arrow on this old prude, can I ask one question? Does anyone agree with me?

Original thread:  http://news.ycombinator.com/item?id=191729

The Best Way To Interview a Developer

No, coding on the whiteboard or on paper, or even the 5 minute exercise on the laptop is not really coding.

It doesn't matter whether or not it's "really coding". All that matters is how effective it is in evaluating your candidate.

I have interviewed over 2,500 developer candidates and every single one has had to code with pencil and paper, in a room alone for 15 to 30 minutes. This has always been, by far, the most effective thing I could have done.

I never cared what they actually wrote. I never once found out if it would even compile or run. But I never cared. The only purpose of the coding problem was the discussion afterward. This told me volumes.

Given a person, a discussion, a problem, and 1 to 3 pages of written code, I could ask many questions focused on a single issue and take it any direction I wanted. And learn what I needed to know about that person...

How did they attack the problem? What did they feel comfortable using? How did the deal with the situation? What kind of attitude did they have? How much did they enjoy dealing with the problem and discussing it? How well did they defend their choices? How willing were they to take criticism? How willing were they to stand up for what they believed in?

These are the things I want to know now. Not 3 months after they start working. Programming with pencil and paper and discussing afterward is the best way I've ever found to find these things out.

Original thread:  http://news.ycombinator.com/item?id=834411

Aren't There Any Real Problems Left To Solve?

I have always spent a lot of my time in small or midsize companies (10 to 200 employees), and I can assure you the answer is ABSOLUTELY.

These are hard working people who are in a different world than most of the readers here. They don't facebook, twitter, or IM at work. But they are unbelieveably busy trying to get things done while depending upon software and systems that most of us here would laugh at.

Many of them don't have time to get to all their emails and voice mails. They have to make snap decisions all day long without enough information because their software just doesn't give them what they need easily enough. They have constant problems with interpersonal communication, instruction, and understanding.

Just a sample of what I've witnessed in the past 3 weeks:

- We need multiple "ship to" addresses for this institutional customer. The software doesn't support it.

- The exchange server is down.

- We need multiple prices for the same item, depending on the scenario. The shopping cart won't allow it.

- 300 "smart part numbers" were configured incorrectly because no one gave Jane the correct Vendor Codes last week. But now, we have orders, inventory, and history for those items, so the software won't let us change or delete them.

- The exchange server is down.

- No one remembered to reset the warehouse server last night, so everything came in today with the wrong date.

- The new stockroom printer doesn't support HP PCL, so the bar code labels are all wrong.

- We think that $90,000 order acknowledgement from XYZ Company was deleted by the spam filter, but we're not sure.

- There was a bad pointer in the UPS data base last Tuesday, so 72 packages all went to the same customer in Duluth.

- The wrong 800 number is being printed on our invoices. Our customers are calling a sex hotline.

- The exchange server is down.

These are not jokes. I see them all the time. And while we regale all the cool stuff WE are doing, I can honestly say that the situation in many small businesses hasn't improved all that much. And there are 7 million of them. They need help.

The good news? This is a fantastic opportunity for those with our skills and technology.

Yes, there are plenty of real problems to solve. Stay tuned.

Original thread:  http://news.ycombinator.com/item?id=166171

What separates a good programmer from a mediocre one?

Great question. Ask it to n programmers and get n^2 responses. This could easily be the subject for another post or even a book. Just off the top of my head in no particular order:

  - understands the problem at hand before writing any code
  - uses the right tool for the right job
  - follows accepted standards and protocols without sacrificing creativity
  - names variables & functions what they actually are for the next programmer
  - anticipates what could go wrong before relying on a debugger or testing
  - understands the underlying architecture and how to best utilitze it
  - never writes the same code twice
  - never writes in 150 lines that which could be written in 100 lines
  - Poor code: uncommented.  Mediocre: commented.  Good: doesn't need comments.
  - understands the entire code life cycle & writes it to last
  - has pity on the poor soul who has to maintain it & leaves a clue or 2
  - writes flexibly enough to be easily changed before the project is done

I could go on and on, but you get the idea. In general...

A good programmer writes it right, once, in a week.

A mediocre programmer writes it OK, in 2 months, and then futzes with it forever.

A bad programmer never gets it done.

Original thread: http://news.ycombinator.com/item?id=688300

Why no love for PHP?

Great argument, nice analogy, makes a lot of sense, and I completely (and respectfully) disagree.

Your analogy reminds me of the greatest cook ever, my grandmother. She used no technology whatsoever. All of her tools had been her mother's which were probably manufactured in the 1800s. She chopped everything by hand in a wooden bowl. (If anyone else helped her with the chopping, everyone at dinner could tell.) She never used pencil or paper and measured nothing. She stood in line at the farmer's market, the butcher, or the grocery store and inspected every item. And absolutely nothing I have ever eaten since, in any restaurant or home, has been remotely close to hers. It was magnificent! And I miss it so much.

I'd like to think I have almost as much passion about my work. I use the most primitive tools, 24 x 80 green screen editor, no framework, no IDE, no debugger, and mostly pencil and paper. I savor every byte just as I imagine my grandmother savored every little detail of her cooking. I'm not trying to save time or be fast, I just aspire to creating Grandma-quality software. I only hope my software brings someone the same joy her food brought all of us.

I've used many different tools, including php. And I rarely care how fancy they are. Ironically, the simpler, the more joy I have found along the way.

Original thread:  http://news.ycombinator.com/item?id=595860

Start-up vs Girlfriend

I'm in the exact same boat. My thoughts...

If you "really love her", then you already oughta know what's most important. (Most important, not the only thing.)

Her "expectations" are not really expectations. They are cries for help. Listen.

Some of the things we have done:

- We take French lessons together and speak French around the house all the time.

- We always eat dinner together.

- We go out somewhere every weekend (usually not my pick).

- We catch up by phone several times a day.

It's hard to explain, but I have a "more balanced lifestyle" without "lower expectations". You can have both. It's up to you to find a way.

[EDIT: Forgot one of the most important things: Sunday brunch is a big deal at our house. We shop together (the night before), cook together, and sit together for 2 to 3 hours at a table full of great food and 3 newspapers. At first, I thought it was a waste of time, but now I really look forward to it.]

Original thread:  http://news.ycombinator.com/item?id=691833

What's been your best investment?

Writing a code generator. It was so difficult that every other programming task since was easy in comparison.

Conventional wisdom advises not to try anything too hard because you might fail. True, but that advice discounts the biggest dividend of all: who you become in the process.

I didn't realize how important this was until I saw how easy it was for me to do most ordinary programming gigs. It was like playing basketball with a regulation hoop when I had already practiced with a smaller one. Other programmers struggled because they hadn't seen that problem before and they had never stretched themselves.

Building hard things on my own made me a much better programmer when I did work for others. By far, my best investment ever.

Original thread:  http://news.ycombinator.com/item?id=1541405

I'm a programmer. I am always angry at job. Is this normal?

Congratulations. You have admitted being at Level 3 of Pissedoffedness, the last level before the solution.

Levels of Pissedoffedness:

Level 0: You don't know that anything is wrong. You just think that's just the way it is.

Level 1: You know something is wrong, but you don't know what to do about it, so you just go along with the program.

Level 2: You know what to do about it, but aren't yet able to do it. So you stick it out, learning as much as you can.

Level 3: You know what to do about it and you are capable of doing it. Now you're really pissed off (mainly at yourself) because you're a fish out of water, in a place where you don't belong.

Level 4: You do something about it. You challenge the people at work to fix things. You start fixing them yourself. Or, best yet, you just go out and do it right on your own. Either way, sweet relief.

Get to Level 4. The days of pissedoffedness will soon seem like a distant memory.

(I have been through this cycle many times, but now I'm at Level 4 and have no intention of ever going back.)

Original thread:  http://news.ycombinator.com/item?id=979481

How to Work from Home Without Going Crazy

I have worked from home off and on for years, and this is pretty good advice. The most important is the dedicated space with a door that closes. So you still "go to work", just with a very short commute. A few other things that I have found helpful:

  - When you're in your office, you're at work, working.
  - When you're not in your office, you're at home, not working.
  - Work in 48 minute bursts, then take a break.
  - Only check email & voice mail during your 12 minutes off.
  - Put internet and work on 2 different machines (if possible).
  - I prefer radio over pre-recorded music; it reminds me I'm not alone.
  - Eat lunch out with a friend several times per week.
  - Eat home meals away from your office.
  - If you're local, go in to the office once per week.
  - If you're not local, go to the office several days per month.
  - Dinner with SO every night, no matter what you're working on.
  - A regular schedule of sleep, meals, exercise, and work makes things easier.
 
Original thread:  http://news.ycombinator.com/item?id=952256