#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jul 2013
    Posts
    3
    Rep Power
    0

    Which language next??


    Hi,

    This is my first post to this forum and I'm looking for some career advice.

    I have a PhD in Mathematics and can currently program in Matlab, VBA, JavaScript, and a tintsy wintsy bit of Python, C and VB.

    My question is what next?

    Job advertisements I seen that have interested me ask for either C, C++, C#, Java or .NET or a combination.

    I guess that means I need to learn OO programing. Which is the best language to start?

    Should I study at a University/College or a Software training company? I have learnt from previous attempts that I'm not motivated enough for self study from a book!

    Which would teach me the most and look best on a resume?

    Thanks
    Jane
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2013
    Location
    Usually Japan when not on contract
    Posts
    240
    Rep Power
    12
    If you already know a teesy weensy bit of Python and C, turn that into a fuller knowledge of Python and C. Python is a good place to learn OOP by building a bridge from your current knowledge to a fuller understanding of what OOPsists of the C++/Java variety mean by the term "object".

    Depending on your goals C++ or Java (or both -- but either one can easily become a career language, which is either good or bad, again, depending on your goals) would be a logical next expansion after filling out your Python/C knowledge. In particular, adding OOP constructs in a limited way to C programs can be very useful in interface development and Java is found everywhere, especially places it doesn't belong (another reason its a great job-finding language).

    Anyway, the more you learn and especially the more experience you get working on projects you care about, the less you will care about acquiring a "next language". Highly esoteric languages aside (or pure paradigms with which you're totally unfamiliar, like pure FP or pure DP) most of the time you can hop in on a project effectively if you have three things: source, language/library reference and time.

    Your final question "What will teach me the most and look best on a resume?" is really two unrelated questions, since what will teach you the most is usually very different from what will look good on a resume.

    What will look best on a resume is goal dependent. Being an Erlang wizard is useless in a COBOL interview. Percentages being what they are, Java is probably your best bet for reliably landing a paying position. But it won't teach you much in comparison with working on a real project you care about or the fundamentals of a radically new paradigm, or especially working on a project you care about that forces you to learn something hard and new in the process of that work (this is ideal).
    Last edited by zxq9; July 15th, 2013 at 01:06 AM.
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jul 2013
    Posts
    3
    Rep Power
    0
    Thank you very much for your reply. I have considered switching to Python for one of the projects I am currently writing in Matlab, but I never seem to have the time to account for the learning curve I would require.

    I've tried learning both C++ and Java on my own before. It always starts of very easy until I get to the object and classes section then it immediately jumps way above my head. Which is why I think a class might be a better option for me.

    I think your approach is good though and I will make the time to move one of my projects into Python.
  6. #4
  7. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2013
    Location
    Usually Japan when not on contract
    Posts
    240
    Rep Power
    12
    Those are pretty typical C++ and Java complaints. C++ is a retrofitting of class models onto C, and retrofitting on an already syntactically rich system nearly always requires significant compromises. The end result is a class system that C programmers can familiarize themselves with but beginners who don't have a strong background in C find baroque and hard to get right.

    One thing that simplifies comprehension of OOP for a C programmer is that in C++ it is readily apparent that a C++-style object is a basically struct (data object) that can "do things" -- subordinating functions to the data structure itself. For learners who haven't gotten far enough to understand the previous sentence, the consequences of this model are hard to grasp. (Herber Schildt write two books, Teach Yourself C and Teach Yourself C++. In the second one he strongly advises readers not already experts in C to buy his first book. He didn't say that just to sell books -- though surely that was some small motivation -- he said it because the focus of the second book is extremely hard to grasp without the material from the first well in hand.)

    Java decided to keep a similar syntax but replace non-letter characters with a huge list of mandatory keywords, leaving the language both verbose and baroque for newcomers, not to mention leaving the programmer with no choice but to engage in OOP, whether appropriate or not. The result is a library worth of Java books have to start out telling you to ignore stuff that can't be explained up front -- because a beginner wants/needs to get "Hello, World!" up an running as soon as possible. Java book also go to great lengths to explain, at the outset, all these protection and policing measures that Java has built in so that mysterious strangers can't touch your private members. Of course, they never explain just who you're protecting these members from (yourself? your project mates? someone who is going to use your API and have his project blow up in his face when we touches naughty things?), and none of the time spent focusing on public/private or getter/setter issues gets the beginner one iota closer to understanding how to get the computer to do things for him. Ouch.

    Python is a minimalist in many ways (the language itself -- its libraries are rather large, not compared to Java, of course, but in comparison to other minimalist languages), and supports most any programming paradigm as a natural part of the language, so you can write a system a way you understand first (procedural, for example), then introduce changes to its structure later on if you want (morph it to, say, an OO or functional system -- or a system that merges both approaches).

    After you write a few real programs that do things with classes that you defined yourself in Python the whole concept of a class will become much more clear. At that point you could get back to your Java or C++ book and get through it without your brain exploding, recognizing that the verbose syntax aside, you're not really seeing anything you haven't already seen in some form before.
    Last edited by zxq9; July 15th, 2013 at 10:27 PM.
  8. #5
  9. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jul 2013
    Posts
    3
    Rep Power
    0
    Again some very useful information/advice. Thank you for taking the time to reply to me

IMN logo majestic logo threadwatch logo seochat tools logo