What’s the best way to assign ID’s?

The “Name” issue isn’t that much different from the “SKU” issue. (SKU is short for Stock Keeping Unit, aka Part Number or Product Number). I have had to deal with this everywhere that has SKUs. No one does it well, but by slowing down and thinking about it, there’s almost always a decent solution. 

There are 2 ways to assign SKUs, sequentially (start with “1” and increment 1 for every new SKU) or not sequentially. I have never seen anyone do it sequentially. (Although some excellent systems keep 2 SKUs, one of which “is” sequential and is used as the primary key and for all indexing. This is the best way I’ve ever seen to handle SKUs that change, but that’s another story.)

Almost everyone wants a smart or semi-smart SKU. So that by simply looking at the SKU, anyone can tell what it is without reading the description. You know, the first digit is Commodity Code, 1 for shoes, 2 for pants, etc. Then another digit for color, another for size, etc. This works well until you have ten colors; then you need 2 digits or alphas. 

But wait, there’s more. Let’s put hyphens (or some other delimitter) between the product descriptors and the vendor data, manufacturer data, and customer data. 

So now you’ve covered any possible product with your super slick smart SKU naming system. 

Until something comes along that isn’t covered. (Now we have military items with 14 other considerations.) So we come up we a second totally different scheme. Then a third. Then a 4th, etc. So now you can tell anything about an item “if you know which scheme” it falls under. 

But wait, there’s more. You should be able to enter any SKU into a form field “regardless of Smart SKU scheme”. (If the first digit is “9”, then use Smart Scheme 3. If there’s a hyphen in position 3, then use Smart Scheme 8, etc.) Your form logic should be able to intelligently guide the user based on the rules of the template or scheme. 

I have built apps where users can design and build their own Smart SKU templates, which are then used to enforce compliance and guide operators. These have generally worked pretty well. 

Is there some way to do the same thing for human names? I dunno, but now you got me to thinking about it. A combination of standard templates and custom templates oughta cover most possibilities. Some basic logic with optional pop-up forms which uses the templates as parameters should work. Something to think about… 

What should a mediocre programmer do?

“I’m really just a mediocre programmer with really good domain knowledge”

Your problem is that you have no problem. Let me explain…

I believe that the quality of a programmer is not how much you know, but what you can do with it. So if you have “really good domain knowledge”, then you probably aren’t a mediocre programmer at all, you’re probably a good programmer or even better.

Like many other programmers, I love to check out the latest cool stuff people are doing. Then I hear the 2 voices in my head. One says, “That is so cool - I have to learn that!” The other says, “Big deal, I could do that in BASIC. I may need a few more lines of codes and a couple of hacks, but it will still do the exact same thing.”

It’s tricky to balance all the cool stuff going on with your ability to “just get stuff done”. You will never learn everything. You will never become the expert at more than one or two things. It’s great to “learn”, but not at the expense of “doing”. You need both. There were many times I had to build something with my limited knowledge and wished I knew more. But then I built it anyway. Something built with limited resources today is better than something built perfectly tomorrow.

If you’re unhappy with your job but like coding, then either find another job or start something on the side. But please don’t fall into the trap that you aren’t good enough because “someone else” knows “something more”. That will always be the case. You can’t win that battle.

Just do the best with what you have and make a practice of adding to it a little at a time. Get satisfaction from the benefits you provide others with what you know now.


How can I be excellent with a day job?

“…how do I get my mojo back and get that level of technical excellence back?” 

You decouple your day job from your need for technical excellence. 

You do something on the side. Maybe a pet project. Perhaps a little service work for customers you find. Contribute to an open source project. Or best of all, start your own business.

This is what I did and it changed everything. I have never complained about the lack of stimulation of any day job I have had (well maybe just a little). Better yet, I have used to crappiness I encountered during the day to push myself to “never do that” at night. 

The day job is comprised of quality right in the middle of the bell curve and it’s good enough to pay the bills. The side work gives me a chance to push all the way out to the right hand side of the bell curve with cool stuff. 

The ultimate plan is for the side work to take over and make working on someone else’s crap during the day unnecessary. Give it a shot. 


What would you advise your younger self?

Find a customer first.

This is the biggest mistake I made in my twenties, and it’s such an easy mistake to make that I continue to make it now even though I know better. I continually have ideas popping into my head. And I act on many of them. So much cool stuff. If only I can get this working, it will change the world. And I love being in this mode; it’s so much fun. And it can lead to great things…

But you have to know when you’re going too far and wasting time, money, and energy. At some point, you have to find a customer. Any kind of customer, just someone besides yourself who wants what you’re doing.

When I have had partners, they forced me into this thinking, directing our energy to where the demand was.

This always worked out well.

When I worked alone, well let’s just say there’s tons of cool stuff still on the drawing board that led nowhere.
 
Don’t let that happen to you.

I’m not saying to suppress your creativity or experimentation. I’m just saying the point you need to find a customer is much earlier than the hacker mindset intuitively expects.
 
It there was one thing I could change in my twenties, it would be to adopt this thinking.


Why work more hours?

“In addition to the usual work-day schedule, I expect all of the members of the group to work evenings and weekends. You will find that this is the norm here at Caltech.”

Then you’re doing it wrong at Caltech.
 
We are often quick to assume that MoreHoursWorked = MoreWorkGettingDone. This is true up to a point, but false beyond that point. Personally, I believe that evenings and weekends are usually beyond that point.


I used to work 90 hours per week. But when I decided that I needed to get more done, I started working 60 hours per week. Results per hour and quality of results have both improved dramatically, so I’ll never go back. And I would never work for anyone who doesn’t understand this.


Why be fearless?

This reminds me of my first partner in our software/consulting service business. He was absolutely fearless.

We would always arrive at appointments very early so he had an excuse to “poke around”. He’d ask anybody, the receptionist, someone in the breakroom, even the janitor. He’d see what was going on in the parking lot, the loading dock, even in the warehouse or factory. Seeing him in a business for the first time was like watching a kid in a candy store.

In our first meeting, he always knew something about the client’s business that they didn’t. He’d say things like, “Automating the inventory won’t help if Fred and Jean are counting 2 different things.” This always led to interesting discussion and often, follow-up business.

Once he even spent a week of his own time on third shift, going over procedures and reports with factory supervisors. They didn’t know who he was; they just figured someone from the main office sent him. He did a complete analysis in Excel which we used in a proposal. That got us hundreds of thousands of dollars worth of work.

I often challenged him, “You can’t just do that,” I would say. To which he would respond, “These people need help and don’t even realize it. We have to find a way to show them.” Then the inevitable, “It’s better to beg for forgiveness than ask for permission.”

Looking back, it didn’t always work. It pissed off some people and burnt those bridges. But when it did work, we often concluded that nothing else would have.

I learned a lot in those days. I’m still not as fearless as my partner was, but I’d like to think I’m getting there. Thanks for the memories.


Don’t Pull a Teddy Roosevelt

Five minutes after winning the presidential election of 1904, Teddy Roosevelt vowed not to seek re-election in 1908. Six minutes after, he regretted what he had just said. He tried to return in 1912, but failed and regretted his hasty decision the rest of his life. 

Why do I mention this? Because whenever I feel like I’m in a difficult situation (not all that much different from yours), I promise myself not to pull a Teddy Roosevelt and do something hasty that I’ll regret forever. Neither should you. 

For what it’s worth, time is not slipping away. In spite of what you may think, 30 is not old. 

My suggestion: keep your job and stay on your path, but find a way to do it and your startup at the same time. You have to get creative. Put in a few hours on your startup before work, not after. Get rid of you TV set. Block out huge blocks of time on weekends. Use your PTO for your startup. Work from home a few days a week and squeeze in extra startup work with the time/energy you save. You get the idea. 

You’re already creative enough to build a startup. Now use that creativity to free up more time and energy to work on it. Forget about the competition and time slipping away; just do the best you can. And don’t pull a Teddy Roosevelt. 

Is this a good way to get motivated?

“There’s a way for me to make some money, but it requires that I setup a fairly complicated spreadsheet to monitor several variables.”

A “complicated spreadsheet” isn’t a requirement, it’s a roadblock. You’re making it harder for yourself by putting obstacles in front of yourself and then wondering why it’s so hard to make progress.

“I want to be rich. Filthy rich, even.”
 
Getting rich isn’t the goal. It’s a byproduct. You never even mention what your startup is going to do, who it’s going to help, or why you absolutely positively must do it. If you have something you “must” do, identify it and focus on it. If you don’t, find it. Everything else, including money, is just a detail.

“I take a break to ‘clear my head’.”

Clearing your head isn’t a necessary step, it’s an excuse. Again, if you have something you “must” do, you head is already plenty clear. If you don’t, then what are you clearing your head for?


In summary:


1. Find what you “must” do.
 
2. Start doing it. In case you don’t have something you “must” do, then just do something, anything. The process of doing will probably help you find your mission. The processes of thinking, preparing tools, and dreaming about money probably won’t.

A couple of minor pointers that have helped me:

1. If you have 2 computers, make one for work and the other for internet and “put them in different rooms”.

2. Throw your TV set into the dumpster.

3. When you have code to work on, be at your terminal, working on it (Mode 1).

4. When you don’t have code to write, be anywhere but your terminal with pencil and paper handy (Mode 2).

5. Start every day in Mode 1 and end every day (probably in bed) in Mode 2. Ending the day in Mode 2 in requisite to being able to start in Mode 1 the next day.

6. Take care of yourself.


Where can I get help starting a business?

I would ask for help from my current employer. 

This, of course, requires you to be completely open and honest about your desires and that they’re not jerks. 

They already think you’re a superstar, so it really won’t be that much of a surprise when you say something like, “I had so much fun ‘liberating our data’ that I’d like to start my own service business doing the same thing for others.” 

Smart business people like helping others, especially helping others get started. They seem so sense that the karma will eventually come back to them (and I believe they’re right). They also understand (even better than you) the business benefits of your work and can really help you focus your new business. 

Ask them (starting with the top person, of course) for guidance on how to get started. You may be surprised how much you learn from them and how willing they are to help. You may think you know how much your work has helped them, but I bet they have more to share that you don’t already know. 

They probably can be the source for great leads, their vendors, their customers, other companies in the boss’s CEO or Tech circle, golf buddies, who knows. For example, if your owner/president/CEO has an associate who would benefit from your services, “everyone” wins when he recommends you. 

As long as they don’t feel their core business threatened by your service business (helping their competitors), your own employer may be the best source for ideas and leads to starting your own service business. Give it a shot. 

What’s it like to be a programmer?

“1. What are some qualifications of a computer programmer?”

The two most important qualifications are a love of details and a simultaneous appreciation of the bigger picture. You have to understand the landscape that your software will fit into. Then you have to be willing and able to dig down deep and be comfortable building stuff at the lowest level of detail. This takes a great deal of logical thinking, attention to detail, and personal focus.

“2. What is the best part of being a computer programmer? The worst? The most challenging?”

The best part is getting something working for the first time where nothing was there before. For me, this is so exciting that I still I do a “happy dance” every time. The worst part is the long hours alone. There’s really no way around it; good software takes time and almost everything is done by someone alone at a terminal. The most challenging is finding a project big enough to not be boring but small enough that’s it’s too difficult to make good progress.

“3. What’s the salary range in this career?”

As an employee, $35,000 to $200,000. As a company owner, $0 to billions. Either way, the range is very wide and depends on many factors, some outside of your control. Like any other profession, you should be a programmer because you love to program, not because of how much money you’ll make.

“4. What is a typical day in the life of a computer programmer?”

I bet there are as many typical days as there are programmers, so I’ll just share mine. My day starts at my terminal, making changes to my current program based the mark-ups I did to my hard copy in bed the night before. I spend most of the day at the terminal writing code, changing it, trying it out, and taking occasional notes. I avoid interruptions as much as I can. I have a regular lunch and dinner and some social life, but not too much. Every day ends the same, in bed with whatever I worked on that day, reviewing and marking up. Incredible attention to detail is required and this is how I do it.

“5. What is some advice you would give to young computer programmers?”

Just build something. Nothing can be more important. Whenever you need to learn something, find a way to learn it, whether it’s a class, friends, or more likely, a book or website. It you want to be a programmer badly enough, you’ll find this approach natural. If you don’t, you won’t.

“6. Is it easy to find a job as a computer programmer?”

If you’re good (and can prove it), yes. It not, not so much.

“7. What was your most exciting project?”

A computer program that wrote other computer programs.

“8. What skills do you think young programmers need for the job?”

The ability to think clearly and logically, good written and verbal communication skills, the discipline to keep working when they’d rather be with other people, and the determination to see something through to completion.

“9. What improvement does computer programming give for human life?”

Computer programming makes software that frees people up to think about and do things that weren’t possible just a few years ago. The possibilites for those people are endless.

“10. What is the future direction of computer programming?”

This is always hard to predict, but I’d guess the direction will head away from writing all of your own software toward connecting a lot of already written software to accomplish the same thing.

“11. Would life be a lot worse without computer programming? How much? Why?”

Just compare life in a country with advanced technology to one without. Computer programming doesn’t have everything to do with the difference, but it does have a lot. Much of today’s advanced lifestyle has resulted from modern technology. Much modern technology came from software. All software came from computer programming.