Tech Off Thread

28 posts

Who should learn unmanaged code?

Back to Forum: Tech Off
  • User profile image
    Larsenal

    Having recently graduated with my shiny new CS degree in hand, I'm glad to be able to have some flexibility in choosing my development tools.  When I have the chance, I tend towards C#.  Why?  The BCL makes plenty of things easy and I can get things done fast.

    Let me be clear and say that I want to become an outstanding programmer.  I wonder if it will be important to learn to develop--and actually use in a decent sized project--unmanaged code.  Yes, there was some exposure at college, but I've noticed plenty of difference between academic and professional coding projects.  The academic situations were a bit "canned."

    Do you think I'd be shooting myself in the foot if I didn't make sure I knew unmanaged windows programming of some sort?  While managed code may be a big part of tomorrow, will I get into trouble if I don't feel totally comfortable with yesterday?

  • User profile image
    Manip

    Learn both in equal measure.

  • User profile image
    ZippyV

    It wouldn't hurt if you could at 1 more language to your cv. If I were you I would learn C++. It works on every operating system and you can still use it in .NET too! This can only be a win-win situation.

  • User profile image
    figuerres

    Larsenal wrote:
    Having recently graduated with my shiny new CS degree in hand, I'm glad to be able to have some flexibility in choosing my development tools.  When I have the chance, I tend towards C#.  Why?  The BCL makes plenty of things easy and I can get things done fast.

    Let me be clear and say that I want to become an outstanding programmer.  I wonder if it will be important to learn to develop--and actually use in a decent sized project--unmanaged code.  Yes, there was some exposure at college, but I've noticed plenty of difference between academic and professional coding projects.  The academic situations were a bit "canned."

    Do you think I'd be shooting myself in the foot if I didn't make sure I knew unmanaged windows programming of some sort?  While managed code may be a big part of tomorrow, will I get into trouble if I don't feel totally comfortable with yesterday?


    well I would rate it high to know how stuff works.

    I'd say this from my own view:

    learn to do some old-scool x86 assmbly and C

    why:  thats what everything is built on top of.

    I can "see" how arrays and structures layout in memory and how pointer errors lead to stack and heap errors...

    now grandted with .Net or Java this is not an everyday thing you need but...

    when you need it you need it... one guy here was trying to convert some old style C/C++ code to .Net and all the crap was killing him -- not that it would be a cake walk in any case but....

    for example how does a PC boot?  can you tell me how it works at the cpu and BIOS level??
    when it fails I have a model of how it works in my head to help me fix it w/o re-installing the whole stack...  well I run on... as a guy who started with 8 bit and had to learn all of it I value it.

  • User profile image
    DoomBringer

    As a programmer, you should know at least C, C++, C#, and Java.  Those are the 4 most common languages.  The best part is that all 4 are very much alike. COBOL is good to know as well.  Assembly is great stuff, but it ties you to specific platforms too much.  Anyhow, after that, you should know the concepts and ideas, like design patterns, software design practices, and other stuff.  You NEED the Design Patterns book, believe me.

  • User profile image
    Larsenal

    DoomBringer wrote:

    You NEED the Design Patterns book, believe me.



    I do?  Which book is that?  ISBN?

  • User profile image
    ZippyV

    DoomBringer wrote:
    You NEED the Design Patterns book, believe me.
    Can you give some titles? Preferably for .NET

  • User profile image
    W3bbo

    "When in doubt, try Google"

    Or at least Amazon search.

  • User profile image
    wkempf

    Larsenal wrote:
    DoomBringer wrote:

    You NEED the Design Patterns book, believe me.



    I do?  Which book is that?  ISBN?


    Design Patterns
    by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

    Commonly referred to as the GoF (Gang of Four) book, this is one of the "holy bibles" of software development.  There may be better books for first learning about the concepts of design patterns, and there's books that do a great job of encoding these patterns in specific languages, but this is the one book on the subject you should have knowledge of, as it's likely to be asked about in any interview.

    Oh, and the ISBN.

    ISBN: 0201633612

  • User profile image
    Larsenal

    DoomBringer wrote:

    As a programmer, you should know at least C, C++, C#, and Java.



    Does everyone--or at least a few--agree?  Although I could bang out a simple program in any one of these languages, being comfortable designing and implementing a highly-efficient, complex app is another thing.  I imagine it would take time to become comfortable with the appropriate libraries common to each.  If I were to take a shot at going deeper in a language (and it's common programming environment), would I be best served starting with C or C++?

  • User profile image
    Maurits

    C is a little bit ancient for a third or fourth language.
    Given that there are still many uses for unmanaged code using C++, I'd recommend C++.

  • User profile image
    wkempf

    If you can code in C++ you can code in C.  If you can code in Java or C# you can code in the other.  If you can code in C++, coding in C# or Java requires little extra learning.  So....

    I'd recommend you know C++ and either C# or Java (pick C# if you plan to do Windows development).  I'd also recommend some knowledge of Assembly... it just helps, especially if you have to do some debugging.  Platform for Assembly isn't crucial... though each "dialect" is different, there's enough similarities that you can get by for most casual cases.

    Cobol is worth knowing for legacy work, not to mention the grounding it gives you with file/data manipulation.  To be fully rounded out, I'd also recommend a scripting language with functional capabilities, such as Python or Ruby.  Even if you don't use them directly, the knowledge of these languages/idioms are invaluable.

  • User profile image
    Rossj

    Larsenal wrote:
    Does everyone--or at least a few--agree? 


    To an extent. If you truly want to be an outstanding developer the language should *almost* be irrelevant. It certainly doesn't hurt to know C well. All this talk of learning one or two languages, why not learn them all ? Wink

  • User profile image
    msemack
  • User profile image
    wkempf

    Rossj wrote:
    Larsenal wrote:Does everyone--or at least a few--agree? 


    To an extent. If you truly want to be an outstanding developer the language should *almost* be irrelevant. It certainly doesn't hurt to know C well. All this talk of learning one or two languages, why not learn them all ? Wink


    Because it's not really possible?  The Pragmatic Programmer has a good view point on this.  You should at least know one language that uses each of the major coding paradigms (procedural, functional, OO, etc.).  Then picking up any new language is mostly just a matter of learning the syntax which can be done in just a few days at worst.  (Of course, becoming expert in any language will still take time.)

    Still, the more languages you know, the better.  Just be sure to specialize in only a few of them at most.

  • User profile image
    Rossj

    wkempf wrote:
    Because it's not really possible?  The Pragmatic Programmer has a good view point on this.  You should at least know one language that uses each of the major coding paradigms (procedural, functional, OO, etc.).  Then picking up any new language is mostly just a matter of learning the syntax which can be done in just a few days at worst.  (Of course, becoming expert in any language will still take time.)


    Yeah by ALL I meant 'of the ones mentioned' (C/C++/Java/C#), it is by no means an impossible task.  Obviously learning and knowing well are not necessarily the same thing Smiley

  • User profile image
    Maurits

    C++ is, as the name implies, a base of C with additional concepts (objects, mostly) - so learning C++ entails learning a very high percentage of C.

    As mentioned, C# is a lot closer to Java than it is to almost any other C-like language.  Java has the advantage of being cross-platform.  C# has the advantage of tying into the massive .Net library.

  • User profile image
    PhrostByte

    Learn C++.  It takes a while to get there but once you start using a lot of the STL and templating you'll begin to miss it in C#.  That said, C# is also an excellent language to learn.  They just serve different areas.

Comments closed

Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.