Practical Experience As a Beginning Programmer?
LuckyLefty01 writes "I'm 21, going to college, and working part time doing odd jobs like math tutoring. In the past nine months or so, I've discovered and taken to programming (so far mostly C/C++/Obj-C). I am now looking seriously at something in this area as an eventual full time job. Since I don't have much scheduled this coming summer, it would be great to try to get a job of some sort at a tech-related company in order to get some practical experience in the field. Even if I don't have the background to get a job involving actual programming, I think that the knowledge of how such a company works would be valuable. Fortunately, I live in the SF Bay Area, so there should be plenty of companies around. I'm flexible about what I'm going to be doing, and very willing to learn just about anything anybody cares to teach me. If there's some (or even quite a bit of) boring grunt work involved, I can do that too. What type of job would benefit an aspiring but inexperienced programmer the most? What methods might I use to find such a job?"
1) post to slashdot
2) ????
3) ????
4) Profit.
--- Relax, that mass muderer is just trying to reduce our carbon footprint, one fetus at a time...
Google summer of code is pretty good for practical experience, but the application period closes tomorrow :(
:(
Google Summer of Code?
The problem with slashdot is that most of its users were bullied and stuffed into lockers as kids!
Head on over to bugs.gnome.org and start by fixing the easy ones, then work from there. Once you are comfy, take a look at OpenOffice or Mozilla's bug tracker and see what kind of help they need. You'll be saving the world AND be able to put this on your resume. "Contributing developer to the open source GNOME desktop, OpenOffice, and Mozilla Firefox." It looks really nice on a resume... though you might want to leave the part about working as a truck mechanic off there. -ellie
Do product testing for a company. Find a company that is small enough that it encompasses, finding errors, writing them up in a fashion that programmers will appreciate and attempting to locate the bugs in the source itself.
"What methods might I use to find such a job?"
;)
Well, asking strangers on the internet is always a good idea
Basically either find an open source initiative and volunteer your time. Get involved in open source, or sit down with a print out of the linux kernel and read it until it all makes sense. Then contribute.
I do not know how many CSC PHD's that just read the linux kernel, and are amoung the smartest people I have met out there.
Internet Retail spaces are wonderful. Get over it!
but, at least from my own personal experience, its pretty late in the game to be looking for a summer job, esp. if you don't have very much experience. Not that you can't, but I would look into open source stuff and just your own personal computing needs to find stuff to work on. Many people will go on in detail about open source, so I'll just speak to the latter:
Do you have any monotonous tasks that you do on your computer that you think could be automated? Well then automate them! Even if it isn't very good, it will still familiarize you with the various languages and how computer programs work to solve various problems.
Monstar L
While I don't program every single day at my job, I have helped out with some Java servlets stuff using Hibernate and Spring. I've also picked up some Ruby on Rails for another project that the company had going. (Once the contractors leave, someone has to make sure it gets updated!) The trick is to never stop learning, and keeping an open mind to different languages. While I do wish I were better at Common Lisp, there's still time for that, and it was intriguing enough when it was taught in my Programming Languages course. Understanding algorithms and data structures will probably give you the biggest advantage in conquering whatever language you have to work with and bending it to your will. If the foundations are strong, you can easily get by (or even master) a new language when it comes up.
However, I'm also living in New Jersey, the state of a million suburbs. New York and Philadelphia are just far enough over the border to cause massive congestion and high property values (and taxes, and cost of living). My advice: while San Francisco may be rife with software companies and others who need development expertise, you might do much better looking outside the money-guzzling city.
I feel a little bit like I just gave you old-man advice.
fair.org counterpunch.com truthout.com indymedia.org salon.com
eff.org guerrilla.net debian.org gentoo.org
Work on some of your own stuff, make a cool game, or a tech demo that shows off something somewhat complex (some physics, AI, graphics, whatever you're into).
The experience doesn't have to be in a company, most likely its going to be VERY difficult to get a job when you don't even really know the language yet. Be sure to get experience with the more difficult programming concepts in C++ such as templates, singletons, and auto-registration (if your compiler supports it).
-Bill
Most entry level applicants generally don't get 'programming' positions.
Most companies like to start new grads/interns/co-ops into other positions to give them a feel how 'the company works'
You might try starting in :
-Technical Writing
-Technical Support
-IT
-Software Testing
Probably Technical Writing and Software Testing are the favorite entry level starting points for most companies. Software Testers typically don't write code, but test-cases, which should give them a much better feel of what is expected of the coders.
Sounds like you are you thinking along the right lines, you know you'll be doing some crap work. I would suggest looking for a company advertising an internship. They will expect that you don't have all the skills for a full time job so they will be willing to teach you and help you learn in exchange for your doing some crap work. That's how I got into the field.
If you do decide to apply for an internship or something, make sure you really mean "C/C++/Obj-C". Though C++ and Obj-C both build on C, they are quite different from each other, and each introduce several concepts that are not found in C and that you would be expected to know thoroughly if you claimed knowledge of the language. Also keep in mind that because of these differences between the languages, it is even possible to sort of offend some people by lumping C and C++ together as C/C++. Though I haven't experienced it myself, I would expect the same to be true of Obj-C.
Since you live in the Bay area, it should be easier for you than if you lived in a lot of other places. You should try to look for internships. Talk to your college guidance/job counseling service. They may have some connections. Also talk to your classmates, you never know when someone's family may have connections. In other words, do some networking in the job sense. My recommendation is that you find a company where the software development pays the bills rather than serves a support role to the other parts of the company. Joel Spolsky of Joel on Software has some good recommendations. Paul Graham has his own opinion as well.
Since you're interested in software development the world of open source has lots to offer. Pick something that dovetails with your interests and start contributing to it. You'll only learn by doing and there's are plenty of opportunities to do that with free/open software. You'll be doing this for free, but you'll be gaining valuable experience. Pick a community that is active and has good developers so that you can learn some good practices.
Finding a job is your first practical experience. Finding a job is the most important project which will repeat throughour your career :) I am a Perl programmer, and I get most of my jobs through Perl Mongers, directly or indirectly. Build up your personal coding experience, and build up your reputation in the local groups for your programming language. Also, when in doubt take an internship. Working for $10 an hour as a programmer keeps the lights on and ramen on the table, and builds up lots of resume fodder.
Here's to losing my Karma Bonus again....
... will probably not involve C++ development.
There are a few reasons for that. The minor ones are that most C++ / ObjC projects are big enough that it's difficult to bring an experience programmer in to work on them for just a few weeks, let alone someone with no large project experience. Not impossible, by any means, but not something that a larger company is likely to do outside of a more formal (and longer term) sponsorship arrangement.
The big reasons are that the absolute _last_ thing you need either on your resume, or to enhance your skill set is a brief job coding. The basic coding is something that you should be picking up the basics of in college, rounding out a little with some personal coding (helping out with the countless open source projects out there, for instance) and won't really bring to fruition until you're doing it full time.
The skills you're less likely to pick up there, but which you can pick up in a shorter temporary project are things like QA, marketing, sales, system administration, maybe even customer support. So look at picking up a grunt work job in the field that's not directly touching code. QA and testing (for a real software company, not EA or anything in that field) is a gig you might well be able to pick up, and which would teach you more about good software design and good software project management in a painful 8 weeks than you'd learn in a year writing software. If you can do that in an early-stage startup, and see that business process too, at least from the sidelines, even better.
Heck, if you could wangle it, working as a gopher for one of the Sand Hill Rd VC firms would be one of the best introductions to a career in the software field, I think.
Slashdot is a bit of a weird place, in that I can just imagine the majority of the answers are going to talk about things like Google Summer of Code, or working on an open source project, building your own software, etc...
I'll tell you, those things may help you learn your language or platform better but it will not help you be a better engineer. Unfortunately only time in the trenches does that. Being a good engineer fit for a job at a software company, you need to know how to work on a team, set and meet deadlines, write documentation, etc... all the stuff that you don't tend to get doing the informal stuff that everyone is likely to be talking about here.
An internship or entry level position doing continuation engineering or a junior/associate engineer is going to get you more useful experience than all that other stuff, assuming you actually do know how to write software.
1) post to Slashdot
2) ????
3) Get a Job
4) Profit.
I suspect step 3 might be recursive, though.
From a company looking for interns on the school's notice board (admittedly a while back!). What got me the job though was being able to talk about all the projects I had done on my own before.
ccalam - acoustic versions of new songs.
Start at the cold hard rock face of development. The Testers, skills required are not as sophisticated (you have to repeatedly break stuff) but it will give you a great insight into just how badly some "professional" developers code.
Testing has the added advantage of being a place where its low paid and turnover is high so its a good place to get started in IT.
An Eye for an Eye will make the whole world blind - Gandhi
Get a job on the help desk where you're installing software remotely and helping users with technical problems. You can get a broad exposure to how software is being used in the "real world" and how screwed up corporate life can be when it comes to technical issues. A help desk job might be the only job that you can get after graduation, which is what happened to me after I got my associate degree in computer programming. While I'm toiling away fixing broken users and computers, my real job at night is writing a tech novel. :)
A good truck mechanic can make 50 grand to a hundred grand a year......
You might want to pick a less worthy job for comparison....also, hard to *outsource* a truck mechanic job, yes?
In my time at college, I've found that the most valuable experiences I've had have been at internships with real companies. Ask around at school and see if there is any kind of Career Center or other staff for students looking for work that can help you find an internship over the summer. Don't feel held back by your lack of experience; just be honest and they will let you know if you're not qualified.
;).
In addition to getting a feel for the real world of programming (and maybe making some money over the summer), being able to put industry experience on your resume before you even graduate from college is immensely valuable and shows potential employers that you're serious about being in the field.
And if you find that you hate working in the real world, you find out before graduating from school
Try asking your professors if they know of any opportunities or if they have their own projects they are working on...most are willing to give you some type of guidance and/or want an extra set of hands to help them with their project. If your 21 (and I'm assuming your a junior) you really try to work either with a professor or with a company. Start to build up some quality references.
Or, if you want something different, check into the different summer camps around you. I live on the east coast and there are some kids camps that get into either robot programming or something similar. It might not be a typical internship, but teaching someone to code, especially a little kid, really shows you how much you know about a subject. You wouldn't need a heck of a lot of programming knowledge but it might be a different way to apply your knowledge.
Live Long and Prosper
Before getting involved in an Open Source project ask yourself - and this is a difficult thing to ask - what it is going to be useful for and what kind of business might use it. Is that the kind of business you want to be in? If you don't know, do some research. Remember a valuable fact: contribution to, say, the Linux kernel is easy for anybody anywhere in the world, whereas writing code that extracts and condenses human knowledge and then turns it into a system is far easier where the relevant human beings live. If you live in the Bay Area, it should not be too hard to work out where the business opportunities lie, where automation might cut costs or have other benefits, and what Open Source projects might be relevant. Then choose one, learn it, and send your resume round to people who might be interested.
What I am describing is a lot of hard work, by the way. But you already knew that, if you wanted to succeed in programming, you were going to have to work hard.
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
If you want to do corporate programming, experience in a corporation is much more important than the actual day-to-day work. You have to learn how these environments function. All to many slashdotters dismiss the entire eco-system as "lots of stupid, pointy-haired bosses."
Bad firms have bad bosses, good firms have good bosses, etc. It's hard when you're inexperienced, but aim for the good firms: being a genius at a bad firm is just damaging to your health.
1. Inventory your skills: are you a programming god or just good? do you want to work long hours, or are just willing to? do you want to build relationships or just write code? does meeting clients excite you or seem a distraction? Answer honestly, and you've got a good cover letter.
2. Hit personal relationships. No hard sell needed, just point out you're looking for a summer job and ask the person to keep you in mind. Mention the points in 1, so he'll feel comfortable in making a recommendation (last thing I want is a person telling me he wants to write code, I refer him to a peer, and the applicant spends all summer trying to meet clients, etc.)
3. Do the usual sending resume stuff. It doesn't hurt and you might find a match.
4. Write code, build on-line relationships w/ other tech people, contribute to open source projects, etc. Sure, it's not a job, but it's better than nothing. I've hired a lot of people based on their OSS participation or academic work.
To make big impact in Silicon Valley, all you need to do is give 100% effort to you job, then you can't fail. If you are serious about success, and have motivation to match, people will beat a path to your door. There are plenty of gold-bricker software engineers in the Valley who have managers that are dying to swap them out for someone that actually gets things done. Be ready for *deadline oriented* action. The world is already full of people that can get anything done, eventually; but that doesn't pay the bills. If you actually want to do serious engineering, roll up your sleeves and get good at it. India is becoming fat and complacent, there is little new and emerging talent there that is still a bargain. Russia, although producing more competent programmers, is a security risk, although it's a bit cheaper than India. There is still demand in the Valley for innovators (not drones and desk warmers).
PS If the only reason you want to get into the field is to wave your hands and pontificate like a consultant (like the pikers in my office), then I suggest applying to Microsnort or dying in a fire.
I started with a company as a summer intern back in 1997, and it turned into a career as a software engineer. I got the internship through my college. Besides making it easy to get a job, an internship is the best way to learn all of the skills you need to prepare you for the "real world", since colleges don't seem to be too good at that, at least in the programming arena. Internships (in computer science) tend to pay pretty well, you're not expected to know much, coming in, and the sky's the limit for what you can do with it.
Check with the college first -- you might even be able to get credits for your internship. Another place to look would be craiglist or other job boards -- they have listings for internships. Finally, troll the web for companies in your area that interest you, and send them an e-mail asking if they would consider bringing you on as an intern.
By the way, when I'm reading resumes of recent grads, I'd call in a student with a 3.0 and an internship before I'd consider a student with a 4.0 who has never stepped off campus.
--brian
In nine months of becoming a self-taught programmer, I suspect that you've become familiar with some syntax. I doubt that that's enough time to develop skills in creating data structures or figuring out algorithms. Because of this, if I were interviewing you for an entry-level programming position I would focus on data structures and algorithms to determine how weak your weak points are. I also suspect that someone else would interview for the position who had more developed skills in those areas, so you probably wouldn't get the job. Sorry, that's just the way competition is.
So, being this new at programming, I'd recommend that you take a job doing something else. Something that pays okay and you can handle doing for the summer while you spend your nights and weekends devouring open source projects. Not just fixing Bugzilla bugs but also reading other people's code and figuring out why they did things the way they did. Contributing to open source would be great, but your focus at this point should be to learn other ways of doing things so you can figure out for yourself which way is best in different situations.
Side note: don't refer to them as C/C++/Obj-C. You could refer to the C family of languages, or name them as C, C++, and Objective-C. Saying you like C/C++ will only get annoyance from others, since the two languages are distinct and singificantly different entities. That is all.
Sounds like you want an internship or something along that line of thought. You can check out postings at the university, etc, but your best bet is doing a bit of personal networking. Got any friends who already have a job? Check with them to see if there are any intern positions in there shop. Odds are, it will pay peanuts (not even the salted kind), but any 'real world' work experience is going to be worth its weight in gold. Find a job while in school! It will put you head and shoulders above a fresh CS grad who never did anything outside of the classroom.
Odds are, you also won't get to touch any real code for whatever product. Tis OK, you will get to do C++ later. More often than not, internal tools are desperately needed by the business or development - which are just the non-critical things you might get a chance to do. Most everything will start to follow a pattern of User input > mid tier going some munging on that data > stuffing, finding, and retrieving information from a database. I'd pick a platform - Java, Rails, PHP - does not really matter - be able to do web based CRUD operations, and strike when the opportunity rises. Don't be afraid to volunteer time as you build out your first end to end app. Churches, middle schools, etc, all have needs but no budget for anything. Look for non profit groups initially if you can't find an entry level/intern position. Working with a live 'user' where you are trying to sues out requirements and read minds is a valuable experience. Going end to end on something, from white board to running is a huge confidence booster.
A certification, doing self study, is probably worth your time. Again, like real work experience, having a silly cert that says you know the basics of the language (like the Java one, for instance) will help when it goes into interview time. Don't go crazy with this, however, because a full range of certs without experience is worth little (^H^H nothing - a big warning flag). One cert on the language will help with the first couple year job acquisition.
+++ UGUCAUCGUAUUUCU
Check to see if your school has a co-op or internship program. Where I went to school, the computer science department had an internship placement program. You just let them know you were interested, and they'd set you up with plenty of interviews. Over my five years in school, I landed three internships through that program, including one with Cisco. It's works out well because the positions you're interviewing for are set up specifically for students with aptitude but no experience. Get a few of those under your belt, and you'll have a nice advantage over all those students with a BS or MS but no real world experience.
Sunwalker Dezco for Warchief in 2016
This article reminds me of a good question. I got into the IT game a little later in life, and have a lot of experience in systems administration. However, I have very little experience as a programmer. I've always been interested in development, but it's not like the old days where you could just jump in with BASIC and build something really cool.
How does someone with lots of systems experience but little development experience get started? It seems like coding Hello World takes a huge amount of work now in most operating systems. (Yes, I know it's easy to spit out Hello World to the terminal in C++ or Java. But how do I get started building something resembling a full application?
My basic problem is that there's no "Start Here" manual.
http://www.bls.gov/oco/ocos267.htm
There's no future for programmers.
http://www.bls.gov/oco/ocos110.htm
Given that the qualifications for both jobs are virtually identical
Since you asked about a JOB rather than "how do I learn programming", I'll skip the usual dumb "join an open source project!" response.
Personally I think an actual job is a better route, because it'll put you in contact with more people who use the software, rather than implementing some feature request someone made possibly on another continent. Plus, you actually get PAID (which is important to anyone in College without rich parents). Actual job experience looks a LOT better to most employers than working on a random, often unheard of open-source project. Not to say open source stuff isn't good experience, I'm just not certain how many employers value it.
As to how, this may be obvious to you, but many Colleges and Universities have programs to connect students with companies. Those can be quite beneficial, and you usually get paid pretty decently compared to most student jobs. Have you not looked at the various job boards, talked to your instructors, etc?
I'd also recommend just looking internal to your University. Many departments have come to use the student programmers as a cheap workforce. Scientists often need someone to do some programming for them, though they may want you to program in something quite outdated, like FORTRAN. Departments have programming needs as well. I think one summer I had three different programming gigs.
AccountKiller
An internship at Apple
Comment removed based on user account deletion
Someone will hire you. You've clearly got the right attitude: that's 90% of getting a job.
The other thing I will suggest is applying to many, many companies to start with. HR departments at companies are black holes in general, and it may take quite a few applications before you get anywhere.
I'm just coming off a longish job search myself, so I know how frustrating the process can be. Keep your chin up, and good luck!
The skills you're less likely to pick up there, but which you can pick up in a shorter temporary project are things like QA, marketing, sales, system administration, maybe even customer support.
I see your point, but I sort of think if he wants to be a developer, he should do development. If anything offer to program at a very low rate as others have suggested. I've seen many people that want to code get stuck in QA for years. If he does take a QA job, he should definitely try to get access to the source code and try to write up much more detailed bugs than the other QA engineers and always be telling people he's interested in becoming a developer. This is definitely a delicate subject because the QA managers will probably not be happy with that. Also, I don't see this path with marketing/sales since it's really a different world and does not interact as much with development as QA or sys amdin. I have seen customer support folks move over to development on occasion too. But again, all of these take a lot of time and hard work, when if you have development skills, I'd suggest just being a developer right off the bat in any way possible (e.g. internship)
No Sigs!
seriously, get a co-op job; contact the head of the computer department at your school and/or pester your programming instructors
...just be careful that the job does not become more fun - and hence more important - than finishing school!
avoid open source projects like the plague "I worked on trivial bug-fixes for free" is hardly a great recommendation for your resume, plus it will not give you the in-the-office interaction experience that you will need to get a real job, if that is what you want to do
if you do get a co-op job, make sure it PAYS. 'freebie' co-ops are rip-offs, don't bother with them; serious companies will pay co-op students for their work...
good luck!
I'm lucky enough to have (almost) finished a Computer Science degree in a post-secondary facility that offers co-operative education. That is to say, we go 4 months study, 4 months work, 4 months study, 4 months work...
If what you'd like to do is get a job in a related industry, checking out what your college offers would probably be a good first step. Switching into a Co-op version of your degree would be a good second step.
If you can't find a paying gig where they are willing to bring on a novice, find a non-profit and do volunteer work, e.g. creating web sites, maintaining databases of donors etc. Just avoid any controversial topics or organizations with religous affiliations, stick with things like hospitals and animal shelters.
putting the 'B' in LGBTQ+
I'm a Member of Technical Staff with a semiconductor manufacturer headquartered in Mountain View, CA. I'm well-educated (Ph.D. in my field), have several years' of industrial experience, and wanted to chime in with some advice.
:) So while there are many people, here, who have suggested that you contribute to open-source software, don't feel that it's a requirement or that it's even your best course of action. As your possible future employer, I would rather that you focus on school (and on getting a job in your off-terms), and that you spend the rest of your time socializing with friends, getting a girlfriend, and doing everything else in your power to have fun. You're only young once, and I'd rather employ people with half-decent social skills than anti-social geeks who can't communicate worth a damn.
... If you're not in a co-op program, getting your first job is not going to be easy. The best strategy that I could recommend is to send out a zillion resumes and get any kind of work for a tech company that you can find -- programming, IT, QA, whatever. Your first job probably may not involve programming, but it may be for a company with a "good name", and by and large, that is all that will matter.
(1) I have never contributed to an open-source project. It's not that I *can't*; it's just that when I was your age, I was either busy with school or work. (And, well, now I'm older and there's even *less* time for that
(2) As a follow-up to (1), get a tech job when you're not in school. I did my undergraduate degree at the University of Waterloo (in Canada), where we have co-op terms every 4 months. This meant that, by the time that I graduated from university, I already had 2 years' of industrial experience -- 3 terms writing software and 3 terms doing hardware design -- as well as a patent, and a research paper to boot. My first & second co-op jobs (which I did when I was 20-21 years of age) were largely about fixing software defects, but over time, the difficulty progressed, and as my responsibilities increased, I was soon working on some major projects.
(3) As a follow-up to (2)
Phrased differently: You need to get your foot in the door, and go from there, since it would be unrealistic to expect any decent employer to hire you & give you control of some major piece with no experience. Even if all you do is answer calls at an IT HelpDesk for 4 months, it *will* ultimately help you to achieve your goal of becoming a software developer so long as, for your subsequent job, you work your way up the "ladder of responsibility".
It is admittedly a boring job but one that will stand you in good stead for the future.
In the REAL (ie non academic) if you can't test it, you can't build it.
So getting an insight into how much most software testing sucks may make you develop system that can be tested more easily by grunts like you in the future.
Given that you're in the Bay Area, you might have a chance of landing some kind of summer work at a start up. Startups, especially rapidly growing and/or early stage ones, typically have huge backlogs of work that needed to be done yesterday. With no experience, no one is going to risk their business by putting you on the critical path of key projects. But if you're smart, have a lot of initiative (and I presume that you do given that you're asking this question on Slashdot), I bet you could get someone to take a chance on you in a way that would give you interesting work and some experience you won't get at school. You risk nothing by sending your resume and cover letter out to places you find interesting.
In the past, I've worked in teams with smaller companies where we hired a high school kid to run black box test cases all day. It's not glamorous work by any stretch of the imagination, but you get to work with the team and see how things work. There usually are companies out there with tightly budgeted projects that would be eager to have someone with some technical knowledge come in and work for free, and if they're impressed enough with you, they might give you a good reference or even bring you back in later on.
In my experience, a tech job will probably not teach you programming; that's really more the job of your hobby projects and the ensuing battlescars you get from them. It's the stuff you can't get credit for in your classes (that might drop your GPA) that you'll probably never be able to put on a resume and have taken serious, which will develop your skills.
However, a tech job will teach you the politics of IT and software development. You'll learn about how to balance competing interests, how to accept the business doing things in the least efficient, least-technically adept way, and how to subtley sneak in better ways of doing those things under the radar.
It will definitely get you used to end users interacting with your software and learning how to cope with their complaints, feature requests, and the politics about adding features (e.g. if I add feature X, are they then going to ask for feature Y, which will be totally undoable with the current API?).
Ergonomica Auctorita Illico!
I find jobs that require C/C++ experience tend to have hefty job requirements, which beginning programmers just don't have. Having a CS degree helps, but you won't necessarily have the 5+ years of experience many jobs look for. So what do you do?
Pick up PHP, Perl, Java or Actionscript and get into web development. I find that there are a lot more companies willing to pick up inexperienced programmers in the web development field, than in the traditional development field. However, there is one caveat: except for Java, you will often find yourself cursing the lack of more powerful programming features because most of web development is done with scripting languages. However, all the algorithms and data structures you learned in class should carry over.
I think you will need to commit to longer than just a summer. Even fresh out of college, with a CS degree, a programmer is typically useless. It takes 6 months to get anything remotely worthwhile from someone who is, please forgive the term as I do not intend to demoralize you, green. Potential employers will want some return on that investment in your training. On the other hand, if you intern for free or for a stipend, that may change the rules of the game. That's how it went for me, and every other fresh programmer I've ever seen hired during my 25 years in this career. The only other advice I have to offer is to be honest about your skill level, don't oversell yourself. You need to come in as a newbie, and allow the more seasoned types teach you the trade. Ok, I lied. Read Knuth's "The Art of Computer Programming". Also, C.J. Date's "An Introduction to Database Systems" massively changed my perspective about programming. The title is extremely deceptive, it sounds like "how to get started with MySQL". I say it is more like "Roadmap to design and implement hardcore database server internals".
cat
Linux Kernel Mail List.
Even if you do not plan to use or program for Linux, the mail list has bunch of gurus often saying good thing. Try to code some driver or simple file system - anything what would look interesting to you. Try to post patches on mail list - comments often provided invaluable insight into how OS and HW function.
If you going be a system developer - Linux (or BSD) is good start point where you can participate easily. If you going to be application developer, then experience working with OS directly would prove very helpful later. In my experience biggest problem with application developer that they know sh*t about system they are using - what causes major pains later.
Another advise I can give is to train yourself for code review. This one helps to develop analytical thinking and would in future facilitate reading others code: invaluable skill for team work.
P.S. Another interesting place is BSD's libc. GNU libc - is horrific on inside. But BSD's one much simpler and easier to work with. libc contains hell a lot of knowledge about underlying system and how the system should be used. All the knowledge in easiest to consume form - source code. Also good place to gain experience.
P.P.S. I myself started with programming games. It is entertaining to write such program and very rewarding as result. Have started with x86 assembler and MS-DOS 3.1, I'm on my 7th Tetris by now - now in C++ and Qt4. Most importantly, simple projects like that serve as a perfect test ground for ideas: it is much cheaper to make a mistake in your hobby project than in million-lines-of-code commercial monster project.
All hope abandon ye who enter here.
NASA is accepting applications from folks who decided they don't want to be cowboys or princesses.
I suggest looking for an opportunity in a small start-up. Perhaps you don't want to associate with the proverbial two nerds in a garage, but you can learn much more in a small firm, that perhaps has a dozen people dividing all the work between them. You'll learn to do much more than programming, and working in a small firm is more fun. And besides, a small cash-strapped start-up is more likely to hire a college kid to do some coding, than a large established firm.
There may also be good opportunities in companies that aren't in the IT sector, but in research & development, for example a biotech company. Usually these companies don't have very strong IT departments (and again, you will learn more in a small team), and they will hire people on short term contracts to complete specific projects. Even a medium-sized biotech might not employ a single skilled C++ programmer on a permanent basis (the density of C/C++ programmers in this environment is around 0.3%), so they might be willing to hire you.
Or, if it interests you, look for small firms that develop hardware, such as instrumentation, robotics, or consumer electronics; or small engineering outfits that produce custom development and automation. There isn't that much C/C++ in a typical IT job these days, rather a lot of the work is now in web development, database applications, Java and .NET. But people who interact with hardware, especially if it's time-critical, still have a need for the level of detail and control that C can offer.
And probably it's best to work through an agency or consultancy firm. I don't know US practice, but on this side of the pond it IT directors who need and extra person on the team won't place adverts or look through job applications. Instead, they will send out a request to specialized agency or consultancy firm.
I don't know how easy it is as someone with a fundamentals-only grasp of C/C++ to just jump into a major open source project and "start fixing the easy bugs". Everyone seems to suggest this and forgets that working with Open Source projects has a steep learning curve of it's own.
You have to learn version control systems, the community, what constitutes "easy", you have to learn the scale and meaning of each piece of the project, you have to learn communication and moreso, you have to know enough to actually fix things.
If you're just looking to learn, you've got plenty there. But using OSS projects to learn means a very high overhead and initial learning cost before you learn about coding or code design at all.
Look for an internship but don't look for one programming on a large project, they are rare. But companies always need people to test code, chips, etc. Usually those testing jobs involve writing code. There are utilities to aid in the testing of the product, code to automate tests that are done manually, etc. You will end up spending lots of time working with the engineers building the product, you can learn a lot from them. (Including whether this is really what you want to do for a living.)
Last year an intern on my previous project re-wrote a debug utility that one of the engineers had created, the tool had started small and grown. The intern rewrote the thing over the summer in C#, the updated version of the tool is still in use. He got to use his C# and Windows knowledge and ended up with a very good understanding of embedded programming and wireless communications.
Don't limit yourself to software companies. The hardware and silicon companies often have software teams and associated test organizations.
Try going to the job search web sites of the companies (e.g. http://www.intel.com/jobs/jobsearch/), usually they have an option to search for intern positions. It is a bit late in the year though, many of them are already filled.
Agencies, however, will probably not want you because they will want you to be buzzword compliant to the skills list they have sold the client is needed for the job. As I suggest above, do the research, send in your CV. In my experience, heads of IT in the States are more technically comeptent than their UK opposite numbers and so are more able to make decisions. Too often, UK CIOs are led by the nose by the agency because they do not know enough to know what they need.
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Microsoft started a community program within their partner network to connect students and companies. You can get more information here if you are interested: http://www.microsoft4me.com/career/s2b/
If you attend UC Berkeley or Stanford, my company (and many others) regularly attend job fairs at both schools. We sometimes look for people fresh out of school, but mostly look for interns. We have found some really excellent full-time employees that way. I strongly suggest doing this. Or, you could contact me directly here by commenting and I'll see if we have just such an internship open now.
I think a good piece of advice for this young man would be to also keep an open mind about the language he makes a career out of. He could learn C#.NET and even classic Visual Basic for Applications (VBA). Why? Because corporations are filled with "Excel-gurus". These guys are essential. Now I am not a fan of trying to run my biz off of Excel like some companies and departments try to do. But you can get a job at almost any mid-sized company if you know VBA. If you're looking for experience this is a good place to start. You'll get paid for it too. And if you want to tinker with side projects or other languages after hours, you can!
.NET experience or VBA is the quickest path.
You'll need to ramp up from VB to C# or Java or some other more capable language pretty quick. VBA guys don't get paid very well. But don't get stuck on Objective C or any other language. Every few years you'll be learning a new language anyway.
Right now you need to get your foot in the door at a company.
My recommendation for anyone getting into programming is to watch the SICP videos. If you're completely new to programming, this subject matter may be a little deep. But if you are anxious to get past the scripting level of programming and into the methods for organising, planning, and thinking about programming, there is no better introduction.
Structure and Interpretation of Computer Programs
My advice to you is do not give a damn what "greater" programmers think you should do. I started on an ancient system. Even back then it was ancient. My point is: Start with the basics: BASIC. Do not start with a more low-level language like C or C++. They must come later. I've seen it happen way too much. Those who start with those languages soon condemn programming as far to difficult and abandon it.
Begin where beginners would begin, and take it slowly at first. Programming is one of those things I believe is best learned at a natural pace. I self-taught myself programming. It isn't hard if you start at a good place.
Invest in a good calculator, too. Scientific ones especially. It'll make in-your-warped-brain execution more simple. I also like FORTH, simply to bend your mind. (Reverse Polish and Stacks are unusual, but when you understand them, immensely powerful.) Then when you get good, start learning C or C++ or even Java.
I know it'll sound corny, but you do have to believe in yourself as a programmer, or you'll fuck yourself in the foot. Confidence is extremely important. And remeber that programming is an art no matter what the art nazis say.
The best job/internship you could get is where you would become a junior member of a development team. This development team would follow the unified process (or some development methodology). They would use version control and bug tracking software. You would learn by seeing others work. It would be best if you were actually mentored by senior programmers (but in my humble experience this rarely happens). At worst, you learn a lot just by looking at senior programmer's code.
If I were looking to bring in an intern, my first job for you would be to create end user documentation and comment existing code. Even this would require supervision, but you'd be exposed to a lot this way. Eventually, I might have you fix a few bugs. That's probably the best way for you to learn.
Are you studying math? If so, where? You might be able to find a internship as a programmer. Many big software companies hire math graduates for programming positions.
Also, there is an alternate option. It's not as good as the first, but it's probably easier to find. On the downside, you don't want to get stuck in these types of jobs. Find any place that would hire you as a programmer. Even if it's building small in-house apps. At first, your work is going to really suck (that's a technical term folks). However, over time, if you start to research on your own, you learn some best practices and develop some skills in software design. Plus, hopefully, you'll be able to land a gig in a development shop as mentioned above.
What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
This sounds lousy (and it really can be after more than a couple of months), but I would suggest looking for a technical support or some technical + customer-facing role. Nothing breeds crappy code more than working in a black box oblivious to real customer requirements and usage scenarios. I actually think all big-company developers should have a short rotation through support so that they can understand how customers are using/misusing the product as well as writing clean & well-documented code that bug patchers can easily work on. The FOSS development model works similar to this since you, Mr. Open Source Developer, are actually using your own code (be it Firefox, Linux, GNOME, etc) and can more easily understand what end-users are actually seeing.
I've used C++ for 10 years on my own since college, and I still haven't found a job programming in it.
God spoke to me.
I am not even finished with college and I did.
http://bellspace.net/
As a lead developer for a software company, I disagree. I think it is vital for developers to know how to do QA, with and without having access to the source.
You need to be able to understand what your QA engineers are saying when they give you feedback. If you've never done it, its a lot harder to understand what they mean when they don't know the innards of how the software works.
A developer that understands Marketing/Sales can also understand how to help those areas without comprimising the application standards and usefulness. You as a developer are almost always driven indirectly, and sometimes directly by sales and marketing. Understanding that process will help you deal with their requests more appropriately when they make some request that appears completely stupid to you as a developer.
There are far too many developers that write code without any real understanding of what its being used for. A good developer not only understands how to write code, but how to write code that the users will USE. You can write the most beautiful, standards compliant, fastest software on the planet and you won't sell crap if the users can't use it, or the sales people can't sell it.
There is a lot more to being a developer than just writing code. Especially the higher up the developer food chain you are. You need to understand where all of your input is coming from, why, and then you figure out how to best implement their requests. A developer who produces code based on their own personal agenda as a developer (be it standards compliance, code speed/size, readability or whatever) won't last long when working for a development company, or at best, you'll always be the guy on the bottom of the ladder who just churns out whats thrown at you.
For any future developers out there, PLEASE learn how to understand your bug reports and end users requests before you start thinking you're gods gift to the CPUs of the world, you aren't, someone else is better at both writing code, and making it what users want. Always.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
1. You're in college
2. You're in the bay area
You must simply become an intern. There are plenty of resources at every college for finding out about this and applying for an internship. I've been a SW developer for almost 10 years, and it really is the second best way to get a job as a developer. (the best way is to know someone)
Even though we're sliding into an economic downturn. Interns are so cheap (most get paid in the bay area, but not much) that companies look to them to shore up their need for employees in the rough times. Once you're done being an intern though, you will find it very hard to get a job unless you had some fantastic internships.
There is little demand for junior developers right now(if this was 1998-2000 you would have no problem), and it is going to get worse before it gets better.
Not sure why this had to be an Ask Slashdot.
“Common sense is not so common.” — Voltaire
I don't mean to be a downer, but you've just gotten in to programming at 21, thus presumably are not a CS major -- you don't seriously expect to be paid to write code in the SF Bay Area, do you? (At least not before you graduate). My impression is that the average code jock, as represented on Slashdot, started writing assembly at age 11, and by the time he's entered college has already mastered C and knows with utmost certainty that programming is his future and can't wait to cut his teeth on data structures, algorithms, and Big-Os.
You are way outclassed. I'd be surprised if any potential employer would even let you near a compiler.
Which is pretty much how I started. I had a fine arts degree in design and much less experience even than you have, but I knew that programming was what I wanted to do, more than design. So I first got a short-lived job at a videogame company doing nothing related to programming (translation and graphic design), later got a job at a small software company doing more translation, and after about six years of doing translation, editing, desktop publishing, and localization (still never touched code the whole time), while learning C and an obscure editor macro language in the meantime, my boss (the company president) finally decided, yeah, you obviously have what it takes to write code, so I'll let you do it.
Ten years later, at my last job, I took part in a group interview involving several other software engineers including a kid who'd just recently gotten a Master's in Computer Science, and I was stunned to find that I was the only one who knew what a C++ vtable was.
It probably won't take nearly as long as it did for me (I enjoyed and got good at the other types of work I did along the way), but give yourself some time.
In hiring somebody with a CS degree but not lot of professional experience, there are three things I look for, in increasing order of importance:
So definitely look at jobs that give you maximum insight into the whole process. QA is indeed a good place to see what's going on. Product planning, user research, and server operations also have plenty of grunt work, and valuable perspectives that are often neglected. You would also learn a ton from tech support, but that can look a little inglorious on a resume, so only do that in a shop small enough that tech support is just one of those things that programmers or product managers do as a sideline.
I also strongly encourage you to look for a shop that is as agile as possible. Some companies, especially startups, are doing one-week iterations and weekly releases. Many are doing two-week iterations and monthly releases. Your internship will be much more valuable to you if you can see 8 weekly release cycles, rather than 1/3 of a 6-month release cycle.
Maintenance programming is a tedious bore where you learn little about the thinking behind code. IMO the best way to learn programming is to write your own stuff from scratch maybe with a few CS/algo books at hand. That way you get a far better feel for coding than you ever will diving into class foobar() at line 20,000 in some finance app or whatever.
...did you make the switch?
With that said, I think everyone needs at least two completely different professional skill sets, and a big split between white collar and blue collar is just dandy. For a number of practical reasons...
The first bug I fixed and saw released was a Typo in the Evolution-Exchange-Addressbook module. I learned how to use bugzilla, the basics of CVS, how the patch approval process works in GNOME-land, and worked for the first time with an internationalized application. (gettext & .po files et al.) On top of all that, I actually got to make the software universe a tiny* bit better. Yes, that is a lot to go through to fix a typo in a dialog box, but it is completely relevant to the type of grunt work a n00b programmer is going to get.
For anyone that says that isn't real programming, you are kind of right. Eventually, somebody has to pick the low hanging fruit. Let it be the n00bs like me. :D
-ellie
* and I mean really really tiny bit, like one over infinity tiny.
If you're getting into code, you'll soon have more code ideas you want to persue than in which to persue them.
Instead of giving away your most precious thing, why not embrace your free time and find a personal project to work on instead?
If you're driven you'll learn just as much; if you're not, well now you're wasting MY time.
You make a very well made point. Some times the stereotyping that goes in this site is really puerile.
As an example, I have worked in many industries in many places and I have never found geeks that lack such basic manners as not keeping themselves presentable.
Maybe it is a US thing and this site, being US centric, confers a feeling that all geeks are uncompromising pigs.
IANAL but write like a drunk one.
Wow, I was in your position but of another field. I graduated in finance and I was searching real hard.
Try many temp agencies. Its a good way to get some noise. Temp agencies are in my opinion what you would call human resources but its been outsourced or well split apart because its costly to maintain someone that only brings people within the corporation to fill a position and pretty much what they only do.
Alot of companies have a fear of mistakes so that is one reason they wont just hire someone out of college to do some highly technical thing unless with alot of experience, Which college have time and time again fail to provide.
The trend is corporations are getting smaller in the sense there are less people needed to run it. Unfortunately colleges have not been open to this change and we still pay 200k for a piece of paper.
Many big companies look at that positively.
There are many big companies that have internal development teams to adjust FOSS to their internal needs (no, they don't release the code because they don't distribute the program).
Thinks like OpenSSH, sudo, perl, top and other programs are modified, it is always good to have on board somebody that is familiar with the program in some way.
IANAL but write like a drunk one.
Then you need experience, and since you have none, you would need to be ok with getting paid less. For database, I would say mysql or oracle. You need to understand sql and table design layout, as well as how to stop table scans.
Only 'flamers' flame!
Does slashdot hate my posts?
Over the past few years I've been getting myself into the programming job market. I have done lots of personal projects but it's still difficult to land a job. Where I've had the most luck is doing contract programming. Somebody is more likely to hire you for a short job where they don't pay if you don't deliver and then you build up a reputation others can easily see.
I recommend going to http://rentacoder.com/ and bidding low on a few easy projects and anything that interests you. What has happened to me twice is that while discussing the project with the buyer I'm offered a real job to work full time on it - before even putting in a bid. In fact, I now think this is the best way to find a programming job - way better then responding to ads on job sites, which gets tons of replies.
As far as job sites go, I highly recommend http://www.careerjet.com/ which is a very-inclusive meta-search.
If I am hiring a programmer I don't really need to know he is a great truck mechanic.
Honestly, I do other stuff at a professional level, completely unrelated to computers and general geekery, I learned the hard way (in job interviews) that people are just not interested about that.
IANAL but write like a drunk one.
.... lets say 20 or 30, I don not need to know about what is not relevant for a position. My time is precious, please don't waste it.
I need a programmer. Once I have one I may be interested to talk about his truck mechanics abilities over a beer at a later stage.
IANAL but write like a drunk one.
I'm pretty certain that the fact I haven't been laid in a while indicates some profound injustice in the way dating works. My poor self esteem requires me to believe that any girl who is interested in me (or a geek like me, since the ONLY thing that makes me unattractive is clearly my geekness) must be undesirable and desperate. This is corroborated by the fact that every girl I speak to who is attractive to me is unaccountably turned off by the fact that I know C++, and not for instance the fact that I think it's okay to accuse strangers of being fat.
DRM: Terminator crops for your mind!
As a (former) hiring manager in the C++ world, the people who I always gave a second look were the ones who had developed an application on their own, finished the software, and got a few people to use it. It didn't have to be perfect, it didn't have to be fancy, but it showed that you had the perseverance to finish a job and the skill to do it on your own. Even games were within scope.
Having written such software, you can have a much more interesting interview than the standard Algorithms 101 interview where you are asked to "write a function that reverses a string."
In any case, be very careful with maintenance jobs. Don't get stuck working on out of date languages or products (C, Visual Basic 6, and PowerBuilder, for example.) The first technology you put on your resume can start you on a track that can be hard to change.
are a very good way to exercise your ability to solve problems and think rationally. There are quite a few that are open, like USACO. Check out if your local University has an ACM team, although ACM is more of a time commitment and is more like joining a sports team (but without the hot cheerleaders).
:) However, architecture is something that is more difficult to simply pick up, but there are lots of books on this topic. Some Open source projects have good code architecture, you may want to get involved in those. Watch out though, a great deal of open source is also poorly architected, gdb, and Xorg are among the worst from my experience.
Also, check out some of the past problems of competitions that were back in High school. I'd check out the past CCC (a Canadian contest run at the High school level by the University of Waterloo) and ACSL.
Another important thing about being a good SW developer is knowing how to design and architect. I used to think that architecture wasn't really important and that problem solving was paramount, until I began working in the real world where I found that managers/VP's and other execs like to change their minds frequently. It's also not uncommon for bits of hardware to not work exactly as described by technical documents, and thus you end up having to add software workarounds
I've read or skimmed most of the posted comments on this posting and one amazing thing strikes me: virtually nobody is defending C++ or even saying good things about it! The readership of /. is obviously strongly oriented towards the sophisticated programmer, many presumably employed as programmers, and many who actually use C++. So there is a fairly obvious question: Why do people who apparently hate C++ use it?
As a lead developer for a software company, I disagree. I think it is vital for developers to know how to do QA, with and without having access to the source.
Obviously, it is vital for developers to know how to test their own code and that of other developers. However, you do not have to be a QA engineer to learn this skill. On the contrary, testing code in the form of unit testing is a software development skill that he will not learn as a QA engineer. A good developer writes his/her own unit tests that go beyond what QA generally tests as well as having a different purpose. I know this because I too am a lead developer at a software company and have been a QA engineer in the past. My point was that this guy should just try to become a developer if that's what he wants to do. He can and will learn all the things you mentioned as a developer and be doing what he wants to do from the start.
A developer that understands Marketing/Sales can also understand how to help those areas without comprimising the application standards and usefulness.
Again, I agree with you here, but you don't need to be in Marketing/Sales to learn this skill.
No Sigs!
I've had some success working for non-profits. Depending on their needs and the skills of their staff, there might be a big hole in the organization for you to fill.
The danger is that, if you're the most tech-savvy person around, you have nobody to learn from. Nobody is there to show you a better way, and it's very easy to get comfortable, and never expand your horizons. A non-profit might be a great place to build small and simple (yet incredibly useful) apps, but without discipline and study, you'll probably plateau.
Try internationalizing an app, just for fun. Write one in a new language, then port it back to the language you expect it will be maintained in. Build a test harness for an app. Integrate one with a database. Watch the staff as they use you app, and see how they're using (and misusing) it, to get an idea of what constitutes an intuitive interface. Learn to talk about technology with people from different backgrounds and different levels of experience. Study their entire workflow, and try to figure out which parts could be done more efficiently.
Non-profits are often a lot like any small business where IT isn't a core competency. If you can build a tiny web app that will allow them to do something in ten seconds that once took them three minutes, you will be hailed as a god.
You want the truthiness? You can't handle the truthiness!
nt.
DRM: Terminator crops for your mind!
Yeah, but I'd see that as an advantage, rather than a disadvantage. After all, when you get a programming job, you're going to have to learn all that stuff anyway. Being able to say that you've already got experience with version control, knowing what tasks you can do, and knowing how small pieces integrate into a larger whole only increases your attractiveness to potential hirers.
We all know what to do, but we don't know how to get re-elected once we have done it
There was a site that you could find odd tech jobs, but I can't remember the name of it.
I'm looking for a job too.. I just wonder if you all you guys can help me and if you can.....
What is this rubbish doing on Slashdot? Can we all post our job searches here?
You mentioned that you're into Objective-C. That's a rarity, and because of the timing, you've got an opportunity to get a head start on an emerging market: iPhone development. So write an iPhone app over the Summer and sell it on the app store. You could start raking in some money from it, and if people really like it, you won't have too much trouble parlaying that into a job somewhere.
Write code - say 'I'll do it' and do it (maybe you'll fail or its crap, either way you have experience).
Programming for a business w/clients? Write something from start to finish (user interface, config, docs, etc.) You don't have to make it big, but get used to doing the un-fun stuff (i.s. not hard coding company names, sane installation, etc.)
Have an interest? (i.e. asset/inventory control) Play around with making programs using your ideas (library, small store checkout, etc.) Showing employers that you've been working on ideas along your preferred line will help your career.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
As an software automation engineer--i.e. foot in both dev and QA--I can tell you that unit-testing and black box testing tend to find very different kinds of bugs. Among other things, black box testing is in-system, whereas unit-testing is not.
Furthermore, at a well-run software company, QA goes far beyond simple software testing. The QA department, more than any other role aside from the Project Manager, should be involved in every stage of the software development process. Software quality starts from the requirements, and goes all the way to the delivery. This gives you an excellent view, end to end, with a stake in each part.
There's not a complete overlap between the QA skillset and the development skillset. I'm not saying it's necessarily vital to go through QA if what you want to do is develop, but it'll make you into a more aware and probably a better developer. That's something that should be considered.
I understand the fixation on the job you are offering and what the qualifications are of the applicant for, of course that is the primary criteria, I was just wondering in what era did (potentially) multi year gaps in employment history become cool to have on resumes? You mean employers as a general rule of thumb now don't give a crap (long time since I had to submit one...)? If that is the accepted practice and style now, no biggee, I'll just mosey on down the line with me onions on me belt....
I live in the south now, but all my younger years up in "everything is rusted tight and rotten and frozen, and nasty crap falls in your eyes, and...) land. Two sets of tools, keep one inside and heated, swap out as they get frozen, build tents around vehicles and run out infra red bulb clamp lights, laying down in frozen slush, etc. nuts.....
Anyway, thanks for the reply, I guessed as much there would be an interesting story behind it! I'm still just a generic multi function tool user, here on de farm, but appreciate all the fine and not so fine code that devs put out. Me brane doesn't exactly work that way to do it myself (nor any huge interest truth be told, inside is for relaxing, outside is for work and make money, hard coded in my DNA I guess..), but I throughly enjoy using computers, great communications tool. I like writing, that's about it for being a keyboard commando.
Your college should have a Career Services division that specializes in exactly this. Go over and talk to them in person (not just a website or phone call, make an appointment and sit down with someone).
Some colleges have co-op and career services departments separate. At my college, my experience with career services was tremendously better than my experience with the co-op department. YMMV.
is competition good, or is duplication of effort bad?
Comment removed based on user account deletion
Let me be the second person to suggest learning Ruby on Rails.
Learn Ruby first. Ruby is a very nice object-oriented programming language. THEN learn Rails. Rails is the most popular Web framework that works with Ruby.
It is in high demand, getting higher.
There are other good things out there, too, but this is hot. And it is also a very good way to learn object-oriented programming, which you will have to learn anyway, and Web skills, which you will also need at some point. So if you need to learn this stuff anyway, you might as well learn something that is in high demand.
For most software engineering (I work for a government contractor, we have millions of lines of code and dozens of programmers), coding is a small part of what we do. There is requirements documentation, design, testing, configuration management, CMM/CMMI, system engineering, code inspections, etc. Most of our software engineers show up not knowing much about these other aspects of engineering. I can't count the number of times that a developer thought that he/she could sit down and just hack out some code.
Granted, you may not be looking for a job with a government contractor (or someone that writes important code), but if you are, don't just think about coding. There's a lot more to it than that.
I was in a similar situation, bay area, recent CS grad. I wasn't the valedictorian but I also was one of the smarter people in the room. Took a crap 6 mo contract QA position at a very large and well known company. A trained monkey could have done my job! My boss sucked, my pay was 1/2 what I should receive w/ my qualifications, and my boss fought me tooth and nail about learning/mingling with the developers we supported. I took every opportunity afforded to make friends and professional contacts in the dev team I supported. Once my contract was up, it was personal and professional references from the teams top 2 Software Engineers and one from the Development Director that made my resume stand out in the stack and further secured my job offer when they were contacted. So my point/advice is get your foot in the door anywhere. Make contacts. Thats how you move up the ladder.
As you start getting out into the committers and greater community, you see that most of the geeks end up married and happy. In fact, I think that the reason why most of us are not in the dating game is because we are married or otherwise in committed relationships
This being said, the one thing that does make a love life difficult involves schedules, deadlines, and death marches. I can remember in the early days of LedgerSMB, when we were trying to get critical inherited security problems fixed, that I would work until late at night (maybe midnight every night for two weeks), and Chris Murtagh would work even harder. And he has 3 kids!
So while there are some tradeoffs, I think the geeks who really can't get a girlfriend (or for the lady-geeks out there, a boyfriend) are really in a tiny minority.
LedgerSMB: Open source Accounting/ERP
Comment removed based on user account deletion
seriously, look into getting a coop position. The pay is good(possibly great), for a college student, and there are no strings attached. If you don't like the place, you don't have to go back and if they don't like you they won't offer to hire later - they are not gonna write you a bad review unless you torch the place or something such. Its a great way to find the right match and get some real exposure to being a working programmer/software engineer.
Comment removed based on user account deletion
Try to get a summer job or internship doing Software Quality Assurance.
First, there's a low barrier to entry. You will have your fill of grinding grunt-work with the _possibility_ that you will be able to use a few tools which make your life (and the lives of the people who come after you) much easier. That said, you will earn your daily wage just by sitting there and following test scripts and twiddling with the stuff.
Second, and not to be underestimated, you will learn the sorts of mistakes people (perhaps you) make, especially those under time and resource pressure. You probably won't learn how to avoid them: that takes 5-10 years, but at least you'll be able to identify them and see when things start running off the rails. In that 5-10 years, you will be a delight to your QA people, since you understand the pain and suffering they go through testing your busted-ass code. Also, having seen it from both sides, you will appreciate how difficult it is to give good feedback when trying to reproduce a problem.
Finally, if you can hack it and you can spare an extra hour a day (above and beyond the work you're assigned), ask to be able to build the source of the programs under test, so you can run them in debug mode: you will love single stepping through code you don't understand and having it pop out results. (You must learn to both love and hate the debugger, and resolve to write correct and well-structured code in the future.) See if you can chase down a bug you or your coworkers has found during the day, see if you can fix the problem. Then, see what the engineer did, to check your results.
For this last part, you might even want an extra computer to do this, so you keep your two lives separate, since you don't want to (yet) become professionally involved in the time-sink of debugging other people's busted code: this will teach you to stick with the job you are being paid for, rather than wasting time doing drive-by bugfixing or fiddling with things that aren't really in your purview (people do this because what they are working on is often not as interesting as something else, but the project manager needs people owning their own thing). It's important to learn this discipline early, it will help you in school too: St. Thomas Aquinas called this the _vice_ of 'curiosity' - spending time studying the wrong thing because its more interesting. The opposing vice is 'laxity in study' - not spending time in study. In between the two vices is the virtue, which is 'studiousness': that of studying the right things at the right time for the right reason - to get a firm, foundational education from which you can proceed to engage in more advanced studies and eventually, do good work.
+
I'd say software (and documentation) testing (QA) would be very good for you. Another would be tech support.
Im not a programmer, but I do many in this field. Many job shop, too. My suggestion is to not take all you hear as gospel, but investigate. Subscribe to Rob Sanchez' "Job Destruction" newsletter at http://www.jobdestruction.com./ Join the Programmers Guild and subscribe to the newsletter at http://www.americaneconomicalert.org./ In October, 2005 Elaine Chow, Bush's Sec. of Labor held back 50,000 high tech jobs so businesses could apply for H-1B visas. In November, 2005, the Senate planned to sell 385,000 high tech jobs via H-1Bs. By the way for those, who think this is a Republican only deal know that Senator Carl Levin voted to sell those jobs as a way to help the economy. You can locate a letter in response to a resident of Oakland County, MI. If you want to program do it, but plan carefully so you are least likely to be outsourced. I suggest learning Aida, as well. I suggest watching Lou Dobbs if you're able, as well. Anyone who thinks the American economy is being dismantled as a Republican plan missed NAFTA, which is an agreement not a treaty coutesy of the Clintons.
Freelance online for experience and build a portfolio one project at a time. Stay away from .NET until you have mastered ASM .
Trying to install linux on my microwave, but keep getting a kernel panic...
1) Post to Slashdot
2) ????
3) Get a Date
4) Profit!
-- thinkyhead software and media
Things are heading more and more towards web based applications. Take for example the article recently featured regarding Adobe's Photoshop express, that is accessed online. Then you have maps, spreadsheets, word processing etc etc. As a web developer who recently graduated in computer science at university, finding a job was not too difficult. I had only very basic skills in MySQL and PHP to begin with but became quite competent later on. I was required to learn beyond what I had learnt at university, these skills included the Zend Framework (an OO PHP framework), AJAX, CSS and HTML that conformed to the W3C standard and programming techniques in general. My skill level has increased 10 fold. I suggest learning as many programming languages/frameworks/techniques used in web development as possible (.NET, Zend Framework, PHP, MySQL, AJAX, Perl, Python etc), and possibly creating your own website. This site could then be mentioned on your resume and attract positive attention. Like other people suggested you could also work on Open Source projects, again having a website would be useful as you could list all your accomplishments in one easy to access location whilst showing your skills as a web developer.
Having done essentially what the grandparent post described to break into the engineering sector myself, I must respectfully disagree.
To acquire SWE experience, I signed on for a jr. system administration job at FPN. While there I demonstrated that I could write software, and got myself transferred laterally within the company to Engineering. Ta-da, a SWE job on my resume. My jobs after that were all SWE (though I often needed to wear both the SWE and Sysadmin hats in small companies). Even if I hadn't made the lateral move, I think I could have landed a programming gig with the programming-as-sysadmin experience on my resume, but can't say for sure.
Over the years I have witnessed system administrators, technical writers, and tech support do the same thing. There are a few things they all had in common, which I think is necessary to making this work:
They all did their jobs well. If you do not take care of your job's core responsibilities, your boss will not want you working on things peripheral to those responsibilities (like writing code). If you do take care of your core responsibilities, you will get a reputation as someone who performs well, which will make a lateral move much easier.
They all established contacts outside of their own department. You need to get to know the other engineers, both so that they know you, and so that you get to know the problems they are dealing with. This is particularly easy for a tech writer, hard for tech support, and middlin' for a system administrator. If you can get at least one engineer to like you enough that they'll give your code a fair shake when it appears in his mailbox, then they will likely also go to their boss and tell them about this spiffy would-be engineer when the time comes for you to make the departmental switch.
They kept their bosses in the loop and made management part of the solution. It's important that your management knows if the engineering department wants a few hours of your time on tasks not part of your core responsibilities, else they will "put you in your place" when they do find out. On the flip side, if you bring it to their attention that you are wanting to put in some programming time (an hour or two a day is about what most managers are comfortable with, in the beginning) to solve a problem pertinent to your department's responsibilities, and they see that you have performed well on your other tasks and solved a lot of problems, then they should be willing to let you do it.
I'd suggest you keep the GRAND PLAN under your hat; techies low on the totem pole who yammer about ambitious plans for the future tend to garner contempt. Just do it, and people will want to help you.
This takes some effort above and beyond what your job actually requires of you, but it can be made to work and work well.
Good luck!
-- TTK
find something that you are inspired by, then jump into the ocean and learn how to swim. don't think about foundations (or lack thereof). that's what college is for.
and please don't take a boring job as an "entry-level" programmer. assuming you learn quickly, your willingness to learn compensates for your lack of experience.
when i was a cs undergrad, i took on a heavy-duty data mining project, in Java. i had little or no practical knowledge of the language. i learned more Java in a month working on that project than i did in an entire semester of a grad-level Java course.
Manuel Blum explains: "I once asked UMESH VAZIRANI how he was able, as an undergraduate at MIT, to take 6 courses each and every semester. He said that he knew he didn't have the time to work out his answers the hard way. He had to find a shortcut. You see, Umesh understood that problems often have short clever solutions." (http://www.cs.cmu.edu/~mblum/research/pdf/grad.html)
Just stating that any SWE that do not know how to use VCS and/or Bugzilla or similar application is not really worth anything. Skills like that are *essential* for any developer. And thus, getting your hands dirty with floss application of your choice is really good way to get something into your resume..
yush
Moving into your parents' basement and erecting a shrine to Natalie Portman would be a good start. That way, you'll fit in well with other interns (which is the job you should look for to start).
I've calculated my velocity with such exquisite precision that I have no idea where I am.
Taking software development as a job will spoil it as a hobby.
... big time".
(I should know)
In the current market, it's not even a financially sound choice: you should have noticed by now the comments about how hard it is to find work as a Junior Developer - take it as a warning.
If you do manage to punch through the no-job-unless-ur-senior barrier that the service outsourcing trend has raised in IT, then life isn't too bad, though nowadays, unless you're a very specialized freelancer, software developers are paid barely above less specialized jobs.
Given the frequency of posts here on Slashdot about redundancies, outsourced jobs and in general overworking and death marches (don't get me started on that), I'm amazed nobody else has come out and said it before me: "Nowadays, working in IT sucks
After reading the question submitted, I found it does relate to my situation. I got my Bachelor's Degree in CompSci back in 2001, mostly concentrating on software development, with coursework in several languages. After my internship (database software development) I did not find an actual job in programming. Instead, I found a job in computer information security. I didn't have a lot of experience here either, but it worked out for me.
In my IT security job, I mostly did Government C&A work, vulnerability assessments, and the like. They had this database application that the analysts used to perform and track customer interview data so the report writers could easily access this data. The application was originally written as MS Access forms with a little VBA in the background. I saw this and knew I could make it better, so I got assigned the task. I ported the code over to Visual Basic and moved the database to MySQL, which I hosted on a Mandrake Linux server (never saw Linux before then). It taught me a lot. My job wasn't originally programming, but that project allowed me to keep up on my programming skills, and relate those skills to my normal duties, while performing my security work.
Point being: If you don't have much programming experience, try to find a job somewhere doing something you do have some experience with - something that you may be able to fudge in some programming. You may find a job doing data entry, and develop some kind of shell scripts or similar that can help make the system work better. Maybe you can come up with some "wizbang" tool that can be used to perform the job better.
To relate that back to my current job (different job than the one above). We are looking to possibly purchase a piece of software to record and track a variety of information for some IT Security work we do. The software may do what we need, but may be missing some features, or have things we don't need. I may be able to come up with my own software that will be a better fit to our needs, and save from buying the software in question. Of course time is a factor as well.
Having a smoking section in a public restaurant is like having a peeing section in a public swimming pool.
Damn, I'm becoming the cranky old guy and I'm not past 30 yet. I think I am finally beginning to understand my Grandfather. Ah man.
Take heart, your best years are ahead of you.
During their thirties, guys become much more attractive to women. Mid-thirties to mid-forties, much much more attractive.
I'm 47, I speak from experience.
-kgj
Get an intern job in Bangalore, or some other city that you fancy. Besides the travel opportunity & seeing a new culture, you'll also work first hand with companies that implement cutting edge software processes. Most Indian companies also provide training.
First off, check out monstertrak.com; it's specifically for college students, both upcoming graduates looking for permanent jobs and those further away from graduation looking for internships. Now, some comments, as a 1-person operation whose business is growing out of control and who actually has a job listed there, and other places:
I wouldn't leave the part about being a mechanic off of there. Personally, I think it shows a capacity to understand things from multiple perspectives in a cross-trained fashion. And there's nothing wrong with showing people that.Not only does it show a capacity for understanding things, I suspect it shows an understanding of, and capacity for, hard work--believe me, that's something that smart employers understand and appreciate.
but, at least from my own personal experience, its pretty late in the game to be looking for a summer job...This, unfortunately, is quite true. But speaking from my own personal experience, there are always employes who start looking quite late--don't give up.
The trick is to never stop learning, and keeping an open mind to different languages.So, so, so true. So many schools have computer curricula that are junk and only prepare you to have your job sent offshore in a couple of years. Of course most employers look for the buzzwords of the day, but there are ones who look for signs of high intelligence and real passion--and for those people there are jobs out there that won't be offshored. Also take hard advanced math classes, particularly discrete mathematics, and get good grades in them. Then lie during your interview and tell me how easy they were ;-)
Be sure to get experience with the more difficult programming concepts in C++ such as templates, singletons, and auto-registration (if your compiler supports it).Damn straight. Most people who claim to know C++ only know a really dumbed-down baby subset. Read Alexandrescu, then read it again, until you understand it all. Then branch out to other books on template metaprogramming. A candidate who could explain the primary differences between Boost smart pointers and Loki smart pointers, and the rationale for the decisions, is one who's going to impress me.
I don't know US practice, but on this side of the pond it IT directors who need and extra person on the team won't place adverts or look through job applications.In the U.S., employers do list and actively search for the new, soon-to-graduate talent. Over here, your advice applies more to those who are already out in the job market.
This is good advice, though I usually just go for the phone number. If she likes you, you'll get the number. If not, you probably never had a chance anyway. Better not to waste your time, move on and find someone else An important thing to remember is never try to be mr. nice guy (even if you are). Tease her like you would your little sister and she will love you for it.
In addition to learning C/C++/Obj-C, don't forget Mandarin. You'll need it to communicate with your fellow employees.
-- Ed Skinner, ed@flat5.net, http://www.flat5.net/
Since you mention that you are in the San Francisco Bay Area, are you aware of the Foothill-De Anza College/NASA Ames internship program (http://internships.fhda.edu/)? It is a paid internship program (currently $10/hour), with positions available in local industry as well as at NASA Ames Research Center. I believe that NASA also has separate internship programs, including a summer internship program, but I don't know any details of that. I am currently in the FHDA/NASA program, working at Ames, and can tell you from personal experience and from talking to other interns and former interns that they try to give you as much practical experience as you want, and look at internships as a recruiting tool (in fact, all but one of the employees in the group I'm working with started as interns).
I think the first thing you should do is decide if you're interested in programming as a career and not just as a "full time job". As a wise person once said, "Love what you do and you'll never work a day in your life."
"The past was erased, the erasure was forgotten, the lie became truth." ~1984 George Orwell
Your experience must be paid experience or employers will not consider it as experience.
Enroll in your University's co-op program. Get hired as a co-op student or intern. Every university has a dedicated department and people working on this.
Serious about being a developer for a living? Then get a 4 year bachelors degree. My experience has been that a 2 year college diploma will only get you employed as help desk.
First off, check out monstertrak.com; it's specifically for college students, both upcoming graduates looking for permanent jobs and those further away from graduation looking for internships. Now, some comments, as a 1-person operation whose business is growing out of control and who actually has a job listed there, and other places:
I wouldn't leave the part about being a mechanic off of there. Personally, I think it shows a capacity to understand things from multiple perspectives in a cross-trained fashion. And there's nothing wrong with showing people that.Not only does it show a capacity for understanding things, I suspect it shows an understanding of, and capacity for, hard work--believe me, that's something that smart employers understand and appreciate.
...but, at least from my own personal experience, its pretty late in the game to be looking for a summer job...This, unfortunately, is quite true. But speaking from my own personal experience, there are always employes who start looking quite late--don't give up.
The trick is to never stop learning, and keeping an open mind to different languages.So, so, so true. So many schools have computer curricula that are junk and only prepare you to have your job sent offshore in a couple of years. Of course most employers look for the buzzwords of the day, but there are ones who look for signs of high intelligence and real passion--and for those people there are jobs out there that won't be offshored. Also take hard advanced math classes, particularly discrete mathematics, and get good grades in them. Then lie during your interview and tell me how easy they were ;-)
Be sure to get experience with the more difficult programming concepts in C++ such as templates, singletons, and auto-registration (if your compiler supports it).Damn straight. Most people who claim to know C++ only know a really dumbed-down baby subset. Read Alexandrescu [amazon.com], then read it again, until you understand it all. Then branch out to other books on template metaprogramming. A candidate who could explain the primary differences between Boost smart pointers and Loki smart pointers, and the rationale for the decisions, is one who's going to impress me.
I don't know US practice, but on this side of the pond it IT directors who need and extra person on the team won't place adverts or look through job applications.In the U.S., employers do list and actively search for the new, soon-to-graduate talent. Over here, your advice applies more to those who are already out in the job market.
LuckyLefty01, I can't help you find a job, but since you mentioned Objective-C and you're in the SF area, you should definitely apply for a student scholarship to Apple's Developers Conference in June. I went twice on the scholarship. You will learn tons, but what may be more important is you will meet many contacts. They have a meet-and-great set up for employers to talk to students the Sunday before the conference begins for everyone else.
http://developer.apple.com/wwdc/students/
This is my signature. soid st egr.hyTa rsiugm usnin Any questions?
"You have to learn version control systems, the community, what constitutes "easy", you have to learn the scale and meaning of each piece of the project, you have to learn communication and moreso, you have to know enough to actually fix things."
Um... Every one of those attributes are key to a regular paid position as well. Any sort of company that has anything above an amateur programming team will be using version control of some sort. An as far as learning to communicate with the community and learn about the entire project, its just silly to suggest a person wouldn't be doing that in the workforce.
The first thing when I started a position with programming as part of the official job description was get set up on the revision control system (Subversion) and just start browsing the code. After I got familiarized with the overall project scope (what do these individual pieces of code do and how do they fit into the whole picture,) I was given some of the low-hanging fruit in the bugtracking system to tackle. Next I started grabbing tickets I thought would be simple for me to fix. I grew from there and now I am in charge of our biggest software project.
There are more similarities than differences between corporate and open-source programming. Heck, even in a corporate environment you may not have face-to-face contact with your fellow programmers with all the outsourcing going on.
Your college career center can help you find an internship or a summer job. There might be openings for student coders on campus, depending on what kind of college you attend. All my internships and summer jobs were found through my college's career center. Even if you don't find anything, work on personal programming projects to develop your skills and build your resume.
I want to learn programming but have no idea where to start.. how did you start? How would you recommend getting started? I don't even know what books to get..
It may not be the best start to "real" programming, but doing web content is a good way to get started in the field. I'm in a coop term right now in web content management and after 3 months it's already landed me another term (4 months) for Web Applications Development (a real programming job). You don't need any sort of real knowledge of programming or the web to do the job (content that is, not applications). Right now we have people that are English majors and art students working here, so that should tell you something. Look around, and try it out if it suits your fancy.
I'm sure this has already mentioned here, but I go through a lot resumes for junior dev positions. What will ALWAYS stand out are the people who have their own projects outside of school or work.
That will IMMEDIATELY get my attention, as I'm basically looking for someone who loves -- or at least likes -- to code. It's worth mentioning that the majority of applicants I see do NOT have any side projects, and so basically fade into the background. I'll also usually ask for code samples as well.
Obviously, it would be great if any side projects were relevant to the job being applied for, but this does not have to be the case, particularly for less senior positions.
Hope that helps
Roving Web-Teleoperated Robot