What now that I'm done with AP Computer Science A?

Hi everyone, I took AP CS this year and I enjoyed it and felt like I did pretty well in the class (I’m expecting a 5 when the AP scores come back), and I was just wondering if anyone had a recomendation on what to do next to learn Java more. Next year I have to take a C++ course in college, so I was wondering if there were any good online Java courses for relative beginners, but who know the things that are involved in the AP curriculum. Any suggestions are appreciated, thanks!

But you took APCS so you should at least know some Java, right?

MIT’s 6.005 course is in Java (you can find it on OCW) and it covers a lot of useful software engineering topics, such as good coding practices, recursive data types, ADT’s, regexes, threads/concurrency, and Java’s map/filter/reduce functions. I didn’t actually take APCS (I took a Java course in HS though), but I imagine many of the above topics might not be in APCS.

While I’m quite biased, I would recommend following Penn’s [CIS 120](CIS 1200: Programming Languages and Techniques) material, both lectures and homeworks. This is the class that cemented my decision to be a computer science major in college. The first half of the course is dedicated to functional programming, and the second half of the course is dedicated to Java. I don’t think it teaches a ton of Java that isn’t already taught in 120, but it’s an extremely important class.

Penn’s data structures in Java course, [CIS 121](http://www.seas.upenn.edu/~cis121/current/), is a phenomenal course that I would also recommend following. It is also a natural continuation of the APCS material.

Try a different language, then come back to Java. You’ll grow more as a developer if you take on something totally new. I recommend a functional language like Haskell or a hybrid like Scala (which might be a very natural next step since it integrates seamlessly with Java code), or you can try your hand at some of the popular scripting languages like Ruby and Python and use them to dive into web development with Ruby on Rails, Flask, or Django. There’s definitely more to explore in Java that the AP doesn’t cover (generics, lambdas, multi-threading just to name a few topics) but a lot of these concepts you can pick up from other languages, and you’ll get more bang for your buck diving into a new terrain.