We’ve recently started a project to find the best way to design our tracks, in order to optimize the learning experience of students.
As a first step, we’ll be examining the ways in which languages are unique and the ways in which they are similar. For this, we’d really like to use the knowledge of everyone involved in the Exercism community (students, mentors, maintainers) to answer the following questions:
Could you spare 5 minutes to help us by answering these questions? It would greatly help us improve the experience students have learning Java :)
_Note: this issue is not meant as a discussion, just as a place for people to post their own, personal experiences._
_Want to keep your thoughts private but still help? Feel free to email me at [email protected]_
Thank you!
I learned Java on my 1st year of university.
I could already write stuff in a number of dynamic scripting languages and Pascal, C and Standard ML. For some reason Java was a dislikable language to me, and I felt that it was a chore that I had to learn it. Actually learning Java, however, was a great joy.
Initially I started joking by handing assignments in Jython. Eventually Swing caught my interest, and I spent many days reading online tutorials on various components. Having only had GUI experience with Tcl/Tk and Perl/Tk, Swing seemed very good and I thought "Java's a great ecosystem, and I can always replace the syntax!"
What was helpful:
What differed from languages I knew:
Wat wat = new Wat();What did I have to unlearn:
class Bicycle extends Vehicle) as a pretense for learning how to structure real software, and the way Java is written professionally.How was your experience learning Java?
I learned Java while working on Robert Sedgewick's MOOC for Algorithms and Data Structures. To be honest, it was pretty rough since I had never used a typed language before and I had little to no concept of interfaces. That said, the trial by fire was useful and highly motivating - especially since they had intensive automated tests with strict requirements to ensure you were using good algorithms for huge inputs.
What was helpful while learning Java?
Resources like stack overflow and very useful Javadocs. That, and a very skilled teacher (Sedgewick's lectures were extremely valuable).
What did you struggle with?
Learning about how type systems work and understanding interfaces. And OOP in general.
How did you tackle problems?
I suppose it was loosely TDD because the courses were built around passing the automated test suites (they were very rigorous). It was designed to help check that you were making good algorithms, but it gave me a good grounding in Java.
In what ways did Java differ from other languages you knew at the time?
First time learning a language with a type system. I had prior experience with MATLAB, Python and Perl.
What was hard to learn?
Getting used to the notation and learning the difference between different numerical types. Especially integer math... Also, OOP was pretty new to me still.
What did you have to unlearn?
That runtime safety is sufficient. Learning about compile-time checks that verify your system will work was a game changer.
What syntax did you have to remap?
Concepts like hashmaps (in contrast to the much simpler idea of dictionaries in Python).
What concepts carried over nicely?
Functions and imperative programming. I was pretty comfortable with these concepts from years of hacking things together and an educational curriculum for solving one-off problems (during my Mechanical Engineering degree).
Most helpful comment
I learned Java while working on Robert Sedgewick's MOOC for Algorithms and Data Structures. To be honest, it was pretty rough since I had never used a typed language before and I had little to no concept of interfaces. That said, the trial by fire was useful and highly motivating - especially since they had intensive automated tests with strict requirements to ensure you were using good algorithms for huge inputs.
Resources like stack overflow and very useful Javadocs. That, and a very skilled teacher (Sedgewick's lectures were extremely valuable).
Learning about how type systems work and understanding interfaces. And OOP in general.
I suppose it was loosely TDD because the courses were built around passing the automated test suites (they were very rigorous). It was designed to help check that you were making good algorithms, but it gave me a good grounding in Java.
First time learning a language with a type system. I had prior experience with MATLAB, Python and Perl.
Getting used to the notation and learning the difference between different numerical types. Especially integer math... Also, OOP was pretty new to me still.
That runtime safety is sufficient. Learning about compile-time checks that verify your system will work was a game changer.
Concepts like hashmaps (in contrast to the much simpler idea of dictionaries in Python).
Functions and imperative programming. I was pretty comfortable with these concepts from years of hacking things together and an educational curriculum for solving one-off problems (during my Mechanical Engineering degree).