Thread: knowledge programmers must have? where should I go from here?

  1. #1
    Registered User
    Join Date
    Sep 2011
    Posts
    71

    knowledge programmers must have? where should I go from here?

    I was doing simple programming, fixing things and never really building or designing anything, and I was using proprietary technology, so that experience was pretty useless when it came to finding another job. I'm currently learning C#/ .NET and hope to obtain a job doing .NET web or desktop development (or at least a job where I will be working with these technologies).

    what I want to know is where I should go from here, given that most of the formal programming education I have received is limited to a handful of freshman level courses. I need guidance trying to understand what subjects I'm better off studying during the next 4-6 months, in the interest of returning to the labor force, catching up with computer science majors, and, of course, my own personal satisfaction.

    Let me put it this way: I actively try to deepen my knowledge of C#, .NET and object-oriented programming in general, and the harder I try to find answers, the more questions that are posed before me. I feel that even though I have acquired knowledge of a core set of programming-related concepts, I still don't know enough.

    For example, am I better off expanding my knowledge of everything that goes on behind the scenes, and learning to work with pointers and memory addresses, and manipulating data at the binary level, possibly using an assembly language, or am I better off learning all the intricacies of concurrent programming?

    Am I better off learning design patterns? Or studying and memorizing 'basic' algorithms and maybe some more advanced ones as well as trying to come up with some of my own?

    Or am I better off continuing to deepen my knowledge of C# and .NET, and learning as much trivia as possible? (ie: not possible to have a constant field of non-built-in struct type!)

    Or should I learn as many .NET API's as possible?

    Or should I continue to learn about Windows programming? (ie: learning to create applications that make use of the registry and so on?)

    Or should I stick to making web sites and GUIs with fancy controls and lots of eye candy?

    Or am I better off learning as much SQL server as possible?

    (I know there is probably no right or wrong answer here, but my guess is that some paths are likely to be more 'useful' than the other ones when it comes to becoming not only a competent programmer, but most importantly and at least for the time being, employable.)
    Last edited by y99q; 12-10-2011 at 08:52 PM.

  2. #2
    Registered User
    Join Date
    Dec 2006
    Location
    Canada
    Posts
    3,229
    Memorizing APIs don't really help much. Anyone can look it up when they need it, and employers know that.

    What they want is problem solving skills. You can't just Google for that.

    How about making a big project that showcases your skills, that you can be very proud of?

  3. #3
    Registered User
    Join Date
    Sep 2011
    Posts
    71
    Quote Originally Posted by cyberfish View Post
    Memorizing APIs don't really help much. Anyone can look it up when they need it, and employers know that.
    That's true. But many of the times I've been to job interviews I've been asked general knowledge questions such as whether I know what an abstract class is, or a stack, etc.

    Back in the day I miserably failed a lot of those interviews, since I devoted most of my brain power to problem-solving and never bothered memorizing textbook definitions. That's when I learned that if I can't explain what I supposedly know how to do, most employers are unlikely to conclude that I know how to do it, and since their opinion is what matters, I might as well give them what they want.

    For example, I can write recursive functions, at least basic ones, but the only way I can explain what recursion is is by spitting out a memorized textbook definition, because if I try to explain it using my own words, I'd have a really hard time coming up with something more detailed than 'a function that calls itself'.

    And that's why this time around I rarely bother with actual problem solving and instead spend a good chunk of my time thinking about the way all of the tiny details fit into the bigger picture and how I would go about explaining these concepts the day of the interview.

    How about making a big project that showcases your skills, that you can be very proud of?
    I definitely need to do that. I guess the only part I have trouble with is the word "big". For the purposes of getting hired to do an average entry-level programming job, how "big" should a sample project be? I guess you could say the bigger the better, but I have a limited time frame and there is only so much I can do in a limited time frame.

    Also, I think that one of the biggest obstacles I need to overcome is lack of creativity and lack of ideas. I mean what can I do that hasn't been done already? well, I guess there are many things that haven't been done already, but if they haven't been done it's probably either because they don't need to be done or because they are so complex nobody has been able to do them.

    Maybe I should just continue acquiring knowledge for now and work on something on the side.

    But i still want to know what's more important when it comes to the average entry-level programming job, being able to, for example, do concurrent programming, or understanding memory addresses and the binary representation of data, and so on?

    well yeah, everything else being equal, the programmer's iq is probably what's going to set him apart from other programmers, but how about the actual programming / computer science knowledge I should have if I want to diminish the likelihood that my next job interview will end prematurely?
    Last edited by y99q; 12-10-2011 at 11:22 PM.

  4. #4
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    A proof of ability piece as suggested, will carry you a long way in a job interview. It doesn't have to be anything particularly big or fancy, just prove that you can do the basics... navigate files, change values, edit text... maybe something like an alternate to Windows Explorer or a Network Browser that actually works (even Microsoft has trouble with that one). If you give them the familar, but better, you will impress them... give them something they won't understand --the answers to project Euler for example-- and they'll feel disconnected from the screen and the impression may fail.

    Much to my chagrin, programming seems to be heading down the C++ path almost exclusively. Most of the ads in my area are looking for C++ or Web Design, very few are seeking .NET or C... So you might want to give some thought to getting off the "platforms" and going with native code and it's many advanced powers. For a certainty being able to honestly say you know 2 or 3 different languages will be a big plus.

    And the point made that a programmer's most important skill is problem analysis and solving is dead on the money. If you are going to climb into this as a career there's no way you can have those skill too highly developed... and yes, it does take an above average IQ.

  5. #5
    spurious conceit MK27's Avatar
    Join Date
    Jul 2008
    Location
    segmentation fault
    Posts
    8,300
    Quote Originally Posted by cyberfish
    Memorizing APIs don't really help much.
    Quote Originally Posted by y99q View Post
    That's true. But many of the times I've been to job interviews I've been asked general knowledge questions such as whether I know what an abstract class is, or a stack, etc.

    Back in the day I miserably failed a lot of those interviews, since I devoted most of my brain power to problem-solving and never bothered memorizing textbook definitions.
    Textbook definitions are important because they allow people to communicate in a reasonably objective manner. IMO, they also help you to keep things straight in your head. Of course, there are people who prefer to work "intuitively" and that doesn't (by definition, lol) mean they are bad at something, just as knowing the correct definitions won't make you good at it. I'm sure there are (a few) people out there who can take a car engine out, dissemble and overhaul it, and put it back together again in better condition than it started, but still not be able to name half the parts.

    However, while being able to recite textbook knowledge is not necessarily a sign of competence, if you took your car to a professional mechanic, and in the course of discussing your problem it became clear that the mechanic could not name parts of the engine properly, would you feel comfortable leaving it with this person and then paying him/her thousands of dollars to get it back later?

    If you want to be a professional, maybe being able to apply textbook definitions will count as a positive. Here's an example for you: cyberfish says, "Memorizing APIs don't really help much", and you say, "But many of the times I've been to job interviews I've been asked general knowledge questions such as whether I know what an abstract class is, or a stack, etc". When I first read that, my immediate response was that this was an unintentional non-sequitur, and that this person does not know what an API is, because it is not about "general knowledge questions such as whether I know what an abstract class is, or a stack". One of those two distinct things is probably much more important in an interview than the other. I think you do know the difference, but you talk casually as if you do not, which is probably a bad habit. Or have we mis-communicated?

    I can write recursive functions, at least basic ones, but the only way I can explain what recursion is is by spitting out a memorized textbook definition, because if I try to explain it using my own words, I'd have a really hard time coming up with something more detailed than 'a function that calls itself'.
    Well, as long as you understand whatever the textbook definition is and can apply it, why not just stick with it? Again, the purpose is communication, not for everyone to come up with their own personal definition (to seem creative or intuitive or something).

    I think you need to come up with a project of your own that you are interested in, that you can take seriously and be enthusiastic about, that you can put some daily work into so in a few months you can look at it and go wow, look, I really can do this. By nature, no doubt, it will involve learning some new stuff that will have some general applicability and sharpen your skills, etc.* Even better if it is along the lines of what you would like to do professionally. I don't hire people, so I don't know how much that kind of thing counts with employers, but I can tell you that I have gotten work from people by saying to them, look, I although I've never done X and Y professionally, I've done something along those lines on my own time out of pure interest, and look, here's the result, judge for yourself.

    Plus it helps keep you sane. Rather than sitting on the bus worrying about your life (which quickly becomes worse than pointless), you can sit on the bus and think about what you're gonna do when you get home (besides watching TV, hint hint).

    * and, nb, I'd think that while demonstrating knowledge of some specific API may not be that interesting to an employer, being comfortable learning them (reading definitions and applying them competently, ie, being able to do research and learn quickly and independently) probably is. That's a practice. So yeah, learning an API that has use value for you -- say, in a project -- has to be a good thing.
    C programming resources:
    GNU C Function and Macro Index -- glibc reference manual
    The C Book -- nice online learner guide
    Current ISO draft standard
    CCAN -- new CPAN like open source library repository
    3 (different) GNU debugger tutorials: #1 -- #2 -- #3
    cpwiki -- our wiki on sourceforge

  6. #6
    Lurking whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    9,613
    And for anyone who is confused, I just found out that NB is an abbreviation for a phrase in a dead language called Latin for "note well". Just in case that bothered anyone else for ages.

  7. #7
    spurious conceit MK27's Avatar
    Join Date
    Jul 2008
    Location
    segmentation fault
    Posts
    8,300
    Quote Originally Posted by whiteflags View Post
    And for anyone who is confused, I just found out that NB is an abbreviation for a phrase in a dead language called Latin for "note well". Just in case that bothered anyone else for ages.
    I think it is the same in Italian

    BTW, eg and ie are all old latin too. Either that means the language is not so dead, or else we need to come up with new versions of eg and ie. I guess we should use English for that, because it is the new universal language. So I say, patriots of (post) modernity, reject these anachronisms! From now on, instead of eg, fe ("for example"), instead of ie, iow/ti ("in other words/that is")!!

    Meh, WTF.

    ps. I actually use all of those in conversation too, eg, "N B -- the pan is hot! I E you can get burned!" xP
    C programming resources:
    GNU C Function and Macro Index -- glibc reference manual
    The C Book -- nice online learner guide
    Current ISO draft standard
    CCAN -- new CPAN like open source library repository
    3 (different) GNU debugger tutorials: #1 -- #2 -- #3
    cpwiki -- our wiki on sourceforge

  8. #8
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,657
    Quote Originally Posted by MK27 View Post
    I guess we should use English for that, because it is the new universal language.
    Don't let the aliens here you saying that.
    I think we should do away with languages and use numbers for everything ! ...but nobody will agree on which number to denote what ..

  9. #9
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    Quote Originally Posted by manasij7479 View Post
    Don't let the aliens here you saying that.
    I think we should do away with languages and use numbers for everything ! ...but nobody will agree on which number to denote what ..
    Speaking strictly as someone who's handwriting has been likened to Klingon Secret Code...

  10. #10
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    Textbook definitions are definitely not as important as some make them out to be. Knowing them won't make you smarter.
    These definitions are simply formal definitions stating exactly what something is and what something isn't, and the reason we have them is because our spoken language is extremely ambiguous.
    Sure, you can show off to your pals by bragging about how you know many definitions, but that's hardly going to be much of use in the real world. What is important is that you understand a concept, what it is, how it is used and what limitations it has.
    Knowing the name of something (important) is not the same as knowing the definition of something (not so important). Separate those two concepts.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  11. #11
    spurious conceit MK27's Avatar
    Join Date
    Jul 2008
    Location
    segmentation fault
    Posts
    8,300
    Quote Originally Posted by manasij7479 View Post
    Don't let the aliens here you saying that.
    I think we should do away with languages and use numbers for everything ! ...but nobody will agree on which number to denote what ..
    Numbers are a subset of language. What meanest thou, hexadecimal?
    C programming resources:
    GNU C Function and Macro Index -- glibc reference manual
    The C Book -- nice online learner guide
    Current ISO draft standard
    CCAN -- new CPAN like open source library repository
    3 (different) GNU debugger tutorials: #1 -- #2 -- #3
    cpwiki -- our wiki on sourceforge

  12. #12
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,657
    Quote Originally Posted by MK27 View Post
    Numbers are a subset of language. What meanest thou, hexadecimal?
    The plan is to invert it... make languages as subsets of numbers ! ....and how you express the numbers is up to you.

  13. #13
    Unregistered User Yarin's Avatar
    Join Date
    Jul 2007
    Posts
    2,158
    Quote Originally Posted by manasij7479 View Post
    The plan is to invert it... make languages as subsets of numbers ! ....and how you express the numbers is up to you.
    When you express numbers, you have to do it an a language. To convert languages to numbers would be frivolous, considering you'd have to convert the numbers back in to a language to do anything with them.

  14. #14
    spurious conceit MK27's Avatar
    Join Date
    Jul 2008
    Location
    segmentation fault
    Posts
    8,300
    Now I'm confused.
    C programming resources:
    GNU C Function and Macro Index -- glibc reference manual
    The C Book -- nice online learner guide
    Current ISO draft standard
    CCAN -- new CPAN like open source library repository
    3 (different) GNU debugger tutorials: #1 -- #2 -- #3
    cpwiki -- our wiki on sourceforge

  15. #15
    spurious conceit MK27's Avatar
    Join Date
    Jul 2008
    Location
    segmentation fault
    Posts
    8,300
    ...
    Quote Originally Posted by Elysia View Post
    Knowing the name of something (important) is not the same as knowing the definition of something (not so important). Separate those two concepts.
    /:?
    C programming resources:
    GNU C Function and Macro Index -- glibc reference manual
    The C Book -- nice online learner guide
    Current ISO draft standard
    CCAN -- new CPAN like open source library repository
    3 (different) GNU debugger tutorials: #1 -- #2 -- #3
    cpwiki -- our wiki on sourceforge

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Test your C knowledge
    By dxfoo in forum C Programming
    Replies: 20
    Last Post: 07-15-2010, 09:36 AM
  2. C++ knowledge
    By indranilmuk in forum C++ Programming
    Replies: 8
    Last Post: 08-21-2002, 11:08 AM
  3. This is for general knowledge !
    By Mane in forum A Brief History of Cprogramming.com
    Replies: 7
    Last Post: 04-02-2002, 08:53 AM
  4. need a bit knowledge...
    By xlord in forum C Programming
    Replies: 4
    Last Post: 03-31-2002, 05:16 AM
  5. Does C++ knowledge come into Win32 API?
    By Flucas in forum Windows Programming
    Replies: 10
    Last Post: 10-26-2001, 10:17 AM