|
This thread is getting programming jobs, especially for newbies. That can be lifelong math nerds with CS degrees looking to snag a position with Big Tech, people with no coding experience looking to self-teach, or desperate humanities majors trying to pivot careers into something that pays well. All are welcome under this roof. Personally, I'm of the CS degree/BigTechCo variety of coding goon, so some of what I write here may be biased towards that experience. A few definitions that help make the rest of this OP make sense: 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 Note that computer science != programming. College computer science programs invariably teach you to code at some level along the way, but the focus is on more abstract concepts like data structures, algorithms and discrete math, and this is more true the more prestigious the college is. Since CS programs can vary wildly school to school, if you want to know how much of it is applicable to industry, ask someone who goes there, or better yet, someone who used to go there and now works as a programmer. That said, getting a CS degree is the safest path to becoming a professional software engineer. It provides the most structure and support to learning, and just having a CS degree on your resume is a big boost when you're just entering the work force. 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). Other job titles include software developer (dev), which is kind of a catch-all for "writes software" and is often interchangeable with software engineer, and principal engineer, which basically just means EXTRA senior engineer. 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 into software engineering, 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 how algorithms' running time responds to changes in the size of their inputs. 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? Yes. Well, maybe. The job market right now for devs is excellent overall, but companies often play the hiring game very safe, by preferring to not hire at all than to hire someone that seems iffy, as bad engineers can cause negative productivity. That said, overall jobs are abundant and salaries are high, as demonstrated by the following large numbers: code:
So according to NACE, CS is in the #4 spot now for new grad starting salaries. Compare that $64,700 to a reported average of $36,553 for humanities majors. Ouch! Now anecdotally, it seems like there are simply more jobs about in CS than in other engineering fields (software engineering is definitely growing more). But that's not all! http://www.drdobbs.com/architecture-and-design/2013-developer-salary-survey/240163580?pgno=1 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 in even more good news, CareerCast rated software engineer as the third-best job to have overall, beating out, well, everyone except for actuaries and biomedical engineers. Woo! 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? To maximize your odds of entering the ranks of the good-jobbed, you'll want as many of the following as possible: 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 cutoff around 3.0. As you progress in your career, a high GPA's relevance rapidly declines, but early on it's an excellent thing to have on your resume. 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:
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!
Here's an actual question taken from an interview I did with Microsoft: 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. Check with [the recruiter/someone who works there/someone who works in a similar company] about expected dress. A safe rule of thumb is go a half-step or step above whatever people normally wear to work there. For example, interviewing at Google where people usually wear jeans and a t-shirt, I wore nice jeans, a t-shirt, and a nice collared sweater. 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/Microsoft-Interview-Questions-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 my senior year was from a company that wasn't recruiting at my school, I just applied online. These job requirements are intense! Guess I'm not good enough... Skandranon posted:All job requirements are 'wish lists', very similar to the ones children make for Christmas. When should I start applying for jobs? 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 the most talented new 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 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 80s through the low 100s, although keep in mind that we're talking the most prestigious companies in high cost-of-living areas. It's also possible you'll get some sort of signing bonus in cash, and some 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), although the bidding wars at the big names have a pulling effect on everyone else too, so be thankful Facebook gives out 100k signing bonuses to former interns who sign with them. I got an offer what do I dewwwww?? Congrats, you've escaped the Gen Y Curse. You should try negotiating, although as a new college grad your leverage is small (some would say nonexistent). Still, it's probably worth a shot, especially if you have multiple offers. If you're still waiting on other companies for interviews/offers, try to play for time. Most companies should be understanding. Here's a good guide to negotiating for engineer-types: http://www.kalzumeus.com/2012/01/23/salary-negotiation/ 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. But what if I'm not a sheeple and don't want to/didn't follow the standard CS degree path right out of high school? Is there hope for me? Yes! There are many paths to salvation, my son. They fall into a few different categories (see the Appendix for more links): Degrees: If you already have a bachelor's degree in something else, you can get often still get a master's in CS. This usually requires you to take some preliminary classes before you can start the grad program proper; for example, BYU's program says this: quote:Provisionally admitted students must either take or have taken the equivalent of CS 124, 142, 235, 236, 240, 252, any three CS courses beyond the 200-level (except 404), any two math courses beyond Math 113, and either an additional CS course beyond the 200-level (except 404) or an additional math course beyond Math 113. A forewarning, though: to some, these types of degrees have a stigma precisely because they are most often used by programmers who come 'late to the game', so to speak. Bootcamps: These are intensive programming courses that usually last somewhere in the 2-3 month range, and the bootcamp will be pretty much your entire life during that time. The most well-known ones have gotten some positive press, and some even guarantee a job or your money back, but as a whole they're relatively new and it's hard to say anything concrete about them. Personally I think there's a lot of potential here, but I'd also be very careful about researching them if you're interested in participating in one. Self-teaching: Online tutorials, books, reading forums and stackoverflow, and the newest addition to this area, free online classes ala Coursera or Udacity. These things take the least upfront investment, especially in terms of money, but can still lead to developing marketable skills, and the sheer amount of resources you can draw from to learn programming is immense. The main drawback is that you need to be very self-motivated; in practice, most people who go this route don't make it very far (e.g. the average completion rate for MOOCs is tiny). Turns out learning a difficult subject without real live humans to get help from is hard! Those who go this route will also really need to go out of their way to prove they actually learned enough to be useful. A portfolio of sorts is pretty much required. Reading Hacker News is a good idea for all types of developers, as it's basically the news site for programmers, but it's particularly necessary for people who are self-teaching since you won't have IRL contacts telling you about cool new stuff. Of course you can't read every single article that pops up there, but keeping tabs on it and doing a fair amount of reading about different languages, technologies, ways to prep for interviews, etc. is an excellent idea. Oh, and remember: down with slavery posted:The idea of holding a "career" where you get raises that will compete with what you can get shopping around is long gone. They'd rather pay you poo poo for as long as possible and get their moneys worth than invest in to you long term. Cicero fucked around with this message at 21:08 on Sep 21, 2015 |
# ? Dec 24, 2010 20:04 |
|
|
# ? Apr 26, 2024 14:59 |
|
- APPENDIX - Useful Resources (includes inline links from above)
Practice practice practice Example Resumes (Disclaimer: these resumes are decent or better, but not perfect. You can ask about resume help in this thread, but you may also want to consider consulting an expert like that resume guy) USSMICHELLEBACHMAN: PDF Cicero: PDF, DOCX (note that Dropbox's doc viewer doesn't handle docx too well) Someone's fiance: PDF, DOCX astr0man: PDF, LaTeX aBagorn: PDF Random Resume Tips
*** Goon Mentors *** Helpful goons that can help you out, because let's face it Timmy, you're desperate. PM them to seek their guidance (click the usernames). listed in thread postcount descending order "Ithaqua posted:Experience: .NET/C# development, all things ALM (SCM, Agile, DevOps), TDD, unit testing, former interviewer "Cicero posted:Experience: Google, Amazon, Goldman Sachs (internship), Java, Android "shrughes posted:Experience: LaTeX, C, C++ (NOT C/C++, that's not a language!), LaTeX "Strong Sauce posted:Experience: Worked at a big corporation and two startups. Javascript, Ruby, Backend Web Development "bonds0097 posted:Experience: Automation, Security, Java, Android "pr0zac posted:Experience: Facebook, Y-Combinator, Apple, Python, C++, C, Ruby You can also access LIVE synchronous gooncoder chat right here. Data structures and algorithms for interviews You should know the basics of: linked lists in their various forms (singly-linked, doubly-linked, stacks, queues, deques), arrays and array-based lists, trees (particularly binary search trees), graphs, sets, maps/hashes/dictionaries (these all mean the same thing), and hashtables. As far as algorithms you should know offhand, sorts are the most common one. You should know a couple simple O(n^2) sorts like bubble/insertion/selection, and the major average-case O(nlogn) sorts: heapsort, mergesort, quicksort. ESPECIALLY quicksort. How can you come to know these things? Implement them all in your language of choice. Then google around for problems that use them, and code up solutions. Look at the Big O Cheat Sheet when you need a bit of review. Cicero fucked around with this message at 07:18 on Jan 13, 2016 |
# ? Dec 24, 2010 20: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 21: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 06:34 on Dec 28, 2010 |
# ? Dec 25, 2010 02: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 05: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 06: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 07: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 16: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 20: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 23:24 on Dec 28, 2010 |
# ? Dec 28, 2010 23: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 22: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 19:31 on Dec 30, 2010 |
# ? Dec 30, 2010 17: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 20: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 21: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 23:34 on Dec 30, 2010 |
# ? Dec 30, 2010 23: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 23: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 23: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 23:45 on Dec 30, 2010 |
# ? Dec 30, 2010 23: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 01:05 on Dec 31, 2010 |
# ? Dec 31, 2010 01: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 01:45 on Dec 31, 2010 |
# ? Dec 31, 2010 01: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 06:16 |
|
I've seen graduate jobs as low as £15k. 30k is a pretty good starting salary.
|
# ? Dec 31, 2010 07: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 07:56 |
|
Might be things like universal healthcare and different taxation
|
# ? Dec 31, 2010 08: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 10:25 on Dec 31, 2010 |
# ? Dec 31, 2010 10: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 14: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 19: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 19: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-Algorithms-Third-Thomas-Cormen/dp/0262033844/ ) but I also liked this one and found it explained some things more clearly: ( http://www.amazon.com/Algorithm-Design-Foundations-Analysis-Internet/dp/0471383651/ )
|
# ? Dec 31, 2010 20: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 21: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 00:41 on Jan 1, 2011 |
# ? Jan 1, 2011 00:35 |
|
Cicero posted:Here's a super simple example:
|
# ? Jan 1, 2011 02:14 |
|
shrughes posted:It's O(n^3), right?
|
# ? Jan 1, 2011 02: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 02: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 02: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 03: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 03: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 07: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 21:08 |
|
|
# ? Apr 26, 2024 14:59 |
|
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 11:43 |