<?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: Ugur Tekbas</title>
    <description>The latest articles on DEV Community by Ugur Tekbas (@ugurtekbas).</description>
    <link>https://dev.to/ugurtekbas</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%2F382626%2F3ce07ace-336f-4cc3-8710-62303b9282b6.jpg</url>
      <title>DEV Community: Ugur Tekbas</title>
      <link>https://dev.to/ugurtekbas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ugurtekbas"/>
    <language>en</language>
    <item>
      <title>Github GraphQL API Query Examples</title>
      <dc:creator>Ugur Tekbas</dc:creator>
      <pubDate>Sun, 08 Oct 2023 20:50:50 +0000</pubDate>
      <link>https://dev.to/ugurtekbas/github-graphql-api-query-examples-3c3f</link>
      <guid>https://dev.to/ugurtekbas/github-graphql-api-query-examples-3c3f</guid>
      <description>&lt;p&gt;Recently, I created a tiny app to browse public repositories on GitHub. And I've noticed there aren't many examples of &lt;a href="https://docs.github.com/en/graphql/reference/queries#search"&gt;Search queries&lt;/a&gt; out there, so I wanted to provide some examples with this post.&lt;/p&gt;

&lt;p&gt;Let's start with a simple query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search(
    query: "language:Kotlin forks:&amp;gt;10"
    type: REPOSITORY
    first: 5
    after: null
  ) {
    repositoryCount
    nodes {
      ... on Repository {
        name
        description
        stargazerCount
        forkCount
      }
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are using four parameters  in the search query above. First one &lt;code&gt;query&lt;/code&gt; is basically our search phrase, what kind of public repositories we want to search for. I chose repositories which contain Kotlin language and has more than 10 forks. You can change your phrase as you wish, it uses same structure in Github's &lt;a href="https://github.com/search?q=kotlin+forks%3A10&amp;amp;type=repositories&amp;amp;ref=advsearch"&gt;search page&lt;/a&gt;. &lt;code&gt;type&lt;/code&gt; is what we want to search, we used REPOSITORY value because we want to check out repos. We could also use issues, users or discussions. &lt;code&gt;first&lt;/code&gt; is determine how many items we want from the top of the resulting list. &lt;code&gt;after&lt;/code&gt;  is used for pagination; it’s not required, but I wanted to use it just to demonstrate some paginated queries later.&lt;/p&gt;

&lt;p&gt;Next let's take a look at what kind of information we are requesting. &lt;code&gt;repositoryCount&lt;/code&gt; is an interesting one, it tells us the number of results for this specific search. We will soon see in the response that there are 7247 repositories on Github matches our &lt;code&gt;"language:Kotlin forks:&amp;gt;10"&lt;/code&gt; phrase.  The reason we used &lt;code&gt;... on Repository&lt;/code&gt; line is because search result could be different types such as discussions, issues, users. We are only interested in repositories so we used that, more about Fragments later.&lt;br&gt;
For Repository object we get name, description, number of stars and forks it has, pretty straight forward basic information about particular repository. &lt;/p&gt;

&lt;p&gt;Let's see the results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "data": {
    "search": {
      "repositoryCount": 7247,
      "nodes": [
        {
          "name": "kotlin",
          "description": "The Kotlin Programming Language. ",
          "stargazerCount": 45957,
          "forkCount": 5672
        },
        {
          "name": "okhttp",
          "description": "Square’s meticulous HTTP client for the JVM, Android, and GraalVM.",
          "stargazerCount": 44551,
          "forkCount": 9224
        },
        {
          "name": "architecture-samples",
          "description": "A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.",
          "stargazerCount": 43189,
          "forkCount": 11579
        },
        {
          "name": "shadowsocks-android",
          "description": "A shadowsocks client for Android",
          "stargazerCount": 34022,
          "forkCount": 11640
        },
        {
          "name": "fanqiang",
          "description": "翻墙-科学上网",
          "stargazerCount": 32131,
          "forkCount": 6473
        }
      ]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see our query works like a charm 🥳.&lt;br&gt;
We received 5 repos as requested and all the details they have. Whenever I do searches on Github I stumble upon interesting repos like &lt;code&gt;fanqiang&lt;/code&gt; here.&lt;/p&gt;

&lt;p&gt;You can run queries by yourself and check out the data using &lt;a href="https://docs.github.com/en/graphql/overview/explorer"&gt;Github's Explorer&lt;/a&gt; tool.&lt;/p&gt;
&lt;h2&gt;
  
  
  📚 More data
&lt;/h2&gt;

&lt;p&gt;Let's extend our query by requesting more fields. We can use owner field to get repo owner's name, url field to get Github page url , some important dates and also all the programming languages repo contains. Let's check out this extended version of our query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search(
    query: "language:Kotlin forks:&amp;gt;10"
    type: REPOSITORY
    first: 5
    after: null
  ) {
    repositoryCount
    nodes {
      ... on Repository {
        id
        name
        description
        stargazerCount
        forkCount
        updatedAt
        createdAt
        url
        owner {
          login
        }
        languages(first: 3) {
          nodes {
            name
            color
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you noticed we requested a field called &lt;code&gt;pageInfo&lt;/code&gt; in the new query. We can use that information to navigate different pages and to determine if there are more pages to paginate. &lt;a href="https://gist.github.com/ugurtekbas/308a9439ec77dddebd585f02dc8af59e"&gt;Check out this gist&lt;/a&gt; for queries with pagination parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  📗 Using Fragments
&lt;/h2&gt;

&lt;p&gt;So far our queries are working and we are retrieving the data we want. It's possible that our queries get longer and longer over time. Let's use &lt;strong&gt;Fragments&lt;/strong&gt; and make our queries reusable and pretty.&lt;/p&gt;

&lt;p&gt;Fragments are a way to define reusable sets of fields that can be included in multiple queries. They allow you to group fields together and give them a name, making your queries more organized, readable, and maintainable. Fragments help avoid duplication of field selections when you have common sets of fields that you want to include in multiple parts of your queries. Looking at our query we can easily define a fragment for main Repository object as following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fragment Repo on Repository {
    id
    name
    description
    stargazerCount
    forkCount
    updatedAt
    createdAt
    url
    owner {
      login
    }
    languages(first: 3) {
      nodes {
        name
        color
      }
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now &lt;code&gt;Repo&lt;/code&gt; fragment is ready to use in main query, in the mean time you can try to create another fragment for &lt;code&gt;LanguageConnection&lt;/code&gt; where we request languages info for each repo.&lt;/p&gt;

&lt;p&gt;Now let's look at the final version of our query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search(
    query: "language:Kotlin forks:&amp;gt;10"
    type: REPOSITORY
    first: 5
    after: null
  ) {
    repositoryCount
    nodes {
      ...Repo
    }
    pageInfo {
        startCursor
      endCursor
      hasNextPage
      hasPreviousPage
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Short and sweet 👌🏽&lt;br&gt;
We used newly created Repo fragment and it's ready to use all other queries and mutations in the future.&lt;/p&gt;




&lt;p&gt;You can find all the query examples with different parameters and pagination &lt;a href="https://gist.github.com/ugurtekbas/308a9439ec77dddebd585f02dc8af59e"&gt;in this gist file&lt;/a&gt;. I hope this gives you a head start to write queries. If you have any questions/suggestions feel free to drop in the comments below.&lt;/p&gt;




&lt;p&gt;This article is originally posted &lt;a href="https://ugurtekbas.com/github-graphql-api-query-examples/"&gt;on my blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Say hi to me &lt;a href="https://twitter.com/ugurtekbas"&gt;on Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>github</category>
      <category>search</category>
      <category>api</category>
    </item>
    <item>
      <title>Onboarding Remotely Best Practices</title>
      <dc:creator>Ugur Tekbas</dc:creator>
      <pubDate>Sun, 09 May 2021 11:18:24 +0000</pubDate>
      <link>https://dev.to/ugurtekbas/onboarding-remotely-best-practices-2l74</link>
      <guid>https://dev.to/ugurtekbas/onboarding-remotely-best-practices-2l74</guid>
      <description>&lt;p&gt;Onboarding is the official process of integrating new team members into an organization. It's a good spot to start everything on the right foot. Over the years, I've been lucky enough to introduce great engineers to my teams. In some cases I onboarded solely on our codebase, sometimes it was a tool we used frequently or it was just about the product and responsibilities. Regardless of focus area, our goal stays the same: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enabling newly joined team members to contribute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At the end of the process, &lt;strong&gt;onboardee&lt;/strong&gt; (Yeap! There is such a word) should have clear answers to their questions, should feel confident and comfortable enough to kickstart their journey.&lt;/p&gt;

&lt;p&gt;Remote working is becoming a strong norm, it's escalated with Corona and hopefully it will be permanent for many companies. It will be more and more common to onboard new members remotely in the future. I wanted to share my experience on welcoming new engineers during fully remote setup and to highlight what worked well within in the long run.&lt;/p&gt;

&lt;p&gt;Before we begin it's safe to raise my assumption: My experience is based on cross-functional teams who work on dedicated parts of products with a huge active user base.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Prepare visual documentation
&lt;/h2&gt;

&lt;p&gt;I assume you already have a detailed documentation for your platform or domain in general, where you explain the tools, frameworks, patterns you make use of. If you don't, it will be wiser to start with that. I think onboarding through documentation is more efficient because it's scalable, quotable and iterable. I usually create sections with the topics I wanted to talk about, create special diagrams to help me explain concepts or architectures better. Stating the purpose of each layer, giving links to other detailed documentation areas are good practice. Something I noticed is that adding screen shots of the product helps a lot to associate code with product and features. Even recording some features to show user flow brings many advantages.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✔️ Draft a checklist
&lt;/h2&gt;

&lt;p&gt;Having a short to-do list for the new team member gives a lead to start and creates sense of accomplishment. This list is just consist of small tasks that everybody needs to do when they join the team, such as; joining the common slack channels, requesting needed permissions for tools, joining certain trainings, finding a pairing buddy, joining to office tour etc. They can do them theirselves and cross them out the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Pair whenever
&lt;/h2&gt;

&lt;p&gt;Pairing is such a secret weapon which should be used so often that it stops being secret anymore. You can also take advantage of pairing during onboarding process. Whenever possible, you can invite the new team member pair on tasks where you'll be the main driver and navigator, while onboardee is mostly observing. This might give more clarity on topics and ease the overall onboarding journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  📆 Spread meetings over a period
&lt;/h2&gt;

&lt;p&gt;One of the things I really like to do is spreading onboarding meetings over a wider period of time. Keep in mind that this is not the only onboarding they are attending, in first weeks they probably have organizational and cultural ones too. Instead of discussing the codebase for 4 hours in one day, I setup multiple slots spread over the days where I get together with the onboardee and have a talk for about an hour. As this gives them space and time to think about the topics we discussed, it also allows me to direct onboarding process better. I usually setup the last meeting as AMA (ask-me-anything) style, where onboardee can address any kind of questions, technical, organizational or even personal.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Give them time
&lt;/h2&gt;

&lt;p&gt;Once I joined a team where many concepts were new to me, I had to learn a new language and how to use bunch of tools. This situation quickly becomes overwhelming; good way to solve it is having enough time to digest new chunks of information and to experiment enough with new tools. Luckily at the time, my team gave me enough time and space, this allowed me start contributing when I felt comfortable, removed the pushy feeling, resulted with the best possible outcomes for the team and product. I believe that's a good practice instead of expecting onboardee to start with a small bug ticket in few days.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Ask for feedback
&lt;/h2&gt;

&lt;p&gt;Feedback is a gem, having a habit of asking feedback often brings tremendous benefits. So it's important we don't miss this step and ask for feedback about the onboarding and overall process when it's completed. Additionally, usually after 3 months, I ask for an extra feedback. At that point, they have worked together with the team for a while, completed certain tasks, understood how team and product works, thus they can look back in retrospective and bring ideas about what could be improved. This will help to iterate all the practices above and most importantly it will benefit the next onboardee (yes I like this word) a lot.&lt;/p&gt;




&lt;p&gt;Onboarding is a continuous process during a team member's first year. Remote or not, having an efficient onboarding process have long-term benefits: increased productivity, robust product, better team member retention, reduced anxiety, accurate expectations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I hope practices above helps you as well. Do you have any other ideas how to make onboarding more efficient? Let me know in the comments below!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;This article is originally posted &lt;a href="https://ugurtekbas.com/onboarding-remotely/"&gt;on my blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Say hi to me &lt;a href="https://twitter.com/ugurtekbas"&gt;on Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>onboarding</category>
      <category>remote</category>
      <category>onboardee</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Lessons I’ve Learned by Teaching Programming - After Party</title>
      <dc:creator>Ugur Tekbas</dc:creator>
      <pubDate>Sun, 07 Jun 2020 18:29:40 +0000</pubDate>
      <link>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-after-party-13k9</link>
      <guid>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-after-party-13k9</guid>
      <description>&lt;p&gt;Let’s talk about what we can do after our course is done. After careful preparation and effective execution, now we’re at the end of the course. In this part, We’ll talk about what we can do to help our students after every lesson or when the course is completed. This will make our students still benefit from our course and experiences, even after their active learning days are over.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is the last part of series focused on teaching programming. You can read the first part about preparation &lt;a href="https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-3c1d"&gt;here&lt;/a&gt; and second part about practices during the lessons &lt;a href="https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-show-time-45g9"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  After Party
&lt;/h2&gt;

&lt;p&gt;This is it, you made it! There were ups and downs, lots of bugs and questions but you managed to overcome them all as a team. Now it’s time make the course as beneficial as possible for your students for the future challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it takes is what they got
&lt;/h3&gt;

&lt;p&gt;Make sure your students understand that just because the course is over doesn’t mean they should to stop learning or building. Encourage them to use what they’ve learned, do more research and keep learning.&lt;/p&gt;

&lt;p&gt;Give them product ideas, this will make it easier for them to start building. It could be a personal website, a simple mobile application, a blog about recycling or landing page of their long planned side hustle. Make them feel confident enough to start coding with what they know, show them what it takes is all they got.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2kc9tz6no6bam1y3xtwg.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2kc9tz6no6bam1y3xtwg.jpg"&gt;&lt;/a&gt;&lt;em&gt;Show them you can do it.&lt;small&gt;(&lt;a href="https://skizzenmonster.de/we-can-do-it-giraffe/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrospective
&lt;/h3&gt;

&lt;p&gt;Do this at the end of every day. Ask them what they liked about the lesson, what they didn’t, if there is anything they wish to change or add. Remember you already created an open environment so they’ll be willing to share their candid thoughts with you. Try to adopt new ideas to your lessons on the go, make everybody benefit from what you teach equally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make everything accessible
&lt;/h3&gt;

&lt;p&gt;Probably the first request you’ll receive will be sharing the code you write in the lessons. Make it even better and share everything about the course with them - make everything easily accessible. List the content of the course and what you did right after course. This can be a list of the topics, the exercises you gave during the lesson, homework, your retrospective action items etc. Upload everything to Github (or Gitlab or Bitbucket) and BAM! You just taught them about Git.&lt;/p&gt;

&lt;h3&gt;
  
  
  This is a celebration
&lt;/h3&gt;

&lt;p&gt;It’s been a rough patch but they did it! Show them their dedication and hard work deserve a celebration. Go out together to have dinner, do a beer night. In Corona times I was only able to prepare a cocktail and make a toast to them, however it was enough to get all of us into celebration mood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3GwjfUFyY6M" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F3GwjfUFyY6M%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was the last piece of the entire course. Being approached by some of the students days after our course showed me it was quite rewarding to follow tips above.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you think about the tips above? Do you have any different ideas how to make teaching programming better? Let me know in the comments below!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article is originally posted &lt;a href="https://ugurtekbas.com/lessons-ive-learned-by-teaching-programming-after-party/" rel="noopener noreferrer"&gt;on my blog.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Say hi to me &lt;a href="https://twitter.com/ugurtekbas" rel="noopener noreferrer"&gt;on Twitter!&lt;/a&gt;
&lt;/h4&gt;

</description>
      <category>teaching</category>
      <category>career</category>
      <category>training</category>
      <category>celebration</category>
    </item>
    <item>
      <title>Lessons I’ve Learned by Teaching Programming - Show Time</title>
      <dc:creator>Ugur Tekbas</dc:creator>
      <pubDate>Mon, 25 May 2020 21:17:28 +0000</pubDate>
      <link>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-show-time-45g9</link>
      <guid>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-show-time-45g9</guid>
      <description>&lt;p&gt;Let’s continue our journey of teaching programming. In the previous post we talked about preparation and what we can do before starting the actual course. In this post we’ll get into some ideas and practices we can use during the lessons.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is the second part of series focused on teaching programming. You can read the first part &lt;a href="https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-3c1d"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Show Time
&lt;/h2&gt;

&lt;p&gt;How you deliver knowledge is as important as the knowledge itself. You can use some technics and methodologies which will clear most of the question marks for students. Some of the methods below that I planned prior the lessons and some of them I came up after. As long as it works for the students, it’s totally fine to change, add or discover different ways during the whole course.&lt;/p&gt;

&lt;p&gt;Now you’re prepared and here you are, stage is yours!&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep it simple
&lt;/h3&gt;

&lt;p&gt;Like in one of the most underrated &lt;a href="https://en.wikipedia.org/wiki/KISS_principle"&gt;software principles&lt;/a&gt;, keep it very simple when you’re explaining new concepts or languages. Associate the concept with something concrete from real life. This will make the subject less scary and easier to understand for your students.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uoLXnm1q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1f1e7dv5qa1483bxzqtz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uoLXnm1q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1f1e7dv5qa1483bxzqtz.jpeg" alt=""&gt;&lt;/a&gt;&lt;em&gt;This is the image I created to explain what those languages do, in simplest way.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can also apply the “explain it to me like I’m 5 years old” rule. Don’t worry people won’t mind, they just want to understand things.&lt;/p&gt;

&lt;p&gt;Another advice would be: don’t give examples right away. Make them understand it first then do a general example which covers the topic. This way you also avoid squeezing the topic only in one example which might limit the way they are looking at it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practice makes it perfect, practice makes it amazing
&lt;/h3&gt;

&lt;p&gt;It’s very important to make students practice right on the spot. With exercises they learn way more than with any other method. Power of practicing within the lessons is underrated…or I just didn’t know about it.&lt;/p&gt;

&lt;p&gt;It might feel weird to give students a block of few 15 minutes to work on their own when you have limited time for a session, but it is definitely worth it. First keep the exercise simple, let them try to figure things out, and watch how they approach the problem. You can literally sneak up to their monitor and talk about their approach. After 10-15 minutes, show the solution with some live-coding, where they can easily follow. If there are multiple solutions to the problem, you can show a few different approaches. As a last step, show them a real life example about the exact practice. It could be adding a nice footer to your website or using a random number function in JavaScript.&lt;/p&gt;

&lt;p&gt;If you apply the &lt;a href="https://en.wikipedia.org/wiki/Outliers_(book)"&gt;10000 hours rule&lt;/a&gt;, your students need to practice outside of the course too, it’s called “Homework”. Coming up with good homework is really hard (shout out to all my former teachers out there who came up with creative homework when I was studying). I consider three things while preparing a homework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Including the subjects we learned in the last lesson&lt;/li&gt;
&lt;li&gt;Making it useful so that they can easily imagine a different implementation for their different ideas&lt;/li&gt;
&lt;li&gt;Making it challenging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During my first course, I noticed it’s good to have continuous homework rather than creating a new one every time. I call it lego-style homework (I literally made that up). What you do is giving small pieces of homework, that fulfill the three characteristics above, after the first lesson, and in every lesson after that you add new parts to this project. At the end of the course, students will have a useful product which is completely built by them.&lt;/p&gt;

&lt;p&gt;When I was teaching web development, I asked my students to come up with a website idea, create their first html file, give it a title and put a headline in the middle of the page. After learning about different tags (like link, image etc.) I asked them to create a top menu bar and navigate to different pages. Following that, I asked them to create a footer, put images in the centre of their page, create columns, and write long paragraphs. When they learned how to use Bootstrap I asked them to replace columns by using grids, to style their site using CSS, and to add a form to their contact page.&lt;/p&gt;

&lt;p&gt;I also asked them to do research on specific topics, just to get the basic ideas and to understand that this is also part of programming, a huge part of it. I believe power of homework, it effects the learning process significantly, especially for practice-heavy fields, such as coding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Question or be questioned
&lt;/h3&gt;

&lt;p&gt;Your students will want to ask you anything and everything which is absolutely fine. Your job is to make them feel totally relaxed about asking questions. Show them they can stop you and ask questions any time, no matter how silly or simple they are.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IVvqgYEA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/achxobo58m1fpyu6eaos.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IVvqgYEA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/achxobo58m1fpyu6eaos.jpg" alt=""&gt;&lt;/a&gt;&lt;em&gt;&lt;small&gt;(&lt;a href="https://fresnostategraduatewritingstudio.wordpress.com/2018/11/19/week-13-do-not-be-afraid-to-ask-questions-and-get-assistance/"&gt;image source&lt;/a&gt;)&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can do this by repeating the sentence “Do you have any questions?” every time after explaining something or asking them questions during lessons to see if they are clear of any confusion. You can also show them how to get answers themselves which is simple googling. Demonstrate how to search for the usage of an attribute or documentation by just googling in front of their eyes, and guide them to the wonderland of StackOverflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Give them a break
&lt;/h3&gt;

&lt;p&gt;Not joking! :) Small breaks are part of the lesson. It helps them to refresh and take a deep breath before solving that annoying bug. At my first lesson, I was so focused on our topics that I forgot to give a break. That was the first thing we discussed at the end of the day, at our daily retro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Have fun
&lt;/h3&gt;

&lt;p&gt;It’s essential! Try to make it fun for anyone who attends the lessons. It’s already hard enough to learn new things, so make sure it’s fun. Create a comfy, easy environment and a soft language to follow effortlessly.&lt;/p&gt;

&lt;p&gt;There are programming-related games where you can have fun while testing your coding skills. You can play them in the class together with your students or give them as homework.&lt;/p&gt;




&lt;p&gt;These are the main practices I’ve followed for my course. I’ve received good feedback during and after the lessons as we discussed more about our approaches end of every day.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you think about the methods above? Do you have any different practices you can apply for the best teaching experience? Let me know in the comments below!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;This article is originally posted &lt;a href="https://ugurtekbas.com/lessons-ive-learned-by-teaching-programming-show-time/"&gt;on my blog.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Say hi to me &lt;a href="https://twitter.com/ugurtekbas"&gt;on Twitter!&lt;/a&gt;
&lt;/h4&gt;

</description>
      <category>teaching</category>
      <category>career</category>
      <category>productivity</category>
      <category>training</category>
    </item>
    <item>
      <title>Lessons I’ve Learned by Teaching Programming</title>
      <dc:creator>Ugur Tekbas</dc:creator>
      <pubDate>Wed, 13 May 2020 09:54:42 +0000</pubDate>
      <link>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-3c1d</link>
      <guid>https://dev.to/ugurtekbas/lessons-i-ve-learned-by-teaching-programming-3c1d</guid>
      <description>&lt;p&gt;I have been working as a software developer for almost a decade. During this time, I often found myself explaining technical stuff to my pears, onboarding junior developers or having to explain tech-related topics to non-tech people. Even though I never received an education or training about teaching, I thought of myself as being good at explaining complex stuff in a simple way. I considered teaching programming but never tried to switch to that track until recently. Beginning of the year, I wanted to have this kind of experience and contacted &lt;a href="https://hamburgcodingschool.com/en/"&gt;HCS&lt;/a&gt; for a possible trainer role. First meetings were pretty smooth and after a trial lesson, we agreed that I will be taking care of web development course.&lt;/p&gt;

&lt;p&gt;After completing my first course with amazing people, I started reflecting on the experience. As much as it was very rewarding and successful, there were things to improve. Attempting to write down some suggestions for myself led to this post.&lt;/p&gt;

&lt;p&gt;  Without further ado, here are some of my ideas about teaching programming (or maybe just about teaching in general):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To make this post easier to read, I divided original article into three parts. This one is focused on preparation phase prior to courses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Are you ready?
&lt;/h2&gt;

&lt;p&gt;This part is for the things you should do before the course starts. As soon as your course is set and planned, you can encourage yourself to step into preparation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Know your audience
&lt;/h3&gt;

&lt;p&gt;You need to know who your target audience is. This will change the whole content and method of your course. Of course there is a certain group of customers to whom the courses are aimed at - you know this from the beginning - however not all participants will be in the same level. So it’s a good start to know your students’ level.  &lt;/p&gt;

&lt;p&gt;You can do this simply by sending a small survey where you ask certain questions, like if they’ve ever coded before, what they think their level is on certain languages etc.&lt;/p&gt;

&lt;p&gt;Creating a skill matrix would also work for this purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  List your ingredients
&lt;/h3&gt;

&lt;p&gt;In short, you need to know which topics you’ll talk about in the particular session. Going through the content you have planned for yourself creates a big advantage. It allows you to see if your topics are overflowing your time or if you have too little to go over that day. Essentially it allows you to plan your time sufficiently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UewvX0c4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/znx9ygjvltutkhyyp1jr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UewvX0c4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/znx9ygjvltutkhyyp1jr.png" alt=""&gt;&lt;/a&gt;&lt;em&gt;Ingredients matters.&lt;small&gt;(&lt;a href="https://www.trainingjournal.com/articles/opinion/ingredients-innovation-process-people-culture-courage"&gt;image source&lt;/a&gt;)&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Say hello to your new friends
&lt;/h3&gt;

&lt;p&gt;The best way to break the ice is to welcome your new friends for the tough journey prior to the first lesson. This will create the communication channel which hopefully lasts longer, maybe even after the end of the course.&lt;/p&gt;

&lt;p&gt;Choose your preferred channel (could be email, slack) and show them it’s ok to contact you anytime they need you. &lt;/p&gt;

&lt;p&gt;You can also use this opportunity to hint to them what you’ll start working on, at the first lesson and ask them to install required tools or do some reading related to upcoming topics. This will save you so much time especially for the first class.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare homework and exercises
&lt;/h3&gt;

&lt;p&gt;We will go into the importance of giving exercises during the lessons in the following section but you should know that you will need to give many exercises during the sessions and always give homework at the end of every day. Therefore it’s a good practice to prepare them before the lessons according to the topics you’ll cover.&lt;/p&gt;

&lt;p&gt;It would be a great idea to give lego style homework that will create a tiny product, tool or website in the long run. For example, you can start building a website and with every homework you build one part of the site by using what you taught in the lessons. This will motivate the students and show them they can built real stuff with what they just learned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CnQHPOHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7ls7elhalzj779sfc5vw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CnQHPOHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7ls7elhalzj779sfc5vw.png" alt=""&gt;&lt;/a&gt;&lt;em&gt;Build meaningful homework with lego style.&lt;small&gt;(&lt;a href="https://www.dailymail.co.uk/news/article-2288869/Crate-Legos-spills-West-Virginia-highway-causing-major-delays.html"&gt;image source&lt;/a&gt;)&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Also don’t forget to challenge them with every homework you give. It could be even something you haven’t taught yet, it’s always good to push them a little bit more than usual. Isn’t this also how a &lt;a href="https://9gag.com/gag/av80j2Z/being-a-developer-is-not-stressing-at-all"&gt;developer’s life looks like?&lt;/a&gt; One challenge after another… Anyway, let’s keep it on track.&lt;/p&gt;




&lt;p&gt;This is it to get in shape for the course. After following the titles above, I easily welcomed the participants and had a quite productive first lesson.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you think about the preparations phase? Do you have any recommendations? Let me know in the comments below!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;This article is originally posted &lt;a href="https://ugurtekbas.com/lessons-ive-learned-by-teaching-programming/"&gt;on my blog.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Say hi to me &lt;a href="https://twitter.com/ugurtekbas"&gt;on Twitter!&lt;/a&gt;
&lt;/h4&gt;

</description>
      <category>teaching</category>
      <category>career</category>
      <category>productivity</category>
      <category>training</category>
    </item>
  </channel>
</rss>
