Do you check the input parameters of your methods for validity? I don't. I used to, but not anymore. I just let my methods crash with a null pointer and other exceptions when parameters are not valid. This may sound illogical, but only in the beginning. I'm suggesting you use validating decorators instead.
Let me put it this way: $15 per hour for a senior Java developer—is that cheap or expensive? It's cheap, right? Right. What would you say if I told you this cheap Java developer hardly writes two primitive lines of code per day? You're paying $600 every week but rarely getting anything back. How cheap is this Java guy now? My point is that using hourly rate as a cost indicator is a very bad idea, whether with outsourcing or in-house teams.
"You're a good programmer. I'm a great entrepreneur. This is a breakthrough idea. Help me build it. I don't have cash, but I will give you equity. Deal?" I hear this at least once a month, and I always say no. Not because I don't like your idea. Indeed, it is really interesting. And not because I'm too busy. I would definitely find time for a good idea. It's not that. I say no because I don't think you're a good entrepreneur.
Punishment ... how do you prefer to do it? There are many ways to punish employees; some are rather effective, while others simply don't work. This is not an exact science. Actually, I would say it's an art. You must be creative, innovative, and very open-minded. You never know which method of punishment will work with whom. Some people respond to one method, while others may completely ignore it. The overarching goal, of course, is to make employees scared of you, their boss, so they will obey enthusiastically. Here is a list of the most effective methods :)
This is what Wikipedia says about this: "High turnover may be harmful to a company's productivity if skilled workers are often leaving, and the worker population contains a high percentage of novices." I agree. However, I believe that low turnover may also be very harmful.
In my How Much Do You Cost? post last year, I said open-source contribution is a very important factor in defining who is good and who isn't, as far as programmers go. I was saying that if you're not contributing to open source, if your GitHub profile is not full of projects and commits, your "value" as a software developer is low, simply because this lack of open-source activity tells everybody that you're not passionate about software development and are simply working for money. I keep getting angry comments about that every week. Let me answer them all here.
We're starting a new thing, a seed fund. Its name is SeedRamp. The formula is simple: You schedule an interview, we have a one-hour conversation, you present me your startup idea, and we either give you cash right away or explain why we don't feel like it. We don't do any due diligence or background checks. The decision is made right there. It's something similar to angel investment, but the amount is smaller—less than $20K, and decisions are faster.
Temporal coupling happens between sequential method calls when they must stay in a particular order. This is inevitable in imperative programming, but we can reduce the negative effect of it just by turning those static procedures into functions. Take a look at this example.
I keep repeating the same mistake again and again. So it's time to stop and make a rule to prevent this from happening anymore. The mistake is not fatal, but it's very annoying. When I look at production logs, I often see something like "File doesn't exist", and I ask myself: What file? Where is it supposed to exist? What did the server try to do with it? What was going on a second before it crashed? There is no answer in the log, and it's totally my fault. I either 1) don't re-throw or 2) re-throw without providing context. Both are wrong.
If I drive too fast and I get caught, I may get a ticket. If I drive under the influence and get caught, I may go to jail. If I turn my radio up too loud in the middle of the night and my neighbors call the police, I may get into trouble if I don't stop it. The law basically protects us from causing trouble with each other. Why don't we have a law against irresponsible coding?