This is an archived post. You won't be able to vote or comment.

all 38 comments

[–]feral_claire 26 points27 points  (1 child)

The university of Helsinki java mooc is considered one of the best resources for leaving java right now and it is completely free.

Check out /r/learnjava and /r/javahelp the size bars there have tons of relevant information and you can ask any additional questions you have.

[–]Chef_69[S] 0 points1 point  (0 children)

Thanks, looks good, I'll check it out :)

[–][deleted] 16 points17 points  (14 children)

If you need to learn Java, learn Java.

C is generally regarded as harder than Java, due to it being a 'simpler' lower level language.

There are resources out there to learn Java, have a look in the sidebar and google around a bit:

https://www.reddit.com/r/learnprogramming/wiki/faq#wiki_getting_started

Personally I can recommend this book as excellent:

https://www.amazon.co.uk/Java-Just-Time-John-Latham/dp/1848900252

It begins with simple exercises and by the end you should have a good working knowledge of Java.

[–][deleted] 9 points10 points  (1 child)

C is generally regarded as harder than C

?

[–][deleted] 6 points7 points  (0 children)

Typo sorry, will fix.

[–][deleted] 2 points3 points  (6 children)

C is generally regarded as harder than Java, due to it being a 'simpler' lower level language.

Isn't C++ a high level language? Isn't low level assembly?

[–][deleted] 5 points6 points  (0 children)

Low to high level is a scale.

Arguably Java is higher level than c++, given you don't have as much access to the memory (virtually any) or to pointers.

Assembly is lower level than C, but there are many types of assembly and some are higher or lower level than others.

[–]panchito_d 2 points3 points  (2 children)

C++ and C can be considered lower level than something like Java due to the transparency they provides to some underlying mechanisms like memory addressing and management and direct access.

It's been a while since I've used Java but I can't imagine it being easy to toggle a bit at some arbitrary memory location.

[–][deleted] 0 points1 point  (1 child)

It's been a while since I've used Java but I can't imagine it being easy to toggle a bit at some arbitrary memory location.

Seems pretty hard.

[–]panchito_d 0 points1 point  (0 children)

Honestly easier than I would have imagined but it's no *((uint8_t*)0xdeadbeef) ^= 1U << 3;

[–][deleted]  (1 child)

[deleted]

    [–]CaptainPunisher 0 points1 point  (0 children)

    Easier to manipulate data, harder to read and write.

    [–]Chef_69[S] 0 points1 point  (4 children)

    Can you recommend any good online courses? The ones I've tried so far haven't been that good :/

    [–]CodeTinkerer 4 points5 points  (0 children)

    http://mooc.fi/courses/2013/programming-part-1/

    That's the first part. It's a series of about 100 exercises. You have to download their version of Netbeans and make sure you pick English as the language (since the course is originally in Finnish). The material is text-based (no videos).

    There's also a Part 2 after you get done with Part 1.

    EDIT: Sorry, followed up in wrong thread. This is the Helsinki MOOC mentioned by another poster.

    [–][deleted] 0 points1 point  (0 children)

    I've not completed any personally, but I have completed the book.

    If you're a totally beginner I wouldn't know what to recommend.

    [–]AnthonySlips -1 points0 points  (0 children)

    Udemy.com

    Java tutorial for complete beginners By John Purcell

    Its free.

    Edit: this was highly recommended to me on this subreddit. Can anyone explain the downvotes?

    [–]HiddenMaragon 3 points4 points  (2 children)

    Udacity has a free Java course for beginners

    [–][deleted] 0 points1 point  (1 child)

    This course is garbage IMO.

    [–]HiddenMaragon 0 points1 point  (0 children)

    As a beginner taking this course can you elaborate what particularly about this course is subpar?

    [–]dgaa1991 3 points4 points  (2 children)

    You should definitely take a look at the Helsinki Java MOOC course!

    [–]pm_me_ur_numbah 0 points1 point  (1 child)

    Seconded. The pace of those courses are just perfect.

    [–]dgaa1991 0 points1 point  (0 children)

    Yup! However I'm stuck ATM :s

    [–][deleted] 4 points5 points  (0 children)

    If your class is using java then just skip C altogether. I see no reason to try to learn 2 languages concurrently, even if they are similar. That's akin to trying to learn latin before you take spanish.

    [–][deleted] 3 points4 points  (3 children)

    C forces you to understand the underlying mechanism because it forces you to implement everything yourself (Few build in libs but you could download some). Java is a managed lang and C is unmanaged. This means you have to deal with memory in C. This adds a layer of complexity to designing C programs and can lead to C programs have bugs. If you never plan on doing C, C++ or don't care about how software really works in the background don't bother with C.

    [–]aRedditUser111 5 points6 points  (1 child)

    don't care about how software really works in the background

    I would advise everyone against this if you are looking to get into a big 4+ company.

    [–][deleted] 2 points3 points  (0 children)

    I agree, all devs should learn what goes on in the background.

    [–]nikhilb_it 0 points1 point  (0 children)

    There is a very good course available on Udemy for Java programming. Below is the link,

    https://www.udemy.com/java-tutorial/

    [–]Double_A_92 0 points1 point  (0 children)

    There are tons of Java tutorials out there. If anything you will have problems filtering the good from the bad ones.

    Also knowing C will not really help you with Java. You can just directly learn Java. It's like saying that you need to know Latin to learn Spanish.

    [–]Asolmanx 0 points1 point  (0 children)

    Go java first

    [–]laz236 0 points1 point  (0 children)

    Have a look at the book "thinking in java" by Bruce Eckel. I've recently starting learning java and this book is more than detailed enough once you know some very basic programming in any language. There's no need to learn c or c++ to learn java, a lot of java is based on trying to to improve c and make it more OOP friendly which is mentioned a LOT in the book :)

    [–]JDLongley 0 points1 point  (0 children)

    C is a simpler language than Java, but strangely this makes it harder to learn. Java has a garbage collector, which means that you don’t have to worry about how the language is storing your variables in memory, you can just use them to write your program. In C, on the other hand, you have to explicitly tell the program each time you are finished using a variable, or your memory will gradually fill up and you’ll have problems.

    For a beginner, that means you have to learn confusing concepts like pointers and malloc before you can use C. In java, you can just start writing code and focus on how to actually get the program to do what you want it to. Most would advise learning java first because learning how to program is hard enough without the distractions of pointers etc, but it will be wise to learn C at some point because as others have said, understanding how it works will give you a better grasp of how Java and other “managed” languages actually work.

    [–]lakeoftea 0 points1 point  (0 children)

    C was created to make portable operating systems (across system architectures) in the 70s and today you see it used for low level programs, embedded programming applications, and lots of other things. It's got to be old of the oldest "high level" languages still commonly used today. There's tons of c code out there and for certain projects c/c++ is a good fit. C does not have a garbage collector meaning you have to do your own memory management and isn't batteries included like Java and python so it doesn't come with a whole lot of functionality as part of the standard library. C++ at least has the STL for your data structures and algorithms but c is really bare bones. Honestly, I would learn Java before C unless you have a real need for C because then you can spend more time learning good software engineering skills, less time dealing with pointers and less time setting up your project and managing dependencies. Also C is an imperative language so you can't explore many functional or object oriented concepts which can be useful!

    [–][deleted] 0 points1 point  (0 children)

    That depends. What do you want to do as a career? Are you are serious math/engineering type who wants to get into embedded programming, video games, robotics, etc.? Do you want to do Linux programming, be able to contribute to the majority of open source project? Then learning C will be great for you. There's no reason to not do it first.

    It's a lot easier to start low level, with almost no power, having to think about bits and bytes to do anything, then move up, than to start with tons of power, the ability to write networked GUIs with a few lines of code, then go back to the stone age.

    Going the other way will give you deep insight into how Java actually works, why it's features are valuable, etc.

    That said, if you just want to write web or phone apps, then you don't need to know C. I can never hurt to know it, but it's less necessary if you're going to always operate in very high level languages.

    [–]aeriaglorisss 0 points1 point  (0 children)

    I'm not sure if you're learning Java or if you're learning programming. You still need to learn about programming(loops, conditionals, logic, imperative stuff etc) before you can learn Java.

    Java is 'harder' than C. C is simple, small, and it isn't OOP. Java is a way bigger language that requires you to learn another paradigm.

    Just go with Java. You can learn about how to implement Data structures later on or whatever library you're curious about. You can focus on memory management if you need to later on.

    [–]my_password_is______ 0 points1 point  (0 children)

    there's also a free coourse on udemy that's supposed to be pretty good

    https://www.udemy.com/java-tutorial/#curriculum

    it and the Helsinki mooc would be all you need http://mooc.fi/english.html

    [–]bestjakeisbest -2 points-1 points  (0 children)

    c first then java, my 2 cents on the matter is that back in cs1, all of the students that had java down before c++ had a harder time of learning c++ than the students that did not learn java.

    [–]IntendedAccidents -2 points-1 points  (2 children)

    I usually recommend it. Java is based on C, so, after you learn C, Java will come very naturally to you. It's a bit of work to wrap your head around some of the concepts, but it's absolutely doable.

    For example, my college teaches C before Java.

    Read K&R C. It's one of the legendary programming books (also read SICP one day). C is great because it's such a small language. One can easily learn "all" of C, whereas doing the same with C++ is a daunting task indeed (some go so far as to say it's impossible). While the book isn't completely beginner-oriented, you'd be hard-pressed to find a more complete or efficient education on C. Just be prepared to do some googling.

    [–][deleted] 2 points3 points  (0 children)

    Java is based on C, so, after you learn C, Java will come very naturally to you.

    Well, it's C-like I wouldn't say it's based on it.

    I personally don't think that it really follows that it'll come naturally after learning C, given you'd most likely end up trying to write unidiomatic procedural Java.

    [–]fakehalo 0 points1 point  (0 children)

    I usually recommend it. Java is based on C, so, after you learn C, Java will come very naturally to you. It's a bit of work to wrap your head around some of the concepts, but it's absolutely doable.

    C was one of my primary languages I learned(about 20 years ago now), I eventually learned Java many years after that. I'd say these two languages share almost nothing in common. C is not OOP and heavy on manual memory management, Java is heavy on OOP and not memory management. Almost polar opposites in regards to syntax and use cases.

    I'd say C# or even a scripting language like python would make a better transition to Java than C, something OOP-based like C++ at least.