Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I understand how to code. I know how to get around the basics of the languages I use regularly. I know how to write slightly-above-basic regular expressions, I can talk to databases, I can accept input, print output, handle files, etc. I'm more or less assured of my basic ability to spit out the source code for moderately complex program.

My problem is that I never feel like it's enough. I feel like I only know a small portion of the standard library of my language, and that until I understand it all, at least in passing, I have no right to even try to get a job using it. I'm just out of (community/junior/whathaveyou) college, and my friends are getting jobs in the industry, but I still feel like a fake or a poser and that I'm just not good enough.

Is there a decent marker for "I know enough" that I could use to assure myself that I can code? Should I take the fact that I'm at least capable of coding up a FizzBuzz as an indicator that it's alright to apply for things? How can I learn more of these standard libraries, frameworks, and/or APIs relatively easily? I code on a regular basis, I read books, but my knowledge still feels so shallow.

HELP!

share|improve this question
3  
the more you learn the more you realise how little you know. +1 for a very good question. –  devnull Aug 25 '11 at 7:44
    
I'm not sure this stuff worth memorising. After all, you've got a searchable documentation, smart IDEs, and so on. It is much better to utilise your brain for important things, for fundamental knowledge, keeping all that volatile APIs outside. –  SK-logic Aug 25 '11 at 11:17
    
I feel like I only know a small portion of the standard library of my language this sentence should be the official C++ motto. –  ZJR Aug 27 '11 at 21:02
add comment

6 Answers

My recommendation buddy:

stop thinking binary (0/1, not knowing/knowing, illiterate/literate) and start thinking fuzzy (I know to some extent). All of us know something and to some extent. Knowledge is a continuum and everyone is placed somewhere between the most illiterate person and the most knowledgeable, sophisticated guy. You can do the job, but at your level and under that. This is the rule. Don't be afraid. Don't wait for a day when you've learned everything of your framework, and IMHO that day won't come ever. Even developers of 20 years of experience are still reading to learn new things. Programming is so broad in nature that you shouldn't (or you can't) grab it all.

Dive into the work environment and don't be afraid. We all had the days when we couldn't do something. That's not a crime. It's part of our job. You don't know, you learn, you try to do the job, and you get it done.

I think what you need to have now, is not more knowledge. Rather, it's simply self-confidence.

Good Luck

share|improve this answer
    
I get that it's all fuzzy knowledge and some JIT-Learning of the details. I just don't know how to assure myself that I even have a fuzzy understanding of the basics. I worry that I'm missing some really important things completely. –  Throwaway Aug 26 '11 at 0:11
add comment

"I know enough" and "I'm good for this job" are completely different.

IMO "I'm good for this job" is closer to "I know the basics, and I know - what to learn/where to search/who to ask/what to read - to complete my tasks".

(this doesn't mean they will hire you if you need 1-2 months to learn for example: write/read in XML files. I hope you understand what I mean.)

Also, I don't think any programmer would ever say "I know enough." (maybe "enough to get the job", "enough to be rich", "enough to...", but not "enough." :) )

EDIT: When I say "basics" I mean

  1. Basics of programming (bit, byte, variables, functions, parameters, loops, conditions, recursion)
  2. Basics of the programming language with which you will work (how to compile a program, how to debug a program; how to use the IDE; 90% of the keywords and know what they do, when to use, how to use them; variable types; how to use the things from 1 in the language; most useful libraries; error handling)
  3. "Connect 1 and 2 with your blood" :)

(Possibly you will need to use 2-3 languages at your work)

I agree with Saeed, dive into the work, working is the best way to learn things, you work with people who know more than you, you learn from them, see how they work, but they started just like you (or maybe they started with less knowledge than you have now).

share|improve this answer
    
It wouldn't take me a month to read and write XML files, though I still think that it would probably take me a day. Can you elaborate on "the basics"? This is the main thrust of my question actually, since I don't know that I know the basics. I definitely know some of the basics, but I really worry that I'm missing some really fundamental gaps. –  Throwaway Aug 26 '11 at 0:07
add comment

I believe you're asking the wrong question here, and if you'll permit me a little bit of unwarranted psychology, I think it's because you're plagued by a little bit of self-doubt and low self-confidence.

Stop broadly comparing yourself to others

First of all, you can't compare yourself on a broad level to other programmers. Even the rock stars that you may look up to right now likely have problems (sloppiness, Yet Another Way Of Doing Things, and attitude problems), so don't worry about whether you compare to them. Instead, your approach should be to acquire as many mentors as you can, glean all the knowledge possible, and become better by watching and mimicking experts.

Learn to learn

Also, the best approach to becoming a better programmer and learner in general is not in learning specific things, or understanding by memory. IMO, rote memorization is the lowest form of learning. It's like a program that's missing the crucial "processing" step of Input->Process->Output. Teach yourself concepts like the ones you mentioned in your question. Broad understanding of programming is where you provide the most value. Learning a new language within paradigms you're familiar with is cakewalk compared to learning how to problem solve.

And now, for some poor advice from someone only a little older than you

One of the biggest mistakes I made as a young man was that I made everyone else's decisions for them by assuming I wasn't good enough, and that my time and talent were not worth their time and money. I constantly undersold my abilities and my talent, sparse though it may have been at the time. This was a huge mistake.

What you need to understand is that even a moderately decent programmer seems like a wizard to average everyday joe. They may hate you, they may get sick of always having to ask a local nerd how to turn their computer on, but because they lack insight and understanding into what you do, no matter how trivial and simple it seems to you, it is impossible to them.

People WILL pay you for your time, your talent, and your energy. There are enough absolutely terrible programmers in our industry that are making a killing simply because they can sit in a seat and (arguably) write basic programs. Play your cards right by developing some self-confidence through achievement, practice your speaking and body language, continue mastering your craft by always looking for things you don't know, and run toward those things to seek more understanding, and finally: stop downplaying the skills you've developed.

share|improve this answer
add comment

I think that most of us have been in that situation at some point sooner or later in our careers. And every time you pick up a new language, it all starts all over again. So the first piece of advice from me would be: Don't despair, you're not alone. And: you're probably better than you think, if only for the fact that you self reflect. Remember the old adage: Fools rush in where angels fear to tread.

Nowadays most languages have standard libraries that are simply too large for any single individual to know completely by heart. Add frameworks and APIs on top, and you cannot possibly know it all. The best you can do is know the basics and then figure out where to find out more. It gets better with experience, so the best advice is probably: just go and use the stuff!

There is no single "decent" marker. It all depends on the environment. What would be perfectly enough for one company/project, may be way off for another. If you can really do what you say you can, I would class you a rather decent junior and you should have no trouble finding decent work.

share|improve this answer
    
[Copy/Paste from my comment on @e-MEE's comment above] It wouldn't take me a month to read and write XML files, though I still think that it would probably take me a day. Can you elaborate on "the basics"? This is the main thrust of my question actually, since I don't know that I know the basics. I definitely know some of the basics, but I really worry that I'm missing some really fundamental gaps. –  Throwaway Aug 26 '11 at 0:08
add comment

You have a great attitude! One of the fundamental factors in being successful is to never be complacent. Never settle. Never compromise yourself. That said, it's very hard to discern how exactly to do that (e.g. knowing the 'best practice' for doing task X isn't as simple as Googling it because everyone has their own opinion).

It's best to learn how to identify good code and the rationale behind it (how and why). For this, I'd recommend reading blogs of reputable professionals in our field as this will expose you to the sort of mindset to look for. Contributing to an open-source project is also one way to jump into the deep end, however, it'll give you the opportunity to learn from others as it currently progresses.

share|improve this answer
    
Thanks. I don't think I realized how much I needed to hear such praise. –  Throwaway Aug 26 '11 at 0:10
add comment

Based from what you write in your question, you actually can code, and you are willing to improve your skills and knowledge.

Everybody, in each job, has to start out little, as a newbie, and then grow with experience.

How much fast your growth is depends on you, everybody grows at different speeds, the only important thing is that you don't ask too much out of yourself now.

If something you feel you don't quite understand yet, don't worry. Soon you will be able to get the picture.

You may want to start to work in the industry as soon as possible. Since you already can code, you already can start working. This is because theory is not good enough, you need practice, and real world problems to solve.

As for your library code knowledge concerns, it will come with time, as long as you keep to study it, read documentation and practice using it. Site like this are also very useful and you will learn faster if you actively ask and answer related questions.

A personal advice: if you really want to stand out from the many people who do spaghetti code, calling themselves programmers, learn best practices. It doesn't matter which language or library you are learning or coding with, learn best practices. This will save you a lot of time, bugs, glitches, headaches, and will help you feeling a better programmer.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.