<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Simon Harrer</title>
    <description>The latest articles on DEV Community by Simon Harrer (@simonharrer).</description>
    <link>https://dev.to/simonharrer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F328707%2F0a6462b5-1993-4d09-a636-8a5cf2a52a16.jpg</url>
      <title>DEV Community: Simon Harrer</title>
      <link>https://dev.to/simonharrer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/simonharrer"/>
    <language>en</language>
    <item>
      <title>How to learn Java</title>
      <dc:creator>Simon Harrer</dc:creator>
      <pubDate>Thu, 08 Nov 2018 16:44:02 +0000</pubDate>
      <link>https://dev.to/simonharrer/how-to-learn-java-1n2j</link>
      <guid>https://dev.to/simonharrer/how-to-learn-java-1n2j</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a20PUaPx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFuUGVTsLFZ-eKARHbOb66Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a20PUaPx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFuUGVTsLFZ-eKARHbOb66Q.jpeg" alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/photos/2FPjlAyMQTA?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;John Schnobrich&lt;/a&gt; on &lt;a href="https://unsplash.com/search/photos/learn?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quite often, I’m asked: &lt;em&gt;Hey Simon, how to learn Java?&lt;/em&gt; Here are the top five resources I typically recommend. Happy reading. Happy learning!&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 1: Head First Java
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DMu3Pk5b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/425/0%2AvhXNsDVLyBe162NB.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DMu3Pk5b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/425/0%2AvhXNsDVLyBe162NB.jpg" alt=""&gt;&lt;/a&gt;Head First Java by Kathy Sierra and Bert Bates&lt;/p&gt;

&lt;p&gt;I’d recommend starting with &lt;em&gt;Head First Java&lt;/em&gt;. I did the same 13 years ago and I still think this is the best book to start learning Java. It’s not your usual textbook, so be prepared for having actual fun learning Java. Be surprised how much you’ll know after having worked through that book.&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 2: Java by Comparison
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0jgDIMfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/404/0%2AfGfIVxfA3GahtdSD.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0jgDIMfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/404/0%2AfGfIVxfA3GahtdSD.jpg" alt=""&gt;&lt;/a&gt;&lt;a href="http://java.by-comparison.com"&gt;Java by Comparison by Simon Harrer, Jörg Lenhard and Linus Dietz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I blatantly recommend reading the book I co-authored: &lt;em&gt;Java by Comparison&lt;/em&gt;. We’ve taught Java for over six years at University, and from that experience, we’ve written &lt;em&gt;Java by Comparison&lt;/em&gt;. Our audience in mind has been students knowing enough Java to write simple programs but lacking practice and a mentor that can guide them towards cleaner and more readable code. It features a unique before/after approach comparing bad code to better code, so you can learn step-by-step to transform code into even better code. It’s the book I wished I had when I finished reading &lt;em&gt;Head First Java&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 3: Effective Java
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OZzyhevB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/404/0%2AwK-9hbFPhvUkM9st.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OZzyhevB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/404/0%2AwK-9hbFPhvUkM9st.jpg" alt=""&gt;&lt;/a&gt;Effective Java: Third Edition by Joshua Bloch&lt;/p&gt;

&lt;p&gt;Now, we move on to &lt;em&gt;the&lt;/em&gt; book on Java, the classic item-style book that provides uncountable insights how to use Java the right way: &lt;em&gt;Effective Java&lt;/em&gt;. Just read that. It’s simply mandatory when you want to call yourself a professional Java developer.&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 4: Head First Design Patterns
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rYIGh3_6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/432/0%2AFn8gAiqTTsjJaUsc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rYIGh3_6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/432/0%2AFn8gAiqTTsjJaUsc.jpg" alt=""&gt;&lt;/a&gt;Head First Design Patterns by Eric Freeman and Elisabeth Robson&lt;/p&gt;

&lt;p&gt;When your programs start to become bigger, you’ll start to feel pain when organizing your code in methods, classes, and packages. That’s when you need to learn about software design. I began my journey with &lt;em&gt;Head First Design Patterns&lt;/em&gt;. It features a similar learning style as &lt;em&gt;Head First Java&lt;/em&gt; but focuses on how to design your classes instead.&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 5: Functional Programming Java 8
&lt;/h4&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/15X0qFtBqiQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;And last but not least, with more and more people adopting a more functional programming style in Java and everywhere else, I recommend watching the unique Venkat Subramaniam explaining how to program in a functional way in Java 8. Happy watching!&lt;/p&gt;

&lt;h4&gt;
  
  
  howtolearn.de
&lt;/h4&gt;

&lt;p&gt;These &lt;a href="https://howtolearn.de/books/videos/java/beginner/java"&gt;top 5 resources to learn Java originally appeared on howtolearn.de&lt;/a&gt;. Feel free &lt;a href="https://howtolearn.de/"&gt;to browse all the other topics there&lt;/a&gt; as well.&lt;/p&gt;

</description>
      <category>learningtocode</category>
      <category>cleancode</category>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Let’s Talk. About Problems. Less About Solutions.</title>
      <dc:creator>Simon Harrer</dc:creator>
      <pubDate>Thu, 14 Jun 2018 15:31:01 +0000</pubDate>
      <link>https://dev.to/simonharrer/let-s-talk-about-problems-less-about-solutions-2ffp</link>
      <guid>https://dev.to/simonharrer/let-s-talk-about-problems-less-about-solutions-2ffp</guid>
      <description>&lt;p&gt;The other day, I stumbled upon the following tweet.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--62l3ikZM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/850468719889231873/mbCEbJt__normal.jpg" alt="Simon Martinelli profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Simon Martinelli
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/simas_ch"&gt;@simas_ch&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      It's easy to explain "things" to people that are eager to learn. But how do you explain "things" to people that are not?
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      11:13 AM - 11 Jun 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1006132372725751809" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1006132372725751809" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1006132372725751809" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;It really was thought provoking for me. And I compiled the following answer, taking full 12 minutes, rewriting the tweet over and over.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fBnSUoo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/994949545414070272/W4tTUWmz_normal.jpg" alt="Simon Harrer profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Simon Harrer
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/simonharrer"&gt;@simonharrer&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/simas_ch"&gt;@simas_ch&lt;/a&gt; You just don't. You have to convince them that "things" are worth learning. After you convinced them, you can explain "things" to them. Typically, the convincing part is the real challenge.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      11:25 AM - 11 Jun 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1006135304305115136" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1006135304305115136" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1006135304305115136" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      1
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;But still, the topic didn’t let my mind free. It struck me, that there’s something really really important in there. So I try to break free by writing my thoughts down in this blog post. Enjoy!&lt;/p&gt;

&lt;p&gt;I used to teach a lot at University. The two courses I co-taught, &lt;em&gt;Advanced Java Programming&lt;/em&gt; and &lt;em&gt;Programming Complex and Interactive Systems&lt;/em&gt; were known to be really time-intensive and not mandatory. Hence, the vast majority of the students who ended up in these courses were really motivated to learn and they accepted the large amount of work they needed to do — despite a lot of easier courses available as alternatives! For that experience, I feel privileged. Teaching those courses typically fell into the category of “&lt;em&gt;it’s easy to explain “things” to people that are eager to learn&lt;/em&gt;”. They were already convinced that these courses are really important for themselves and didn’t need convincing.&lt;/p&gt;

&lt;p&gt;But that’s not the whole truth. Apart from the technology part, we put a large focus on &lt;a href="http://ceur-ws.org/Vol-2066/isee2018paper06.pdf"&gt;teaching clean code&lt;/a&gt; through code reviews in class, of their homework assignments, and even in the oral exam. Not every student shared our enthusiasm for clean code as we lecturers did. These students were already struggling with the course workload and simply wanted their code to run correctly and get good grades. That’s fine. Nothing wrong with that attitude, however, we ended up in the other category: “&lt;em&gt;explaining “things” to people who aren’t eager to learn”&lt;/em&gt;. We, as idealistic teachers, wanted to teach and reach every student. So we talked a lot about why some code is hard to read and what consequences this will cause. Each semester, we put more and more emphasis on why a particular code is hard to read. It payed off. We could see this quite well in the feedback we’ve written as part of the grading of the student homework over the years. It changed from talking only about the solution at first to talking about the problem and the solution in a 50:50 split, giving the problem the same amount of space as the solution. I don’t have hard data to support my argument, but students stopped complaining about clean code advice after we switched to the 50:50 explanation. I assume it was convincing enough for the students to walk that extra mile despite the extra work.&lt;/p&gt;

&lt;p&gt;We took that experience further and wrote our book &lt;a href="https://java.by-comparison.com/"&gt;Java by Comparison&lt;/a&gt; according to that 50:50 share between problem and solution. For each comparison in our book, we dedicate the left-hand page to the problem alone and the right-hand page to the solution. There are a lot of books on clean code that focus on solutions, but none of them spends so much space on the problem alone as far as I know. I think this really sets our book apart and makes it so appealing to beginners and experts alike. Have a look to see it for yourselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---qsPQbSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AR0dtpFG0cRnqlzNAHu-6TA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---qsPQbSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AR0dtpFG0cRnqlzNAHu-6TA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me generalise the point here. Talking about solutions is natural to us developers who like to share what we know. We want to share that cool new framework, programming language, IDE, CLI tool, or library. We want to show how it works and how cool it feels. But we often don’t spend enough time on why we should switch from the currently used framework, programming language, IDE, CLI tool, or library. We are already convinced, often strongly convinced, that the new is simply better. But we tend to forget that others haven’t thought our thoughts, haven’t gained our experience, and may reach totally different conclusions because of their current needs.&lt;/p&gt;

&lt;p&gt;When you read the next article, listen to the next talk, or simply attend your next meeting, think about the ratio of time spent about the problem and the solution. Do you think the article/talk/meeting would’ve been better by talking more about the problem and less about the solution? Please let me know in the comments.&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>problemsolving</category>
      <category>teachingandlearnin</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
