Best Programming Language To Start With

  • 502
    Posts
    12
    Years
    In the past I've dabbled with JavaScript, LUA, and even Python, and started trying to really learn them, but I never really stuck with it. I've had the most experience with LUA and I think I have a decent understanding of the basics of it as I've used it to create game projects (Legend of Grimrock Modding if anyone knows to care). I'm thinking about getting going again but I'm not sure which would be the most useful or easiest to learn/use.
     
    I would suggest HTML to get used to using specific "predefined" words (and possibly pick something useful up along the way), then Basic to help get used to logic and flow control. Then PHP, to pick something useful up, and to get started with objective programming. After that, it shouldn't really matter as long as you stick with it until you're comfortable with it.
     
    If I were you, I'd pick up C# right here, right now. MSDN has a very good C# tutorial, and despite it being old, all the code examples should still work while targeting the latest versions of .NET Framework in Visual Studio. Note that these are more for command-line stuff, but most of it still applies to code in GUI programs.

    To me, C# is something that C++ and Java can only dream of... assuming that you can live with the fact that it's managed code.
     
    I had my first entry into development with HTML, and then quickly CSS, but found it really difficult to make the transition into an actual programming language (that is to say, not a markup language, but something which contains logic, nothing against markup languages). If you have used Javascript, Lua, and Python already, that's a fantastic start. Lua and Python are both great starting languages. I really got my start with Python 2, and I still use it today (although I'm slowly making the transition to Python 3). The really great thing about python is two-fold in my opinion. Firstly, the barrier to entry is low. It's a language that many people start with, and there's a huge community behind it. There are tones of modules out there that allow you to do some really interesting stuff (there are bluetooth device modules, serial port modules, math modules, graphics modules, and all sorts of custom modules people come up with), so you don't have to re-invent the wheel all the time. The language also teaches good practices with regards to code readability. The other major thing that python does, is it allows you to really build from the ground up and get into object oriented programming if you're interested. Since that's the industry standard (C++, Java, and C# are all prime examples of popular object-oriented programming languages), that's a really nice bonus of starting with python. As you start to learn about classes and objects, you can still use python to experiment and create solutions.

    I'm incredibly biased, but I'd say continue with Python if you really want my opinion. Really though, as long as you're learning the fundamentals of how to logically structure a program to solve problems, I'd say use whatever language you're most comfortable with.

    If you ever need someone to help you out, feel free to ask me any programming questions you might have. I know that there are tones of other people on this forum who are also very skilled, so you're in good company here. :P
     
    If I were you, I'd pick up C# right here, right now. MSDN has a very good C# tutorial, and despite it being old, all the code examples should still work while targeting the latest versions of .NET Framework in Visual Studio. Note that these are more for command-line stuff, but most of it still applies to code in GUI programs.

    To me, C# is something that C++ and Java can only dream of... assuming that you can live with the fact that it's managed code.

    I would agree with Twiggy. In my opinion C# would be the best to start with, It is far more user friendly then C++ and C and just as flexible as the former, and it is object oriented just like java.
     
    I would agree with Twiggy. In my opinion C# would be the best to start with, It is far more user friendly then C++ and C and just as flexible as the former, and it is object oriented just like java.

    I am a massive fan of C#, but sometimes starting off with something as massive as the .NET framework can be intimidating. There are a lot of things that look like boilerplate in the language at first as well (which is why I don't like Java as a starting language either, because when you start out with programming, you probably don't know what access modifiers are, and you probably don't understand why main has to be a static method, and so on), and it can be very frustrating for that reason. I love C#, it has all the flexibility of C++, with all of the "ease of use" of Java (it manages memory for you, it has a garbage collector, so on) . For an experienced programmer, it's a dream. You can develop very quickly in the language, and I would use it all the time, except for a couple of minor issues. One thing I find kind of annoying sometimes is that C# is windows only. I normally don't have a problem with that, but occasionally it becomes annoying. It's also managed code rather than compiled, so there are advantages and disadvantages with that, but in general I find that it's fast enough so this doesn't really bother me. Before someone suggests Mono for non-windows use, you really can't use Mono for a commercial product, the chances of it turning into a dead language as of right now are a little too high for most businesses. They're really walking the legal line there, and if Microsoft sues them, even though I know the language features (for the most part) are all implemented in novel ways (different from .NET), we all know how big Microsoft is as a company, and how much money they have, and if they wanted to, they could crush Mono unfortunately
     
    Last edited:
    One shouldn't be worried about the advanced features of a programing language when you're just starting out, to be honest. Usually, following a well-written tutorial should get you started (on command-line programs at least). Eventually, you'll get to know the advanced stuff.

    I actually find C# a bit easy to "get" since I started out coding C++. C# was designed with programmer portability in mind - if you can code C or C++, you should have a blast doing C# after the tutorials.
     
    Just to expand on my previous post:
    I totally agree with Twiggy's post above, I moved into C++ programming soon after getting started with Python, and I really feel like I learned the fundamentals of OOP from C++. Making the transition to C# was really easy from C++ (.NET even supports native code, if you really need it), and C# has features like operator overloading (I'm a huge fan of ad-hoc polymorphism, I kinda' dislike that Java doesn't have it, but it's not that big of a deal), and even pointers if you need them for some reason (though you have to mark the code as unsafe). Like I said, all the flexibility of C++ with the user-friendly nature of Java. Fantastic. I still feel that the barrier to entry for C# is a quite a bit higher than that of the scripting languages he's already familiar with (Lua and Python), for the reasons I've discussed previously. I mean, if he's already comfortable with the syntax of Lua and/or Python, I think he should probably start with one of those and work his way up to C#, or Java, or C++, or whatever he wants. Once you have the logic down, you know it. The programming language, for the most part, is just syntax constructed around logic. Unless you're making a major paradigm shift (maybe imperative to functional), once you know one language, you almost know them all, and at the very least you can easily learn them all.

    Then again, this is just my opinion, and I know everybody learns differently, so it's good that he has a variety of suggestions so that he can hopefully find a language, or a method of learning that really clicks with him. :)
     
    C# fan here! C# best, C# awesome, C# uber!

    Okay, seriously.
    It's really best to start with a programming language you will want to use in work. That way you will have a preference and you can fully dive into it =)
    If you do not plan to work in programming, it's best to start with language that offers what you want to do with programming =) If you want desktop applications for Windows go for C#, if you want multiplatform programs go for C++ for quicker performance. If you want to do quality web pages, go for PHP/HTML + CSS. And if you are aspiring for Android apps go for Java.
     
    I'm going to come out and say this right now. I strongly disadvise beginning with .NET.

    This includes VB, C#, and Visual C++. Why? It's overwhelming and overmanaged. It is incredibly difficult to create truly optimized binaries through .NET, since a lot of things are included in the background that are out of you (the programmer's) scope of control.

    With VB, I'll go ahead and say that its entire structure is begging for syntax errors. It's what I began on, though, and I never really used it beyond creating an RTF editor though a tutorial. Keep in mind that VB does a lot of things differently than the C family.

    Then, we have C# - what many people call the best of the best - is, like VB, managed. Arguments such as "C# has builtin strings", "C# has builtin class/namespace handling", and "C# doesn't screw with headers", are all good points if you don't mind sacrificing a huge chunk of control over the backend of your application. First, strings. In C, strings can be represented through char*, which is basically a dynamically allocated character array. By this logic char*s also double as char[]s, which means you can read each char individually and as a string without doing time-wasting type conversions—like in C#. Second, there's the argument over namespace and class handling. Albeit this is useful for handling incredibly large applications with libraries of DLLs, C++ also has this functionality. Also, don't you think it's a waste of space for some tiny command line app? In C++ you have the option to use these (although it gets very messy). Third, and finally, "C# doesn't screw with headers". Well, when you think of the purpose of header files in C(++), you know that they're there to enable calling methods from other code files, as well as defining type structures and preprocessor constants. Isn't it quite sacrificial to rely on the compiler to figure out what class files to link within a project? And don't you think it's a little redundant to have type structures cluttering up your code files? And not to mention C# doesn't support preprocessor-level defines. Bummer, isn't it?

    Third, there's C++. Considered by developers and corporations alike to be the one, C++ isn't exactly what you would call ideal—within Visual Studio, that is. When you scratch code C++ programs and compile them with GCC or MinGW, all is good; C++ works exactly how you want it - little or no confusion arises when creating projects. But with Visual Studio, a once powerful programming language gets neutered into an overdeveloped and overmanaged project solution, and that's where things get confusing. There is one thing that's sort of funky about C++ itself, though, and that's how it handles defining prototypes for classes and namespaces. It can be incredibly confusing and difficult to understand exactly what each bit of text does for a class declaration in a header file, not to mention when defining access levels for classes also.



    Through all of this, I recommend starting with C. Not just any C or ANSI C, though; make sure you use C99. I'll explain why.

    Pretty much everything is do-it-yourself. Through this method of programming, you don't have dozens or even hundreds of unwanted structure properties floating around in your program doing nothing (e.g. exampleString.Length that never gets used). Basically, C gives you all the tools, and you scratch-code your masterpiece.

    And C is simple; all of it's ins-and-outs are laid out in plain sight, no questions asked. Not only that, but with MinGW and GCC, you can compile C code into native binaries for almost any platform/architecture combination. That includes Intel, ARM, AMD, and most of their addressing derivatives (16-bit/32-bit for ARM, 32-bit/64-bit for Intel/AMD). Also, C was the first. C is one of the most powerful and robust languages available, and is specifically designed to be as clutter-free as possible.

    C is a good language to begin on because (1) you can compile Windows natives right off the bat, (2) GCC and MinGW have verbose error handling at compile time, (3) C doesn't have hardly any unwanted clutter; everything ever used you declare yourself, and (4) it supports resource files and C++-styled (// ) comments (with C99), among other goodies.



    P.S. You won't have to worry about making your users download 600 megabytes of packages just to get your application to run. :P
     
    Last edited:
    I'm going to come out and say this right now. I strongly disadvise beginning with .NET.

    This includes VB, C#, and Visual C++. Why? It's overwhelming and overmanaged. It is incredibly difficult to create truly optimized binaries through .NET, since a lot of things are included in the background that are out of you (the programmer's) scope of control.

    Keep in mind that just because something is within Visual Studio doesn't mean it's going to be managed .NET stuff. You can certainly make unmanaged C#; you can make managed C++. It all depends on what you want to do, and Visual Studio will happily provide you the option to do exactly that. (Using unmanaged code in C# is a very bad idea unless you really need to directly use some Win32 APIs.)

    When it comes to optimization, keep in mind that Visual Basic .NET and C# are not designed to be competitive with unmanaged C++ when it comes to performance and memory requirements. Such is the overhead of having things managed for you. It does make a programmer's life easier once one "gets" it, though.

    Control is good as long as it is not easily misused. Unfortunately, in practice, all that control can end up being more than what you have bargained for! ;)

    With VB, I'll go ahead and say that its entire structure is begging for syntax errors. It's what I began on, though, and I never really used it beyond creating an RTF editor though a tutorial. Keep in mind that VB does a lot of things differently than the C family.

    BASIC isn't something you want to use for advanced stuff. That language is best for simpler stuff that doesn't rely on object-oriented programming (although you can push it if you want to), and it's slow.

    For first-time programmers and "just a side job" people, though, it's perfect.

    Then, we have C# - what many people call the best of the best - is, like VB, managed. Arguments such as "C# has builtin strings", "C# has builtin class/namespace handling", and "C# doesn't screw with headers", are all good points if you don't mind sacrificing a huge chunk of control over the backend of your application. First, strings. In C, strings can be represented through char*, which is basically a dynamically allocated character array. By this logic char*s also double as char[]s, which means you can read each char individually and as a string without doing time-wasting type conversions—like in C#. Second, there's the argument over namespace and class handling. Albeit this is useful for handling incredibly large applications with libraries of DLLs, C++ also has this functionality. Also, don't you think it's a waste of space for some tiny command line app? In C++ you have the option to use these (although it gets very messy). Third, and finally, "C# doesn't screw with headers". Well, when you think of the purpose of header files in C(++), you know that they're there to enable calling methods from other code files, as well as defining type structures and preprocessor constants. Isn't it quite sacrificial to rely on the compiler to figure out what class files to link within a project? And don't you think it's a little redundant to have type structures cluttering up your code files? And not to mention C# doesn't support preprocessor-level defines. Bummer, isn't it?

    To me, the way C-strings are handled are... horrendous compared to the C++ <string> library of C# strings. The less said about <cstring>, the better.

    You wouldn't want to know how much of a kludge the C/C++ strings are for me. I'll be honest - I've never liked how strings are handled with the built-in libraries in C or C++, and my head spins every time I need to deal with strings. They don't really make things straightforward back then, and you can kind of tell C++, although powerful, is... a tangled mess. In some situations, I'd rather code in BASIC or C# than to do it in C++ if only because at least my head wouldn't spin and give me the equivalent of a BSoD.

    Either way, you do have to think differently when you're coding in C# as opposed to C or C++, and that's one thing I can live with.

    Third, there's C++. Considered by developers and corporations alike to be the one, C++ isn't exactly what you would call ideal—within Visual Studio, that is. When you scratch code C++ programs and compile them with GCC or MinGW, all is good; C++ works exactly how you want it - little or no confusion arises when creating projects. But with Visual Studio, a once powerful programming language gets neutered into an overdeveloped and overmanaged project solution, and that's where things get confusing.

    Trying to "scratch code" large projects is asking for trouble; also, Visual Studio is not the only IDE in the world, either. Whether just writing the code on a text editor or utilizing an IDE is better depends on what you're working on.

    There is one thing that's sort of funky about C++ itself, though, and that's how it handles defining prototypes for classes and namespaces. It can be incredibly confusing and difficult to understand exactly what each bit of text does for a class declaration in a header file, not to mention when defining access levels for classes also.

    Certain things do seem to never change :)

    Through all of this, I recommend starting with C. Not just any C or ANSI C, though; make sure you use C99. I'll explain why.

    Pretty much everything is do-it-yourself. Through this method of programming, you don't have dozens or even hundreds of unwanted structure properties floating around in your program doing nothing (e.g. exampleString.Length that never gets used). Basically, C gives you all the tools, and you scratch-code your masterpiece.

    ...and ignore the provided libraries? When you realize that you need something more, you will need to figure out where to start.

    Sometimes, you do not want to reinvent the wheel.

    And C is simple; all of it's ins-and-outs are laid out in plain sight, no questions asked. Not only that, but with MinGW and GCC, you can compile C code into native binaries for almost any platform/architecture combination. That includes Intel, ARM, AMD, and most of their addressing derivatives (16-bit/32-bit for ARM, 32-bit/64-bit for Intel/AMD). Also, C was the first. C is one of the most powerful and robust languages available, and is specifically designed to be as clutter-free as possible.

    On the other hand, new languages are designed for a reason ;)

    C is a good language to begin on because (1) you can compile Windows natives right off the bat, (2) GCC and MinGW have verbose error handling at compile time, (3) C doesn't have hardly any unwanted clutter; everything ever used you declare yourself, and (4) it supports resource files and C++-styled (// ) comments (with C99), among other goodies.

    (1) I'd agree.
    (2) Verbose error handling is useless if the error messages are indecipherable. ;)
    (3) There's a difference between "clutter" and "things you never notice until you need it and it's missing".
    (4) I'd agree, too... but not that it really matters, huh?

    P.S. You won't have to worry about making your users download 600 megabytes of packages just to get your application to run. :P

    I suspect it's more like 50 MB at most on modern Windows systems for a single version of .NET Framework. Newer versions of Windows bundle newer versions of .NET Framework; if you're targeting Windows Phone, you don't even need to worry about this. (Some Windows Phone applications can be as small as a few dozen KB and still be useful!)

    Besides, the same .NET Framework installation can be used for a lot of other things, too.
     
    Keep in mind that just because something is within Visual Studio doesn't mean it's going to be managed .NET stuff. You can certainly make unmanaged C#; you can make managed C++. It all depends on what you want to do, and Visual Studio will happily provide you the option to do exactly that. (Using unmanaged code in C# is a very bad idea unless you really need to directly use some Win32 APIs.)
    Who would want to do that?

    When it comes to optimization, keep in mind that Visual Basic .NET and C# are not designed to be competitive with unmanaged C++ when it comes to performance and memory requirements. Such is the overhead of having things managed for you. It does make a programmer's life easier once one "gets" it, though.
    My point exactly.

    Control is good as long as it is not easily misused. Unfortunately, in practice, all that control can end up being more than what you have bargained for! ;)
    It's all part-in-partial to learning how to safely design programs, no?


    BASIC isn't something you want to use for advanced stuff. That language is best for simpler stuff that doesn't rely on object-oriented programming (although you can push it if you want to), and it's slow.

    For first-time programmers and "just a side job" people, though, it's perfect.
    Ew, amirite?

    To me, the way C-strings are handled are... horrendous compared to the C++ <string> library of C# strings. The less said about <cstring>, the better.
    If I remember correctly, char*s are either included in the core standard library, or come with stdlib.h. Either way, I know that cstring.h doesn't supply char*; it supplies functions for handling char*s.

    You wouldn't want to know how much of a kludge the C/C++ strings are for me. I'll be honest - I've never liked how strings are handled with the built-in libraries in C or C++, and my head spins every time I need to deal with strings. They don't really make things straightforward back then, and you can kind of tell C++, although powerful, is... a tangled mess. In some situations, I'd rather code in BASIC or C# than to do it in C++ if only because at least my head wouldn't spin and give me the equivalent of a BSoD.
    At assembly level, strings are merely duped-up char arrays. Why not cut out the middleman and avoid a bunch of overhead?

    Trying to "scratch code" large projects is asking for trouble; also, Visual Studio is not the only IDE in the world, either. Whether just writing the code on a text editor or utilizing an IDE is better depends on what you're working on.

    ...

    ...and ignore the provided libraries? When you realize that you need something more, you will need to figure out where to start.

    Sometimes, you do not want to reinvent the wheel.
    Maybe you misinterpreted me. By "scratch code" I wasn't refering to designing a whole new standard library for my application; I meant writing all of the workings of the program itself from scratch, i.e. without importing DLLs or backends made by other people. :P


    (1) I'd agree.
    (2) Verbose error handling is useless if the error messages are indecipherable. ;)
    (3) There's a difference between "clutter" and "things you never notice until you need it and it's missing".
    (4) I'd agree, too... but not that it really matters, huh?
    2: How would that be? I remember GCC to be specifically designed so that doesn't happen.
    3: I'm referring to having everything predefined (like in C#) and 90% of it doesn't get touched. What I was suggestings is to declare things yourself so you only have what you need in the RAM.


    I suspect it's more like 50 MB at most on modern Windows systems for a single version of .NET Framework. Newer versions of Windows bundle newer versions of .NET Framework; if you're targeting Windows Phone, you don't even need to worry about this. (Some Windows Phone applications can be as small as a few dozen KB and still be useful!)

    Besides, the same .NET Framework installation can be used for a lot of other things, too.

    I agree. I did have a copy of Windows Vista that was a Lite Edition (~600 MB ISO), and it required a scratch install of all of the frameworks, which is around 0.5 to 2 GB depending on what you get.
     
    This is coming from someone who has never programmed anything aside from web development. I just recently transferred into a computer technology program from a psychology program. Apparently, according to my professors, Java is really helpful and they tend to put a lot of emphasis on how it's object oriented and is basically the foundation of all other programming languages. Don't take my word for it though. Personally, I'm adjusting to learning it quite nicely and I can understand how it's structured with my background in HTML/CSS.
     
    Well, I wouldn't advise to use C or C++, considering they are full of flaws (something called "undefined behavior", no garbage collecting, etc.). They are more or less for people who have too much time compensation for these flaws (except for Visual C++ but that's pretty much C# with a slightly changed layout, meaning that you'd be better off using C# instead). Then there's Java which seems to have a couple problems in some areas whereas C# does pretty well on most parts (at least that's what I've been told some time ago). So normally I'd advice you to learn C#, but considering that many others already mentioned it and me being a hipster, I rather put in another language that looks pretty nice and should, if mastered, give you access to pretty much any other language: Ada

    Also everything xml-related sucks and should be banned instantly :P
     
    If I were you, I'd pick up C# right here, right now. MSDN has a very good C# tutorial, and despite it being old, all the code examples should still work while targeting the latest versions of .NET Framework in Visual Studio. Note that these are more for command-line stuff, but most of it still applies to code in GUI programs.

    To me, C# is something that C++ and Java can only dream of... assuming that you can live with the fact that it's managed code.

    I agree, is is very basic enough for somebody who is still getting started on programming or coding or whatever you were planning on doing in the first place.
    The next things that you should at least try is Java and C++, but you should just try everything to make sure, sometimes you can't be sure of what you find easy to use because it is like a special kind of thing that sometimes only people with good skill or talent can really master entirely.
     
    There's one major problem with that. High Level programming languages manage memory for you and whatnot, whereas you're allocating memory and working directly with memory at such a low level. A complete beginner to programming could feel overwhelmed by that, whereas higher-level codes manage it for you and kinda hold your hand along the way. That's why I think C and C++ should be for those that have a base knowledge of programming, and want to get somewhere further.

    Well, that's where we start on. C language. :)
    That's my opinion, though. ;)
     
    Back
    Top