Page 1 of 4 123 ... LastLast
Results 1 to 10 of 32

Thread: what language should I learn ?

  1. #1
    Join Date
    Jul 2010
    Beans
    46

    what language should I learn ?

    I have experience working with ASP/SQL and wanted to get into a proper language but I am unsure where to start ? do I go with C, C++ or C# ?

    Thinking I don't want spend to much time into something if its just going to be no good further down the line (think the version of asp I was working with at the time has gone that way).

    I did have a quick play with C# thinking that new will be better (this is on my windows box) and what I got through was not to hard to understand coming from asp, I did run into a few errors using my current tutorial (googling seemed to point to the latest XNA version not been backwards compatible with what the tutorial was suggesting) That got my thinking should I be trying something different ?

    any suggestions? should I (re)start with a different language ? (also like the idea of using whatever language with openGL over directX for portability) but bare in mind I'm trying to keep it simple for now.

    Thanks

  2. #2
    Join Date
    Sep 2009
    Location
    Canada, Montreal QC
    Beans
    1,809
    Distro
    Ubuntu 11.10 Oneiric Ocelot

    Re: what language should I learn ?

    I do recommend Python and C++. You may wish to start with python, depending on you level of knowledge in programming.
    I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones.
    Freedom is measured in Stallmans.
    Projects: gEcrit

  3. #3
    Join Date
    Dec 2008
    Beans
    123
    Distro
    Ubuntu 12.04 Precise Pangolin

    Re: what language should I learn ?

    I'd recommend Python too.

    Picked it up last weekend, and I now consider myself an expert ... Actually not, but it is REALLY easy to pick up. I'm by no means what you'd consider a programming prodigy, but in the past 8 days, I've made a script, that'll do a system status calling several tools (like you would from the terminal) when run, and save parts of the output to a file. Also managed to make a simple game for the Ubuntu terminal, and i'm currently working on an actual application.
    It's that easy, and there are a truckload of guides, tutorials, references out there on the wild wild web.

  4. #4
    Join Date
    Dec 2010
    Beans
    925

    Re: what language should I learn ?

    Try them all! The ones I would recommend trying are Java, C#, and Python. Java is my personal favorite, but I have a friend who adores C# (he thinks it's better than C++, and I have no experience with C so I'm going to trust him). Just a warning: C only runs on the computer you make it on. If you get a C application, you're going to have to compile it yourself. A version of C is worth trying a bit of just because it's so ubiquitious.
    My recommendation: give Java a try, and maybe Python. If you don't prefer any of those over C#, then just try to work your C# problems out.

  5. #5
    Join Date
    Jul 2010
    Beans
    46

    Re: what language should I learn ?

    Thanks for the input

  6. #6
    Join Date
    Jul 2007
    Location
    Indianapolis, IN
    Beans
    68
    Distro
    Ubuntu 10.10 Maverick Meerkat

    Re: what language should I learn ?

    Quote Originally Posted by Shadowstripe View Post
    any suggestions? should I (re)start with a different language ? (also like the idea of using whatever language with openGL over directX for portability) but bare in mind I'm trying to keep it simple for now.
    Are you wanting to be a developer, or a coder? If you want to be a developer, then I would recommend learning Intel's x86 assembly (not the AT&T syntax).

    Learning assembly and understanding the machine at its most primitive levels will give you a unique, fundamental understanding of why things work the way they do in a computer program. You will see through operating systems, through applications, through any layers of interpretation, and directly to the raw "bones" of the machine.

    If you get a firm handle on assembly language, and the underlying architecture and why things work they way they do, everything you ever try to do will almost be second nature to you, because that foundation will give you the philosophy of "how things should work" ... and then you can see how the author of the app did it to give you whatever it was in a way which works -- as there are many paths to "successful results."

    Hope this helps.

    - Rick C. Hodgin
    Last edited by foxmuldr; February 26th, 2011 at 05:30 AM.

  7. #7
    Join Date
    Jun 2007
    Location
    Canada
    Beans
    370

    Re: what language should I learn ?

    It really depends on the kind of programming you want to be doing. If all you're interested in is AJAX and web programming then don't waste your time with Assembly, C, C++, and other relatively low-level languages. Instead focus your efforts on languages that are used on the web: Javascript, PHP, Python, C#, Java, Perl, Ruby, and suchlike.

    If you're more interested in doing OS/Kernel/Driver development, or working with embedded systems where there may not even be an operating system in place then C or C++ is the way to go. For embedded systems a good knowledge of the assembly language instructions for the CPU you're working with is also a very good idea. (Common embedded CPUs I've run into are the AtMega128, Motorolla 68k, and ARM.)

    If you're just starting off as a programmer and have no idea what you want to do (i.e. you want to test the waters and you'll figure out what you're interested in as you go) then I'd suggest either Java, C# (if you're using Windows -- Visual Studio is a wonderful IDE, and one of the few Microsoft programs I can honestly say I enjoy using), or Python.

    Python is arguably one of the easiest languages to pick up. The tutorials are clear and numerous, the syntax is easy, and the code is designed to be legible by a human. I've heard it described as "executable pseudo-code."

    Java gets used a lot in introductory university courses. It offers enough flexibility that you can do some pretty low-level stuff. Not as low as C or Assembly, granted, but still pretty low. But unlike C it also scales up very easily to very large, complex applications.

    If you're interested in learning Java from the beginning I suggest you look at this wiki: COMP1010 Wiki Textbook. It's the online textbook used by the University of Manitoba for their introductory computer science course. You may find it helpful.

    (Note for anyone else who checks out the textbook: it doesn't cover objects, polymorphism, or any of that jazz. That's covered in COMP1020, the second introductory course. 1010 is pretty much procedural programming in Java. And unfortunately I don't think there's a 1010 textbook wiki (yet).)
    Last edited by ve4cib; February 26th, 2011 at 10:27 AM.
    GCS/O d+(-@) s: a-->? C(++) UL P+ L+++@ E@
    W++$ N++ !o K++ w(++) !O M(-) !V PS+(++)
    PE-() Y+ PGP++ t++(+++@)* 5++ X++@ R+++@
    tv+ b++(+++) DI++ D+ G+ e++>++++ h- r y?

  8. #8
    Join Date
    Apr 2007
    Location
    (X,Y,Z) = (0,0,0)
    Beans
    3,715

    Re: what language should I learn ?

    Quote Originally Posted by foxmuldr View Post
    Are you wanting to be a developer, or a coder? If you want to be a developer, then I would recommend learning Intel's x86 assembly (not the AT&T syntax).

    Learning assembly and understanding the machine at its most primitive levels will give you a unique, fundamental understanding of why things work the way they do in a computer program. You will see through operating systems, through applications, through any layers of interpretation, and directly to the raw "bones" of the machine.

    If you get a firm handle on assembly language, and the underlying architecture and why things work they way they do, everything you ever try to do will almost be second nature to you, because that foundation will give you the philosophy of "how things should work" ... and then you can see how the author of the app did it to give you whatever it was in a way which works -- as there are many paths to "successful results."
    Oh man, you're mixing so many things there...

    No, ASM will give you some foundations for low-level programming and will explain some incongruencies that happen in C and C++, but it's completely irrelevant for programming in general. Well, not even that, try applying ASM to a low-level language like Forth and you're lost.

    Programming is more about writing about some computable reality in a certain formal language, which usually happens to be simulated/interpreted by a computer. You know, if you know C and I hand you some code written in it, you'll surely understand it without a computer.

    Of course, because programs are coded for computers primarily, some languages incorporate computer-specific semantics for implementation reasons. That's what defines low-levelness: aspects in programming language's specs that refer to the computer, in contrast to those that refer to general processes/objects of thought.

    But you don't need to learn ASM to learn Common Lisp. Not even if the particular Common Lisp implementation you use is written in ASM. Moving registers and using labels in ASM won't explain what a closure is. The mistake here is to think that programming languages form a continuum that starts in binary and presumably ends in some sort of Lisp. But that's not true: programming languages, save some exceptions (e.g. C++, Objective-C), aren't conceptually based on others, but created from new. Then you implement the interpreter of the language (not the language!) in some other programming language. For instance, there are C++ compilers for the JVM...

    Are low-level languages necessary? Of course. Should they be learned? Of course. But when it comes to understanding what programming is from a general, conceptual, point of view, high-level languages are better.

    P.S.: About learning Intel ASM vs. AT&T ASM *syntax*... That's irrelevant: the semantics of both are quite the same. I could understand you said it's better to learn either NASM (which is Intel syntax) or GNU AS (which is AT&T, but supports Intel) or some other ASM implementation because it has such or such feature you think it's interesting... That'd a semantics discussion, which is what you really want to discuss when evaluating what programming language you want to use.

  9. #9
    Join Date
    Jan 2009
    Beans
    237
    Distro
    Kubuntu 10.10 Maverick Meerkat

    learn C !

    I wouldn't recommend learning Python as the first language.

    It may be dead simple to pick up (ie: one week MAX from zero to advanced skills), but its downside is that you will be concentrating on using Python specifics (lists, Python strings etc.) instead of concentrating on concepts that'd allow you to make a simple transition to any programming language.


    I recommend C.
    The language itself is tiny, really. Learn to use its libraries (input, output, memory allocation and other commonly used ones) and you'll have a solid understanding of what programming really is about.

    Not to mention that you can use C anywhere: from microcontrollers to desktop applications to kernel development, on virtually any available platform.

    Its downside is that it'd take more effort than with eg. Python to write something complex.


    C++ (with STL) is a whole different beast. Writing C++ code is much different from writing C code (unless, of course, you choose to write "C with classes & cin & cout").
    You can also choose C++, but you'd have to memorize more things.

    Its major advantage is that it's OOP, a crucial aspect if you want to get employed quickly.



    REMEMBER: no matter which language you choose, learn it with the help of a GOOD BOOK + the occasional tutorial.
    Tutorials alone are not good enough to keep you interested or to give you a direction to build something useful.
    Last edited by cguy; February 26th, 2011 at 12:23 PM.

  10. #10
    Join Date
    Nov 2009
    Beans
    1,081

    Re: what language should I learn ?

    Quote Originally Posted by Shadowstripe View Post
    I have experience working with ASP/SQL and wanted to get into a proper language but I am unsure where to start ? do I go with C, C++ or C# ?
    C might be interesting if you want to force yourself to learn about particular architectures, because C doesn't bother to hide them from you. Incompletely specified type sizes, a not terribly large set of routines in the actual language definition providing less guarantees of universality... e.g. threading.

    C and C++ and the like also have one particular drawback that makes it somewhat less appealing for complex projects: the ability to write data to arbitrary locations within a process's allocated memory makes it *much* easier to very subtly corrupt data structures and the like. Writing to a completely invalid location like 0x0 is relatively simple to find and fix because it'll trigger an immediate fault; writing into an unrelated, existing in-memory data structure within same process's address space defining a financial transaction and not noticing until long after the now corrupt data is written to persistent storage is another matter. This ability to read and write throughout the processes's allocated memory also makes it trickier to write completely secure code. It may be frequently theoretically possible to manually create highly optimized C code that may take less CPU time, but I suggest that this may often be a poor use of *human* time because the difficulty of isolating bugs can make it considerably more painful to find and fix them, and it increases a system's vulnerability to the fallibility of *every* author of every library it invokes.

    Haven't really looked at C#, at all, so no comments there other than I would expect that they've thought about how to lessen some of the more painful aspects of C and C++.

    Personally, I find Java very practical. It's mature enough that there's a pretty large set of APIs built into the language, and modern and widely used enough that there's a lot of highly useful third-party code (JDBC drivers, Maven, Tomcat, log4j, JUnit, IntelliJ, Yourkit, Guava, Guice, Spring...). The ability to create small anonymous classes and generics is convenient if one wants to take a somewhat functional approach as well, since it facilitates function composition. The reflection API makes it quite doable for code to inspect objects and invoke methods by name or the like, in the usual case (it is more obnoxious if you are simultaneously dealing with generic and varargs methods, because determining which identically named function in the same class is the most appropriate to invoke for a given set of arguments takes more work... but would you rather be fussing with dlopen?). Annotations can be very useful as well -- see JAX-RS, for instance.

    While some of the design is suboptimal in various places, in general it's quite usably designed. And if you stay far away from JNI (Java bindings to native code), it will be considerably easier to diagnose issues, and thus to develop and maintain.

    Re: my perspective, I tend to care about a lot about very complex algorithmic work on fairly decently sized data sets, and very little about desktop presentation. From a PL perspective, I cut my teeth on Cartridge BASIC and have used to varying amounts and varying years-ago Pascal, Logo, C, C++, a tiny bit of MIPS assembly, Lisp, Prolog, SML/NJ, Perl, Java, SQL (PostgreSQL dialect), and PL/pgSQL. With respect to general-purpose programming, I pretty heavily favor Java and Perl for practical reasons; and I write a fair bit of SQL and occasionally PL/pgSQL for my work. For me, I only really turned my attention towards Java after close to twenty years of programming in other languages (most using the C/C++/Perl set), so I can't really speak as to how easily you might learn it without much experience in similar languages.

    any suggestions? should I (re)start with a different language ? (also like the idea of using whatever language with openGL over directX for portability) but bare in mind I'm trying to keep it simple for now.

    Thanks
    openGL? Hm, I recall poking at it once and it being fairly low level; you may find it simpler to look at slightly higher-level frameworks. A number of cross-platform engines already exist, e.g. Crystal Space.

Page 1 of 4 123 ... LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •