the huge problem with learning java is that while yes, you can learn java, the real thing you want to learn is object oriented programming.
the huge problem with learning java is that while yes, you can learn java, the real thing you want to learn is object oriented programming.
Go with Java. You won't regret it. Right now it's the most used language in the world (I had a chart but I lost the link), Java 1st, C++ 2nd, C 3rd.
Java is easy to learn, it has a huge community. But to use it you MUST know OO.
Some people will say "but you have to to write so much to just create a hello world" and I always say: "WHY THE FUCK DO YOU WANT TO MAKE A HELLO WORLD????? Nobody will hire you to create a hello world.". Java is OO, it means you have to write a lot for small things but you can always use the same code for a lot of things.
If you learn OO then you can master Java. OO is its hardest part in my opinion.
A great thing about it is that Java is very well documented.
I use the Eclipse IDE.
Eclipse: http://www.eclipse.org/downloads/
Java Development Kit: http://www.oracle.com/technetwork/ja...ads/index.html
Hints about Eclipse:
If you get an error in your code, click the piece of code that has the error and do ctrl + 1 and Eclipse will offer you a quick fix.
If you don't remember the name of a method you can type the name of the reference variable put a dot then ctrl + space and it'll show you the name of all methods and attributes, arguments that the method accept and it's return type.
Last edited by bloody251; 2012-02-17 at 12:33 PM.
Brett...I think you have yourself mixed up.
Objective C for iphones is a pain in the ass (just found this out).
It's worth mentioning java is taught in most universities for a reason (ease of learning) too.
If you want to take part in hardware development there is no way around C. A lot of chip manufacturers don't even offer a C++ compiler, because when it's about firmware, even today most people don't see a point in using an OOP approach. I have to agree with this, because in firmware development you care more about the way your hardware is built and even derive from this if you use a time triggered task scheduling of compose event triggered ISRs with background tasks, depending on your timing requirements and the overall system layout. Hence, things can get quite complex and you will seek to keep stuff simple. As soon as you have parallel computational units, your intrinsics will make stuff complicated enough.
On the other hand, if you are good in C++ you know everything you need to know about C. In my opinion, once you know one language really good, the rest is just syntax. Switching from C++ to C# is also very simple as it just makes things easier (if you want to control or test stuff on your hardware from the PC, writing a quick C# GUI is really nice).
Also, don't care too much what people say about job reputation. Today, you have electronics everywhere and the biggest part in electronic engineering is usually firmware development. Here, good people are rare and if you know about both, hardware and programming, getting a job is really cherry picking. It's often not that obvious for the common people, but just image what number of ECUs you have just in very car -> everyone has a car, then all the automation industry is depending on embedded systems (i.e. the production lines are full with them), you don't even have a coffee machine without microcontroller inside. Ok, I don't wanna be the guy to program the coffee machine, but still someone has this job and cannot be simply replaced by some computer scientist who as no clue about electronics design.
Why would you think that? C is still much more portable than C++, for example. I see no benefit for using C++ over C for most projects. Learn C and learn an OO language that's not C++. C++ was designed to be an object oriented language that's backwards compatible with C, as such it carries a lot of baggage that other OO languages don't.
Objective-C is an excellent language. What exactly did you find to be a "pain in the ass" about it?Objective C for iphones is a pain in the ass (just found this out).
Learning a relatively new language on short notice :P
Sorry, did you call vanilla C OO? Can you write C? It's procedural. It's not OO. Sure, they've implemented things like TRY-CATCH over the years ported from other OO languages but at best any OO style C code is hackish at best and a mess at worst. C++ exists specifically as it was a project started to turn C into an OO language.
Lets try JavaCode:main() { printf("hello, world\n"); }
Procedural PHPCode:public class hello { public static void main(String args[]) { System.out.println("Hello world"); } }
OO PhpCode:<?php echo "Hello World"; ?>
Code:<?php class helloWorld { function worldPrint() { print “Hello world!”; } } $myHelloWorld = new helloWorld(); $myHelloWorld->worldPrint(); ?>
My mistake actually, I misread what you said, fair do. I thought you'd said "learn C, an OO language thats not C++" :P
I, FattyXP, called Java a copy of C. So therefore C# is naturally a derivative of C even if it is an "imitation" of java.
Not to mention even before the bit you are trying to take out of context:
Its original name was COOL to stand for C-like Object Oriented Language. C like, not JAVA like. It would make sense that the creator of Java would call something that imitates what he imitated an imitation of his work. Its like me painting a new Mona Lisa and saying that Leonardo was imitating my work.During the development of the .NET Framework, the class libraries were originally written using a managed code compiler system called Simple Managed C (SMC).[12][13][14] In January 1999, Anders Hejlsberg formed a team to build a new language at the time called Cool, which stood for "C-like Object Oriented Language".[15] Microsoft had considered keeping the name "Cool" as the final name of the language, but chose not to do so for trademark reasons. By the time the .NET project was publicly announced at the July 2000 Professional Developers Conference, the language had been renamed C#, and the class libraries and ASP.NET runtime had been ported to C#.
http://eu.battle.net/wow/en/forum/topic/3010461094
Zellviren of Invective of Killrogg: I salute you.
The only reason to even use java anymore is for cross platform support without the need to recompile on the other host OS.
Java is old, slow as shit, requires a huge framework which takes up a large amount of memory/clock cycles. At least for me, whenever JRE would start my computer would slow down by about half speed... course this was back when I had a 933mhz processor and 2gb of RAM. Its done this to me on any computer I've ever had to to install it on that wasn't a dual core or higher.
.NET is in demand because what does the business world run on? Windows. Whats the big thing with Microsoft/Windows programming? .NET (especially since Windows 7 and x64 where Visual Studio 6 is much less useful)
I recommend learning .NET as a whole, from VB.NET to C#. The greatest part about .NET is you can mix and match the different languages IN THE SAME PROJECT! or Solution as they call them now. So say there is something mega complicated that someone else has already programmed out in VB.NET but your program is written in C#. You just make a new module for VB and pop it in, and C# can call it and use it like it was written in C#. When you compile, .NET just mushes it all together like gravy and taters =-)
PHP and ASP are both useful, Perl/CGI is also a good one but has been outclassed and on the decline for several years now.
Gotta back Brett on that - If you're calling Java in a way that running a program chews up 2gb of ram, you're doing it very VERY wrong unless you're dealing with processor intensive enterprise scaled applications (Which then would be ran off a server regardless).
You wouldn't believe the amount of companies attempting to switch to Linux and the likes these days (Especially Redhat and Ubuntu). Which annoys me to be fair since im pretty much exclusively an MS/Citrix/Vmware tech and my *ix skills are somewhat...drastically lacking..NET is in demand because what does the business world run on? Windows. Whats the big thing with Microsoft/Windows programming? .NET (especially since Windows 7 and x64 where Visual Studio 6 is much less useful)
If I had to start again, knowing what I know, I'd kick off with Java or Python and branch into either C# or C++ from there.
If you really care about performance, you need support for vector operations. There might be some Java support for SSE, but in general your life is easier if you simply use C++. Then you can also use Intel's Performance Primitives (IPP) where most stuff is already optimized and be happy. Also, if I have very complex computations and care about performance, I avoid garbage collectors like the plaque.
If you ever dealt with stuff like COBOL or D-BASE you would not use the term "completely and utterly different" for things like C# and C++. There are far more differences between other languages. You can put a C++ developer in front of C# and he will be able to write a working program very quickly. Maybe not taking advantage of every aspect the language offers, but that's details.What I see time and time again is C++ devs trying to write C++ in C# and vice versa. It doesn't work. They are completely and utterly different languages.
Of course if someone only learned C# and tries to write a C++ program, I can only feel sorry for that guy. That's why you should learn things bottom up. If you always drove with automatic, you will have a tough time handling a car with stick, too.
I started writing a really long reply to this and then realized that I could probably do it in a way more compact way, so here we go.
1. Object Orientation is a fad.
It brings you three things: encapsulation, polymorphism and inheritance.
These are things we like to have for our CASE tools, not ourselves.
"Programming" nowadays is updating UML diagrams and filling in the blanks after the CASE tool has gone through it, this isn't the 90's.
All the mentioned languages in this thread can do roughly two things:
Control flow and variable manipulation.
If you fail to understand this you do not even remotely understand programming. "Oh but Java has Feature X that makes life soooo handy", well so what? All feature X is a nicely summarized way to write something you could've written anyway.
What the industry wants is people that are fully immersed on object orientation (due to the simple fact that once again, we draw programs nowadays, we don't write them) and less handy around say Christofides algorithm for approximating the TSP problem (http://en.wikipedia.org/wiki/Christofides_algorithm), unless of course you are one of those rare people that live for memory optimization.
2. Understanding the essence of programming is more important than understanding a single technology unless you of course are going to be working with this technology on an intimate level.
If you can couple together a calculator in a programming language then you know the programming language sufficiently. the rest is just various constructs (say, stub in Java or stage interaction in AS3) that you just need to get your head around.
Long story short, you can argue languages to the end of time. "Mine is better than yours" and whatnot, but at the end of the day the best language to learn is one your employers are going to want you to know. As it is right now you'd want to familiarize yourself with the .NET world and Java. In five years, who knows?
If you really cared about performance, why wouldn't you use C or even assembly over C++? SSE and IPP are 99% of the time handled by the compiler anyway. As for garbage collection. In complex applications doing manual memory management right becomes practically impossible, which coincidentally is where garbage collection tends to kick ass over manual memory management.
The point is, if you care about performance over everything else you should go C. If you care about maintainability, portability, etc. etc. you should go Java (or another proper OO language) over C++. I very rarely find a domain where C++ is the right choice, unless it's a big steaming pile of legacy code you need to maintain. Also, with modern JIT compilers the performance difference between Java and C++ is trivial.
To sum up 50 people saying the same thing, java is the most widely used, so its good to have some level of understanding, c and c++ follow the same rule. also .net is very popular(due to microsoft pushing it) but i think theyll revert back to C++ soon.
On a side note, bad programers uses keywords, good ones use logic and reference manuals. Do not put to much though into learning a certain language, but just try and become a better programmer.
Yes, IPP is great (I use it at work for image processing all of the time), but again, it comes down to what the OP wants to build. Suggesting programming languages without this knowledge is a waste of time IMO.
Again (for the... what, 8th time? ), these are syntactic similarities. Yes, you will recognize the structure of a loop, and if statement, a function call, etc. very quickly. However, the semantics, which are the hard/important part, are in fact completely different.If you ever dealt with stuff like COBOL or D-BASE you would not use the term "completely and utterly different" for things like C# and C++. There are far more differences between other languages. You can put a C++ developer in front of C# and he will be able to write a working program very quickly. Maybe not taking advantage of every aspect the language offers, but that's details.
Of course if someone only learned C# and tries to write a C++ program, I can only feel sorry for that guy. That's why you should learn things bottom up. If you always drove with automatic, you will have a tough time handling a car with stick, too.
You're right that you can find languages that are more disparate than these two. No, I have never had the "pleasure" of writing in COBOL or D-BASE, but that comparison does not prove anything I said previously incorrect.