Programming careers and why all that glitters is not gold
The recession has thrown up numerous forum postings from people contemplating a career change and computer programming is one of the subjects that comes up often. Computing careers can be transient and short lived however because for every person wishing to get into the industry there is another one dying to get out. One forum poster alluded to the fact that she had three friends who were all ex programmers who had quit their jobs to become: a dairy farmer, a photographer and a counsellor. This should tell us something
"I wouldn't mind the rat race -- if the rats would lose once in a while."
Tom Wilson (American Actor, Writer and Comedian)
Is this because the IT industry is rubbish or is it because there are too many people making career decisions for the wrong reasons only to later lose the required levels of motivation to stay on top of the game? I did some digging around to find out if there is any consensus between programmers and IT workers regarding the levels of job satisfaction in the industry and I have come to the conclusion that all this disaffection is down to placing the wrong horses on the wrong courses. On the other hand some people are very happy in their jobs because they are in the right role with the right company and they feel that their work is highly valued by their employers. A good employer can make all the difference while a bad one can destroy the soul
I find that there are lots of people who moan about their work but that there are some who love it. If you always think of programming as hard or mundane then you won't like it at all but if you consider it to be more like a trade where you can excel using self discipline, craft and skill then you might like it a lot. There will always be plenty of work for any diligent and conscientious craftsman who can produce the goods in a certain problem domain
From my perspective, I previously worked in the the electronics industry as a test engineer and first learned to program in the early 90s by writing low level code for controlling electronics hardware and computer controlled test equipment. The electronics industry has all but died off and now I enjoy programming to build dynamic web pages which can interact with databases. The programming languages I am most interested in now are PHP, Python, Javascript and SQL. I also like to dabble in C/C++ out of sheer curiosity. I program for fun but can also do some very practical things with computers. More importantly, I am interested in computing more for the tangible benefits it has brought to society and in the ways people use and interact with them for work, study and recreation. I don't associate computing with earning money and I am glad I don't because it would not be as much fun
"The function of good software is to make the complex appear to be simple."
Grady Booch, Chief Scientist, Software Engineering, IBM Research.
A technical career can be rewarding but great careers are not handed out on a plate and you need to be careful about who and what influences your direction. There are a lot of unemployed programmers out there facing huge competition; low cost economies are only an email away for anyone looking to hire a cheap programmer. With all this competition you need to be more critical in your career planning and try to be more specific. If you go into the corporate world then you become even less specific and you can end up working as a maintenance programmer on outdated computer systems and find it a drag just trying to stay motivated and get out of bed in the mornings. Having said that, this is where many professional programmers earn their bread and it might not be so bad if you just remember that it is only a job and that it gives you a means to pay the bills, have a comfortable home life and have a holiday every now and then
Self discipline is an important trait in all good programmers. It also helps if you are mildly obsessive :-) regarding attention to detail and that you live properly. Your brain is your most valuable asset and you won't be helping yourself if you go out on the lash during the week and neglect your mental and physical health. If you want a career doing programming for eight hours a day then you need to get plenty of sleep and have a good healthy diet to keep your levels of concentration up. You can get away with fast living until you reach about 25 and at 35 it's tough, but when you reach my age it is impossible :-(
I believe that it is far better to deliberately restrict the range of subjects you work with and master them because otherwise you risk becoming a jack of all trades and a master of none. For example, in college I did some C# and SQL Server projects but then ditched Microsoft altogether because, as one senior contributor to a well known programming forum succinctly put it : with Microsoft you are always stressed out in trying to keep up with all the changes they make to their technologies. Just when you are starting to feel comfortable using one kit you find that they have brought out something newer, expensive and supposedly better. Life is tough enough and I am not willing to put myself at Microsoft's beck and call so as a result of my decision I have halved my worries and now have much more free time for other things like photography, writing and having a social life
"The trouble with programmers is that you can never tell what a programmer is doing until it’s too late."
Seymour Cray
I think the best motive anyone can have for learning to program in the first place is because they want to do it and find it genuinely interesting. More people than ever are now interested in computers and how they work because never before has computing been so accessible to the man in the street. Computers are now seen to be the new rock and roll and even people who work in ordinary humdrum jobs are taking an interest in programming either as a hobby or have enrolled on a night school course to work towards a programming qualification.
People often ask: "what programming language should I learn?" and the answer is that it depends on what you are trying to achieve. Here is a list of application domains with some of the more popular programming language solutions:
Desktop applications - Visual Basic.net, C#, Java, Python, C++
Web applications - Php, Ruby, Perl, Python, Java, Asp.net
Systems programming - C/C++
Mobile development - Java, C#, C/C++
Web development also requires knowledge of mark-up languages like (x)html and xml; web standards and cascading style sheets
"The use of COBOL cripples the mind; its teaching should therefore be regarded as a criminal offense."
E.W. Dijkstra
Once you learn one language then another one can be picked up quite swiftly and you will learn more if you try to adopt a hacker mentality early in your education and get some cop on. You have to work hard and for a considerable time to become a serious programmer and you need to think for yourself. I refer to the term hacker as being someone who wears a white hat and not one of those malicious immature buggers who like to vandalise other people's property just because they can. These people are often just criminals motivated by financial gain whereas real hacking is about creating something that people will find cool and want to use. Percy Shaw from Halifax, England, who invented those motorway cats eyes in his garden shed in the 1930s was a real hacker because he managed to solve a serious problem that was causing people to have road accidents after dark because they could not see the road properly
In college a good place to get a programming foundation is in the engineering departments because there you get more exposure to embedded computing which deals with programming some interesting hardware using low level programming languages like assembly language, C and C++. At this level programs are usually linear and execute from top to bottom in a logical sequence. It makes much more sense to teach a first year programming student how to code linear scripts rather than introduce them to Object Oriented Programming (OOP) because OOP only serves to scramble brains and quite frankly is a turn off for beginners. With OPP they are scared to experiment in case they break the program but with linear scripts they can experiment intuitively. This is all a world away from business computing courses which focus more on 'enterprise' computing using bloated proprietary software and it is where you can learn to focus more on the logic of programming rather than on fancy tools and elaborate methods of software development
The contrast between programming on an electronic engineering course and on a general computing course is stark because they are at opposite levels of the spectrum in relation to the technologies involved and end results. On mainstream computing courses you are usually asked to write programs for desktop/web applications and Java and C# are the languages most often used. You don't find C++ very often in colleges because students are always complaining that it is too difficult. Instead they teach them Java and C# because they are easier and a lot of employers are looking for these skills
"In C++ it’s harder to shoot yourself in the foot, but when you do, you blow off your whole leg."
Bjarne Stroustrup
The downside of this is that colleges are turning out graduates who have learned their programming skills using frameworks like Java and .net which have kept them in ignorance and isolation from the inner workings of computer systems. There are just as many C++ jobs out there and they pay slightly more with less competition standing in the way. Couple C++ skills with maybe some project management and writing skills and you might be giving yourself a head start over the herd
During 1990 - 1992 I did an electronics course where I learned Pascal, assembly language and C programming. Except for Pascal those skills are still in big demand today and they always will be because industry needs people who have an understanding of electronic hardware and the tools and methods for programming it. With this type of programming you are literally down closer to the hardware level and you are working with the more basic forms of control logic using bits and bytes; boolean algebra and circuit timing. For an introduction to this type of programming and the kits available you could take a look at The BASIC Stamp Micro-controller Development Kit which is manufactured by Parallax
Typical engineering projects might involve designing a micro-controller based application where you gain knowledge of practical hardware based applications and some really interesting programming techniques. If you do an engineering course your skills will probably be more unique and and have more range than those which they teach on general computing courses where, in Ireland at least the colleges seem to have a fetish for Microsoft technologies. You will never a learn lot about computer systems if you go on a course that is too heavily influenced by Microsoft
"Considering the current sad state of our computer programs, software development is clearly still a black art, and cannot yet be called an engineering discipline."
Bjarne Stroustrup
One of the biggest pains for any new programmer is getting a handle on the programming tools available. When you are just learning it is better to use light tools with few features because this will keep your mind on the programming and not on the tools themselves
Microsoft has Visual Studio which many say is the best development tool in the world but the problem with it is that it is very complicated for beginners - even in third year I felt uncomfortable whenever I opened up Visual Studio. If you want to learn C# and the .net platform then do start with the Express Editions of Visual Studio because they are free, very light weight and not nearly as intimidating
Microsoft also have a nice free tool called Visual Web Developer that will get you up and running quickly with asp.net powered web-sites. It is all drag and drop mind you and a lot of the code is generated for you. This is fine but it stops you from really learning to program properly. What happens when you run into problems with your application? Often the problems are not related to the actual program logic but instead have more to do with the tools and their configuration. This is why too many 'features' can cloud your mind and stop you from working effectively
Java development tools historically have been pretty lousy but thankfully there is now Netbeans which makes it much easier to learn Java, C++ Ruby or PHP on a Windows, Linux or MacOS box to create web and database applications with cool user interfaces and slick functionality. If you are more of a purist then there is a great interactive teaching tool called BlueJ which I recommend because I used it in college and it gave me a great feel for Java programming when I did an introductory semester in second year. BlueJ was the first programming tool I ever saw which had an object work bench which allows you to interact with programming objects in a fun and experimental way. The idea has since been copied into Visual Studio and claimed by Microsoft to be their own 'innovation'. Cheeky
"If Java had true garbage collection, most programs would delete themselves upon execution."
Robert Sewell
If you are the type of person who thinks that an evening spent learning to program is better spent than watching TV then you are have the potential so maybe you could teach yourself a thing or two about computer programming, become good at it and find a real sense of achievement when you complete your personal projects. By choosing projects that you enjoy you will have much more motivation and be keen to take things to the next level. If you do programming for your own benefit and pleasure then you have a much better chance of still enjoying it in five years time
When making the decision to take on a computing degree course from 2002 - 2006, I went in with my eyes open because I could see the potential in IT to be something which would keep me interested for many years to come. Unlike other vocations it is something which you can do professionally, for pleasure, or both. If you become unemployed then you still have something which you can study and work with to satisfy your intellectual curiosity and pass the time or you can create something practical for your own benefit and for other people who need your expertise
Canny people don't always hire themselves out to the first offer they get after graduation because they know that it does not really make economic sense to do this. Instead they will think up ways to become financially independent in the long run by working on personal projects that they find highly motivational and interesting. The unique thing about IT is that there are no cost barriers to entry and that you can plan long term projects which can bring you lasting benefits for many years to come. It is smart to think like this because by putting all your eggs in one basket in a regular day job you are taking a huge risk. If you have serious financial commitments and the economy takes a slide then what are have you got to fall back on?
Most programmers work as a coder for a few years and then find that they can't progress much further because after 5 - 10 years of programming the only other option is to move into management. Management is not much fun so many people just prefer to leave the computer industry and go off and do something else, like ... counselling
"It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets."
Alan Cooper
This is hardly surprising and after I graduated I attended job interviews where I got a sense of the working conditions programmers are often expected to work under and it left me with no doubt that it can be an unglamorous, un-sexy career where your days can either be mind numbingly boring or loaded with pressure and stress. No thanks, because boredom is a disease and I can count dozens of people I have known over the years who ended up miserable and eventually yielded to stress related illnesses. Too much too soon and with no steady pace is a recipe for disaster in your career and your life outside work. There is one place I have been informed about where the average duration of employment is just 6 months because that is all most normal people can take. Anyone who is over a year in the job is either in serious debt or a bit slow on the uptake
In one place I saw a dozen programmers crammed into a room without windows working in little cubicles under fluorescent lighting and the interviewer had eyes which conveyed about as much humour to me as a sore toe. It was like talking to a robot and I have seen more personality in a pound of sausages. There are probably some good places out there to work as a programmer but I suspect that the main thing which makes them good is the people. After all, they say that people don't really move jobs but instead they change people. It does not cost much to make a workplace comfortable and conducive to brain work but unfortunately a lot of employers neglect their employees by expecting them to work in poor conditions. Even a few inspirational wall posters and a coffee maker can make a difference!
I knew I would be unimpressed by what I saw after graduation because by that time I had lost all my motivation for programming and wanted to do be doing something less mechanical. I took some time off and learned about the web instead because it offered a more humane and social aspect to computing which was absent in the abstract and clinically logical world of software engineering and programming. When the course finished I was a web newbie - and I mean clueless - but I had become a good programmer because during the course I was always paying attention to my work and saw web surfing mainly as a waste of time that could wait until after graduation
By the time I graduated I still didn't even know what lmao or btw meant because I had spent so much time working on my course that it nearly sucked the life out of me. There is a lot to be said for taking a year or three out after such a long hard slog to gain a fresh perspective on everything including who you are as a person. For example, I discovered I had a passion for words and writing; something which would have passed me unnoticed if I had jumped straight in to working as a full time programmer after graduation
Best of luck
Interesting places
35 and lost interest in programming - experienced IT people talking about work
I can count the number of truly great programmers I've worked with on one hand
Programming Sucks Or At Least, It Ought To
Funny article top 10 reasons why Java sucks