What's it like to be a programmer?
There is a joke about what it's like to be a programmer --
Programmers are like mushrooms.
Honestly it is not that bad, but the first thing you have to learn to be a programmer is how to whine -- most programmers are whiners (or martyrs). Teenagers make good programmers because they think they know it all -- heck, teens are half way there to having the programmer attitude. If they substitute Marketing and Management (and anyone with an MBA or in a suit) for every "lame" authority figure they've ever resented, then they'll have the attitude nailed! It is tough thinking you're right all the time, and even tougher when you really are -- and tougher still when management won't listen to you. (Note: Every programmer must have a Kassandra complex, this is more important than a pocket protector). Remember those marketing and management types? They think all programmers are primadona's. What do they know? They don't even know the difference between Kilobaud and Kilobits-per-second! Cretins!
Of course programming has pretty flexible hours, impossible schedules, good pay, under-appreciation, neat problems to solve, impossible problems to solve, cool hardware (sometimes), and if you are really good you can write off your home computer and games as "R&D". Then after decades of programming, you can burn-out, become some middle manager who sharpens his hair into points (Dilbert is required reading for programmers), and then tells his "people" how they used to use punch-cards when he was programming, and asks questions about that cool new language called "C" (welcome to the '70's). Of course the really painful part of manager initiation is when they insert the sigmoidoscope so that they can suck half your brain out. But I'm only dreaming of that bright future -- I've still got a few good weeks of programming left in me, before I'm retired to that "dead programmer" pile (and I'm moved upstairs to the corner office).
Are you going to enjoy being a programmer?
You've got the right personality if you are a puzzle solver, and really enjoy solving "boring" puzzles like Rubiks Cube, or doing those 5000 piece puzzles that are all the same color, have no edges, and have 5 extra pieces (for fun). It is far easier to "have it" when you are an acne riddled pubescent teen-aged boy, with no chance for a date -- but some adults are also "gifted" with the drive, and free time, to enjoy programming.
Programming is not hard, but there is a lot to know (be prepared to read, a lot). Programming is basically just explaining things in very simple terms. If you enjoy deconstructing problems down into very simple terms, then programming is right for you.
TEST: Write down explicit directions on how to walk across the room.
There is a HUGE reward in solving problems (related to programming), and far more reward at having secret knowledge, and language, that no one else understands (except for an anointed few that chose the same career path ). This will give you a superiority complex that is the envy of Doctors everywhere. We've even got the secret signals so that we can tell who are programmers; like shaking our hands out constantly (because our carpal-tunnel syndrome is killing us), or the red-eye rub (to try to get moisture back in our eyes because of staring at the screen for 10 hours straight), not to mention the hand cramp (did I mention the problems getting a date?). Also the lump on the front of our foreheads is a dead give-away -- this is caused by pounding your head against the keyboard in frustration, because the programmer before you was a drooling idiot, or because your manager just changed your requirements on you for the 5th time (this week... and it's only Tuesday).
For fun, programmers get to make a frequently used commands in your program the CTRL-ALT-ESC key sequence -- just to get back at those pesky users, and to torture those whining wannabe's (the support people)! Then there is the "Easter-Egg" -- where programmers spend 50% of their total development time creating the entire Monty-Pythons Flying Circus Introduction in animated graphics, to be seen ONLY if someone types in their full (real) name in the about box. This is fun because you get to waste hard drive space AND you are pulling one over on all the lawyers, marketing and QA types -- who would have conniption fits over the ramifications of such things in a shipping product. I love my job!
Microsoft programmers must be thrilled with their jobs, 'cause there is no other rational explanaition for a 505 megabyte word processor other than 500 programmers all adding in their 1 megabyte Easter-Eggs, and the remaining 5 meg is the actually program. Some Easter Eggs are even visible in Microsoft Products, have you seen the little annoying cartoon characters in Microsoft Products that try to help you by giving you advice like "Try 'Del *.*' at the command prompt"? Those are just Easter Eggs that got out of control.
Which language do you choose?
The language you choose will define you and your entire programming career path.
If you become an assembly language programmer you are going to do nothing but hand tune compiler code, work on satellites, or create device drivers for some real-time systems. You are going to be a geek, even to the other geeks. You will be a geeks-geek, and be able to talk in a lingo that will put the others to shame. You will also spend years creating things that other programmers can do in an hour (with their higher level languages), but yours will run faster and be completely machine specific. You will also go completely insane due to your complete isolation from the rest of humanity.
You can become a C programmer. These are just wannabe assembly programmers. Same job, but you stand a chance on working on some System (OS) development, and some older legacy code. Who wants to sit around fixing other people's bad code? Of course you can also become a Unix weenie, or write CGI's all day long (and be half as productive as Perl programmers). This language is passe -- you want to work on something new, something cool.
Cobol. Ha ha. That was a trick! Everyone knows that real programmers don't use Cobol. Cobol'ers do database programming for some big corporations -- and make more money than you can dream of making, all trying to fix the year 2000 problem, which they created in the first place. (Who do you think Bill Gates ripped off his marketing plan from?).
C++ is the language of real programmers. It is confusing, easy to make errors in, it allows you to stomp on memory and squash the OS, yourself or other programs. It is the worst Object Oriented Language out there, combined with the most obfuscated syntax in existence (other than APL). So naturally it became the standard. You can write code that no other human will ever understand -- guaranteeing your job security, or at least lucrative follow-on contracts for years. This is what REAL Application programmers use.
Java is the language of the future. Only really cool people (and kids) work in Java. Of course it is slow, and requires far more horsepower to run programs (guaranteeing computer industry growth for the next decade). Even the name is cool -- named after your vice of choice (well, your second choice -- but your primary choice is still beyond your dreams).
What kind of programmer should you be?
System Programmers. These guys get to be arrogant by even programmers standards. You get to work at cool companies like Apple, Sun or Microsoft, where they pay you too little to work too long of hours. They throw you on some very very small part of the OS, where you sit there working on some specific set of API's that only a small fraction of developers will ever see (and fewer will appreciate). This is about as exciting as an assembly line worker screwing the caps on toothpaste. Your only reward is getting to become a snob of the computer world that thinks he is better than Application programmers.
Application Programmers get to write applications, where they pay you too little to work too long of hours. That is if you are working at a small company, or in a small group -- then you get to know everything about a whole Application. That is real power, to be able to crush a company and put dozens of people out of a job when you quit to go become a Systems Programmer. If you work in a big group (like most), then you are so focused in, on such a small part of the Application, that you are basically doing the same job as a System Programmer -- without getting to be a snob about it.
Game Programmers -- this is where the real programmers hang out. You get the joys of being a small application programmer (and getting to work on many parts of something), combined with schedules that make other programmers look like slackers. You don't get to have quite the arrogance of System Programmers (but you come close). If you work on a good game, then all the teens (in their 40's or not) will kiss your ring, when you tell them what you worked on (and you will feel obliged to tell them all).
Database programmers -- these are the pond scum of the computing world. They often use 4GL (easy to use development environments), or easy to use languages. They get a steady paycheck, and more reasonable workloads. (Where's the challenge in THAT). They get to create whole solutions for corporations and businesses (not just little itty-bitty sub-parts). They often get paid pretty well too (especially if they are consultants)! Ha, the scourge of programming. The only people that look up to Database Programmers are non-programmers (and the business who use them).
Scripters -- these are the people that Database programmers look down on. They get to play in languages to do multimedia, internet stuff, or get to bind applications together to actually make them useful (or automated) -- and they get paid for that?! Other programmers do scripting for fun. These guys are the extortionists, charging other people for what they should have to pay to do!
Which OS to choose?
MacOS? Programming the MacOS is not preferred. The first thing you have to learn as a Mac programmer is how to put the user first. Ick! You often have to do more work, or the computer spends precious cycles making itself EASIER to use. Bleck! This is like telling a Doctor that he should be in medicine for the patients, or telling a Lawyer that he should care about the spirit of the law. Ha! There are very few Mac programmers.
Windows Programmers? There is no such thing. It is really a sad joke. There are DOS programmers who happen to be using a collection of routines called Windows -- but they all spend over half their time configuring their systems or trying to figure out why something on their machine just stopped working. They spend the other half of their time trying to figure out why their App, which oddly works on most machines, fails on a list of 20 different Windows machines for no known reason (1). This means that all Windows programmers are really just Quality Assurance people working for Microsoft, who occasionally write a line of code or two. The ironic part is that they have to pay Microsoft for the pleasure of debugging their OS for them.
(1) Of course the reason for the quirkiness is that Microsoft has a competitive advantage when they keep "secrets" from the rest of the world. So Microsoft has a super-secret team of quirky bug-developers to make the rest of the world waste money trying to figure them out. Then Microsoft charges people for support. I also think Oswald was a patsy and Gates was the real shooter.
Unix Programmers? These are the selfish programmers. The ones that code for themselves. Have you ever seen a User Interface on a Unix program? Lets face it, no commercial programs are written in Unix. 95% of all Unix development is for school -- this is done so that schools can prepare programmers for what it is NOT like in the real world. Oh sure, a few lucky bastards get to create Unix based server Apps, Scientific applications, or land a cushy job working for some specialty company doing neat projects like 3D, Video or the like. But this is like winning the lottery, and life has a way of getting back at them . Now most Unix programmers are being forced to do WinNT programming, and there has been a large up spike in programmers strangling themselves with their mice cords. Challenges make you strong, and the Unix guys are all the pansies of the programming world.
DOS Programmers? Oxymoron. There are quite a few CP/M programmers that are using its stolen variant (known as DOS). These were the guys that were too stupid to see the value in a rich API set (like the Mac), and having routines that were actually NAMED instead of numbered. (I'm not kidding DOS calls are numbered). Where do you think all the FORTRAN programmers went in the 80's? They're programming DOS. Life plays its dirty little tricks on stupid people -- and for these guys, the trick is that they will have to program DOS until the end of time (and then Satan has a special place in hell for DOS programmers). Lets face it, if they can't understand complex concepts like using human words to name routines, then what chance do they have of ever digging their way out of the septic-pit of an OS they are pounding on daily? Pity them.
How to look like a programmer?
Stop bathing. Programmers don't have time for luxuries. Haircuts are for others. Grow that pony tail! Old Programmers don't need face-lifts, they just tie their pony-tails tighter. (You can tell senior programmers from junior ones by the length of the tail, and how thin the hair is in front). Beards are cool too (even for the chicks).
Give up smoking and make it easy on yourself (if you smoke) -- real programmers work in computer rooms where smoking isn't allowed (or work in California where there is a bounty on smokers, and no limit). Develop a Jolt or Mountain Dew habit -- main-lining (directly injecting) caffeine is the sign of a programmer that has gone over the edge, but anything else is allowed. No programmes start out diabetic or with high blood-pressure, but after 20 years of sodas and eating candy and chips out of a vending machine, they all end up that way.
Programmers come in two sizes -- too skinny, and too fat. Usually they start out as the former, and end up the latter. This is contributed to by the physical excercise required by your job (like moving your fingers quickly, or sliding your arm around), compounded by the healh food generously provided (for too high a price) by the company store (vending machine). Let's face it, if your weight was "just right" then you might have a social life, which would destroy your chances of being a good programmer.
Glasses are optional, for now -- after 20 years of staring at a blurry tube, you'll need them. Pocket Protectors and Beanies are cliche, and only used to ridicule those that ridicule programmers. So they are allowed for special occasions (like Expo's and trade shows), but that is it. Blue Jeans and a T-Shirt are the norm. Rattier versions of both are reserved for meetings with the customer, corporate big wigs, or marketing. Jean-Jackets are allowed for colder climates. Birkenstocks are optional (and usually reserved for California-Coders). The real "show" part of your attire will be based on the T-Shirt you are wearing. If the T-Shirt has a long-dead (but super cool) product, that only a programmer could know and love -- then you are REALLY cool. A "Lisa Workshop", "CP/M Forever", or "Babbage Rules" T-Shirt will make you the Calvin Klein of programmer fashion (bonus points if you accessorize the shirt with Mellow-Yellow stains and junk-food smears).
Behaving like a programmer?
Take your worst personality trait, and wear it on your sleeve proudly. Let your eccentricity run free. (Let loose your inner geek). Let everyone know within 5 minutes of meeting you, exactly why you are a social outcast, and excellent programmer. A "good starts" would be to laugh like a jack-ass being slaughtered, talk techie all the time, and answering a simple question like "How are you?" with your life's story (concluding with the horrible 'roids' you've got because your chair is too hard). But feel free to improvise in any way that is socially unacceptable.
Becoming an absolute literalist is also required. Someone asks "What is up", you must answer, "Up is a two lettered word that means the opposite of down. It is a direction that is generally referring to 'away' from the center of mass for our planet." Sure, everyone will hate you -- but you will be telling the truth. Which brings me to another requirement, 100% absolute brutal honesty. Sure, you will be a social outcast, and you will get in huge fights when your girlfriend (yea, right) asks, "Does my ass look fat in these pants" (2). But you can't lie to a computer and be a good programmer -- so if you spend 9/10th of your waking life (and half your sleeping life) writing code for computers, you can't be expected to "switch" just for the biochemical (and highly emotional) computers known as humans.
(2) Warning to programmers: There is no correct answer for that question. About the closest you can come to one is by looking VERY briefly and saying, "Not at all". For that you will be called a liar and she'll change anyway, but she'll have a smile. Don't think about it or hesitate! Asking for clarification, "As compared to what" is never a good move. Saying, "Yeah, like a hippo's!" is a way to become single again and to get back to programming.
If people don't do double-takes at things you say, and flee from you at parties, then you haven't yet mastered the Social Skills of a programmer. The cool part is that you get to hang out at parties like a wall-flower, talking to the other programmers about the really important stuff like your new home computer or cache coherency issues in an multi-processing environment.
How do I become a programmer?
If you've read all the dark sides of being a programmer, and you are still considering becoming a programmer, then get out there and code. The market is starving for programmers. There is no magic to it, experience is what counts, and you get that by doing. Lock youself away from humanity for a decade, with a computer as your only companion (and maybe a dirty CD-ROM or two), and you'll be well on your way. Start small and easy, scripting or database programming -- then slowly let your ego take over your brain, and move into application programming. When your ego has suppressed all other parts of your personality, then you are ready to become a System Programmer. (Be prepared to wear a neck brace to keep that massive head on those scrawny shoulders). Don't worry if you can't cut it -- with the people skills you will be developing along the way (by talking to computers, and yourself, all day), you will be perfect for management when the time comes (except for the honesty part).