<?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: Luciano Marisi</title>
    <description>The latest articles on DEV Community by Luciano Marisi (@lucianomarisi).</description>
    <link>https://dev.to/lucianomarisi</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%2F31283%2F53ac9d66-2747-4eea-a51a-7286a73f5a02.png</url>
      <title>DEV Community: Luciano Marisi</title>
      <link>https://dev.to/lucianomarisi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucianomarisi"/>
    <language>en</language>
    <item>
      <title>Learn a new programming language today</title>
      <dc:creator>Luciano Marisi</dc:creator>
      <pubDate>Sat, 23 Sep 2017 07:49:55 +0000</pubDate>
      <link>https://dev.to/lucianomarisi/learn-a-new-programming-language-today</link>
      <guid>https://dev.to/lucianomarisi/learn-a-new-programming-language-today</guid>
      <description>&lt;p&gt;A language is a means to an end. Quickly picking up programming languages allows developers to build anything. I've recently been learning Java to contribute to a &lt;a href="https://spring.io/" rel="noopener noreferrer"&gt;Spring&lt;/a&gt; backend. &lt;/p&gt;

&lt;p&gt;I've found that once the foundations of the language have been learned, a great way of learning is to develop a process of cycling through learning details, then putting them into practice. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fitlvkqokquwsqfwym4a5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fitlvkqokquwsqfwym4a5.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started - Understand core principles
&lt;/h2&gt;

&lt;p&gt;The first thing to do is understand the core concepts of the language and the main use cases. If you can, get an experienced engineer to mentor you. This way you'll cover the mundane setup stuff and be running code in no time. Spend about a day or two here, enough time to know everything to get you started but not too much that you end up bored and lose motivation.&lt;/p&gt;

&lt;p&gt;Ask yourself the following questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What tools do developers generally use and why?

&lt;ul&gt;
&lt;li&gt;A good starting point is to ask what's the most appropriate text editor / IDE to use. &lt;/li&gt;
&lt;li&gt;Understand why developers use these tools and what others exist but they don't use. Remember that &lt;em&gt;if all you have is a hammer, everything looks like a nail&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;What's the &lt;a href="https://en.wikipedia.org/wiki/Programming_language#Type_system" rel="noopener noreferrer"&gt;type system&lt;/a&gt;?

&lt;ul&gt;
&lt;li&gt;Is it &lt;a href="https://en.wikipedia.org/wiki/Programming_language#Static_versus_dynamic_typing" rel="noopener noreferrer"&gt;static or dynamic&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;Is it &lt;a href="https://en.wikipedia.org/wiki/Programming_language#Weak_and_strong_typing" rel="noopener noreferrer"&gt;strongly or weakly typed&lt;/a&gt;?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;What's the &lt;a href="https://en.wikipedia.org/wiki/Programming_paradigm" rel="noopener noreferrer"&gt;programming paradigm&lt;/a&gt;? 

&lt;ul&gt;
&lt;li&gt;Is it object-oriented, functional, etc?&lt;/li&gt;
&lt;li&gt;Is it limited to a specific paradigm or does it support numerous? It's common for a language to support &lt;a href="https://en.wikipedia.org/wiki/Programming_paradigm#Multi-paradigm" rel="noopener noreferrer"&gt;multiple paradigms&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Is it &lt;a href="https://en.wikipedia.org/wiki/Compiler#Compiled_versus_interpreted_languages" rel="noopener noreferrer"&gt;compiled or interpreted&lt;/a&gt;?

&lt;ul&gt;
&lt;li&gt;Sometimes the division is not so clear, see &lt;a href="https://en.wikipedia.org/wiki/Just-in-time_compilation" rel="noopener noreferrer"&gt;Just-in-time compilation&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Bytecode" rel="noopener noreferrer"&gt;Bytecode compilation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Most of the above high-level questions don't have an absolute answer which is why exploring these questions and answers is key. This will allow you to establish strong foundations, on which to learn the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn the details
&lt;/h2&gt;

&lt;p&gt;At this point you'll hopefully have some vague idea of what the language does and how to execute some code. So now it's time to get to grips with how to write it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn some syntax, for example:

&lt;ul&gt;
&lt;li&gt;How are variables and functions declared?&lt;/li&gt;
&lt;li&gt;What are the available &lt;a href="https://en.wikipedia.org/wiki/Control_flow" rel="noopener noreferrer"&gt;control flows&lt;/a&gt;? e.g. if statements, for loops&lt;/li&gt;
&lt;li&gt;What are the core data structures and how do you create them? (e.g. arrays and dictionaries)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;What kind of features does it have? For example:

&lt;ul&gt;
&lt;li&gt;Does it have &lt;a href="https://en.wikipedia.org/wiki/Reference_type" rel="noopener noreferrer"&gt;reference&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Value_type" rel="noopener noreferrer"&gt;value&lt;/a&gt; types? And how are they used?&lt;/li&gt;
&lt;li&gt;Can you define interfaces/protocols?&lt;/li&gt;
&lt;li&gt;How do you write concurrent code?&lt;/li&gt;
&lt;li&gt;If it's strongly typed, does it have generics?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;What's available in the language's &lt;a href="https://en.wikipedia.org/wiki/Standard_library" rel="noopener noreferrer"&gt;standard library&lt;/a&gt;?&lt;/li&gt;

&lt;li&gt;What are the main conventions people follow?

&lt;ul&gt;
&lt;li&gt;Check a code style guide, &lt;a href="https://google.github.io/styleguide/javaguide.html" rel="noopener noreferrer"&gt;for&lt;/a&gt; &lt;a href="https://github.com/github/swift-style-guide" rel="noopener noreferrer"&gt;example&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Do developers rely on 3rd party libraries? If so what the most common ones? For example, I've found that modern Java codebases use &lt;a href="https://github.com/ReactiveX/RxJava" rel="noopener noreferrer"&gt;RxJava&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dive in head first
&lt;/h2&gt;

&lt;p&gt;Theory is great, but we learn much more through &lt;a href="https://en.wikipedia.org/wiki/Experiential_learning" rel="noopener noreferrer"&gt;experience&lt;/a&gt;. Nobody learns how to ride a bike by reading a book about it. Try out one of the following in order to gain experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Contribute to an existing project at your workplace, &lt;a href="https://en.wikipedia.org/wiki/Pair_programming" rel="noopener noreferrer"&gt;pair&lt;/a&gt; with another developer if you can.

&lt;ul&gt;
&lt;li&gt;I've found that going into an established codebase where good practices are followed has been awesome. It'll be easier to add new small features by extending existing code or by following existing patterns.&lt;/li&gt;
&lt;li&gt;Code reviews by other developers will help point out issues quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contribute to an existing open source project. It's common for projects to mark &lt;a href="https://github.com/fastlane/fastlane/issues?q=is%3Aopen+is%3Aissue+label%3A%22complexity%3A+you+can+do+this%22" rel="noopener noreferrer"&gt;issues&lt;/a&gt; that outsiders can pick up, this is a great place to start.&lt;/li&gt;
&lt;li&gt;Create your own project. Find something you're keen on creating and build it with the language you're learning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lastly, stay out of your &lt;a href="https://en.wikipedia.org/wiki/Comfort_zone" rel="noopener noreferrer"&gt;comfort zone&lt;/a&gt; and push yourself to constantly learn.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I’d like to thank &lt;a href="http://twitter.com/emilyw113" rel="noopener noreferrer"&gt;Emily Woods&lt;/a&gt; for reviewing this article.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
