Why’s it so hard to find good programmers?

“In fact, one thing I have noticed is that the people who I consider to be good software developers barely ever apply for jobs at all.” 

Good point. The best developers I ever hired were (a) already working, (b) not looking, (c) referred, and (d) without a current resume. 

Therefore, the people who I consider to be good software developers probably don’t have a current resume. 

Therefore, the top 1% of good software developers probably don’t have a current resume. 

Therefore, if you have a pile of current resumes, it probably includes none of the top 1% of good software developers. 

Therefore, if you’re hiring from current resumes, your probably “not” hiring the top 1%. 

[The only thing worse than sloppy probability and statistics is sloppy logic. But that’s OK, because I’m not in the top 1% of either.] 

Why is BASIC still OK?

“It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.” 

For what it’s worth, I have written over 1 million lines of BASIC for over 100 customers, most of it still it production, and all of it doing important work producing goods, services, and jobs in so many uncool industries we couldn’t live without. 

Maybe I’m an outlier, but I have gone on to learn algorithms, dynamic programming, database theory, client/server, and web development. I believe the elegant simplicity of BASIC and database theory, although limited in application, has provided an excellent base upon which to build. 

I know that ewd is a giant to be respected, but I think it’s a red flag when a teacher mutters “practically impossible to teach”, even in jest. IMHO, that says more about the teacher than the student. 

Thoughts like this are great for a laugh, but when you stop to think about it, all they really do is further amplify the perception of a huge gulf between theory and practice. Academics whine while those of us in the trenches are too busy to notice because our sleeves are rolled up while we build that which must be built. 


What is “Intellectual Horsepower”?

I used to be awfully hasty in judging others, “She is really smart,” or “He is so stupid”. Then I learned alot from my first mentor. He taught that there often isn’t much difference between someone who appears smart and someone who doesn’t. Perhaps no one spent enough time with them. Maybe they have other challenges, like family, health, or circumstances. Maybe they’re just a fish out of water, spending too much time on things that don’t interest him. Or maybe they appear dumb because they actually believe that they are. They’ve been told so many times that they now believe it. 

At first, he sounded like some hippie idealist. But the more we worked together, the more his teachings manifested themselves in the people we worked with. People who appeared dumb blossomed under different circumstances all the time. The were smart deep down inside where no one ever explored. (These people were mostly hourly workers who knew way more than their bosses about running the business.) 

To this day, when I see phrases like, “intellectual horsepower”, I cringe. We “smarties” aren’t that much smarter than most other people, if we are at all. 

And just to stay humble, remember: we’re all just one head injury from blissful ignorance. 

What are the advantages of working at home?

Advantages of working at home:

1. Equipment I pick.
2. Furniture I pick.
3. Temperature I pick.
4. Lighting I pick.
5. Music I pick (without headphones!).
6. Clothing I pick (shorts in summer, sweatsuit in winter)
7. Food & drink I pick. (It's really good.)
8. Commute time = 1 minute per day.
9. No gas/car expense.
10. Almost no interruptions.
11. 6 people have my IP phone#.
12. 12 people have my cell phone#.
13. Everyone else --> email.
14. I check email when I'm ready, not them.
15. I set my task list (but still deliver as promised).
16. Can easily run errands any time.
17. Can easily do household tasks any time.
18. Much easier to schedule exercise.
19. See SO much more often.
20. 4 legged creatures make much better office mates.
21. People respect my time much more when I do visit the office.
22. Can more easily switch tasks.
23. Much easier to focus all the time.
24. I get twice as much done.


What are the basic modules in your library

1. basic form
2. form with multi-valued lines
3. form with data set (multi-valued parent/children)
4. form with grid
5. tabbed form
6. form with skins
7. batch (loop thru something)
8. batch update selected records in a table
9. batch dump table records --> .txt or .xml file
10. batch .txt or .xml file --> update table records
11. batch file --> create & populate database table
12. cut an email
13. traverse internal tree function
14. traverse file index(es)
15. build html from parameters
16. build javascript from parameters
17. build .pdf from parameters
18. build hp esc sequences from parameters
19. benchmark a process
20. how does that syntax work?
21. which way is faster?
22. batch string parser
23. batch source code search
24. batch source code changer

I have more, but I don’t have time to find them right now. OK, I think I’ll add:

 25. batch parse source code, identify routine for reuse


Why doesn’t anyone call me back?

1. There is no position. We’re just “feeling out” the marketplace. 

2. There is no position. This was a headhunter building his database. 

3. We were planning to promote from within, but HR made us post the position anyway. We didn’t read or respond to any of the resumes. 

4. We already had the perfect candidate, but HR made us post the position anyway. We didn’t read or respond to any of the resumes. 

5. We posted the position as required by HR, but when an executive saw it on the intranet, he made us hire his son/nephew/family friend. We didn’t read or respond to any of the resumes.

6. We were planning to hire someone, but by the time the resumes started arriving, the perfect candidate presented himself. We didn’t read or respond to any of the resumes. 

7. We were planning to hire someone, but the budget was cut. We didn’t read or respond to any of the resumes. 

8. We got 1,200 resumes in 2 days so HR ran them through a filter with almost no correlation to potential suitability for the job. Your resume didn’t get through the filter. Next time, add buzzwords from the ad.

9. Your resume made it through the HR filter, but we only had time to read 20% of them. Yours wasn’t pretty enough. 

10. Your resume didn’t stick out in a field of many that did stick out. You probably should have some kick-ass differentiator FRONT AND CENTER. 

11. We read many great resumes. Yours was substandard compared to many of them for one or more of many possible reasons. Have 5 friends proofread it and give you brutally honest feedback for next time. 

12. Your resume sucked but you don’t. Find 5 friends. See #10. 

13. You interviewed well, but someone else absolutely kicked ass. We loved him/her. Tough break for you, I guess. 

14. You didn’t interview well, but we can’t really put our finger on it and don’t have time to respond. Tough break. 

15. You interviewed well and are still under consideration. But we are waiting on corporate for 27 other things. You’ll probably find another job before we get back to you. 

16. You really do suck. (No you don’t. Chances are the process never got this far.) 

What if my problem has many competitors?

Here’s an idea: find “someone else” with a problem and work on that. This works especially well if the someone else is in business, very busy, and has some money. Chances are better that your solution to their problem won’t have much competition: if it did, they would have already gone with it.

I know this is the opposite of “scratch your own itch”, but I always found that advice overrated. I have always been much more successful scratching other people’s itches.


The One Excuse Not to Network

I have found most networking (of any kind) to be an inefficient use of my time. At most events, I always had a little voice in my head saying things like, “Instead of being here, I could be building ,” or “What could possibly come out of this discussion?” I’m also frustrated because so many events don’t have my prospects, but “people who know people who know people who may know a potential prospect of mine”. 

I have taken a totally different approach. It’s really simple and maybe even counter-intuitive. Hear me out: 

Be excellent. Better yet, be “very” excellent. In everything you do. 

If my customer doesn’t think I’m their best vendor, then I have failed. 

This applies to “everything”. In the work that I do. In the products I supply. In the fun their people have with me. In the “outside their box” thinking about every project. In the communication. In the failsafe processes of doing business (Yes, I double check that some has double checked.) In thinking 2 steps ahead of them. In being a trusted partner in that part of their business. In pristine ethics (Don’t underestimate this one; one slip neutralizes “everything else you’ve ever done”.) 

When I conduct business this way, I become a magnet to those who need my services. I call this “passive networking”. I spend no time networking, no time marketing, pay no referrals, and focus completely on my customers. They know and appreciate this. When one of their colleagues mentions a concern at “their” networking meeting, their Tech Club, their restaurant, or in a discussion with their vendors and customers, they think of me. When they care about the people they know, they want the best for them. I always want to be thought of in this way. IMO, “this” is the definition of totally efficient marketing. 

I know it sounds awfully old school and like a cop-out, but doing everything I can to make myself a magnet is the best thing I ever did for my business. So instead of wasting 99% of my time with strangers, I spend it directly investing 100% of it in people that already matter. 

Are young programmers better?

I’ve been programming commercially for 32 years and in all that time, I have found very little correlation between age and ability to deliver quality software.

I have worked with younger, inexperienced, and uneducated programmers who were willing to learn, with minds like sponges and who were a pleasure to work with. They often found or thought of things the rest of us overlooked.

I have worked with younger, inexperienced, and well educated programmers who thought they knew better and were obstacles to progress.

I have worked with older programmers with the same one year’s experience 22 times. Oy.

I have worked with older programmers with excellent domain knowledge and limited technical range. Their personality and willingness to succeed were often the key to progress.

I have worked with older programmers with excellent technical range and limited domain knowledge. Sometimes it’s hard to teach an old dog new tricks, but when you can, results can be golden.

I have worked with brilliant older programmers with extensive experience and open minds. The best of all worlds.

(By the way, I have also worked with programmers of many ethnicities, female, handicapped, gay, Republican, religious, even left-handed, and have found little or no correlation between their “description” and their “performance”. One of the beauties of programming is that the easiest way to evaluate your performance is through your work itself and not much else.)


Working at the Library

Maybe we’re lucky in Pittsburgh, but we have the best of both worlds at the main branch of the Carnegie Library. You can take a tour of where I work 2 or 3 days per week:

http://www.clpgh.org/locations/main/tours/virtualtour/

It’s fantastic. It was built by Andrew Carnegie in 1895 and most of it is original. I get inspiration from the 20 foot ceilings and hand made ornamentation everywhere you look. They simply don’t build things like this any more. There are quiet reading rooms, large tables, plenty of light, and oh yeah, a Crazy Mocha coffee shop in the building. I use a cell phone dongle on my laptop and most people know that email is my preferred communication method.

If I need a break, I can look at priceless artifacts in the Carnegie museum through the windows in the open stacks. Or just get the world’s most disgusting hot dog at the “O” a block away. If I need inspiration, that’ll either make me or break me.

One of these days, I’d like to make the claim that some incredible technology of the 21st century was conceived in an edifice borne out of the some of the best technology of the 19th century.

“My aspirations take a higher flight. Mine be it to have contributed to the enlightenment and the joys of the mind, to the things of the spirit, to all that tends to bring into the lives of the toilers of Pittsburgh sweetness and light. I hold this the noblest possible use of wealth.” - Andrew Carnegie at the Dedication of Carnegie Library of Pittsburgh, November 5, 1895.