tags:

views:

172

answers:

6

So I am a hardware engineer turned software engineer due to recent job duties. I have a very strong understanding of procedural programming (mainly in 'C' and 'bash' scripting) but I only have a passing knowledge of what OOP is.

I look around and just about every modern language has very firm roots in OOP (C++, java, python, ruby etc.). I now feel that I'm ready to flex my brain to new concepts and OOP is a necessity to have now-a-days in your tool belt. My question is, with a strong background in 'C', would C++ be the logical next step to learn OOP or would I be missing out from some useful constructs that only other languages offer, say java for example?

Thanks all.

+4  A: 

Personally I would pick either C# or Java, as they force you to use Object Orientated programming rather than being able to fall back on a imperative style, which is a bonus over multi-paradigm languages like Python. They are also useful languages with a lot of real world applications (and jobs) and have large communities which is important when learning.

I am also a strong believer in the "learn something different rather than more of the same" school of thought when picking a new language to learn. If you were looking for a similar language to C, C++ is the obvious choice. The downside is it is very easy simply to use C++ as a slightly better C which would not be beneficial to grasping the object oriented concepts fast (Speaking from personal knowledge).

Yacoby
Either one of these are great choices. My personal preference is C#, but Java's checked exception handling is pretty darned awesome.
Crowe T. Robot
Please comment when giving -1
Yacoby
+3  A: 

I would venture to say that you shouldn't dive immediately into a language due to the fact that you can still fall back on previous programming knowledge, even in an OO language. It might be more beneficial to read and understand OO before trying to get into the semantics of a language.

With that said, Smalltalk is a language I have found very helpful when learning to understand OO concepts.

JasCav
+1  A: 

Looking at your background I'd say go with C++. It's a little complex, yes, but its alot more lower level than Java and the likes - and I think you'll appreciate this being an engineer. This is basically how I feel myself, I dislike Java for being too high level, and feel like C++ is the better choice. It also enables just about any OOP technique.

The language is also in broad use and can be utitlized for hardware related issues as well (embedded systems for example). Another point is that its performance is only matched by c/assembly :)

rmn
Thanks for tailoring it to my background, very helpful. My main concern is that since C++ is over a decade old, it may not provide some new whiz-bang feature in OOP that is all the range now. Since I'm starting from a clean slate, might as well start with the language that encompasses all the latest constructs.
SiegeX
C++ has an upcoming new standard called C++0x, it will make the language feel alot different with many new constructs. C++, despite being a little mature like you say, is constantly being developed and the concepts introduced to it are very new. There's very little you can't do with C++. For very advanced uses of the language (most of it is OOP, naturally) you can check out www.boost.org
rmn
C++0x is an interesting tidbit I wasn't aware of. Wikipedia says that the standard will be published by the end of 2011, but I wonder if gcc will have some preliminary support before that time, or does it have some support already? After all, C99 has been out for a decade and there are still ~6 features that have yet to be implemented in gcc. In anycase, if I start now, by the time C++0x becomes official, Ill have a better appreciation for the additions to the language methinks.
SiegeX
+1  A: 

C++ doesn't have the greatest object model. It's got crappy exception handling, weird syntax, etc. While it's very powerful and, like most things, pretty easy to use once you get over the learning curve, it's not my favorite language.

You need to decide what platform you're targeting. If you want to develop for the web or Windows desktop, stick with C#. The syntax is C-based, but with some pretty sweet extensions and a wonderful object model. Also, it's one of the most prevalent languages in the dev world today. IMHO, avoid PHP as it just creates bad habits. (Please don't start a flame war, guys).

If you're still focused on embedded development, C++ is just about the only game in town that's worthwhile, unless you're going with an embedded OS such as Linux which will provide some other options.

David Lively
In regards to a target platform, all of my development has been in Linux, both self-learning and "professionally". I know my way around gdb which seems like a big plus for C++ but I don't want that tidbit to handicap me from branching out to other languages.
SiegeX
A: 

Try Java or C#. I started with Pascal (Dont ask ;)). Perhaps even Python.

Introduction to OOP in Python

Oto Brglez
A: 

I would recommend C#. There are many blogs examples online to provide you some great information.

There is a book on amazon that will help. Search for Beginning C# 3.0: An Introduction to Object Oriented Programming.

Microsoft provides a free version of SQL Server (express edition) and Visual Studio (express edition) to give you something to start with.

Chris http://chrisbarba.wordpress.com

Chris