Let me start off by a little background. I am currently a 3rd year pursuing a BS in Computer Science at a small Christian school in San Diego. I have take a good chunk of the courses offered to me, and have received an A/B in every class so far without too much stress.
Now, I want to expand my learning a little more, so I have come to communities like this to learn new things. Here is the problem. I glance over all the questions asked here, and become extremely discouraged. Sad to say, but I don't even understand a majority of the questions posed here.
I guess my question to you (Stack Overflow community) is:
The secret to happiness as a developer is not to know everything, but to be prepared to learn a lot about a particular niche. I don't know the answers to 90% of the questions here, but I do pretty well with the ones I do know. (And I've been a developer for 25+ years)
And then some day, you'll be like me, nearly 50 years old, and looking at all these questions and think "am I too old to learn all this new stuff?" In my case, I snap out of that funk by assigning myself a new side project involving a new technology. Last time I felt this way, I learned Perl and built some web sites using Fast::CGI. This time I'm doing an iPhone application.
Don't be discouraged. Just be willing to learn, one little chunk at a time. To answer your questions:
Is this normal?
Did it start like this for you?
Most definitely so. It turns out that computer science (or programming or software engineering) requires a lot of nitty gritty know-how e.g. knowing your way around the command prompt. And on top, it also requires solid fundamentals e.g. understanding big-Oh and how your algorithms perform. School tends to focus heavily on the latter, which is a lot of hard work and thus it can be overwhelming to find out that you still lack all the nitty gritty knowledge after all that. This definitely happened to me as I was finishing school.
If so, how did you conquer it?
I'm not sure that I have conquered it. You never stop learning. The thing to get good at is knowing how to read documentation, learning tools, libraries, etc and being methodical about this. Oftentimes it is really tempting (specially with SO around) to just search for how to do something and not understand what you are doing: drop that habit if you have it (I did/do). Always look into things until you understand them fully. If you don't know how to begin, it is probably an indication that you're also lacking some fundamentals knowledge -- find a book and read it from the beginning. This whole thing will be very time consuming at first, but as you build up your knowledge-base it'll become less so.
The questions on SO represent practically every aspect of professional software development. Languages, frameworks, tools, techniques, algorithms, specific products, patterns, UI design, and best practices are just the tip of the iceberg for discussion here. Then you add in the somewhat-offtopic stuff pertaining to IT, system administration, and personal approaches.
So I'd say don't get discouraged because what you want to do will bear itself out. If you want to be a Windows developer using C#, then that's what you'll be, and the questions about Erlang or Grails will be of no consequence to you. In other words, you'll create your own filters.
Even our beloved Jon Skeet  doesn't work in every tag. :) http://stackoverflow.com/users/22656/jon-skeet
Yes, this is normal. Unless you are Jon Skeet , you probably aren't an expert in every tag.
If you love programming, keep going. If you don't get out.
Believe me, they don't teach you everything in college. You'll just have to learn the rest of the stuff in the real world. http://stackoverflow.com/users/22656/jon-skeet
Medicine, Law, and Programming all have one thing in common: DO NOT consider University the place where you Learn, and the workplace where you Do. University is the beginning of your career, which must always include learning. The nice thing about programming is that no one dies or gets sued while you experiment, which is by far the best way to learn ;)
It's funny, but I remember way back when I was still a beginner, and I would read programming magazines or hear REAL programmers talking, and I would be intimidated too. So, yes, it started like that for me as well.
How I handled it was just being patient. Over time I realized that many of the concepts and stuff weren't really that difficult, once you understood them. I just made it a habit that whenever I felt intimidated by something, I would go out and learn as much as I could and master whatever it was. For instance, at one point in time C pointers really threw me for a loop. That's when all my experience was in BASIC on TRS-80s. Nowadays I find them easy to comprehend.
I think it's pretty normal, and you just have to keep plugging away. Just remember that ignorance does not equal stupidity. Just because you don't understand something NOW doesn't mean that you're incapable of understanding it.
I've been coding for 20 years and see some questions that I have no idea what they are about. And that's simply because there is such a wide range of topics.
For example, I was never a Python programmer, so if a question comes up that has terminology that is specific to Python, I think to myself, "huh?"
So yes, it's perfectly normal.
No, you shouldn't be discouraged at all. Nobody knows everything.
You'll start out in a career and it will be a rough and rocky but soon you'll be amazed at how much you learned in the last year, month, week, day, hour, minute, etc.
Yes. Somebody who's just coming out of college is very frequently woefully unprepared for some of the very important aspects of software engineering these days. That's not to say your education is fail; it's just to say that CS courses don't do enough on some of the things that are important for writing software professionally. I think there really needs to be more Software Engineering focus in a CS degree.
The Internet is a really, really great place (for more than just Porn!). The best software engineers these days are autodidactic. Trawl the blogs. Spend time here on SO. In fact -- don't be afraid to research an answer to a question you don't understand. That's a great way to learn. Remember: things change a lot in our field.
Yes, these feelings are perfectly normal. For more than just CS majors, really; everybody getting close to graduation has those "Am I doing the right thing here?" moments. It's worth investigating before you go off into a career, but don't dwell on it too much. A CS degree is often good for more than just a programming career.
I would not be discouraged! Stack Overflow contains an odd-odd mix of many many topics. Yes, you start out with your mind swimming.
If you're in a Bible College, I would read Ecclesiastes 4 and 5, find what you love in computers, and love doing it. You'll drift toward your niche in the industry and work form there.
If it's any encouragement, I came out of school w/ an MS, started doing QA work, moved to IT, moved to SysAdmin, and landed finally in Java Development.
As a Christian, you have more promises than the average bear to lean on. :)
SO usually covers a lot of language-specific problems rather than the general problem-solving skills one learns in school, so I would say do not be discouraged by SO. Look at the more language-agnostic questions and see if you understand them. If you do, you're on the right track.
Sad to say, but I don't even understand a majority of the questions posed here
I have a university degree, My job title is "Senior Software Engineer", and I've been programming professionally for over 6 years, and I don't understand the majority of questions here, and to put it bluntly, I'm not supposed to.
One of the stated goals of Stack Overflow is to recognize that there are so many niche areas of programming, and that the only way to possibly find an answer to most questions is to have as wide an audience as possible.
In a nutshell this means: The only way to find the 3 people on the planet who know how to solve your specific exact problem is to make sure we have an audience of all 200 million possible people. Don't worry if you're not one of the 3 people with an answer to a particular question... sooner or later something will come along that you will be an expert on, and then you'll be able to show all of us that :-)
Try to answer a single question on a new technology you are learning every day. You may not initially know the answer, but research/test/play around until you find the answer. Do this and you will gradually improve.
Excellent questions... The answer is Yes to all three. :-)
Of course, when I started, there was no Stack Overflow but there were many forums and newsgroups that I visited. I became very overwhelmed with trying to understand the questions.
I found the best way to overcome it is to just get in there and start developing. As I come across challenges that I don't know, I search Google, blogs, and ask at forums and now Stack Overflow.
One way to do that is to look at places like CodeProject  (http://www.codeproject.com/) where you have a large repository of code samples, tutorials, and such-like. You can download the source code presented in many of the articles, build it, step through it with a debugger, and see how it works. Then try to modify the code in a way that would interest you and see what you can do.
And of course trying to come up with your own "pet" projects is a good way to learn and be challenged, so that questions will arise and you will have an opportunity to look for the answer or ask it in the community (online or your associates).
Best of luck, and I do know what you mean. Sometimes we forget once we've been around things for a while how it is to start out and just the quantity of information is overwhelming. Don't give up! http://www.codeproject.com/
Don't worry about that. There are so many different technologies in IT that it is impossible to understand or even be aware of all of them.
I know how you feel though, because I had the same feeling a couple of years ago. Just keep on studying and programming and you will naturally get interested in a couple of technologies that really matter for your job and which you will enjoy using.
Did it start like this for you?
I had learned some programming while in high school and had written a couple of small programs. Then I wanted to improve one of my programs and begun redesigning it, but I hit a wall in trying to manage the complexity. Writing small programs was OK (1000-2000 lines of Java), but I did know how to go about writing larger programs.
If so, how did you conquer it?
In university I got the skills for designing larger programs, and the basic information on how things work (databases, networking, operating systems, algorithms, data structures, assembly code, concurrency, project management etc.). None of the things in themselves were hard to learn. It just takes time to learn them one by one. You also need to practice what you learn. While studying, it's good to have some hobby projects or part-time programming work, so that you can put to practice the theory that they teach at university (but don't work so much that it slows down the studies).
Is this normal?
In programming, you need to be learning new stuff all the time. And the more you learn, the more things you will see in the horizon about which you don't know that much. Then depending on what your needs are and how much time you have, you need to decide what learning that will benefit you the most, and leave the rest for some other time, or ask someone else to do the work which requires knowing those things.
Let me channel The Sphinx ( Mystery Men ) here for a second: There is more to computer science than software development, and more to software development than computer science.
Also, let me try and recall / paraphrase what one of my professors said: The reason to study computer science instead of just learning the current hot technology is that the technologies you'll spend most of your career working with haven't been invented yet. http://en.wikipedia.org/wiki/Mystery%5FMen
NOBODY understands most of the questions posted here!
We're all in the same boat. Programming is a huge field now - you simply can't know it all anymore. Fortunately, we all know a bit, so and can help each other out.
There is nothing better in life than doing something that you enjoy.
1. Did it start like this for you? Ten years of programming and it still is like "this" for me.
2. If so, how did you conquer it? It's not necessary to "conquer it", realize that most of the posts here are related to programmers getting stuck while doing something looking for a quick answer to that problem. It's a bit like asking your neighbor how s/he fixed that problem yesterday, since it would save time, and would generate an interesting discussion too.
3. Is this normal? Yes.
My advice: spend time with a good programming book, many if possible. It was much easier to do that back when bandwidth wasn't so cheap. So many more distractions now.
On the cover, in large friendly letters, are the words "Don't Panic".
I'll admit, I'm a newb (I've been programming since June 2007 and I don't have ANY technical background at all), so perhaps I am completely unqualified to answer this, but here goes.
The reason I am not intimidated by most of this stuff is that a lot of it is completely unrelated to anything I need to do right now. I work predominantly on web stuff (and specifically on Flash and Flex), I use PHP, JS, HTML, CSS... Most of the questions here are completely beyond my scope. I view this as, "They know that, I know my field."
The thing that really gets me is that I don't know what I am supposed to be trying to learn half the time. I have never even heard a professor even say Olog2n, and I don't even own a textbook which describes "best practices" for OOP. I'm more or less forced to figure out all of this stuff on my own and I make a lot of mistakes because I have no idea what I am doing. I also really want to know C and C++ (and somewhere along the way master Java, Perl, and Python) but I don't even have a good place to start...
But, I'm not miffed. If anything, the very fact that I don't know any of this means that I am more likely to look at something new. If it looks like Greek, then my mouth drops and I center-click the tab. Otherwise it is a fascinating trip .
I also have in my favor a particular stubbornness, but mostly this is built on a knowledge that, in computer programming, "if you bang your head against a wall for long enough, the wall will move" http://xkcd.com/214/
It is normal. Stackoverflow covers the entire range of development technologies. That is a huge range of knowledge, and nobody understands it all. You can't learn it fast enough to keep up with all the new stuff that is being added unless you specialize in a narrow niche. So get used to it. For the rest of your life you will go to sites like this and and wonder what all these guys are talking about. They will continue to invent new languages and new concepts and to give them strange new names.
But the best response is not to be discouraged any more than you should be discouraged when you walk into a library and realize you haven't read all the books. Stand in awe! Here is virtually limitless variety and opportunity for you. Take off your shoes --- in its own way, this is holy ground.
As you rise into management jobs in your career, however, you will have to make decisions to severely limit the variety within your organization so that you can build and maintain code cost effectively. Welcome to the real world!
It didn't start like this for me. I started writing Basic on an Apple IIe (found only in museums today). That was technology that a single human being could master. Ever since then I have watched the real world speed on past me. It has been a great life with wonderful people, and I am honored to have stood on the shoulders of so many giants who have built this stuff.
I'm guessing that most of the questions you are reading that are making your head spin are the ones that are specific to a technology, vendor product, or tool.
They make my head spin, too, because:
Don't worry. The worst possible thing that could happen in the future is that you spend some night reading through thousands of questions and you start thinking "Geez, why aren't there any new questions these days?" That would mean that you have nothing left to learn.
Most of these questions are very specific and about tools. Who cares about tools? Work on your fundamentals and use/learn the tools that you have available. I probably don't know 99% of the questions asked here, and I'm not afraid to admit that. It doesn't keep me from being kickass at what I do.
First off, let me tell you that I am primarily self-taught. I went to a community college and got a cert in programming (C primarily and some VB with SQL and database stuff tossed in). My day job is not programming (I'm a tech editor). I do, however, create web sites for friends and write games and tests for my children.
Yes. The wealth of information here and elsewhere can be totally overwhelming and discouraging.
You never have to change what you see, only the way you see it. I look at it as a vast treasure. I just dive in and try new things. Recently, I started using Perl for the first time ever. I was like a kid with a new tub of Legos. As for this site, take a look around at subjects you've studied or just touched upon and go from there. That's what I do. That way you'll have a comfort level while still being challenged and learning.
Totally. Even all the wise experts who have already responded have said so. You're in good company.
Think of this site differently. Rather than a place where the answer is always known, it's a place where for every. single. answer. someone was as completely dumbfounded as you. They just didn't hesitate to ask. Great question.
I definitely understand your situation. I'm a CS undergrad (senior year), I poke around on this site from time to time, and I've done so much on Code Review SE for the six months I've been on there, but SO still intimidates me greatly.
My lack of practical experience isn't the only reason, though. It's mostly because this place is so full of experts, and I feel very very small compared to them. I'd like to answer a question or two sometime, but I would most likely get beat with a better answer first. As for asking questions, I now only do that as a last resort. My previous experience with that has been so-so, and I would just find myself making excuses for not asking a question on here. If I need help with something, I'll just look for an existing question and then upvote accordingly to express my thanks. Nowadays, upvoting is the only thing I bother to do here.
But, on Code Review SE, I do everything: ask questions, answer questions, flag, vote (up, down, close, reopen), make edits, review edits, and participate on Meta (I'm even helping with introducing a new site policy). I've learned so much over there, and that's just where my heart is. Unfortunately, as that site is still in beta, it is still prone to shutdown. If that were to happen, my overall activity on SE would plummet, and it may even affect my enthusiasm of programming (hopefully not).
When I look at things on SO, I probably don't comprehend much more than you do. And I've been coding professionally for 20+ years. The difference is that rather than being discouraged my experience tells me that most of these questions are so specific to a combination of tools that you'd almost have to work where that person works to have an answer ;-)
Further, by the time you graduate and begin working, many of these tools will either not exist or not be in widespread use!
Keep looking at SO, but focus more on the larger questions rather than the ones trying to put a square peg from tool X into a round hole in tool Y.
I'm a fourth year student at a school in SD as well. I'm also pursuing BS in computer science.
I totally feel what you are feeling. I have finished numerous courses;however, they do not really let me answer 99% of the questions on Stackoverflow. This doesn't mean that I should be discouraged, but become more passionate about the field I'm involved with. "THERE ARE A LOT TO LEARN!" If a field has a opportunity to learn, then means that field has potential to growth.
What I'm trying to get out of school is how to approach a real world problem. For example, if you want to build an application for a customer who wants a simple web application for his business, how would I investigate, design, implement, and test the application.
It's like learning your first computer language. Once you learn C, Java is not too hard. Once you know Java, C++ is not too hard. Once you know C, Java, and C++, C# is not too hard to pick up.
So, I suggest you to do the same.
Don't be discouraged. Rather, become passionate about where you are right now (WE ARE HOT ASSETS). Try to learn how to approach a real world problem and how to solve. Also, try not to be intimidated by overwhelming amount of technologies.
CS programs teach a lot of important fundamentals about software such as algorithms, but don't usually teach many practical, real world skills, unless there is a Software Engineering course. Most questions on SO relate to professional software development. Writing software in the real world is a lot different than CS courses would lead you to believe.
If you have the opportunity, do an internship so you can get some hands-on experience, and you will see how many of the questions asked here apply to professional software development.
I've been a fiberglass sailboat repairman, dog-sled guide, industrial welder, sawyer at my own sawmill, labourer and student but no job has ever held my attention by being constantly challenging like programming.
Don't despair, have some fun with the culture and the lore by reading the Jargon File .
If stuff like the The Meaning of ‘Hack’  doesn't make you happy then you might be headed in the wrong direction. In that case find a way to use computers to do something that you want to do. http://catb.org/jargon/
Seriously dude, with all due respect, you're still just a kid. You are comparing yourself to industry veterans. If you didn't feel lost, something would be wrong. And to be honest, most professionals have no idea of what half the stuff here means either, trust me. =)
Don't waste your mental effort with the ego part of engineering. Don't get intimidated, and don't work with the purpose of learning so you can feel superior. Just do what you do, learn what you learn, until you have your own self-confidence that you know what you know, and you know it well. Then none of this comparing yourself to others will matter. If I bothered to read through all of SO and ask myself "do I understand all these questions, and if not am I a bad person?" I'd probably end up discouraged and drive myself crazy. It's an easy pitfall to fall into, but resist the temptation. Unfortunately SE & IT are filled with many bad examples, find a solid mentor and stick with him, learn from him.
So I'd go with #3, this is normal. but ultimately irrelevant.
Felt the same way here. The fact is that you can't just take classes and think you're prepared; you need to teach yourself. And it takes time. Lots of it.
It's not at all unusual for people to complete a computer science course without really learning anything they would need to work in the software industry. I've heard of people getting the degree without ever writing a single program that compiles or runs.
So don't be discouraged if you enjoy learning new things. So you have a lot of enjoyment ahead of you.
Also, if there's something you don't understand or never heard of, referred to in a question on SO, look to see if anyone has asked "Can someone tell me what X means?" and if they haven't, ask it yourself. A lot of people here enjoy trying to come up with a clear and simple explanation of key concepts.
You could follow a tumor/virus model?...
EDIT: BTW, you shouldn't be discouraged. SO is a big place (around 100k questions!), so it's normal to not understand it all. After all, you don't eat EVERYTHING in the supermarket.
I would recommend that you take a look at some of the following posts from our ever fearless leaders Jeff and Joel:
Make certain that you also read this article  that Jeff links to in his blog.
Programming is a path, not a destination and being a great programmer means walking that path. We all had to start somewhere and that was at one point in time or another the place of knowing absolutely nothing. http://www.joelonsoftware.com/articles/LeakyAbstractions.html
I've been making a good living at this software thing for probably longer than you've been alive, have worked on a large variety of systems, and have done some poking around on my own. I've also tried going to grad school. I've amassed more than 4K rep points here, and have been active elsewhere.
I couldn't answer most of the questions here, and in many cases have absolutely no solid knowledge of what they're about.
Don't let this discourage you. There's always more to learn.
I am a final year CS student. Don't be discouraged. The stuff here is much about the specific platforms and frameworks. Better concentrate on the basics. Like knowing how to make a dynamic page in JSP, .NET, Django won't help much. But not knowing HTTP or HTML will hurt you.
In order to not be overwhelmed by this site, I use the search function to search for subjects that I know a little about. Later, when you're more comfortable with the fact that there are thousands of things you don't know (yet), you'll feel better about the things you do know and are currently learning.
There are five orders of ignorance:
You now do not have 4OI. By coming here to SO, you are reducing your 2OI and 3OI. Congrats. Now work on reasonably moving from 1OI to 0OI.
Also, think of this: knowledge is like a circle. 0OI is the area of the circle. 1OI is the perimeter of the circle, and 2OI is everything beyond. When the area of the circle expands, so does the perimeter.
I changed communities, tried Microsoft Forums, tried developez.com and many other sites. I always face the same problem (that you face) so it's normal. There's millions of developer, there are thousands of technologies and problems, so finding someone who have a problem that you can solve it hard :/
SO is an enormous database of tech questions. But most of it is practical guidance and specific to certain technologies/apis/libs. There is no reason for you to get discouraged because, you may not even have worked in more than half the technologies discussed in here. But when you're stuck with some problem in a specific technology, this is the "second best" place to ask and get expert opinions. i say second best because the mailing list or forum will be more exhaustive, but SO beats them on the swiftness and quality of answers.
SO is great for language related questions and sometimes you need to be really good in multiple languages and programming paradigms to even understand the questions. I hope SO encourages rather than discourage you to learn more languages
Don't fell that you are neglected.
We all are here to learn. Post your questions however simple it is , we all are here to help each other.
This forum is for all.
Good luck.!!! (:
I have been in the business for over twenty years. In my opinion - it seems that the field is and has always been much to large to even begin to get a grip on everything. You should feel completely normal in your view of the vast amount and range of questions posed here. The real "secret" for me to being a successful programmer is not knowing the answer to all the questions - but knowing how to FIND the answer quickly. And Stackoverflow is one of the many resources to use. Getting to know all the tools and resources to find answers to the problems you will encounter as a professional is the biggest trick I never learned in college. Once you realize this - coming to a site like SO is a great discovery - not a depressing one.
No, do not be discouraged. Be challenged, and strive to live up to the challenge. If nothing else, it's a lot more fun that way.
Dude I feel like that every day. Learn to enjoy it, I say...
The greatest thing about SO is that it makes you understand you don't know everything and there are lots to learn!
Computer science have evolved into enormous systems with uncountable facets. Sometimes, just mastering one software product will take a lifetime. Broaden your horizon and pick the niche that interests you the most. The rest will come naturally.
Pfft! Do you really expect to understand every language, library, platform in existence? Questions on SO cover so much territory there is no reason to be discouraged. Just because someone can code in assembler doesn't mean they'll know html
Discouraged! What the hell? I mean, Come'n man ! You are student, these questions that you don't understand have been asked and answered by people with years experience in the field (sounds like a CIA .. in the field .. hah !) .. You're not a dump, actually you're a smart kid, you dig you toes in the water before jumping up to the swimming contest. Just take it easy and have faith!
Except for probably a handful of users here, feeling discouraged at times is probably normal. This is a fairly smart group of people with a wide variety of experience in different languages.
The fact that you're here is a good sign that you're willing to learn and move up. Look at it this way, where else are you going to be able to surround yourself with some much expertise, for so little money????
1) yes, it's the same for everyone
2) Experience, but to be honest, you'll never stop being overwhelmed by how much there is to learn. People keep on inveting more more stuff to learn goddamnit
3) No, you're probably ahead of the majority of your peers already, they're unlikely to be seeking out this kind of experience, never mind asking such honest questions.
This site covers a broad spectrum of aspects of our craft. I've been working professionally for almost 10 years, and a lot of information here is new to me. If anything this should be encouraging - always a challenge in this field.....always areas that you can add value if you put in the effort. AND it ALWAYS changes.... :)
Yes it is normal and yes I also felt the same way. My question to you is: what are your outside of school activities? What are your long-term career aspirations?
More specifically, do you intend to work in the private sector or do you expect to continue your education for a Masters Degree or PhD?
Most of the people on this site are professionals. My advice to you is to go out in the real world and get some experience building Web sites, doing some small-time consulting, etc. You will be surprised at how fast you catch on and next thing you know you will be answering questions with the big dogs!
Question on SO is not related to one specific area, but generally it covers programming related question. Initially it happens to everyone.
It is good for you to find easy topics and study them. Google and research them.
Yes it is normal.
The thing to take away from the university experience is not that you have learned everything there is to know or that you have "learned enough." Rather, you have used the opportunity to learn how to learn.
Technology is always changing. Software development is always changing.
SO is great place to continue the process of learning. Some day,perhaps sooner than you expect, you will be teaching others.
Don't get discouraged.
What are you discouraged about?
Programming is like swimming to me, we can take all the courses we want about it and take some lessons, discuss it all we want, read about swimming all we want, the only thing that builds the real comfort is the hours spent doing it.
The only thing a real developer ever knows is how little he knows. All he ever works on is his problem solving and ability to figure things out the best way possible. He does this through learning as many approaches as possible and then making it happen through the syntax of a few languages.
Start hacking, start building. The more you create, the more you'll see the patterns inherent in most if not all problems.
There is a fantastic post or two about managing your relationship with failure.
Second is one article that I think is something every programmer should read.
Embracing Failure  by Eugene Wallingford:
A while back, I clipped this quote from a university publication, figuring it would decorate a blog entry some day:
The thing about a liberal arts education ... is it prepares you to fail successfully and learn from that failure. ... You will all fail. That's OK.
-- Jim Linahon
Linahon is an alumnus of our school who works in the music industry. He gave a talk on campus for students aspiring to careers in the industry, the theme of which was, "Learn to fail. It happens"
More recently, I ran across this as the solution to a word puzzle in our local paper:
You've got to jump off cliffs all the time and build your wings on the way down.
-- Ray Bradbury
Rich talked about how hard our discipline must feel to beginners, because it is a discipline learned almost wholly by failure. Learning to program can seem like nothing more than an uninterrupted sequence failures: syntax errors, logic errors, boundary cases, ugly interface, .... I'm not a novice any more, but I still feel the constant drip of failure whenever I work on a piece of code I don't already understand well.
The thing is, I kinda like that feeling -- the challenge of scaling a mountain of code. My friends who program can at least say that they don't mind it, and the best among them seem to thrive in such an environment. I think that's part of what separates programmers from less disturbed people.
If you get discouraged seeing active discussions in your field, you probably aren't in the right field. New ideas in a field you love should get you fired up! When those new topics are bouncing around in an approachable, open community like this, and you still don't feel comfortable learning, there's something wrong.
How did you pick your major? Do you tinker with software, math, ideas, writing or other other creative things? Do you enjoy being around other creative people? Analytic people? I've known many software engineers that had unhappy CS educations and unhappy careers. I've also known people who've fallen in love with software that had practically no formal training. In my experience, you can't learn to love your career -- you have to find something you love (or at least like a lot) and then learn how it works.
I have been working as a programmer for 6 years now and have a variety of languages under my belt (.Net, classic ASP, ABAP, and more) but I still don't understand everything that is discussed on StackOverflow or other forums I watch. that's why I watch them to learn new things get insight on the new technologies, etc. Don't get discouraged, that's what this is all about ask questions make comments and build off the knowledge that everyone is sharing. I think if someone thought they knew everything that was discussed on StackOverflow they would be kidding themselves and the profession. The area we are all in is so dynamic and ever changing that it would be virtually impossible to know everything. That's why sites like this are awesome you can ask a question and get a response within minutes in some cases. Very awesome and helpful in the crunch.
Don't get discouraged - it's this way for everybody.
In addition to what other people have said, a few more pointers:
You have two main choices in software/technology - become a specialist or a generalist. This is the same as in other professions. I tend towards being a generalist because I enjoy working on an object model, then optimizing stored procedures, fixing a DLL issue on a windows server, and then banging on a router that is having DNS issues. A lot of people are specialists, which has its advantages too. A specialist might be able to give very specific answers to a lot of the questions on SO and be correct - a generalist could provide an answer to a wider swath of questions on SO, but would probably end the answer with "I'm no expert, so take this with a grain of salt".
Specialists will also get paid more and have an easier time finding jobs in multiple locations. Generalists will have an easier time finding jobs in one location (if you don't want to move), and will get hired quickly if the business sees that they can get a network admin/programmer/server guy all in one package.
- Did it start like this for you?
- If so, how did you conquer it?
- Is this normal?
1 - Of course. And it hasn't changed. Every time I come onto SO I'm humbled by the amount that I don't know and I have 10 years professional experience and 5 years of hobbying when I was a teenager. I bet those who have 40 years feel the same. In some areas I know a lot, in others I know nothing. This will never change. All you can do is learn as much as you can, but try and learn some areas quite in-depth first before branching out to other things.
2 - By realising that I'd never learn anywhere near everything. And realising that this doesn't matter.
3 - This is both normal and preferable. There are those who think they know it all after graduating or after a couple of years. Believe me, they don't. Having that attitude is a fast-track to fail.
Don't be discouraged. StackOverflow can be viewed as a good mirror for where you are at and what you can learn, and there are many, many helpful people here who have started from all sorts of backgrounds. I look at it as a chance to test your knowledge and find areas where you can improve. Along the way you'll see areas where you have something to contribute, and as long as you are good willed with your input you'll get something back.
Don't worry about the badges or reputation. I have had very authoritative yet amazing false answers from people, but overall the majority of answers have been great. In the end, it's just dudes and dudettes who love software development. Jump in, get ready to learn and give it shot. Just remember, we really can't see you, so be bold and participate, and don't be concerned with your knowledge level. Yeah, there's a lot we all don't know, but that should only spur us on.
Absolutely Not! I'm sure most of the people here can't answer 10% of the questions. It's not our fault, it's because you can't know everything. There aren't enough hours in the day to learn everything. Specialize in an area you feel passionate about, only then, will you feel more confident.
Nope, you shouldn't be, first of all, the questions here spand such a wide area, so theres unknown areas for everyone. Secondly, when people give up troubleshooting, the problem is or kind of has to be non-trivial for anyone. I've been in java-development/architecture for 8 years, I find most questions here to be in other areas than my profession. Questions within java are seldom easy ones, rather complex and related to a particular tool/framework. Often if you haven't spend a lot of time with that framework, you can't answer the question.
So it's perfectly normal, cheer up! Get some experience and you'll start understanding more every day.
There is no need to be discouraged, first of all I dont advice you to visit this kind of forums to learn things.This place is for discussing issues/show stoppers that one encounters in work. Here nobody knows/understands every thing and moreover people ask questions here because they dont know how to solve the problem. So everyone here is almost same. Today you have asked a question and tomorrow you might answer other's queries :)
You can start learning things with something which is very easy.
Like: Take an excel macro, learn different things that you can do.
It's hard to top work experience (if you're not actively involved in your own or an open-source project) for giving you the know-how to answer some of these questions. A lot of things you'll just never encounter on your own, or in a classroom. I remember doing Java work for my CS degree before i had a workterm and not knowing about Eclipse (or any IDE for that matter) or even how to reasonably make use of abstract classes and interfaces... but you work with people who know more than you do and you learn from them. That's where i find the best stuff comes from - mentoring. Some people are very driven to learn things themselves, but not everyone is like that. So getting into a software job where you can learn from experienced/talented people will really make a difference. Then one day you'll be reading an article like this and remember when you asked a similar question... It just takes time... Good luck, don't give up.
You shouldn't be discouraged that you don't understand the majority of questions here.
A lot of the questions on Stack Overflow are very specific programming questions that are relevant to a particular problem. If you've never had to deal with that particular specific problem before, and would never have reason to in your career, there's no need to understand it.
Another thing is that a lot of the questions here are very specific to a particular framework, and if your day-to-day programming is in a different language, you won't understand it. A programmer will often specialise in a specific language and perhaps framework/environment, rather than trying to know everything about every programming tool for every language.
As for me, a lot of the questions about .NET or Visual Studio, or in some respects Java, are gobbledy-gook to me, as I usually program in other languages like C++, C, PHP, Python.
My tip would be to use the search feature to find questions that are more relevant to the types of programming you do.
Questions on here are extremely specialized. It would be almost impossible for one to know the answer to most things.
Well, since this is where people go to ask questions that they don't know the answers to, no. I wouldn't be. I'm not. We both are young and still learning a lot.
The day I stop learning (should I ever arrive at a place in time where I would know everything :-P) is the day I quit my job. The whole thing that makes my job fun IS learning new things!
I wonder if Jon Skeet is still working...
Just as something to ponder, what kind of coursework have you taken involving Oracle or ASP.NET or other very large things that I'm not sure CS courses cover this material in great depth. I remember well my 6 3rd year courses well: Data Structures and Algorithms (CS340), Concurrent Programming (CS342), Digital Design and Architecture (CS351), Operating Systems (CS354), Theory of Finite Automata (CS360), and Numerical Analysis (CS370). http://en.wikipedia.org/wiki/Scrum_%28development%29