Student, what language should I learn?

Discussion in 'Mac Programming' started by Hinsight4, Sep 26, 2005.

  1. Hinsight4 macrumors newbie

    Jul 15, 2005
    I was reading some online tutorials on MacDev Center and followed an article setting up an app to use tar (ruby-cocoa based). Anyway, what language should I invest my time in if I'm going into computer science? I see a lot of talk about C, C++, objective-c etc, but what one should I choose? I don't want to learn cocoa exclusively because I'm sure the classes I'll take will focus on Windows, so I don't want to tie myself down from the start. I know this is an opinionated subject, but thanks for the advice!

  2. notjustjay macrumors 603


    Sep 19, 2003
    Canada, eh?
    Java seems to be the de facto standard for learning languages - particularly at my university, anyway.

    Java is very similar to C++, syntax-wise, and you'll have little difficulty learning one if you know the other. However, Java simplifies a lot of the things that can be tricky in C++, especially to a beginner, such as pointers, function prototyping, debugging (with its detailed traces), etc. The language library is HUGE and provides tools for doing all kinds of things (data types, communications, GUI stuff, etc).
  3. Toreador93 macrumors regular

    Sep 14, 2003
    My college is mostly C++. Java is okay for some applications, but if you're writing big software, you'll probably be writing it in some kind of C-variant.

    C++ is more advanced than C, thus will be used more. I'm not sure, but I think objective C is easier, but you won't learn the ins and outs. C# is a Microsoft variant. Once you learn one language, it's pretty easy going to another. But I think C++ will be more helpful in the long run.
  4. khammack macrumors regular

    Sep 28, 2004
    Portland, OR
    If you're talking about getting a CS degree, you need to learn several languages representing a wide variety of programming styles.

    Learn C (not C++). Do this whenever, but before C++. Don't learn C++ yet.

    Learn an Object oriented language (not C++), like Java or Common Lisp. Yes, Common Lisp.

    Once you've learned some other proper object oriented language (not C++), then learn C++. Do this only after you understand what Object oriented programming is. Otherwise, it'll make little sense (especially if you learn pure C first, which you ought to do).

    Learn a purely functional language, like Scheme. Learn it. You may find this more difficult if you already know something else; some CS degrees teach Scheme as their first programming language. If you want to start with Scheme, try It runs on Windows/OSX/Linux.

    Learn a high level scripting language like Perl or Python (or both).

    What order you learn them in is up to you. As a disclaimer, and so you can understand where I'm coming from, I'll summarize my relationship to programming:

    I started with basic in the early 80's, moved on to FORTRAN, then Pascal, then C, then C++ (didn't get it), then Java (AHA! So that's OO programming), then Scheme, then C++ properly, then Perl, then loads of others and I lost track at over 20.

    I rotate between Linux, OS X, and WinXP on a daily basis (though ever more rarely do I use Windows). In my current job I don't write apps, I write lots of small programs crafted for analysis of whatever problem I'm working on. Also I write stuff that updates static web pages and the like. I get the most mileage out of Python, with some Scheme thrown in.

    I use C/C++ for device drivers or other low level programming. Also it's used for simulation at our company so I mess with it a bit there.

  5. Whyren macrumors 6502a


    Jun 3, 2004
    east of the West and west of the East
    I'm not an expert here or anything, but I'd suggest starting with an "older" language first, such as C or C++. The biggest thing in computer programming is understanding algorithms and breaking down tasks into "either-or" situations. Beyond that, it's just syntax and language-specific rules. Starting with older languages, you have more rules you have to follow. More recent language, like Java, allow you to bend the rules more to make things easier. If you know the trickier way first, it just gets easier from there. Just like doing standard deviation by hand, then figuring out your calculator can do it in a few button presses (confound you Probability/Statistics teacher!).
  6. logicat2001 macrumors regular

    Apr 16, 2003
    Minneapolis, MN
    Until you bump up against the differences between writing object-oriented code and procedural code, eg. There are fundamental differences in the design philosophy of each language that you'd do well to try and notice as you learn them.
  7. khammack macrumors regular

    Sep 28, 2004
    Portland, OR
    You're talking about what I call the "bottom-up" approach, which has merit. But I don't agree that it's the necessarily the best approach.

    Personally, I recommend the "top-down" approach; start with a very high level language like scheme, perl, or python before learning C. Java isn't quite in the same class as the others. It's not as tedious as C, but it still isn't in the same class as scheme / perl / python.

    Many university CS curriculums now use Scheme in their "Intro to programming" course. Of course, many also begin with C. Clearly, there is widespread disagreement on which approach is best.

    I'm not saying the bottom-up approach is wrong, but I wouldn't say it's better either. The most important thing to do is just pick something that appeals to you and get started.

  8. plinden macrumors 68040


    Apr 8, 2004
    I followed a similar track to khammack in learning programming languages (BASIC first, then FORTRAN, C, a sidetrack into Parallel C for transputers, C++ started then abandoned, Java, and back to C++. Java taught me all I need to know about Object Oriented programming.

    But, knowing what I know now, I would have learnt an OO language first (ie. Java). I found I had to unlearn all the bad habits I picked up with the procedural languages before I was effective in Java or C++.

    However, although Java is easy to use, it's hard to use properly. You get hit hard by performance bottlenecks if you don't know the workarounds.

    I think I would have found it more enlightening to learn basic OO concepts before even starting to program. But that's just me. Some people seem to find the opposite is more effective.
  9. lexfuzo macrumors 6502

    Mar 15, 2005
    The heart of Europe
    Or whatever language your teacher is going to use in his class.
  10. mojohanna macrumors 6502a


    Jul 7, 2004
  11. logicat2001 macrumors regular

    Apr 16, 2003
    Minneapolis, MN
    An important consideration is: what kind of programming are you planning to pursue? If someone is hoping to get into embedded code, or intense graphics applications, low-level coding would be a great start. However, if you expect to write desktop user apps, especially using some flavor of RAD, you would probably do better getting used to OO, first.
  12. khammack macrumors regular

    Sep 28, 2004
    Portland, OR
    This is a good point. Programming isn't about knowing languages, it's about writing programs. The type of program you want to write will drive the sort of language that you will use to write it.

    Start with a modest programming project, then choose a language that you think would be appropriate.

    Then, reimplement that program in another language.

    I have a handful of very simple programs that I use to get familiar with new programming languages. When learning something new, I start with these:

    1) Print "Hello" to the screen.

    2) Do some sort of text processing. For example, I always do the same thing, read 2 files like these:

    A1 one # comment
    B2 three # another comment

    A1 one # different comment
    B2 two
    B3 three

    And print the differences. The output for the above would look like:
    "B2" is "three" in "file1.txt" but it is "two" in "file2.txt"
    "B3" is not defined in "file1.txt"

    Treat # signs as comment markers; Ignore the # sign and everything after it.

    3) Finally, for graphics programming I implement a mandelbrot viewer / explorer program. It's simple to implement, but requires graphics and number crunching that can take a lot of time (which exposes you to performance issues) and can easily cause you to run into numbers so small that the computer can't deal with them (so you have to as a programmer). You can get loads of mileage out of this one actually, you don't need graphics at first, you can just create a .png file (which requires that you learn entirely different aspects of the library / language).

    For an explanation of how to compute the mandelbrot set, look here:

    Of course, you probably want to make something different. Those were just examples.

  13. Hinsight4 thread starter macrumors newbie

    Jul 15, 2005
    Thanks for all of your responses everyone. I was torn between Java and maybe Objective-C, and after googling a bit decided that I like Objective C better (I just like the syntax a little better I guess, Java seems angry :) Might not be a great reason, but I finally found a decent book for Cocoa and Objective-C and that's what I'm working on right now. Granted I'll have to learn other languages etc later, but I'll have something to start with and I'll have some idea of coding. So thanks again!

  14. logicat2001 macrumors regular

    Apr 16, 2003
    Minneapolis, MN

    Glad to hear you're jumping in; there's really no other way to do it. Just as an example, I've been happily coding with Cocoa in Obj-C and having a great time.

    However, my current project has me digging in to low-level C in order to extract raw binary data from a third-party file format. What I found has led me to learning about Pascal strings, which required me to figure out how to convert between Pascal and C-strings. Then I realized I had to learn about OSTypes and FSSpecs in order to complete this app.

    Just gotta stay nimble...
    Enjoy the ride,
  15. prophet621 macrumors member

    Jul 31, 2005
    What does it mean when people talk about Python or Perl as a very high level languages?

    I've been meaning to pick up Python but have just been so tired and drained from work and life that I can't concentrate or remember anything so I haven't really done anything with it.

    I picked Python because from my understanding it's a very clean and somewhat easy to pick up but still has some power behind it.
  16. HiRez macrumors 603


    Jan 6, 2004
    Western US
    The "higher-level" the language, generally the more you can do with less code, and the libraries of functions you can call are usually larger. Syntax tends to be more readable with higher-level languages. The downsides are that performance is not as good as lower-level languages, and you lose some control (many high-level languages "buffer" you with "sandboxes" to protect you from doing anything really bad).

    Python is an excellent general-purpose scripting language, by the way, easily my favorite. I never liked Perl. Perl is powerful but its syntax really turns my stomach. If you want to do web programming, I would recommend PHP as a fairly high-level language.
  17. logicat2001 macrumors regular

    Apr 16, 2003
    Minneapolis, MN
    Another way to say it is that high-level languages have more layers of abstraction between what's actually being accomplished with bits and your hardware. These layers of abstraction allow you to code with, e.g.:
    • GUIWindow *myWindow;
      point1 = (0,0);
      point2 = (400,400);
      makeWindow(point1, point2);
    This code (which isn't real code) would presumably allow you to create a new window at the screen that is 400 pixels high and 400 pixels wide, starting at screen location (0,0). The instructions you need to write, as a programmer, are really simple and quite easy to understand just by reading it. That's high-level.

    If you were using a low-level language, e.g. you might be required to custom write every single routine or function that would drive your video card hardware to fill particular pixels in, one by one, then finally render it on your screen. That's low-level.

    The beauty of using pre-existing code libraries or frameworks, or of using a high-level language, is that the hard-core code that actually makes this stuff run is hidden. It helps keep code more consistent, it saves everyone the work of re-inventing the wheel every time they want to accomplish something, it typically makes it easier to debug, and definitely makes your own code easier to read. This makes a huge difference as your coding projects grow in size and complexity.

    BTW, one of the reasons/benefits of Object oriented programming is to allow for high-level code using lower-level components. You learn how to structure your own programming into a model that's much easier to work with, even though typically it'll run a bit slower. In my current work, I'm using Cocoa w/Obj-C; the Cocoa frameworks are definitely high-level. However, I can freely intermingle any C code, libraries or system calls at whim. It gives me the best of both worlds.

  18. AP_piano295 macrumors 65816

    Mar 9, 2005
  19. seriypshick macrumors member


    Apr 4, 2005
    I agree with 'Learn C first" people.

    Good luck.
  20. logicat2001 macrumors regular

    Apr 16, 2003
    Minneapolis, MN
    Being Puerto Rican, I agree with learning Spanish first. And checking out seriypshick's pointer find, too.

    Hasta luego,
  21. ham_man macrumors 68020


    Jan 21, 2005

    Java is a bloated P.O.S. I hate nearly all programs written in it. Hate.

    And C++ is a bit too much for a beginner...
  22. Heath macrumors regular

    Aug 19, 2005

    Java isn't that bad, and it gives a good handle on object oriented principles.

    Java -used- to be bloated and poorly performing but it has caught up in leaps and bounds recently.

    Of course all these performance issues are moot when you have a lousy programmer trying to use them! :)

    I'd recommend Java, Python for object oriented learning and C for lower level learning.

Share This Page