I'd like to comment on this because I think that even though this question has probably been asked a lot in these forums, it doesn't matter, you get different perspectives every time it's asked.
With that, here's my experience and I guess "wisdom or insite" into our profession. Some of this will overlap with what others have already stated but I'm listing my experience and then my philosophy/opinion/suggestions to you for each
1) Yes, as others have stated, you do need to have some level where you're able to digest complex ideas, process, and be able to work through and come to your own solutions in code to problems.
On the other hand: You can learn to become a better problem solver over time if you have a lot of positive motivation to keep sticking with it, work hard, and ask a lot of questions. Most developers who say they know everything or try to appear like they do simply hide the fact that they've asked a lot of questions, worked their ass off in code, etc. to get to where they are at and to get as good as they appear to be
2) In our industry, again in my opinion, there is a lot of egos you have to deal with unfortunately. I don't see this as a good thing and it's especially a trait for a LOT of developers out there.
What you will find in my experience are one of the following type of teams:
"Code & Run" teams. This means all they care about is getting crap out the door fast, they could care less about code quality (clean code) or code that is maintainable later on. Stay away from these shops if you can. It's hard because even if you drill a company in an interview, you won't truly know how the team operates until you get the job and are about 4-6 months into it to see really how they code or if they truly promote teamwork and foster collaboration (ideas, etc.)
Average dev shop that is "ok". This means they care a little about code quality. They might have a few good devs on the team who work good in a team and have a positive attitude and then a mix of some devs who could have other traits such as egoistical, lazy, etc. So I mean it's kind of a hogposh shop but where the code isn't the greatest but tolerable
Great shop. This shop tries their best to really follow good design patterns. They may not be experts on design patterns but they know of good practices such as DRY, SOLID, whatever else. They don't necessarily expect superstars to join their team but they are looking for devs who are at least coding somewhat clean code and have a good amount of experience first. These are the teams you want to stride for...but you might have to go through a few shops to find good teams
Superstar Shop. This is a shop that only looks for the absolute best programmers but also best meaning programmers that have it all. They communicate well and work well as a team (positively with others for the better of the tema). Keep in mind every shop is gonna tell you yea, we only look for the best. Most of that is nonsense...they have good intention but a lot of times it's just marketing talk. But there is a % of shops that truly are looking for top talent. And you'll know that when you get into the interview and they're asking questions on threading, advanced design patterns, etc. So..to get to that level and if you want to work on a team that has this kind of expectation, it may take you a few years to get there
Superstar Shop with negative vibes/egos. There are shops out there that due hire top devs but where the majority of that shop can have a bunch of pricks who are superstars. So there are teams that just don't tolerate bad code but they are real pricks about it. It's not a team enviornment and you want to stay away from this crap. Our industry doesn't need it and neither do you
and one of the following types of developers out there:
a) Huge ego, knows everything, always wants to keep a distance from all, reveals little, has an attitude ...essentially not a team player and not someone you want to work with or have on your team
b) Devs who are there just to do a mediocre job and get the job done and go home. Personally I guess there is nothing wrong with it from an initial standpoint but at the same time I think our profession needs developers who are passionate and are willing to sacrifice and enjoy their craft to ultimately provide value but also to improve as a developer over the long haul because they care about becoming better
c) Devs who probably could make it but are too lazy, negative, or whatever other traits they possess that just causes hell for everyone but because mostly of laziness factor. Wouldn't want lazy people on my team...lazy engineers are not what we need in our profession
d) Devs who are good to great developers, who care about teamwork, who are willing to humble themselves, to teach others, to communicate, and to be open to constructive criticism on process or code (code reviews, etc.) and just simply care about being positive at work while working as a developer with all collegues. You want to work with these kinds of people, a positive supportive dev environment. Now I'm not saying that a team should be looking for leachers...you need to be able to hold your own weight but you don't want to end up on teams where they expect you to be a "star" developer and to never ask questions...that's a bad environment. Stay away from that...it's hard to find this environment in my opinion in our profession overall in my and other friend's experience throughout our careers. You can find good teams but they're harder to find than landing in chaotic shops with bad attitudes. So know what you're getting into, the grass is not always greener just because developers are so-called "professionals". I'm sure this can relate to any job probably but I think more so with our profession than most others out there.
3) One thing I learned the hard way is that if you are a perfectionist and care too much about good process and perfect code, it's gonna get you in trouble some day. Find that balance. You don't want pure sloppy code and you don't want to waste too much time to the point of your employer getting pissed off because it took you 2 weeks to get a relatively medium sized task done that should usually be done in lets say 3-4 days because you wanted it to be too clean. A good book to read and good guy to follow in our industry is "Uncle Bob". I am a big fan of his as are many developers out there. Read his blog posts on code and buy his book. I can't say how much wisdom and experience he has to offer people including yourself, who is just coming out of college about our profession in terms of best pratices, attitudes, philosophy, etc.:
his company blog: http://blog.objectmentor.com/articles/category/clean-code (and check out http://blog.objectmentor.com/articles/2009/02/03/speed-kills)
one of his many good books that I feel every developer should be reading or have read and have on your shelf: http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
His personal blog: http://cleancoder.posterous.com/retarded-architecture
And a good video of his at a conference he spoke: http://www.viddler.com/explore/oredev/videos/36/
4) Don't stress yourself out about competing with all the devs you work with. You need to realize it's going to take you a few years to even master the basics in our profession even if you've done well in CS. It takes time, work hard, ask questions, research, be patient...and especially since our industry is now in such flux, don't get frustrated if you do not know everything. Focus on the basics first...know them well for the first few years. Don't over complicate your worries, you're a Jr. Developer trying to become better and that will happen if you work hard and get good at basic OOP first. A lot of devs in our industry still don't know the fundamentals because they haven't put the effort into trying to know them and that's a negative. You want to know the fundamentals first well (Polymorphism, Encapsulation, yada yada). If you don't have a lot of opportunity to do a lot of OOP in your first few jobs, make a huge effort to research and practice it at home by playing around with code with some fun pet project on the side that you enjoy.
I could make this post longer but I'll stop here. If you have more questions per my post just reply in the comments and we can continue on discussing.
Ultimately if you are a genius, super smart, smart, mediocre, or suck, no matter who you are at what level, if you want to make it in our profession you are always going to have to work super hard and continually try to learn and improve yourself and aim for the best you can be (code, communication, etc.). Our profession is not one to take lightly.