|
Every few weeks a new thread or post pops up (usually in A/T) asking about how to get into programming or get a programming/CS job. This thread is oriented towards people interested in coding or CS majors looking for advice on how to get their first job. If anyone wants me to add advice to the OP for more senior developers I'd be glad to do so. About me: I'm a CS Senior at a pretty decent Tier1 research university in the US, and this last semester I got 4 full-time job offers, one bad one and three good ones. First, a few definitions to clear the air: Programming: Wikipedia posted:Computer programming (often shortened to programming or coding) is the process of designing, writing, testing, debugging / troubleshooting, and maintaining the source code of computer programs. Computer Science: Wikipedia posted:Computer science or computing science (sometimes abbreviated CS) is the study of the theoretical foundations of information and computation and of practical techniques for their implementation and application in computer systems Programmer vs Software Engineer: The distinction here isn't always black and white, but generally the job title of programmer denotes just basic programming duties, whereas the title of software engineer denotes a "higher rank" and being responsible for higher-level aspects of software design. Job postings for software engineers nearly always require a degree in CS (or something related, like CompE or Math), although some companies may waive this requirement if you have sufficient experience. Along the same lines, "software architect" implies that you're working at an even higher level and are responsible for the overall design, or architecture, of an entire program (or perhaps a very large section of a program if your program is something enormous like, say, Windows). I want to work in software development. Should I get a degree in Computer Science? Quite possibly! This seems to be the most common route, but there are a few things to consider: 1. Computer Science degrees can be very difficult (depends on school). They're usually similar to engineering degrees in drop-out rates (many drop-outs seem to go to MIS, which is sort of a hybrid business/CS degree). If you go to a school with a rigorous program, expect to spend long hours studying various algorithms or implementing them. 2. Computer Science involves a lot of math and math-ish concepts. You don't have to be amazing at math, but you have to be at least halfway decent, in college-level terms. For example, you'll probably have to take classes in at least differential/integral calculus, linear algebra, and discrete math (often called discrete structures). Many other classes will involve math-ish concepts like understanding Big-O, which is a measure of complexity. 3. As noted above, there is no guarantee that getting your degree in and of itself will adequately prepare you for real-world programming. Stories abound of CS seniors or even grads that had decent enough GPAs but couldn't code their way out of a wet paper sack (or couldn't code their way through FizzBuzz, an extremely simple but well-known programming 'test'). Even if your school does a good job of this, however, you'll still want outside experience. If I get a degree in CS, how's the job market? Will I make big bucks? The job market for software developers (which is where most CS majors go) is currently very good, at least compared to other majors/fields, so if you're smart, big bucks could certainly be in your future. Starting salaries for CS majors are usually near the top of rankings; for example here's the top 5 for Fall 2010: code:For comparison, the average across all majors was $48,288, and for those poor liberal arts grads, was $35,508. A moment of silence, please, for our indebted LA friends. ![]() In addition, the Bureau of Labor Statistics expects strong growth: quote:Overall, employment of computer software engineers and computer programmers is projected to increase much faster than the average for all occupations. Job prospects should be best for those with a bachelor's degree and relevant experience. And there's even more good news! quote:CareerCast rated 200 jobs based on income, working environment, stress, physical demands and job outlook, based on data from the Labor Dept. and U.S. Census and researchers' own expertise. Ok, I've decided to become/I am a CS major. What do I do now to get one of those sweet, high-paying gigs I've heard so much about? There are several things you will need padawan, some obvious, some less so. If you are missing one or more of the things below, it is not the end of the world, but the more you have the better. These things include: 1. A good GPA. You want to at least have a 3.0, and 3.5+ is generally seen as very good. Besides demonstrating some level of competence in the art of Computer Science, companies want to know that you aren't lazy, and that even if some classes are boring, you are willing and able to suffer through boring things. Many big companies seem to have a 3.0+ requirement (obviously this is for recruiting college students, once you're out of school nobody cares), and one I saw was 3.2+. 2. Outside experience. Companies want to know that you can take initiative and can code without the rigid structure of a class holding your hand the entire way. There are basically five forms this can take: - Personal projects: Stuff you do on your own. If you want to be super awesome, smartphone apps are pretty hot right now, and simple ones can be easily made by a single developer. The more useful/complex the things you write are, the better. - Undergrad research: Labs sometimes need undergrads to do the coding that they don't want to waste their time on. For example, I worked in a lab where they were researching new network protocols for wireless mesh networks, and me and one other undergrad were hired to write a program that displayed different signals graphically in real-time. - (Summer) Internships: You definitely want to do one of these. They're one of the most straightforward ways to get good experience, and pretty much the only way to get experience at a big-name like MS/Google prior to getting an actual job there. Having Google already on on your resume when you're looking for your first real job? Awesome. Companies will be looking for junior internship applicants in both fall and winter/spring semesters. Some companies also will take sophomore interns, although this isn't nearly as common. In addition to the experience, expect to get paid quite well (the big-names pay $25-30/hour, others will probably be around $20/hour). - Co-ops/part-time jobs: You can try applying at local companies to see if they hire students for part-time work. Also, schools themselves often need cheap student developers for webpages and whatnot. This is obviously a good way to get real-world experience, just keep in mind that most companies will want around 20 hours per week. This can easily be stretching it if you're taking a full load of classes; try not to ruin your GPA. - Open-source projects: These projects are always looking for contributors, and saying you helped with one (and being able to explain how you helped) can give you serious nerd cred. Just keep in mind that diving into a large code base with no mentor or supervisor can be difficult for the inexperienced; smaller projects are probably more surmountable for newbies. 3. Technical Interviewing Skills: At the very least, you need to know how to code on the fly on a white board/piece of paper, as well as the most common data structures and algorithms, along with their running times for different operations. You should also understand complexity/Big-O in general so that you can analyze whatever algorithm/data structure an interviewer asks you to write. A whole book could be written about interviews; in fact, there has! The one I just linked to seems to be the most well-known book for coding interviews, but searching Amazon also reveals a few others. - Big companies tend to be language-agnostic for interviews. Any language that isn't obscure should be more or less fine. Safest bets are probably C/C++, Java, and C#. Smaller companies may want you to code in a certain language. - Questions most commonly have to do with data structures and algorithms, although you'll also get questions involving design, debugging, multi-threaded code, and pointers. - For the data structure/algorithm ones, there's usually a really obvious brute-force solution that either has a terrible running time or memory requirements, and then one or two more elegant solutions that will take a while to get, so don't be surprised if you don't immediately know a really good answer. What I do is immediately explain the obvious, dumb answer and why it's dumb, then start talking through the problem. Interviewers are more interested in your thought process than just how quickly you get a solution, so talk them through it. - Make sure you understand the design specs completely before you start to code. If anything is ambiguous, ask the interviewer. For example, if the code is being used internally, you may be able to assume that the parameters coming in are valid, or at least aren't null or something like that, whereas if it's an externally-facing API, you almost certainly wouldn't be able to assume that and would have to check the parameters at the start of a function to make sure they aren't broken. - Handle the edge cases. Some people code the general case first, then handle the edge cases based on what it looks like the general case can't handle. Some people code the edge cases first so that they don't have to worry about them while coding the general case. Either way, let your interview know what you're doing and why. Here's an actual question taken from a recent interview I did with a big-name software company: quote:Parameters: array of objects, an integer 'n'. Randomly select 'n' objects from the array to return. No repeats. You can assume 'n' is a valid number. 4. "Soft" Interview Skills: Unfortunately, this has nothing to do with having a round, squishy belly, and everything to do with people/social skills. Companies don't want a hardcore neckbeard who can't communicate or get along with others. You don't have to be incredibly charming either, but there's a baseline of stuff you should do like smile, act confident without sounding arrogant, speak clearly and coherently, etc. Many software companies are ok with dressing casually in interviews, but keep in mind there's a difference between dressing casually and dressing like a slob. Wearing jeans is fine at many companies, as long as said jeans do not have cheetos stains all over them. Another part of this are behavioral questions. Most companies will have questions like, "Tell me about a time where you had a deadline that you didn't think you'd be able to meet, and how you dealt with it," and "Tell me about a time you had a problem with a teammate, and how you resolved it." Questions about a particularly nasty bug that you fixed also seem to be common. For more examples of both behavioral and technical interview questions, go to glassdoor.com and search for well-known software companies, then go to the Interviews section for them, like so: http://www.glassdoor.com/Interview/...tions-E1651.htm How do I apply for internships/jobs? Probably the best way through recruiting events at your school. My college does technical career fairs in fall and winter semesters where only smarty-pants math/science companies and majors are allowed. Handing out your resume at these and asking them about procedure (these days they usually ask you to also apply online, but maybe through a different website than the general public one) is a good idea. For companies that don't recruit at your school, go to their website, they usually have a section specifically for university recruiting; you can try googling "[Company name] internships" or "[Company name] university recruiting" or something along those lines if their main website is proving difficult to navigate. You won't get responses from the majority of these unless you're super-amazing, but it's worth a shot; in fact, the offer I accepted was from a company that wasn't recruiting at my school, I just applied online. When should I start applying for jorbs? If you're graduating at the normal time in late spring/early summer (May/June), you can start applying to large companies (especially large tech companies) in the preceding fall semester. These companies generally want to pick off promising new college grads earlier so that their competitors can't get them, as there's a perpetual bidding war for developers. Generally, smaller companies won't hire that far ahead of time, but it obviously depends on the specific company. Try calling and asking around your area for local companies, I guarantee no one will bite your head off. Definitely want to start at least trying at least a few months before graduation. IF YOU WAIT UNTIL YOU GRADUATE TO LOOK FOR JOBS YOU'RE AN IDIOT! DO NOT DO THIS. Exactly how much money we talking about here? Glassdoor.com is awesome for this. Starting salaries for the big-names seem to mostly be in the 70s and 80s, although keep in mind that these are generally high cost-of-living areas. It's also possible you'll get some sort of signing bonus in cash and/or stock; these will have time restrictions attached to them. For smaller places, it's going to be more random, and probably less (with some exceptions; if you get hired at some boutique hedge fund you may be making bigtime money). I got an offer what do I dewwwww?? Congrats, you win at life. You could try negotiating, although as a new college grad your leverage is small (some would say nonexistent). If you have multiple offers, it may be worth a shot. If you're still waiting on other companies for interviews/offers, try to play for time. Most companies should be understanding. I hear salary negotiating is, like, a thing It sure is! Salary negotiations are generally more useful after you have some real work experience, but the risk of attempting to negotiate is generally small unless you're really douchey about it. The worst that will happen is probably "Nope, this is our final offer." Here's a good guide to negotiating for engineer-types: http://www.kalzumeus.com/2012/01/23/salary-negotiation/ If anyone wants some additions/changes to the OP, feel free to suggest away! Since I'm still in school, my experience has been limited, although augmented by lots of studying and asking around about the process of getting jorbs. Wait so do I have to actually know about Big-O and algorithms or can I toss that knowledge in the trash bin once I'm done with classes? Otto Skorzeny posted:This varies so much from company to company that it's difficult or impossible to generalize like this. Companies that work in middleware may have the luxury to be able to take anyone who can coax eclipse into compiling their code, whereas companies working on eg. high-performance databases need people with solid CS fundamentals, even especially if the company is small and there's no where for a coder to hide, so to speak. Jobs writing firmware or whatever will have their own set of fundamentals with regards to concurrency hazards and intimate hardware knowledge that they need to interview somewhat rigorously for, people working on game engines need to know a fair amount about efficiency all the way up and down the stack, and so on and so forth. Cicero fucked around with this message at May 2, 2013 around 19:33 |
| # ? Dec 24, 2010 19:04 |
|
|
| # ? May 22, 2013 05:56 |
|
- Appendix - Data structures to know, very important: Array (also: Array-based List/Dynamic Array), Linked List, Binary Search Tree (BST), Hash table Data structures to know, less important: Tree, Heap, Graph, Directed Acyclic Graph (DAG) Common sorting algorithms: Selection/Insertion sort (very similar to each other), Heapsort, Mergesort, Quicksort; Quicksort is generally the fastest and also the most confusing, so study it the most Cicero fucked around with this message at Dec 30, 2010 around 19:00 |
| # ? Dec 24, 2010 19:13 |
|
I interview a lot of new college grads, so let me offer one little piece of advice about interviewing and resumes. Don't overestimate what you know. Admitting that you don't know something can be a good thing. I'll look at someone's resume, and it'll list obvious things like C or C++ as well as less-obvious libraries a lot of the time. If I ask you to rate your ability to write language X on a scale from 1 to 10, you should probably not pick above seven. If you say "oh, I'm an eight or a nine" and then you don't ace my coding question, guess what? You fail. If you say "well, I've used it in some classes, but it's not my primary language, so five," and you do the same thing? Well, were you on the right track in terms of ideas? That might be something I can work with later on. I never expect new graduates to show up on day 1 and be awesome by day 5 or something like that. On my team, there's going to be at least a month before they can go off and fix bugs without a lot of hand holding (big project, lots of code, lots of nuanced code that interacts with very particular systems, lots of overall organization to learn), and probably three months after that before I can say "go forth and implement this new major feature!" It's okay if you don't know something! We can teach you! What we can't teach you is to not be too scared to admit your shortcomings, and when somebody does that, things get screwed up.
|
| # ? Dec 24, 2010 20:39 |
|
Cicero posted:- Make sure you understand the design specs completely before you start to code. If anything is ambiguous, ask the interviewer. For example, if the code is being used internally, you may be able to assume that the parameters coming in are valid, or at least aren't null or something like that, whereas if it's an externally-facing API, you almost certainly wouldn't be able to assume that and would have to check the parameters at the start of a function to make sure they aren't broken. Don't feel awkward about really being anal and getting all the details from the interviewer, and not just specs, but criteria for scoring your answers, too. If it's coding on the board question, some folks won't care how sloppy your syntax is, while others will want to be able to type what you write and run the program. Some don't care what you name your methods and variables, and others will expect you to explain them. If you don't ask what they want, you might to a good job up to your own standards, but not theirs. I once spent more than 10 minutes coding up a balanced binary tree only to have the guy say, "ok, but we can just assume we have that structure available to us." Another tip I thought of -- if you're being interviewed by multiple people, even if they're from the same team, you should try to ask each person the same set of questions when they ask, "do you have any questions for me?" The natural tendency is to get all that info from the first person and to not bother with later interviewers. But doing that might make you look a bit like a drone and not that interested or curious about the job/team. When the the interviewers convene to talk about you, everyone but the first guy might only be able to comment on your technical skills, as opposed to what kind of person you are and what you're looking for. If you want to mix it up, keep a list of your questions and only ask each interviewer some of the questions. edited for clarity. kimbo305 fucked around with this message at Dec 28, 2010 around 05:34 |
| # ? Dec 25, 2010 01:27 |
|
CS major here, graduating next December. The op was a good read, and the other advice so far is also helpful--especially as I get ready for a busy year. I'm doing OK in most of the areas mentioned, but I need/want to be more involved in personal projects. I've been learning to code in C++ and Java--and I've been learning about things like algorithm efficiency and, yes, linked lists--but I still don't feel like I have a good grasp on how these languages are actually used. I've read that C++ can be used/has been used to program operating systems. Obviously, I'm not going to write an OS. So how can I find out how to bridge the gap, to find ways to apply what I know toward reasonable/interesting projects? For example, I taught myself HTML in high school just by making a bunch of web pages. That was pretty straightforward because I knew that HTML was for making web pages. Or if C++ and Java aren't practical for smaller projects, would it be better to look into other languages like Python?
|
| # ? Dec 28, 2010 04:24 |
|
Cicero posted:Here's an actual question taken from a recent interview I did with a big-name software company: shuffle the list
|
| # ? Dec 28, 2010 05:08 |
|
This is a wonderful thread. I'm a Junior at my university with my major as Computer Science. I'm actually intending to transfer to another school with a better Engineering department to get another Bachelor's degree in Computer Engineering. This thread really gives us students and soon to be graduates an idea of where we should go post-education. Thanks!
|
| # ? Dec 28, 2010 06:42 |
|
An addition to your "Outside Experience" list: Contribute to (or start) an open source project. Very cool thread, by the way.
|
| # ? Dec 28, 2010 15:42 |
|
Already stated but I can't stress how important internships have been to me. I just graduated in June with a degree in CS and work at a big company as a Software Engineer. My first internship was for a small consulting company who told me their aim was for me to intern there for my sophomore summer and junior summer and then hire me right after college. Pretty nice to hear when you are a sophomore in college. Unfortunately, the company went into the shitter so I couldn't go back. I didn't really learn much but being around those types of people and being in that environment was tremendous. My second internship was for the company I work in now. Since it was for a big company, there are always job hirings within the company and you can e-mail whomever is hiring directly and pretty much be first in line at interviews.
|
| # ? Dec 28, 2010 19:36 |
|
i thought it was a good first post, figured I'd share a bit of my experience. Graduated with a degree in Computer Engineering in '05. At my school there was a large overlap between Computer Science and Computer Engineering. You could take the exact same coursework and get either degree depending on the electives: CS took computer graphics, databases, user interfaces, statistics CE took 3-4 circuits/electrical classes and a second year of physics (electricity/magnetism) As far as I remember through '05, I don't think ABET (the only accreditation body I'd really heard of) covered computer science programs, and that, and amongst other things made it so there were a lot more internships and scholarships for 'engineers' that hit Comp E and not Comp Sci. ABET does cover computer science now, but I think there's a certain amount of inertia that keeps people from considering CS a 'real' engineering degree. I got an internship with the government my sophomore year that was only available to 'engineers' and that's what started my career off. Now, there's not much software development to be done as a government civilian (not contractor) because the mission then and now is really more supervising contractors who are doing the work*. That means I got a lot of project management experience combined with my own development projects and the work I put in on my own time put me in a good spot to leave the government and get a job I'm really happy about in a mid-size development shop that uses both the project management and development skills, which is nice. Take-aways from my perspective:
* there are government science and research installations out there, but it's rare and not that dissimilar from academic research. The customer is whoever wants to read your paper or give you grant money. Lurchington fucked around with this message at Dec 28, 2010 around 22:24 |
| # ? Dec 28, 2010 22:17 |
|
I'll add that if you have the capacity / ability to get a job with one of the major software companies (MS, Google, Amazon, etc.) you shouldn't even consider government if pay is a primary consideration. If you've got a bunch of degrees under your belt and have been turned down by a bunch of these companies, then you probably have a good shot there. Also, most actual coding work (in defense) is done through contractors really, and the pay (and oftentimes benefits) are better as contractors than as a government employee. Contrary to popular belief, government is not quite the holy grail of benefits it used to be anymore. Compared to general private sector, it's surely better, but for most highly skilled technical workers (aside from academicians actually - academia is loving hard, period) you're better off going to a contractor rather than full-on government. Almost every talented technical person I know that was in government is now a contractor. Also, the recent federal salary freeze that went into effect is probably a grim thing to hear.
|
| # ? Dec 29, 2010 21:06 |
|
I'm not sure how many people here are based in the UK, but hopefully a few (or at least greater than none) will have useful information. I'm nearing the end of a maths PhD (in recursion theory; despite the name, the topic has no direct relevance to anything in computer science) and have very little programming experience - just a couple of simple pieces of coursework as an undergrad and an eight week summer job, again while I was an undergrad. However, I've decided that I'd like to work in software development. Does anyone have any suggestions for companies that employ software developers and don't require programming expertise. The company I did a summer job at had a great looking grad scheme but I cunningly cocked up the interviews/tests there. IBM appear to also have a program which doesn't require you to be able to code (and offers a bonus to people with PhDs, which is nice), but aren't currently hiring programmers. I'd ideally like to work on stuff with a fairly heavy theoretical component as well as pure coding, but mainly I'm looking for UK based employers who: 1. Accept grads for software development jobs who have very little programming experience. 2. Put serious effort into training and development for their grads. I'm currently working through Nisan and Schocken's "The Elements of Computing Systems" to learn more about how computers work and to get a little more programming experience (the book guides you through building a computer from scratch; I'm currently writing a virtual machine for their simple 16 bit architecture and will eventually write an operating systems and a compiler for a high-level language). I'm also planning on reading a few textbooks on algorithms and programming over the next few months and writing some simple code, but I'm obviously not going to be anywhere near proficient enough to get a job somewhere that requires you to be able to program off the bat. I have good degrees, so I think I'd at least have a shot at competitive/high prestige jobs as long as they don't require previous experience. Any suggestions of companies to look at or things to do/read before I finish my PhD would be greatly appreciated. Thanks! Grey_Area fucked around with this message at Dec 30, 2010 around 18:31 |
| # ? Dec 30, 2010 16:08 |
|
Lumpy posted:An addition to your "Outside Experience" list: Contribute to (or start) an open source project. I considered adding stuff for a couple other posts to the OP, but it seems like if I just added every single piece of posted good advice to it that'd be kind of silly. I dunno, maybe I'll change my mind. If anyone thinks I should add something to the OP and says so specifically though I'll probably do it. Grey_Area posted:Math PhD stuff
|
| # ? Dec 30, 2010 19:16 |
|
Grey_Area posted:I'm not sure how many people here are based in the UK, but hopefully a few (or at least greater than none) will have useful information. ![]() there are quite a few here (and fwiw, a surprising amount in edinburgh) quote:I'm nearing the end of a maths PhD and have very little programming experience - just a couple of simple pieces of coursework as an undergrad and an eight week summer job, again while I was an undergrad. So i'm looking to get started in an industry with very little relevant experience, work, or qualifications. Know anyone who is willing to train me and pay me for it? quote:I have good degrees, so I think I'd at least have a shot at competitive/high prestige jobs as long as they don't require previous experience. It gets you an interview but not much further. Having a phd makes you overqualified for many jobs and many companies (in my experience) are hesitant to hire someone is too smart for the role. For some reason employers think Phds make people very employable, and subsequently you'll be seen as a flight risk. A phd will only open doors for you, it won't land you a job by default, especially if they would have to train you for the role. I think you're being naïve - the notion of a 'competitive/high prestige jobs as long as they don't require previous experience' feels like quite an oxymoron. quote:Any suggestions of companies to look at or things to do/read before I finish my PhD would be greatly appreciated. Thanks! Get a portfolio together. Work out what sort of programming you want to do, and work on relevant examples. You won't get anywhere without a targeted approach. I'd avoid systems and application programming and focus on more niche areas where your heavy maths experience would pay off or at least give you a head start. For example: high performance computing numerical computation/simulation trades/quant or financial stuff Here, having some academic background or heavy pure math/analysis is a boon.
|
| # ? Dec 30, 2010 20:29 |
|
Ok, thanks. I'm not sure I'm being particularly naive. The one job I applied for seemed ideal, but like I said I failed the technical tests. I put it down to excessive stress, but even if it was incompetence or stupidity I got to the last round of interviews so at least had a reasonable shot at getting the job. And that started you on £30k with really good benefits and required no experience at all. And IBM also require no experience for software development jobs, while paying a bonus to people with PhDs in any mathsy/engineering subject. I was hoping there might be other companies with similar starting positions.
Grey_Area fucked around with this message at Dec 30, 2010 around 22:34 |
| # ? Dec 30, 2010 22:32 |
|
I've seen people who don't know what they are doing being employed, but they normally have experience in working in another job.
|
| # ? Dec 30, 2010 22:33 |
|
Grey_Area posted:I got to the last round of interviews so at least had a reasonable shot at getting the job. A reasonable shot would involve not failing interviews
|
| # ? Dec 30, 2010 22:35 |
|
A reasonable shot in that I got through the first day of tests/interviews and was invited back to the second round, and would have gotten the job if I'd performed better on the technical-but-not-programming-related tests. My point was just that they didn't care at all about having any programming experience. I thought there might be other similar jobs. From your extremely helpful sarcasm, you must think otherwise. Edit: You did suggest high performance computing and avoiding application programming, so thanks. I was just miffed at your "you're an idiot, no such jobs exist" when clearly some such jobs exist and I was just hoping to find more. Grey_Area fucked around with this message at Dec 30, 2010 around 22:45 |
| # ? Dec 30, 2010 22:41 |
|
Luck and networking have frequently more to do with employment success. I think your idealism is misplaced (you will have to learn more, or get paid less -- pick one) - although in the niches I mentioned above it isn't always the case, but they are few and far between by comparison. And the example you cling to, actually demonstrates that you can't get these sorts of jobs because you don't have the technical knowledge to get past the interviews ![]() tef fucked around with this message at Dec 31, 2010 around 00:05 |
| # ? Dec 31, 2010 00:02 |
|
tef posted:Luck and networking have frequently more to do with employment success. Yeah, that's fair enough. The "technical tests" assumed no specific knowledge of anything related to computers, so that's not why I failed them. I intend to learn more, but I'm not going to be able to learn a massive amount in three months while simultaneously writing up a PhD. I'm not that bothered about getting paid a lot, but I assumed low paying jobs would involve lots of drone work and little development. I'd be happy to be proved wrong, though. I guess "nah, you're hosed" might be good advice, but I'll keep looking for now. Grey_Area fucked around with this message at Dec 31, 2010 around 00:45 |
| # ? Dec 31, 2010 00:37 |
|
Grey_Area posted:Ok, thanks. I'm not sure I'm being particularly naive. The one job I applied for seemed ideal, but like I said I failed the technical tests. I put it down to excessive stress, but even if it was incompetence or stupidity I got to the last round of interviews so at least had a reasonable shot at getting the job. And that started you on £30k with really good benefits and required no experience at all. And IBM also require no experience for software development jobs, while paying a bonus to people with PhDs in any mathsy/engineering subject. I was hoping there might be other companies with similar starting positions. Grey_Area posted:Yeah, that's fair enough. The "technical tests" assumed no specific knowledge of anything related to computers, so that's not why I failed them. I intend to learn more, but I'm not going to be able to learn a massive amount in three months while simultaneously writing up a PhD. I'm not that bothered about getting paid a lot, but I assumed low paying jobs would involve lots of drone work and little development. I'd be happy to be proved wrong, though. I guess "nah, you're hosed" might be good advice, but I'll keep looking for now. EDIT: Since you're a math PhD, You might also want to ask around about jobs in the grad school megathread in SAP.
|
| # ? Dec 31, 2010 05:16 |
|
I've seen graduate jobs as low as £15k. 30k is a pretty good starting salary.
|
| # ? Dec 31, 2010 06:40 |
|
tef posted:I've seen graduate jobs as low as £15k. 30k is a pretty good starting salary. Grey_Area, ever considered moving to the states?
|
| # ? Dec 31, 2010 06:56 |
|
Might be things like universal healthcare and different taxation
|
| # ? Dec 31, 2010 07:19 |
|
I'm about to get an applied math degree with a decent GPA from a pretty reputable school and I can program pretty well (I would guess just as well as most CS majors here, fwiw) plus I have a couple of small projects under my belt. Let's say I want to apply to programming jobs -- how should I best leverage (god, I hate that word) my math degree? I understand that math skills aren't really that important for most programming jobs, but there's probably a couple of niches mentioned in this thread out there like numerical analysis/simulation, which I've done lots of, as well as high performance computing etc., where they could come in useful. Any suggestions? Also, are there any good books/textbooks/resources out there that I can read up on to fill in the gaps in my CS knowledge, plus not come off as a relative schmuck in interviews? frightened goat fucked around with this message at Dec 31, 2010 around 09:25 |
| # ? Dec 31, 2010 09:20 |
|
In, the spirit of the thread, I recently got a summer internship at Microsoft, so if anyone has questions about the interview process, feel free to ask.
|
| # ? Dec 31, 2010 13:43 |
|
This thread could not have come at a better time. I just graduated with a CS degree, and I'm going through the process of getting me resume spruced up. I'm absolutely terrified, but excited because I'll (hopefully) get to do something besides IT crap now. In the OP you mention knowing how to analyze run-times and similar things for algorithms. My algorithm analysis class was taught by a mumbling Chinese man who couldn't speak English to save his life (the class started with 5 people, ended with me and one other guy :C) So needless to say, I never REALLY learned much about the subject. Where could I brush up on that? And, how important is it really to an interview? (I guess that depends on the company)
|
| # ? Dec 31, 2010 18:57 |
|
shodanjr_gr posted:In, the spirit of the thread, I recently got a summer internship at Microsoft, so if anyone has questions about the interview process, feel free to ask.
|
| # ? Dec 31, 2010 18:59 |
|
Jick Magger posted:This thread could not have come at a better time. I just graduated with a CS degree, and I'm going through the process of getting me resume spruced up. I'm absolutely terrified, but excited because I'll (hopefully) get to do something besides IT crap now. Books are your friend. Cormen, et al. is usually the standard for algorithms classes ( http://www.amazon.com/Introduction-.../dp/0262033844/ ) but I also liked this one and found it explained some things more clearly: ( http://www.amazon.com/Algorithm-Des.../dp/0471383651/ )
|
| # ? Dec 31, 2010 19:16 |
|
Cicero posted:Grey_Area, ever considered moving to the states? Vaguely, but never seriously. I suppose it's worth looking at properly. Thanks for the advice, everyone.
|
| # ? Dec 31, 2010 20:04 |
|
Jick Magger posted:This thread could not have come at a better time. I just graduated with a CS degree, and I'm going through the process of getting me resume spruced up. I'm absolutely terrified, but excited because I'll (hopefully) get to do something besides IT crap now. quote:And, how important is it really to an interview? (I guess that depends on the company) code:Explanation of answer: The outer loop obviously executes 'n' times. For each time the outer loop executes, the inner loop ALSO executes 'n' times. So if 'n' was 5, when i = 0 in the outer loop, the inner loop will execute with j = 0, j = 1, j = 2, j = 3, and j = 4. Then when i = 1 in the outer loop, the inner loop will again execute 5 times. And so on for i = 2, i = 3, and i = 4. So total running time with 'n' = 5 is (5 * 5). As 'n', the length of the array, gets larger, the running time of the method will increase quadratically. If the size of the array doubles, the running time will increase fourfold. If it triples, the running time will increase ninefold. tef posted:Might be things like universal healthcare and different taxation wolffenstein posted:Are MS interviews as bad as the rumors say? ![]() frightened goat posted:Also, are there any good books/textbooks/resources out there that I can read up on to fill in the gaps in my CS knowledge, plus not come off as a relative schmuck in interviews? Cicero fucked around with this message at Dec 31, 2010 around 23:41 |
| # ? Dec 31, 2010 23:35 |
|
Cicero posted:Here's a super simple example:
|
| # ? Jan 1, 2011 01:14 |
|
shrughes posted:It's O(n^3), right?
|
| # ? Jan 1, 2011 01:18 |
|
Cicero posted:No. As I posted in the spoilered answer, it's O(n^2). Why do you think it's O(n^3)? Because there exists a number x such for n > 0, for all inputs of length n, the running time is less than or equal to x*n^3?
|
| # ? Jan 1, 2011 01:50 |
|
shrughes posted:Because there exists a number x such for n > 0, for all inputs of length n, the running time is less than or equal to x*n^3?
|
| # ? Jan 1, 2011 01:56 |
|
Cicero posted:You have me second-guessing myself here but I really don't see where you're coming from. I am simply sperging about the meaning of big O notation. Any function that is O(n^2) is also O(n^3).
|
| # ? Jan 1, 2011 02:03 |
|
shrughes posted:I am simply sperging about the meaning of big O notation. Any function that is O(n^2) is also O(n^3).
|
| # ? Jan 1, 2011 02:04 |
|
Cicero posted:Ok, I guess. Generally when people are talking about the Big-O running time they mean the lowest valid running time. The lowest worst-case running time, right? In my experience, most run-time analysis is done as a spot check, like after you devise an algorithm, the interviewer will ask as a quick check what the running time is. It should be obvious after you just implemented it. For entry level jobs, I feel like programmers and engineers (ones that I'd want to hire, anyway) will rarely struggle to find the obvious right choices for data structures or run times. Hmm, I guess what I mean is, I think I'd expect most people to use hashmaps over lists where appropriate. That's not the part of programming that presents a challenge most of the time. That said, if someone asks you the run time of the level of program that comes up in an interview, you should be able to do it fairly naturally. Which should come with enough programming under your belt. Granted that's maybe a catch 22 when you're going for your first programming job. The vast majority of interview questions will involve loops, search, sorting, recursion, and dynamic programming. I'd say you can quickly build an intuitive sense of run times for the first 4, and from there it should be easy to arrive at the correct run time for algorithms that are composites of those.
|
| # ? Jan 1, 2011 06:09 |
|
I've done a lot of interviews and hired a lot of people for technical roles so I thought I would throw in some stuff from the point of view of a hirer in the private sector, not so much fresh grads but more people with 2-5 years experience. It is important to remember that if you are interviewing there is a specific job that needs to be done. We have code to be written and we are trying to find the person best suited for the task. Most jobs are not incredibly technically difficult which means it is rare we need to hire someone to come up with a completely new paradigm for something never attempted before. Most often there is just a bunch of stuff that needs to get done, and you don't need to be Einstein. Getting something done in any organisation is a function of competency and the ability to work with others. I will ask you a series of technical questions to gauge your level of competency, and based on your answers and other leading questions I will try to assess your ability to play well with others. I will also try and work out what you want from the job, career goals, specific interests as they will have a bearing on how I manage you day to day, and if you will "fit" with the existing team members. Ultimately there is no way of knowing if you are competent or will fit in with the organisation and team until you start working, so I am going to go with the person who seems like the best bet and hope for the best. The easiest way to prove your competency is to have actual proof. If I need a C# developer and you can show me a list of c# projects you have worked on and your blog about C# programming, it is a reasonable bet that you are going to be competent. Some people know a lot but are very sloppy and lack attention to detail, but this is hard to ascertain from an interview and short technical questionnaire. If you can show a history of successful projects under your belt +1 to you as you can get stuff done without it turning into a complete shitpile. If you're still in college work on open source projects. It is a great way to get experience and most people who work on open source are passionate about what they do and write exemplary code. Take a look through the code base of OpenBSD, it is immaculate. In most jobs you will be working with an existing code base, probably quite messy in places and probably not documented as best it could be. Having the ability to take a bunch of source code, figure out what it does and make some meaningful contribution is something that is very hard at first and takes practice. Get the source to apache, build it, run it, add some printf's, keep reading the source it till it makes sense then fix a few bugs. Maybe it is not a huge deal in the big scheme of things but it shows that you are smart enough to get yourself to that level. The second thing I will ask you about some scenarios and how you would respond. For instance "The customer disagrees with how a feature has been implemented, even though that is what the BA documented, what would you do?" or "It becomes clear that a colleague has been introducing bugs because they have not done basic testing of their code, what would you do?" I don't really care what your answers are but I am looking for a few things: 1) The ability to understand that two people can have differing opinions and that both are likely valid. If you just want to sperg out and throw your hands in the air it is unlikely you will be effective in getting things done. Also I like to ask about things you dont like, and then ask you the good things about them. So if you say you think PHP is arse I will ask you to explain why, and then get you to explain why it is so popular. Again I am not so much interested in the specific reasons, but I will see how you communicate technical concepts and if you can be objective in your reasoning. 2) The ability to act in a collegial and professional manner, at least most of the time. Often work has to be done to a deadline, and often you don't have the ideal set of resources. No one will be happy with that situation but I want people who can accept it and work within the constraints and still be successful. If you're going to be whining cause the dba is an idiot or the customer is an idiot I can't really help with that and we have to work with it. Otherwise it creates an unpleasant work environment for everyone. On the subject of PhD's, I have two guys with Doctorates reporting to me. I have noticed that they place a great deal of weight in being "smart". I think it is a product of the environment of academia, where obviously being smart is really important. This can have an impact on their ability to work with others. I really don't want to generalise but they can have a tendency to think that they are really smart and that they are right. And they usually are right, but in this environment being right isn't as important as getting things done. It comes back to people having differing opinions, and usually both have their merits. You need to be able to ascertain what the other parties are after, and work out a way forward that meets their objectives. At the end of the day I am hiring people cause I need stuff done. If you're going to scoff at other people or teams it will just make it harder. Now not all PhD's are like this at all. It is just important to realise that if you are moving from academia to the private sector, the drivers differ which means the way the way people interact and operate differ, so treat it like you're at a party where you don't know anyone and tread lightly until you feel you have it sussed out. 3) A degree of enthusiasm and engagement. This is not a show stopper but it is always nice. It is great to work with people who are passionate about what they do. Ask questions about the organisation, what are its goals, what are the teams goals and how do they fit in the bigger picture of the organisational goals. Be interested in the company and the other team members, ask about their backgrounds are and what they like about the organisation. Go to conferences and special interest groups, read peoples blogs, be engaged with the wider technical community of whatever area you are in. For better or for worse being smart is a commodity, and technical skill is a commodity. There are plenty of smart people in this world, and plenty of people who know C#. If you take anyone you admire or who is famous it is usually on the back of stuff they got done along the way. Being able to get things done, to deliver, is something you need to cultivate. So to sum up: Be good at what you do and be able to prove it. Understand you are being hired for a specific task, so we want the person best able to complete that task, which includes working with others. Be able to get on with others, keep an open mind and be flexible. Ideally, be doing something you're passionate about or at least enjoy on some level.
|
| # ? Jan 1, 2011 20:08 |
|
|
| # ? May 22, 2013 05:56 |
|
wolffenstein posted:Are MS interviews as bad as the rumors say? I personally loved the experience. It was very casual. You get interviewed by developers themselves, not some HR crew, at their offices (and over lunch with one of the guys). Really nice people and most of them were just brilliant! The key is (as with most professional interviews I guess, although I have nothing else to compare against) that you actually TALK and discuss the problem at hand extensively before and while you are tackling it. The impression that I got was that if you fail a tough question, you can still be very much in the running if you've put across the impression that you actually know HOW to tackle problems, rather than memorize and recall solutions from memory. Plus discussing the problem and probing about potential issues will help the interviewer realize that you can be a team player and not some gun-ho pro-coder guy who just works by himself and can't socialize.
|
| # ? Jan 2, 2011 10:43 |



















