Professional Documents
Culture Documents
http://www.reddit.com/r/cscareerquestions/wiki/index
General Information
Finding a Job
Salaries
Programming Languages
Recommended Books
Learning to Program FAQ
Guides
A Guide to Lifelong Employability for Tech Pros
Pre-Summer Questions for College Students
Giant list of categorized job-search related submissions
How to Prepare for Tech Interviews
What Every CS Student Should Know About the First Job
Salary Negotiation: Make More Money, Be More Valued
Can you get an internship as a freshman in college: A Guide
Popular AMAs (Ask me Anything threads)
CTO's, Creators, and Co-Founders (AMAs)
I'm the CTO of AngelList.
I'm the CTO of MongoDB.
I'm the CTO of Thoughtworks.
I'm the CTO of KhanAcademy.
I'm the Creator of Ruby on Rails.
I'm Dave Fecak, recruiter and author/blogger behind Job Tips For Geeks.
Other Popular Posts
I recently got a job at Amazon. Here's what went down.
New Grads 2013: What was your offer? Hard numbers
I'm Scott Hanselman, Author, Professor, Programmer, and speaker to 500k+
developers worldwide. AMA!
FAQ
Getting Started
What is a typical work day like for a programmer/software engineer/etc?
Getting into computer science/software development without a CS degree
Also, read about discrete math, data structures, and algorithms. Read a
bit about number theory and encryption. Watch some of the Stanford
or MIT CS course videos online. Or, take some of the online courses
you mentioned. If you are still interested in CS at that point, then you
might want to consider pursuing the degree.
There are companies who hire people with Math and Business degrees
and teach them to program. I'm not saying they are common, but they
exist. I know of one who's about to start a new class of 15-20. I
personally know 3 Math majors who are programmers there.
The four most important things you need to understand well are data
structures (for modeling data), algorithms (for processing that data),
pointers (to have a vague idea of how the memory is being used) and
recursion (usually more awkward than using loops, but for the cases
when it isn't you'll thank God for that.)
My standard suggestion is to read SICP cover to cover while doing all
exercises. SICP is widely considered the best intro to programming
textbook, its biggest downside is being math-heavy but that shouldn't
stop you. That book is available for free online, you should read the
first few pages and if you don't like it just disregard my suggestion.
As others have likely suggested, learning by project is the canonical
way of learning programming, but it has a downside - there are
concepts that you can't just acquire by osmosis, or derive from first
principles. How I suggest you do it is as follows:
1. Do a project that is slightly out of your reach
2. Improve your programming on the way
3. The second you feel like you're reaching a plateau, drop everything
and learn some new concepts from a textbook.
4. GOTO 1.
Also, a lot of people disregard the importance of learning theoretical CS, but
not doing so constitutes a dead-end in the middle to long term. Even if it is
not immediately evident why you should learn something, try to learn it
anyway. I've had some extremely important insights pop from places where I
least expected them (ex. class on database implementation made me
understand SQL performance, class on highly abstract concepts of lambda
calculus made me understand functional programming).
Can I switch from my current unrelated career to computer science/software
development?
Go to code academy or khan academy and learn for free. Then write a ton of
code. Build things, make them work well, figure out how to sculpt the code so
that it's easy to add new features and configure it the way you want. Build
something awesome and open source it. You can build up your resume in this
field without ever having an actual job.
How important is a CS Bachelors to work in the field?
Suck it up and get the degree if you're interested in software development.
The truth is it will get you into software development a lot faster and with
better companies than going to a boot camp or doing something on your
own. While I know people who have gotten jobs without a degree, they have
often needed to work twice as hard to convince the hiring manager that they
can do the job.
In IT you pretty much need certificates to get hired/promoted. In SE, there are
no good measures of software development aptitude besides writing
software.
Certificates are really more of an IT thing from what I understand. If your end
goal is to be able to operate and manage a set of products, then I can see the
certificate route being a viable solution.
CS and software engineering typically do not have much use for the
certificate model, because you get certified to handle predictable problems in
a structured way, whereas programming is more a free-form problem solving.
It's not strictly necessary but it makes it a million times easier to get your
foot in the door, and helps improve your value in the long term.
Being self taught usually leaves a lot of holes in your expertise. You list off
what languages you know and that's usually the sign of a very novice
programmer. What do you know about OO principles, algorithms, data
structures, and design patterns? Successful webdev requires having these.
There are plenty of outliers here who have succeeded without degrees, but
you must understand that they are outliers, either in terms of ability,
dedication, or just plain luck.
Self teaching yourself a language is pretty hard. I would be curious how well
you really know java if you think you can side step college already. It's easy
to look at books, tutorials, and run through code and say, "Oh yea, that
makes sense", and then when you are in an interview room and they start
asking difficult questions or give your something to program you realize how
unprepared you are. I actually purposefully didn't put any languages on my
resume unless I had invested a couple hundred hours in real programming
with them first.
Some questions I got and some of my friends got in an Amazon interview
about Java were, "Whats the difference between final, finally, and finalize in
Java?", "How does garbage collection work in Java?", "Whats the difference
between HashMap and HashTable in Java?", "Whats the difference between
String, StringBuffer, and StringBuilder?". These aren't hard to figure out with
a Google search, but you aren't going to have that luxury in an interview so
you had better know the language inside and out.
Let alone more general questions like: "Tell me everything you know about
HashMaps and then implement a simple HashMap", "What is the range of a
32 bit Integer", "How do you modify a HashMap so that it can pick a random
element in O(1) time?", "How do you rotate a 2D matrix 90 degrees?",
"Implement quicksort/mergesort", "What are the 4 famous/common simple
recursion functions", "How do you find the biggest substring palindrome in a
string in O(n2 )?", "How do you reverse a linked list?"
If you cannot answer these questions, and you don't have a good grasp on
the underlying concepts there is no way you're ready to side-step college.
Also HTML doesn't really count as a programming language, and it is pretty
much implied if you know JQuery, CSS, or PHP. Also JQuery is of course a
framework of JavaScript, but for brevity that is fine. I am surprised you didn't
write down SQL? You really need to learn SQL and get familiar with a MySQL
asap, especially for web coding.
I guess my point is that going to school and getting a degree will help you get
used to a lot of the stuff you will need to do well in an interview, even if it
doesn't feel like it when you are in the classroom all the time. At my job and
my friend's jobs (as best as I can tell), people without degrees or years of real
world experience go to the bottom of the pile (internships help a lot as well).
Not to mention they have to quiz self-taught programmers extra hard
because they don't want to accidentally hire someone who thought that
reading a programming book makes them a programmer.
From what you have said it's probably possible for you to get a job or do
some freelance web development (though you REALLY need to know MySQL
and SQL first), but if you ever want to do anything besides web coding, the
easier and better way is to tough it out and get a CS degree at a university
(might as well go to community college first, it's easier, cheaper, and it'll
make it easier to get good GPA at your university when you transfer).
Computer Science Degrees and School
Anyhow, the consensus here is that the quality of education among any
accredited undergraduate programs is pretty uniform. The two big benefits of
higher ranked programs are connecting you to a more ambitious or
connected group of peers, and better connections to professors and research
opportunities if you choose to pursue grad school.
Google, Facebook, Amazon and Microsoft also have a reputation for recruiting
much more heavily out of maybe the top 5 or 10 US News-ranked schools.
Lucrative albeit stressful jobs working on high frequency trading algorithms
on Wall Street might emphasize pedigree even more.
Which universities do the "big" tech companies recruit from?
Tier 1
Stanford
Berkeley
CMU
UIUC
UT-Austin
GaTech
MIT
UMich
UW (washington)
UCSD
Tier 2
UMD
Purdue
Cornell
Rutgers
USC
UCLA
Univ of Ga
Duke
UNC
VaTech
UVA
UPenn
PennState
Univ of Wisc @ Madison
RIT
RPI
Columbia
NYU
How do I choose between computer science, computer engineering, software
engineering, etc?
Computer science is software-focused but more abstract than the other two.
You'll learn a lot more about the mathematical foundations of good software
than on the other two tracks. Key classes that you might not find in the other
two include discrete math, algorithms and data structures, and compilers.
This is the track to follow if you want to do fundamental research on software,
if you like a mathematical way of looking at things or if you want to feel like
you know what makes good software from top to bottom.
Computer engineering will teach you the nuts and bolts of software
development along with how to build and test digital electronics. It's a great
degree if you want to get into embedded or systems programming. Big
employers of these types of graduates include Intel, AMD, Nvidia and other
companies that do both hardware and software.
Software engineering is computer science, minus some of the theory, plus a
lot more emphasis on how to work within a real organization to build and
maintain good software. Good if you want to work on big budget software
projects in particular, have an interest in project management or prefer the
craft to the theory.
Seems like my peers always know more than me. Should I be worried?
No.
I don't have a computer science degree, should I get a BS in CS or a master's
degree?
I don't have a bachelor's in computer science... but am looking to get
my Masters in it. Is it too late for me?
The biggest issue with Computer Science is the sheer weight of domainspecific knowledge. If you don't have any CompSci background, you'll
probably have to take so many pre-reqs that you'll be better off getting a
second Bachelor's in Comp Sci.
But if you've got a few years of dabbling and practicing, it might be a
perfect fit for you.
I've just gotta warn you: a lot of people get into CompSci because they hear
that it's full of high paying jobs. That's a loaded myth. Yes, you can make a
lot of money in this field, and yes, people who can leverage CompSci with
something else (like Marketing) are going to do better than the average.
But if you don't actually LIKE doing the work of programming and solving
intricate problems, you're going to have a lot of trouble getting through
school and may hate what you're doing at the end.
Do you already know a good amount of programming and computer
science? If not you're going to have an extremely difficult time.
MS programs often do admit people without CS undergrad degrees but
they'll assume you know almost everything you would have learned getting
a BS in CS or EE.
So to answer your question, if you're passionate about learning this stuff
and already have at least some CS background you should be alright. Just
don't expect it to be easy!
Career Change to CS -- Second Bachelors or Masters?
I recently graduated with a very fulfilling yet very useless bachelors in film.
I've realized that film is not the place for me, and I've discovered my
passion for coding and CS over the past few months. I've been spending
almost every minute of my spare time practicing coding and learning as
much as I can from online resources. Without a doubt, I would like to pursue
a career in CS.
I was accepted into Oregon State's online post-bacc CS degree. It fits my
needs very well because it is intended for people such as myself who have
the structure of the education (i.e. are their lessons planned out and
teach a particular way of solving something (and then show you a new
but similar problem and let you figure it out, while providing some tools
(i.e. functions that one needs, questions to ask/try and figure out, and
considerations to make)), or is their style to almost completely let you
figure it out yourself (in which case, why bother paying them?)),
And then I came across CodeIgniter. After a few tutorial videos and
ebooks, now I understand the basics of MVC and can create a database
months long.
www.makersquare.com[3] - MakerSquare - In Austin, surrounded by tech
companies, has a great placement rate and due to it's length, makes you
learn the language before attending.
As far as a lot of the complaints I see from devs and those with CS degrees,
I have the benefit of coming from a position where I was doing some QA
work along side both self taught and those with traditional degrees....the
code these guys write is indistinguishable from each other. As well, many
people with CS degrees say they only use about 10% of their knowledge in
web dev. Yes, you probably won't be able to develop amazing search
algorithms or revolutionize the industry with some new backend
technology, but you will be able to write code that is useful and
functional(and having QA'd a lot of code from those with CS degrees, they
should probably take the courses too). Frankly, I see these bootcamps as a
way in to an industry that is desperate for developers.
I would love to see the naysayers actually attend an open house and
possibly mentor students/graduates before making rash assumptions on
the validity of these programs. Yes, some schools put out crappy
developers, but if you took the time to investigate which schools actually
prepare you properly, you might just find some amazing developers who
can seamlessly fit in to your organization.
Experiences with Programming boot camps?
To me they are a little bit expensive 9k-17k and you might have to resign
from your job.
Maybe you can wait for Udacity's nanodegree in the fall. A lot cheaper i
believe 6-12 months @ 200/month so in the range of 1.2k 2.4k https://www.udacity.com/nanodegrees[1]
In the meantime continue learning. I suggest
Headfirst Java (book)
1.
Learn to program before boot camp. With all the resources online
there's no reason you can't learn to program on your own. This ensures a
whole bunch of things. It ensures that you actually like programming. It
ensures that you can learn on your own which will be important to your
career. It will let you figure out what branch of software engineering you
enjoy. It will teach you to think logically if you don't have a STEM background.
It will keep you from spending $20k if it turns out you hate programming.
2.
Figure out what type of development you like. Most bootcamps are
focused on webdev because that's big right now, but even then there's a big
variety. You can do backend stuff in Java, you can do RoR, you can go full
front-end and focus on JavaScript, you can do full stack stuff that involves
DevOps. Each bootcamp will have its own focus and each person has their
own niche they enjoy so you should make sure you pick the right one (go
back to #1 to figure out which one you enjoy).
3.
If you have a lib arts background your path will be much harder. If you
have a STEM degree you will have the baseline for thinking algorithmically. If
you have a music or English or art history degree you might find that you
have trouble with algorithmic thinking. This is not a given just a stereotype.
"Coding Bootcamps" good or bad when it comes to finding work?
I work at a coding bootcamp in the Midwest, and so feel it's important to
disclose my biases first:
Some programs have job placement rates like that, and it's pretty great.
Some do not (and in fact offer very little -- I remember reading an article
about a code school that would teach its students how to make iOS apps, but
then ended up just getting them a couple of textbooks and letting them come
into its office to work).
So here are some questions to ask:
1.
2.
How many portfolio projects can I expect coming out of this? Of those
projects, how many am I responsible for designing the specs myself? How
many of those projects will be done in collaboration with other students?
What are some examples of projects that students have created?
3.
From the last two classes, what percentage of students are now
employed as software developers? Of those, what percentage first got
internships, and what percentage were able to make the jump to full-time
employment immediately? How long did it take for your last cohort of
students to all be hired? What support did you offer to your students who
were searching for jobs? Is there a job fair? Do students have the opportunity
to practice interviewing?
4.
Who hires your students? Are there any companies in this area who are
resistant to hiring students? Why? What are you going to do about that?
The second biggest benefit I see to a code school / boot camp is that doing
the work requires you to learn quite a bit (assuming a well-composed
curriculum), and the structure lets you learn faster than you might on your
own. The biggest benefit is that you have someone else who can look at your
code and offer meaningful feedback (most of my job when we have students
is doing one-on-one code reviews with students -- I try to meet with everyone
at least once a week).
Because this is a growing (and increasingly lucrative) field, there are
definitely folks who are in it for the money, rather than because they're
skilled educators or committed to the mission or whatever. There are also
plenty of well-meaning folks who aren't very good at teaching.
You could certainly, with a bit of work, learn everything you need elsewhere
and on your own. Certainly. You could even take that tuition money, live off of
it for a few months, and really work at this. Doing so would require some
drastic restructuring of your life, but you could do it.
The question is whether or not you've got the discipline and the stick-to-itness to do this on your own, and whether you've got a network of folks who
can help to at least point you in the right direction. A really common mistake
that a LOT of beginners make is wasting time with trivial stuff ("I heard that
the best programmers use vim/emacs/etc. and Dvorak keyboards, so I'm
going to get really good at those before I start coding!"), so you need
someone who can tell you when you're wasting your time with stuff that
doesn't actually matter... or, I guess, you need to develop a good sense for
that, but it takes a while.
4 month bootcamp grad
fullstack w/ focus on front end
most grueling 4 months of my career. work for 8 hrs and then lots of
work to do at home to keep up
big sacrifice. a big part of why my 2 yr relationship failed.
landed six figure job about a month after graduation. several 80k
offers. 100% grads accepted offers within 1 month of program ending
Having worked around lots of developers, it's very clear that my skills are
more crash course vs them having put in years of work but they are all pretty
impressed w/ how much content we covered in 4 months. You can get ALOT
done when you dedicate your entire life to it for 4-6 months.
Think about it like this. If you get a CS degree, how many hours of actual CS
content do you sit through over the course of 4 years? Then look at how
many hours you put into (40+ hrs/ week * 16 weeks) a bootcamp. There you
have it.
I would take the bootcamp in the city that you want to work in. I took mine in
a city I live in but wanted to move. That worked out for me but everyone else
got more value out of it because the bootcamps have relationships in the
cities they are located in to make it easier to get jobs/ projects.
I can only speak for our students, but the short answer is "Only so far as they
want to be."
The longer answer is a little bit more complex, and varies from market to
market at least a little bit, but there are a few ways that our students have
avoided getting stuck with a single role:
1.
Improving their own skills. If all you ever learn is the Rails stack,
then all you'll ever be able to do is build Rails applications. Even though you
generally don't learn algorithm design or data structures or design patterns
to a meaningful degree in a boot camp (ditto for other languages /
frameworks / tools / etc.), our students who branch out and learn more things
generally find that there are opportunities to work their way up.
2.
3.
is, and regardless of your first job, you can learn new skills and you can find
ways to prove your competence with those skills (even if that means doing
side projects). And of course it's up to you to make sure that those skills are
of relevance to at least someone, but if you know how to do things that other
people need doing, probably you can find someone who will pay you to do
those things regardless of what things you've previously been paid to do.
Programming bootcamp VS. Uni
(also free pizza is usually included). Ask them for project ideas and for code
reviews. I just wanted to let you know that there are other options rather then
quitting your job and going full force into programming.
I hope this helps.
If you go to a good university, you'll learn theory and fundamentals of
computing, and also have a number of project courses where you can put
theory into practices. Most universities these days realize they will be
graduating software professionals and not researchers, and throw in a useful
amount of software engineering.
If you go to bootcamp, you'll learn some programming. It'll probably be more
immediately useful, but won't have the depth.
t's going to take much more self-discipline, but yes, it's feasible to gain the
depth of knowledge on your own. I don't think it'll come by just day to day
coding: it will take reading the right books (probably serious math and proofheavy textbooks, and they can be dry they can be even with a teacher and
TAs to help you through them), doing projects much like the course projects
you would do in school, and ideally a good mentor that has a strong
theoretical and practical background to help point out where particular
algorithms are being used in the code base, or could be used in code you're
writing (and help you avoid being Shlemiel the Painter[1] ), encourage
complexity analysis, and so forth.
Some of it may never apply directly, but it's part of what a computer scientist
applies holistically to problems. Fortunately, computer science does not
require expensive specialized equipment (as it once did, or as other
engineering disciplines do). For an embedded course, for example, when you
want to tackle learning about computer architecture and systems, an Arduino
or Raspberry Pi is cheap, and you can pretty cheaply build all sorts of devices,
such as basic robots, on top of them.
Open source projects or personal projects on GitHub look good, so whatever
you can do in that regard will be usefulobviously the more applicable to
what you're applying the better, but any reasonably complex project or
skill to have, but I wouldn't build the rest of my life on the assumption I will be
programming 'till I retire.
Portfolios
GitHub, GitHub, GitHub
How do you build a portfolio without professional or intern experience?
Is a portfolio filled with games good to get a job as a programmer for a
normal software company?
What do hiring managers expect out of an Entry Level candidate's GitHub
profile?
How can I build a really good software portfolio for something like an
internship over the next 6 months?
Github project for portfolio
Internships
Should I take an unpaid internship? Are they legal?
Can I get an internship as a freshman?
How much do interns make?
Declining a internship offer after accepting it
Company A offered me an internship but I want to work at Company B
How did you get your first internship?
Am I too old for an internship?
How hard are internships?
First internship jitters
Feeling overwhelmed as an intern
Frustrated and confused at internship
I don't have anything to do at my internship. What should I do?
Job Interviews
Is it ever a good idea to tell your boss you are looking to interview for other
jobs?
Stay where I am needed or go to better position?
Corporate or Startup?
Burnout
How common is programming burnout?!
I'm feeling burned out already...What do I do?
New grad with new job here... How do I avoid burnout?
Help. Am I ruined? Turning 33 now, I lost my drive, and feel insanity is the
only way out.
Computer scientist hating his career - Lost