<?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: Nando Theessen</title>
    <description>The latest articles on DEV Community by Nando Theessen (@nandotheessen).</description>
    <link>https://dev.to/nandotheessen</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%2F145219%2F5bf63c8c-54ea-42ee-bf29-33f8aaa44432.jpeg</url>
      <title>DEV Community: Nando Theessen</title>
      <link>https://dev.to/nandotheessen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nandotheessen"/>
    <language>en</language>
    <item>
      <title>How You Can Pick Up New Languages Quickly</title>
      <dc:creator>Nando Theessen</dc:creator>
      <pubDate>Sat, 23 Mar 2019 22:43:15 +0000</pubDate>
      <link>https://dev.to/nandotheessen/how-you-can-pick-up-new-languages-quickly-12d2</link>
      <guid>https://dev.to/nandotheessen/how-you-can-pick-up-new-languages-quickly-12d2</guid>
      <description>&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%2Fqsiqjte92je1ryk6zeti.jpg" 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%2Fqsiqjte92je1ryk6zeti.jpg" alt="learning new things"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest misconceptions about learning a new concept, language or framework is how you can do so effectively.&lt;br&gt;
I've learned with and worked next to a lot of great people that had an account with any of the big learning sites or had a big library of courses on technologies that wanted to learn and I myself had a similar library.&lt;/p&gt;

&lt;p&gt;Sadly - in most cases - just following a tutorial or a course does &lt;strong&gt;not&lt;/strong&gt; make you better in something new. &lt;br&gt;
Often times it absolves you from thinking yourself and thus hampers your progress rather than speeding it up as you had hoped.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Situation
&lt;/h2&gt;

&lt;p&gt;I've recently started a new position in a company that uses a stack with which I have &lt;strong&gt;never&lt;/strong&gt; worked with.&lt;br&gt; &lt;br&gt;
In my eyes, it’s a great opportunity, and I think a lot more people could benefit from considering jobs that they think "they aren't suited for". &lt;br&gt;&lt;/p&gt;

&lt;p&gt;A lot of companies out there are willing to teach you syntax on the job if you are a good candidate.&lt;br&gt;&lt;br&gt;
For them it comes down to if you are a good candidate: if you are understanding the underlying concepts, are coachable and a good team fit they will hire you regardless. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;In this article, I'd like to show you how I approach learning a new language and how it enables me (and hopefully you) to contribute to something quickly and will do so on the example of Golang!&lt;/p&gt;

&lt;h2&gt;
  
  
  1: Find Resources That Are Useful
&lt;/h2&gt;

&lt;p&gt;Finding good resources feels surprisingly hard these days. This mostly stems from the sheer amount of content that is out there.&lt;br&gt;
On any given topic there are at roughly 15 video courses that take you from being an absolute beginner to mastery in 4 hours and around 200 blog articles accompanying them. Selecting out of that many options is &lt;strong&gt;hard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What I like to focus on besides the basic syntax is how to translate concepts I'm already familiar with and see how they are implemented in the new language. This helps me develop a mental model of what is going on quickly. &lt;br&gt;&lt;br&gt;
My next step revolves around best practices.&lt;br&gt;
These following resources are what helped me with Golang in particular.&lt;/p&gt;

&lt;h4&gt;
  
  
  Intro To Go
&lt;/h4&gt;

&lt;p&gt;A great intro to the language's syntax is the official tour that you can find &lt;a href="https://tour.golang.org/welcome/1" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
It takes you through the basic concepts of the language and has concrete examples and exercises that help you familiarize yourself with the basics.&lt;/p&gt;

&lt;p&gt;I think it's a great resource regardless of if Go is going to be your first language or you've worked with others before. Although it will be more challenging of course.&lt;/p&gt;

&lt;p&gt;As a next step, I'd recommend at least reading through &lt;a href="https://golang.org/doc/code.html" rel="noopener noreferrer"&gt;How to Write Go Code&lt;/a&gt; which is also part of the official resources.&lt;/p&gt;

&lt;h4&gt;
  
  
  Beyond The Basics
&lt;/h4&gt;

&lt;p&gt;One thing that really helped me was reading up on best practices in Go and comparing those to other languages I have worked with.&lt;br&gt;
Translating concepts I'm already familiar with into the new context helps me understand what is going on in a new codebase or how to design the new service I have to write for example.&lt;/p&gt;

&lt;p&gt;A great resource for this would be &lt;a href="https://golang.org/doc/effective_go.html" rel="noopener noreferrer"&gt;Effective Go&lt;/a&gt;. I've also found a few talks that really helped me understand the Go ecosystem and gave me an in on the quirks that I should be looking out for: &lt;a href="https://www.youtube.com/watch?v=zPd0Cxzsslk&amp;amp;t=999s" rel="noopener noreferrer"&gt;Go Says WAT&lt;/a&gt; or &lt;a href="https://www.youtube.com/watch?v=5DVV36uqQ4E" rel="noopener noreferrer"&gt;Things in Go I never Use&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2: Build Familiar Things!
&lt;/h2&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%2F65st8lxpd0khf5arn2jy.jpg" 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%2F65st8lxpd0khf5arn2jy.jpg" alt="Simple Things"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Golang, my first project was a REST API. It's a fantastic way to learn how the language handles HTTP requests, what tools are useful for this and it's simple enough to not take up multiple days of your time.&lt;br&gt;
Also, APIs are used everywhere and are likely a core part of your (future) job.&lt;/p&gt;

&lt;p&gt;In general, I think it is a fantastic idea to use a simple version of something you are already familiar with and port it into the language you are trying to learn.&lt;br&gt;
If you are super comfortable writing an API, algorithm or toy program you can focus on the key differences and learn from them!&lt;/p&gt;

</description>
      <category>go</category>
      <category>learning</category>
      <category>coding</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Logging Request Bodies For Golang REST APIs</title>
      <dc:creator>Nando Theessen</dc:creator>
      <pubDate>Sat, 16 Mar 2019 14:43:50 +0000</pubDate>
      <link>https://dev.to/nandotheessen/logging-request-bodies-for-golang-rest-apis-9hh</link>
      <guid>https://dev.to/nandotheessen/logging-request-bodies-for-golang-rest-apis-9hh</guid>
      <description>

&lt;p&gt;Go does not support JSON natively, so our first step should be to learn how to decode the JSON format.&lt;br&gt;
Thankfully Go comes with the "json" package which makes decoding easy and convenient to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Basic Example
&lt;/h2&gt;

&lt;p&gt;This simplified example comes from the &lt;a href="https://golang.org/pkg/encoding/json/#Decoder"&gt;Go docs&lt;/a&gt;:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsonStream = `{"Name": "Ed", "Text": "Knock knock."}`

type Message struct {
    Name, Text string
}
var m Message

dec := json.NewDecoder(strings.NewReader(jsonStream))
err := dec.Decode(&amp;amp;m)
if err != nil &amp;amp;&amp;amp; err != io.EOF {
    // handle that error
}

fmt.Println(m.Name, m.Text)

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;After handing our JSON stream over to a Reader, we're using the &lt;code&gt;json.NewDecoder()&lt;/code&gt; and &lt;code&gt;dec.Decode(&amp;amp;m)&lt;/code&gt; to "translate" and read our data into the previously defined &lt;code&gt;Message&lt;/code&gt; format. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Request Body
&lt;/h2&gt;

&lt;p&gt;When handling an HTTP request, we are doing something very similar already which helps us skip a step here.&lt;br&gt;
I'll also show you a nifty tool, we'll be using for our logging output!&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func (h *handlerShared) doSomething(w http.ResponseWriter, r *http.Request) {
    // we still need a type definition for the receiving struct! 

    type Request struct {
        CompanyName string
    }
    // create a pointer to said struct
    req := &amp;amp;Request{}

    // create Decoder to "translate" our data
    // you probably spotted the step we can skip already!
    // if you haven't: the request body already comes in a Reader,
    // we don't have to hand it to one!
    decoder := json.NewDecoder(r.Body)

    err := decoder.Decode(&amp;amp;req)
    if err != io.EOF {
        // handle the error 
    }

    // At this point, we can a) access the data we read into our Request
    // struct: 
    fmt.Println(req.CompanyName)

    // As well as log it using the logrus logger I've included on my handlers                    
    h.log.WithFields(logrus.Fields{
        "host":     r.URL.Host,
        "path":     r.URL.Path,
        "header":   r.Header,
        // as you can see, there is a lot the logger can do for us
        // however "body": r.Body will not work, and always log an empty string!
        "body":     req
        // this is why we'll log our crated struct instead.
    })
    // send a response!
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This is a very easy example, but should give you a good idea how to implement logging for your endpoints.&lt;/p&gt;

&lt;p&gt;I've seen a few examples that go an extra step and read the body into an input buffer, to then cast it to a string. That is not necessary.&lt;/p&gt;

&lt;p&gt;If you know of an easier way to achieve this or have any other feedback please let me know. I'll update this article and am always eager to learn!&lt;/p&gt;


</description>
      <category>go</category>
      <category>http</category>
      <category>restapi</category>
      <category>serverless</category>
    </item>
    <item>
      <title>My Way Into Engineering - Part 1</title>
      <dc:creator>Nando Theessen</dc:creator>
      <pubDate>Sat, 02 Mar 2019 12:17:03 +0000</pubDate>
      <link>https://dev.to/nandotheessen/my-way-into-engineering---part-1-4h2i</link>
      <guid>https://dev.to/nandotheessen/my-way-into-engineering---part-1-4h2i</guid>
      <description>&lt;h2&gt;
  
  
  What I did before becoming a Software Engineer
&lt;/h2&gt;

&lt;p&gt;Before I decided a career change was in order, I dabbled in a lot of things.&lt;br&gt;
After school I joined a PR agency in Berlin, raising funds for non-profit organizations like Amnesty International, the WWF and the SOS Kinderdörfer. After a few successful years, I turned into a professional online poker player and even owned my own small startup for over a year before closing shop.&lt;br&gt;
I did not have any experience when it comes to engineering, although I'm pretty good with computers in general.&lt;/p&gt;

&lt;p&gt;Since being a poker professional really can't be associated with stable income and the startup - while being a great learning experience - ultimately failed and we were planning to start a family, I needed to look for something more permanent and stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Next Steps
&lt;/h2&gt;

&lt;p&gt;During this time, I discovered that there were quite a few coding bootcamps that had started growing here in Germany.&lt;br&gt;
Some of them taught web development, some taught Java, all of them cost quite a bit of money and were 9 weeks long.&lt;br&gt;
On first glance this looked like a very good fit for me, it would give me a shortcut into a new industry, allow me to work with a computer and probably get me the job I was looking for.&lt;br&gt;
They all worked with technology that I didn't quite like (funny how that works, I had no idea about things back then but  already had an opinion 🤷🏼‍)&lt;/p&gt;

&lt;h2&gt;
  
  
  The School I Ended Up With
&lt;/h2&gt;

&lt;p&gt;Still, I registered with one of the bootcamps here in Berlin and was about to start when I learned about &lt;a href="https://bit.ly/2C0iMRI"&gt;Lambda School&lt;/a&gt;. &lt;br&gt;Their program came with a lot of promises that I found interesting.&lt;br&gt;
It focused a lot more on computer science, taught JavaScript, Python &lt;strong&gt;and&lt;/strong&gt; C and best of all there were &lt;strong&gt;no&lt;/strong&gt; upfront costs.&lt;br&gt; It sounded a bit too good to be true to me to be honest.&lt;br&gt;
As it turned out they weren't even taking international students, so I prepared for the start of my bootcamp in Berlin.&lt;br&gt;&lt;br&gt;
However, all of that changed quickly when Karen Zachary (who is fantastic and in charge of admissions over @LambdaSchool) reached out to me and told me that I was one out of 5 international students selected to join as part of a pilot project.&lt;/p&gt;

&lt;h2&gt;
  
  
  How School Was Like
&lt;/h2&gt;

&lt;p&gt;During the following 7 months I learned &lt;em&gt;a lot&lt;/em&gt;&lt;br&gt;&lt;br&gt;
We started with simple HTTP &amp;amp; CSS projects to get to know web development, but quickly entered the world of JavaScript, then React and then Express to become Full Stack Developers.&lt;br&gt;
A day consists of two hours of instructor Q&amp;amp;A, a project to build, stand ups, pair programming with a sprint challenge every Friday to prove you understand and are able to use what you've learned.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Now, as you may have guessed this wasn't easy.&lt;br&gt;
Sitting down every night from 5pm - 2am (the downside to join a school that is not yet in Europe) and learning foreign concepts, working with them and maintaining sanity at the same time was one of the toughest challenges I faced in my life. &lt;br&gt;&lt;br&gt;
&lt;em&gt;But&lt;/em&gt; it was also one of the best. Not only did I learn a whole lot and am a Software Engineer now, but I also made a bunch of friends whom I share this amazing experience with.&lt;/p&gt;

&lt;h2&gt;
  
  
  How About You?
&lt;/h2&gt;

&lt;p&gt;If you are looking for a way in and are living in the EU or the US I can wholeheartedly  recommend &lt;a href="https://bit.ly/2C0iMRI"&gt;Lambda School&lt;/a&gt;. There is no upfront cost - they get paid once you've landed your first job and exceed the salary cap - and they have an amazing team of instructors and project managers that help every student become the best engineer they can be.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
