All the Cs ... and Java too
Do you get confused between C, C++, C#, Objective C ... and where to Java and J++ fit in?
C
C is the bedrock of modern computing. It's been around a while (by which I mean for at least 40 years) and it's still the language that you'll find underneath everything else. That doesn't mean it's been static for all that time - the "Kernighan and Richie" flavor of early days was supplanted by the ANSI flavor, and additional new libraries have been added so that what was a lot of work is now rather less work.
But just because something is the bedrock of modern computing doesn't mean we all need to learn about it - just as those of us who run cars on petrol don't need to be experts in oil refining. Rather, C remains a vital component of modern computing, but 'behind the counter' for the most part. As a development language for applications and web sites, there are much faster and maintainable ways to code, using tools which are themselves written in C.
C++
As applications grow, so does the suitability of object oriented principle to their design and writing. I'm not going to try to explain "OO" fully here - there are links
on a previous blog.
C++ is an extension of C - it includes everything you have in C, but in addition you have extra language features which provide useful facilities for you to use in in an object oriented manner. With its C comparability, and extras too, this means that C++ is perhaps one of the more complex languages around - you can do anything with it, but at the expense of somewhat longer coding and testing cycles (and longer training programs) than you might like. And with longer code comes a potentially harder-to-maintain application too.
Objective C
An alternative (thin) layer on top of C, added by NeXT which was acquired by Apple in the mid 1990s. You'll find that Objective C is very limited in its use these days, unlike C and C++.
Java
C++ provides a lot of excellent facilities - but it's made over-complex and slower to code by its need to adhere to C. Certain features such as multiple inheritance add further complexity, and are really only of use in a few situations (some might say that multiple inheritance is a siren call, encouraging bad design). C++ compiled code isn't portable, and C++ isn't naturally network aware ...
Now what would a language that fixed these issues look like?
That's the background to Java - brought out by Sun Microsystems some 20 years ago, it's a 'simple', 'small', Object Oriented, 'portable', Network aware, 'secure' language. (I have put quotes around many of the words used to describe java as there are - for example - degrees of portability and security!).
Java follows a public specification for the language, and for the run time compiled classes which run on a virtual machine, so you're no longer required to have one set of executable programs per processor type. It's based on the philosophies and approaches of C and C++, but no attempt is made to make it compatible with those languages, meaning that it can be much more modern, cleaner, leaner, easier.
J++
As the Java specification is open, others can implement and use it. And one company that did so was Microsoft, who added elements to their implementation which they called J++. The additional elements meant that J++ code would not run on a standard Java Virtual Machine, thus breaking the portability philosophy, and as a result of some friction between Sun and Microsoft, the language wasn't carried forward.
C#
C++ provides a lot of excellent facilities - but it's made over-complex and slower to code by its need to adhere to C. Certain features such as multiple inheritance add further complexity, and are really only of use in a few situations (some might say that multiple inheritance is a siren call, encouraging bad design). C++ compiled code isn't portable, and C++ isn't naturally network aware ...
Now what would a language that fixed these issues look like?
If that previous paragraph looks vaguely familiar, you're right ... it's exactly the same foundations that Sun worked from when specifying Java. A few years later, and with the Java and J++ experience to look at, Microsoft specified C#. So it's no great surprise that it looks rather like Java. In fact, technically, it benefits from some experiences of Java too in that a few things are done differently and perhaps better, and some changes are made which would have been impractical at the birth of Java, when memories were smaller, processors slower, and the whole Internet / networking thing was more embryonic than born.
We offer courses on
C, C++ and
Java ... we don't offer courses on Objective C (we don't know it), J++ (gone) or C# (we're not set up for training on Microsoft products and would have to learn and invest a great deal to take on C# at the quality we would wish to provide).
(written 2009-12-13, updated 2009-12-15)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q102 - Choosing your language [76] Learning to program in - (2004-10-07)
[1990] Speaking all the languages - (2009-01-12)
[2001] I have not programmed before, and need to learn - (2009-01-19)
[2048] Learning to program in PHP, Python, Java or Lua ... - (2009-02-19)
[2507] Admission - (2009-11-19)
[2535] When should I use Java, Perl, PHP, or Python? - (2009-12-13)
[2700] The same very simple program in many different programming languages - (2010-03-31)
[2866] Ruby - how does it compare and where is it the right language? - (2010-07-11)
[3169] Rekeying a table - comparison in #Ruby #Perl and #Python - (2011-02-14)
[3558] Python or Lua - which should I use / learn? - (2011-12-21)
[3619] Ruby v Perl - a comparison example - (2012-02-21)
[3764] Shell, Awk, Perl of Python? - (2012-06-14)
[3785] Programming languages - what are the differences between them? - (2012-06-27)
J601 - Java Introduction [25] Release numbers - (2004-08-23)
[111] Training notes available under Open Distribution license - (2004-11-07)
[124] PHP v Java - (2004-11-20)
[317] Programming languages - a comparison - (2005-05-20)
[792] Is Java the right language to learn? - (2006-07-04)
[871] Java oversold? - (2006-09-19)
[1049] Java 6, Apache Tomcat 6. - (2007-01-21)
[1158] Private Java Course - A customer's pictures - (2007-04-22)
[1418] A Golf Club Decision - Perl to Java - (2007-11-01)
[1466] Effective Java training - the bootcamp approach - (2007-12-09)
[1497] Training Season Starts again! - (2008-01-07)
[1557] Trying out our Java examples on our web site - (2008-02-27)
[1766] Diagrams to show you how - Tomcat, Java, PHP - (2008-08-22)
[1908] Java CLASSPATH explained - (2008-11-26)
[2115] Finding your java program - the CLASSPATH variable - (2009-04-02)
[2423] What is a JVM, a JRE, a JDK - components of the core Java Environment - (2009-09-26)
[4332] First Java Application - calculating the weight of a tablecloth - (2014-11-29)
C051 - C and C based languages - C++ - General [2370] C++, Python, and other training - do we use an IDE - (2009-08-21)
[2504] Learning to program in ... - (2009-11-15)
[2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
[2763] Our C and C++ training course are on Open Source platforms - (2010-05-13)
[2851] Further C++ material - view new or old - (2010-07-04)
[3052] Getting your C++ program to run - (2010-11-15)
[3067] Using C and C++ functions in the same program - how to do it - (2010-11-24)
[3129] Extra courses - C and C++ - (2011-01-12)
[3155] Rake - a build system using code written in Ruby - (2011-02-03)
[3250] C++ - how we teach the language and the concepts behind the language - (2011-04-17)
[3587] C++ Courses - do I get official certification at the end of my Well House course? - (2012-01-20)
[3809] Dwarf Exception Unwind Info - (2012-07-20)
[4335] Flexible public courses - residential or commuting, programming newcomer or experienced, C or C++ - (2014-11-30)
[4355] C++ in 2 days - (2014-12-18)
C050 - C and C based languages - C - General [2002] New C Examples - pointers, realloc, structs and more - (2009-01-20)
[2086] C Programming v Learning to Program in C. Which course? - (2009-03-17)
[2091] C, C++ and C# ... Java and JavaScript - (2009-03-20)
[2669] Efficient use of dynamic memory - C and realloc - (2010-03-10)
[2848] C course - final course example puts it all together - (2010-07-02)
[3053] Make - automating the commands for building and installing - (2010-11-16)
[4341] Segmentation Fault, Segmentation Violation, Bus Error, Stack Smashing - (2014-12-04)
[4434] Public training courses - upcoming dates - (2015-02-21)
Some other Articles
Rock and hard place .. and the relaxing right one wonChanging ImagesOpen Source Training Centre and Courses for 2010Faster network, but not faster browsing until ...All the Cs ... and Java tooAnd now for some posts a bit more technicalFive guests, three groups, one carAnalysing Google arrivals by country of originMelksham - new Tuesday Market