For Those Who Wish to be Programmers?
Ryan asks: "I've been stuck in a helpdesk position at 3 different companies for the past 5 years. What I really would like to be doing is programming. At each job, I would write small programs or dynamic web pages in PHP with a MySQL backend, a few small Linux utilities for automating jobs and small Win32 programs, all written in C. Sure, these programs were popular with my fellow coworkers, my boss liked them, but my primary function there is to answer phones, and programming is secondary. I can not transfer to the 'programming department' because its located in another state, nor would I think that department would welcome me, only because I would be coming from a helpdesk. My programming is self-taught, and I don't have a diploma from a university. I'm 25, and have a family, night school is out of the question.
The market here (Danbury,-Connecticut) is dry, and HR wouldn't even look at my resume with out a degree. I know someone out there must have been in the same situation and some how gotten their foot in the door. What did you do? Any suggestions?" I'm sure there many on Slashdot who have been in this situation. If you wouldn't mind sharing your experiences on this matter, it would be appreciated. Share the ups and downs of your decisions and in particular, please answer the question: If you had to do it all over again, would you make the same decisions? Those interested in this topic may also wish to check out the the last article that touches on this subject.
Depending on how good your relationship with your boss (and how much power he has) ... you may be able to get him to change your job title. (not necessarily your duties)
Titles don't really cost anything, but at least that way your resume (at first glance) will contain what looks like related job experience.
The problem is that most HR reps or placement agents don't have a clue about anything technical, and therefore need to look for objective measures of skill (degree, titles, etc.) Even though you and I know that a degree doesn't make somebody a good programmer, it's all they have to go on when trying to reduce a huge stack of underqualified applicants to a manageable amount to bring in for interviews.
If you have 2 incomes, it's easier. Get another job somewhere else, if you current company is unwilling to help you out, you gotta move on.
You said night classes are out of the question, what about part time in the day or at night? Correpsondance courses exist so you can work at home on your own time. (You can get a CS degree online now)
Remember one thing tho, alot of programmers aren't doing what 'they' wanted to do when they got into the field. (they're working on other technologies, mainframe, client-server, networking, etc..)
So, you want to be a programmer? That's fairly easy, anyone can code. But who can make it good? I think those who can have the following abilities:
:-)
1) Commitment: You are not going anywhere if you can't sit down and code a system for months, maybe years. You need to have a stable relationship with your programs. It's like dating a girl, except you can sell it later
And to have commitment, you need:
2) Passion: Love what you do. Few people can sit in front of a computer and look at %$@\"{ > $_ () all day. As strange as programming languages characters look, you need to love them.
Which bring to my next point:
3) Knowledge is power: But, doesn't matter how many programming languages you know. 1, 2, 3 or 50, they all share a lot of commom grounds that you need to know. So XYZW is a functional language, with a little bit of OOP, and ASDF is completely OOP. Doesn't matter, as long as you know the strenghts of each concept, what mostly changes from language to language is the characters you type;
And what characters will you type?
4) Know the market: I love Python. I know Python. But market for it is weak, compared to C++ or Java. But, I make my living with PHP. Instead of complaining that the market for what I like is not the best in the world, realize we live in a society fueled by money, and somehow, you need to make it;
And the last thing I have to say:
5) Above all, stick to your values. Don't go programming proprietary software if you love Free Software, don't code for business segments that you don't like, don't code for companies that abuse their market share, treat their employes bad, or sell horrible products.
Above all, programming is another job. And like any job that it's worth, you have to make a difference. Try to make a positive one!
Buy a Nintendo DS Lite
I've been stitching up cuts on my livestock and giving my children cough medicine and asprin. At work they only think of me as a software designer. How can I break into the medical field?
Going to school is out of the question.
Writing one off utilities is not developing software.
You need to understand how languages work (what is a virtual function in c++), how OSs work, what a thread is, what a btree is and why it is so useful, how a garbage collector works, how your filesystem works, how commen compressions schemes work, how long to expect a user to wait with no feed back or some feed back but no progress indication, how to fill a polygon, etc. You don't need to know all of this because you might have to write it, it is already written, but you need to understand these concepts to expand on them and apply them when appropriate. I have used concepts learned in all the previously mentioned ideas in production software.
I suggest that you find a way to learn the stuff in a structured environment. I agree that a degree is only a sheet of paper, but the learning that takes place in those classes is extremely hard to reproduce working on a helpdesk.
Joe
Joe Batt Solid Design
I take the belief that anything you actually did while on the job can go on your resume. After all, the copyright of the code you wrote is likely held by the company (work for hire), so it is only fair that you can list any skills you actually used to create intellectual property for them on your resume.
There is a definiate art to writing a resume when your experience is in one job tilte but you are seeking a job in another. As long as you do not make up facts, spin the hell out of what you did. Market yourself: there is no rule that says the description you give of your job duties has to be proportional to the amount of time you spent doing them.
List bullet items for each of the programming tools you actually used, no matter how "small" your use of it was, and give a short technical and functional description of what you did.
For example, if you wrote code to use PHP/MYSQL to track something at work, then devote several lines to this, even if was done "in your spare time" and wasn't your primary job duty. Your attitude to a prospective employer has to be "I've done X before, I can do it again for you". If you find yourself thinking along the lines of "Well I was only really asked to do Y, and Z and only did X on my own when Y and Z were slow" then you need to slap yourself. Frankly, if you weren't asked to do X, all the better: that's called proactively identifying business needs and solving them. Employers do not want people who sit there waiting to be told what to do.
I don't think a medical anaolgy is valid when it comes to stuff like this.
If someone wanted to learn how to program all they need is a computer and some software. Hack away at some code until you understand what you are doing and then you're all set.
However if someone wanted to learn how to do an operation on a human, first they'd have to find someone willing to risk their life so they could practise on them. Then they'd also have to have all the equipment needed to. So you start hacking away at your patient, and you screw up, it's too late. If you screw up a program, so what? It's not going to do anything (note: I'm not talking about professional apps, I'm talking just learning code).
I believe a fully compentent doctor could be self taught, but since the facilities are inaccessable without an education, we aren't going to be seeing many of them any time soon.
You might have to do it for little money, or for free, or maybe negotiate something with the person -- for instance, if you are doing an ecommerce site, you might do it for a commision on what gets sold on the site. That way the person has nothing to lose. Or you might want to set it up for them, and then charge them for maintenance (if you feel more confident about your ability than they do -- again, they'll only have to pay for it if they like it). You're looking for experience, so you should expect to make relatively little for your time investment.
If it goes really well, you might find yourself being self-employed, doing programming for people who can't hire someone full time for their programming needs (this happens more often for web development than other programming). If not, you should have some good portfolio work to present someplace for a new job. Your new job may not be a programming job, but hopefully it can be a job that can become a programming job (where your current one can't, it seems). System administration jobs tend that direction, for instance.
I'm 25, and have a family, night school is out of the question.
I'm early twenties, a programmer (more than a full time job), wife and kids. I go to school, and commute two hours a day to do it. I wake up at 5 to get to school by 7:30 so that I can attend class and get to work by nine. I use my lunch break to go back to school for class again. Do homework after the kids settle down (if they do, usually passed 11). It's a pain in the ass, and I'm barely surviving, but it is possible. I don't know if you have some particularly difficult situation (e.g. illness in the family), but my guess is that you could do it if you really wanted to.
Don't blame me, I get all my opinions from my Ouija board.
I am 30 years old and I have a degree in English.
I started out in this industry doing PC Desktop Support.
Then I was doing HTML.
Then I was doing Cold Fusion.
Then I was doing Perl.
Then I was doing Objective-C in WebObjects.
Then I was doing Perl and Java and XML. (Jakarta rocks!)
Along the way I picked up some Bash skills, some Emacs Lisp, some Python, some TK, some GTK and SQL including experience with Oracle, Informix, PostgreSQL and mySQL. Some of it was just for fun; some of it was for work.
I have learned about Linux and Solaris and a tad about AIX.
Now I am a web application programmer and team lead at Apple.
Repeat: I am 30 years old and I have a degree in English.
Do not think you cannot do what you want to do. Do not let your age or your background keep you from your dreams.
Tyler's words coming out of my mouth.
You don't seem to want to sacrifice anything, but you want to be a programmer. Sorry, dude, there is no way that will happen unless you sweat fucking blood. You need to tell your wife and kids (you fucked up by having kids too early dude) that you need to sacrifice family time and study, otherwise you have no chance.
I was in a little better position than you because I have an engineering degree but with really shitty marks. I got my first job doing technical support in a bank for servers, when all my other friends got jobs at IBM, Motorola, etc. I basically put computers together. But when I got home, I worked non-stop on the computer, learning networking, Windows NT, C++ programming, etc. I spent 8 hours at work and 8 hours at home studying. Every single fucking day. This is what you need to do as well.
Just by luck the bank moved from OS/2 to NT, so I went up to the manager, told him I knew Windows NT and if I could work on that project. Then I did the same thing with programming, and after a year of working at work and at home, I fudged my resume saying that I was a C++ programmer, and went for a programming interview. I didn't have any very much significant business experience, but because of all the programming projects I worked on at home, I was able to talk the talk and walk the walk.
I got hired, and the rest is history. 9 years later, I'm working in Silicon Valley making more than 6 times the salary that I did when I first started ($30000 Canadian == $20000 US, now I'm making >$120000).
The trick is that every day when I come home, I'm always working. I'm always learning new shit, the latest technologies, and this can never stop while your in IT. If you want to get into programming, you're going to have to tell your family to "FUCK OFF! I'm working my ass off so that we can all have a better life!" and put your nose to the grindstone, and fucking study and work and program on your own.
THERE IS NO OTHER WAY TO DO IT.
Make sure you work for a company that has its programmers in the same building with you.
Try to find a company using technologies of long-term interest to you.
Get to know some of the programmers. Have lunch with them.
Sharpen your skills with the technologies they use. If they do Java servlets, then you start building Java servlets. If they do VC++ Windows client apps, you do the same. Do it at home until you're pretty good, then start doing it to help out at your job (in your own department).
Then, when there is a dev crunch for the programmers, volunteer to help. Go to the engineering mgr, tell him that you've been doing this kind of work for the company in your dept. and ask if he'd like to borrow you for some side projects to help ease the resource crunch a bit.
He'll probably be interested, and he'll become your advocate. The guys you have lunch with might vouch for you. If you do a good job (don't prove you're better than they are, prove that their lives are easier with you on the team), you'll soon be pulled in full time.
After working there a while, you can go work somewhere else, using your demonstrated pro experience as your resume.
"Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
Do you want to be a professional programmer / software developer / software engineer? Or would you be satified being a hack (not a hacker) programmer that writes one-off (web) scripts?
If you want to be a white-collar professional type, expect to be like any other professional, and get the best education you can. Which is typically at least a four year bachelors degree.
You can get an entire BSc Computer Science via correspondance, online or via postal mail. Look at any university in US, you very well may qualify for financial aid, or low-interest student loans.
Then follow this method:
1) Get an education, (knowledge that will not become out of date)
a) understand computers (a la Structure and Interpretation of Computer Programs)
b) mathematics
c) history of computing
d) programming in the small
e) programming in the large
f) software engineering
g) networking
h) professional presentations and writing skills
i) algorithms and data structures
j) database systems (RDBMS, OO databases)
etc.
2) Training (skills of tools and techniques, that will have to be maintained)
a) programming language (e.g. C, Pascal, Java, C++, whatever)
b) database (Oracle, PostgreSQL, MySQL)
c) operating systems (VMS, Unix, Linux, W2K, Plan 9)
d) project mangement
Note: Training does not need to be formal, and tends to be more expensive. I did most of my either at university, or on the job.
3) Experience
I think you can figure this one out. I should point out that testing, QA is often an easier to get into than the programming department. Also debugging skills, and seeing what can go wrong (Risks Digest) will hopefully make you a safer programmer.