Transcript
            
            
              This transcript was autogenerated. To make changes, submit a PR.
            
            
            
            
              Hi, my name is Mariah Peterson. I'm really excited to be talking to you
            
            
            
              today at Comp 42 and I thank you all for tuning in to
            
            
            
              my talk. We're going to be talking today about how to go
            
            
            
              from zero to hero when learning
            
            
            
              how to code using go. Just a little bit of background
            
            
            
              about me I currently work as a data engineer
            
            
            
              at a software company based out of Lehigh, Utah. It's called Weave. I am
            
            
            
              also a board member of the Forge foundation, nonprofit where we
            
            
            
              sponsor local events, conferences, meetup, et cetera,
            
            
            
              for people in the tech community. I am the mother
            
            
            
              of two beautiful dogs and you can find me on
            
            
            
              Twitter, GitHub, LinkedIn, but most easily
            
            
            
              on Twitch where I do streams multiple times a
            
            
            
              week on anything and everything that I have learned.
            
            
            
              New technologies I do learn and I love to just
            
            
            
              meet new people and chat and answer questions on there.
            
            
            
              So best place to reach out to me,
            
            
            
              definitely Twitch. Let's talk a little bit about go.
            
            
            
              So go is a great, wonderful, amazing programming
            
            
            
              language. People choose it because it's fast, because it's
            
            
            
              reliable, because it's compiled, it's super stable, super scalable,
            
            
            
              has multiple threads. It's amazing. Everybody under
            
            
            
              the sun uses it. It has a great community. It's the best language in the
            
            
            
              world. Everyone should use go. But for me, go was my very
            
            
            
              first programming language. Well, my very first professional
            
            
            
              programming language. I learned it at my first job,
            
            
            
              my very first tech job. And if anybody
            
            
            
              ever asks me, I say my first programming language was
            
            
            
              Go, which is very, very uncommon.
            
            
            
              Go and all of its learning materials are really
            
            
            
              kind of centered on people who've programmed before
            
            
            
              things is just a little bit, a snapshot of what you can find on
            
            
            
              the resource section of the
            
            
            
              Go website. And it's really based for
            
            
            
              people who have used a command line before, who understand functions
            
            
            
              and type and all of the basic structures
            
            
            
              aligned with programming. And so it's very easy to get into go
            
            
            
              and to read use go if you've programmed before, but because
            
            
            
              a lot of the tools are based out of the command line, because it's a
            
            
            
              compiled language and it doesn't really have a lot
            
            
            
              of learning tools that are built into the web, it's not super
            
            
            
              accessible to people who have never programmed before.
            
            
            
              Or in other words, there's a really high barrier of entry for
            
            
            
              getting into go, which in my opinion is the
            
            
            
              best programming language, super readable and just ideal
            
            
            
              first time programmers. So essentially what people
            
            
            
              end up doing when these want to learn go is they either have
            
            
            
              learned before and they'll go find some online quick tutorial,
            
            
            
              go through syntax and these, they can just dive intro the code and
            
            
            
              that's really easy, super open sourced, good for everybody
            
            
            
              else. But if you have never programmed before,
            
            
            
              you usually end up coding to udemy or udacity
            
            
            
              a boot camps and you're spending tons and tons of money to get
            
            
            
              the skill of programming before you can learn.
            
            
            
              Go. And for some people this presents an
            
            
            
              conditionals barrier to entry, where they have to put in
            
            
            
              money, research and effort to find quality courses to
            
            
            
              gain skills when they don't always have that. They might be coming from low
            
            
            
              income backgrounds, they might be working full time jobs, they might be
            
            
            
              single parents of children, and they just don't have time to go to school,
            
            
            
              or they might not have the extra resources to pay for a course. And so
            
            
            
              I'm a really huge proponent of something I like to call open source
            
            
            
              learning, or that idea that people who have the
            
            
            
              skill, people who have spent time
            
            
            
              learning, can share their knowledge in a way that's
            
            
            
              more similar to how we interact day to day. We always
            
            
            
              look for articles that are free, we look for examples that are
            
            
            
              for free, or tutorials that are free. And once you're in the industry, that's super
            
            
            
              easy to do and glean skills from, but if you're just coming in, that's really
            
            
            
              hard to do. And to be frank, it's quite frightening.
            
            
            
              So coming from that experience, these go ins, my first language,
            
            
            
              and really being a proponent for this open source learning,
            
            
            
              I put together a nice little tutorial that's currently available
            
            
            
              on my GitHub with the idea of capturing that audience
            
            
            
              who havent never programmed before and teaching them
            
            
            
              how to program using go. Like I said, there's a lot of
            
            
            
              challenges to this and it's not easy,
            
            
            
              but since it is open source, since it's
            
            
            
              free for everyone to access, we want to have multiple
            
            
            
              contributions and everybody who's ever wanted to share
            
            
            
              that knowledge can come in and participate, write some lines of codes, write some
            
            
            
              example, and really help people overcome the barrier of entry
            
            
            
              to not just go, but programming in general,
            
            
            
              and have free resources to learn and to grow and to
            
            
            
              gain access to good jobs and available
            
            
            
              income. So just really quickly, I plan
            
            
            
              on kind of running through a little bit of my strategy, the way I approached
            
            
            
              it, the way I approached it in relation to go, as well as into
            
            
            
              learning programming for the first time. And then we'll talk a little bit about some
            
            
            
              pitfalls, some hurdles, some stuff that's specific to go, and then how anybody
            
            
            
              listening can get involved in not only creating the course, but also
            
            
            
              taking it if they want to help out in that nature. So the
            
            
            
              first section is just can essential intro to programming.
            
            
            
              Normally, the first project you do in any programming is considered
            
            
            
              a hello world project, right? Where you just get the program up and
            
            
            
              running and it just prints out a little hello world. But with go,
            
            
            
              you have to install a binary, you have to make sure it's set up.
            
            
            
              You have to get your go environment set up, you have to have a gopath
            
            
            
              set up on your command line. You have to know how to run all the
            
            
            
              go tools. And so that barrier for entry for someone who's never programmed before
            
            
            
              gets higher and higher. So what we tried to do with
            
            
            
              that is using some online tools like go playground or go play
            
            
            
              space, in addition to being able to embed those in
            
            
            
              a site, we're kind of removing, abstracting out the tools
            
            
            
              and going through things that are much easier. Things like what
            
            
            
              is a function, what is a package, what are main functions,
            
            
            
              types, certain organization elements and things. You need
            
            
            
              to know just the basics, removing all of the necessities of go and just
            
            
            
              going into it. So we start with your essential hello world program,
            
            
            
              right, where we just go on to a site and just
            
            
            
              press run and see the code come up. And we'll just start
            
            
            
              dissecting what each piece of that code means, so that they can get used to
            
            
            
              reading code and understanding what's there. The next
            
            
            
              thing is types. Now,
            
            
            
              types are very essential to go it ins,
            
            
            
              how we navigate and manipulate data by creating new types,
            
            
            
              by using existing types, and by parsing
            
            
            
              the data through it, right? So we're going to introduce what's an int, what's a
            
            
            
              string. These are all things that people are familiar with, right? They know what numbers
            
            
            
              are, they know what words are, these know what letters are, they know chat.
            
            
            
              Chinese characters are characters, but we havent to introduce that in a way that they
            
            
            
              now know what the syntax is for programming, right? Know what a byte is?
            
            
            
              It's just a little fragment of information, right? And a string usually is
            
            
            
              the text that we see. Ints or numbers. We have floats and
            
            
            
              doubles, floats mostly,
            
            
            
              and go and ways to use these numbers and store these numbers
            
            
            
              to preserve certain types of information. Things that the words,
            
            
            
              they might not be familiar with, but these concepts everybody gets
            
            
            
              just from general life. The next thing we want to kind of dive into
            
            
            
              for somebody who's never programmed before now chat, we know how
            
            
            
              it's structured. Now that we know how to save data and
            
            
            
              use data, is kind of the methodologies that
            
            
            
              we use when telling a program what to do. We use functions
            
            
            
              for this, right? But now we're teaching people that they can tell,
            
            
            
              programs tell a computer essentially how to do certain things,
            
            
            
              and that's new. They've never told
            
            
            
              these computer what to do thing. They just typed buttons.
            
            
            
              So there's two aspects we need to work on here, not just defining
            
            
            
              functions, but how to use them, right? Like talk about the arguments and parameters
            
            
            
              we take and talk about what we return. Talk about putting logic inside the function
            
            
            
              and then calling that function inside a main function so that it can
            
            
            
              be used efficiently and that these can really gain
            
            
            
              confidence in things. Idea of programming and manipulating
            
            
            
              code and giving commands and expecting
            
            
            
              certain kinds of outcomes. The next things that I
            
            
            
              think is really important and super beneficial is to understand the
            
            
            
              idea of conditions. Really. This is
            
            
            
              control flow in these more like computer sciency
            
            
            
              term. But I didn't want to use control flow because
            
            
            
              that's a computer sciency term, right. We're trying to keep it in a way that's
            
            
            
              a little bit less of a barrier to entry. So this idea of programing a
            
            
            
              condition that has to either be met or not met.
            
            
            
              So we're doing things like if else statement switch,
            
            
            
              introducing the idea of boolean conditions that can be met or not
            
            
            
              met, right? That idea of true or false, yes or
            
            
            
              no, and that different kinds of functions or different
            
            
            
              kinds of logic can be run based on meeting these conditions.
            
            
            
              Right. Now, this is where we start to really make
            
            
            
              our programs dynamic or smart, or when
            
            
            
              we start to really gain confidence as a programmer
            
            
            
              and do things. So by going in ins order
            
            
            
              and then hitting the conditionals right after the functions, they really start
            
            
            
              getting a little bit of momentum, a little bit of comfort in the idea chat.
            
            
            
              They can then tell a program what to do
            
            
            
              and how to do it. And these, the last thing is, I think,
            
            
            
              kind of like the meat and potatoes of everything is this idea of running loops,
            
            
            
              or being able to repeat your code a certain amount of
            
            
            
              times or an unknown amount of times in order to get a certain result,
            
            
            
              you do honestly have to have a basics of
            
            
            
              what types are and functions, how we run functions and loops,
            
            
            
              how we put loops in functions, and as well as conditionals and how they're met.
            
            
            
              Before we can really leverage this idea of
            
            
            
              repeating code effectively, right? Like we may need to count
            
            
            
              over a slice, which is a type we have defined, or we may need
            
            
            
              to iterate through an array, or iterate through a map,
            
            
            
              or run your while style loop
            
            
            
              until a certain condition is met and until we've had all the background
            
            
            
              to get loops, we really can't start to write
            
            
            
              just basic programs that do simple tasks.
            
            
            
              But now after hitting all of these bullet points in just
            
            
            
              kind of this basic digest, what is programming and how we
            
            
            
              do it, regardless of code, we can really start
            
            
            
              getting into the things that make it, that are required
            
            
            
              to be an efficient go. Programmers. Yes, we've been doing all of this
            
            
            
              stuff in go, but we've been using online playgrounds and things that kind of abstract
            
            
            
              a lot of the go tooling. And now that they're familiar with
            
            
            
              programming and have a little bit of consider, it's time to dive into a little
            
            
            
              bit more of like the developer side of tooling and things that make go
            
            
            
              really have an advantage. When I started to code,
            
            
            
              the thing I was most scared of was honestly writing in the terminal.
            
            
            
              I thought I was going to click a wrong button. I thought I was going
            
            
            
              to nuke my computer and really not be able to go anywhere
            
            
            
              from there. And to be fair, once you have
            
            
            
              a basic of programming, like 90% of the code I write every day at
            
            
            
              work can be done just with a lot of basics.
            
            
            
              But I have to do a lot of things in the command line to be
            
            
            
              able to run the code, to be able to test the code and do all
            
            
            
              those other ins of things to really be an effective developer. So even though they
            
            
            
              know the basics, they're not even ready to start developing
            
            
            
              and go. And so that's why this section comes into play, right? Like using your
            
            
            
              terminal, using your command line, and becoming comfortable with
            
            
            
              the developer environment. Something that we often take for granted,
            
            
            
              but is really a massive barrier to entry. I know lots of people coming
            
            
            
              out of boot camps who have never touched a terminal
            
            
            
              and chat really is not going to let them get
            
            
            
              a job. They're really kind of at a disadvantage as far
            
            
            
              as being able to work efficiently and effectively.
            
            
            
              So in this idea of touching the
            
            
            
              command line or learning from the command line, there's so
            
            
            
              much to learn here, but just high level basics, enough to
            
            
            
              be able to just get started in your environment and go forward.
            
            
            
              Most important, of course, like running bash commands,
            
            
            
              simple things like PWD, CD,
            
            
            
              CP, MVRM, RM,
            
            
            
              RF. Right? You're removing, you're moving, you're copying, you have to be able to navigate
            
            
            
              and copy paste and do all those kinds of things. It's like really critical for
            
            
            
              that. But when you have a low barrier at entry, you end up with
            
            
            
              two things. You end up with people on Mac or Linux environments
            
            
            
              and then people on Windows environments. And those are two totally separate things.
            
            
            
              I havent never programmed in a Windows environment. But some
            
            
            
              people only have Windows computers, right? Like we're trying to lower the barrier of
            
            
            
              entry and that means using whatever tools they have at their disposal. And that might
            
            
            
              be $100 Chromebook. That might be. I bet we would need
            
            
            
              the section for Chromebooks. See, things is open source learning.
            
            
            
              So if you need to go add the stuff for Chromebooks, feel free to go
            
            
            
              add that to the bash session, right? But they might have an old Windows machine,
            
            
            
              they might be on a Mac laptop that they
            
            
            
              used. INS design school. We really want to be able to have
            
            
            
              resources for everything and go super basic, super high level, let them be able to
            
            
            
              navigate, right? Create directories, organize their code,
            
            
            
              and do things that are just considered smart practices. Next thing,
            
            
            
              git source control is important. And if they're going to
            
            
            
              get a job, they have to be able to put code on GitLab,
            
            
            
              BitBucket or GitHub to use as a resume to
            
            
            
              say, hey look, I've done projects. Hey look, I've contributed to open source projects.
            
            
            
              Hey, I know how to keep track of my code in an organized
            
            
            
              manner so that I don't ruin everybody else's commits,
            
            
            
              right? It's like essentially anymore, to work on a team you have to be able
            
            
            
              to manage source control, and that's just super basic, super fundamental.
            
            
            
              And consider how dependencies are managed in go.
            
            
            
              You really can't do a whole lot without Git and understanding
            
            
            
              the idea of versions and how to manage that after they've gotten
            
            
            
              kind of familiar with git bash and that stuff. Time to now
            
            
            
              install go. This is pretty easy and straightforward, but there are things you
            
            
            
              have to do, like setting up a path so that the binaries can be
            
            
            
              accessed, right? You don't have to have a go path. You do have to have
            
            
            
              a go path so that they know where all of the source folders live and
            
            
            
              creating those things and having them persist in a way that they
            
            
            
              can be easily accessed as part of your environment. And last but not
            
            
            
              least, choosing that ide that's
            
            
            
              best for them, right? Like I will always recommend vs code for somebody who's never
            
            
            
              done it before. I use Vim. Some people go way out of their way to
            
            
            
              use Golan to have a curated environment that was,
            
            
            
              and these developers need to know what's out there, what's best
            
            
            
              for them, and how they can work most efficiently. So they might be in a
            
            
            
              full ide like Golan, or they might be writing really
            
            
            
              simple scripts in Atom or emacs or whatever works best
            
            
            
              for them. And so now that we've got, with those basic fundamentals
            
            
            
              out of the way, you're learning go get rid of that barrier to entry.
            
            
            
              It's really time to start writing go code,
            
            
            
              right? You might not be a go developer, you might
            
            
            
              be new to go, I'm a go developer. And any developers really
            
            
            
              just want to write code, right? Just want to write something so
            
            
            
              really basic. In the standard library, you don't have to go external
            
            
            
              at all. You can just write your simple go server,
            
            
            
              right? Write up an API, throw messages on it,
            
            
            
              see the messages print out, come back, and you can do all of those
            
            
            
              things so quickly and you can save it ins git, and it can become like
            
            
            
              one of your first example projects, really easy and just kind
            
            
            
              of like reestablish the things you learn ins typing.
            
            
            
              Honestly, APIs are how we communicate through almost
            
            
            
              everything, right? We do so much API connection, it's a really fundamental skill
            
            
            
              and it just boosts up that confidence, right? And so now
            
            
            
              you've gone through three sections, right? You've learned how to code, you've learned the
            
            
            
              basics of a terminal, and you've really produced the first Go program.
            
            
            
              Now they can say that barrier to entry has been erased, they're now
            
            
            
              go developers and they can start building projects.
            
            
            
              And so the next section really of the tutorial or what
            
            
            
              I had in mind, right? We're going from zero to hero, not zero to I
            
            
            
              can write code. And so that means you have to start developing skills
            
            
            
              that make you employable, right? You have to start doing things that make you comfortable,
            
            
            
              not only in the go ecosystem, but in the ecosystem
            
            
            
              where you are maintaining projects, where you're deploying code, where you're working
            
            
            
              with other people, and where you're contributing to larger projects,
            
            
            
              right? So those are other kinds of things we have to start tackling,
            
            
            
              or at least introducing, right, in this idea of the tutorial. And nothing like
            
            
            
              super complicated, really easy. But my thought was,
            
            
            
              first thing first, we'll start with what has historically been
            
            
            
              a rough spot and go dependencies, right? Like how do
            
            
            
              we use libraries outside of the standard library,
            
            
            
              how do we bring them in? Kind of introduce this idea of what the Gopath
            
            
            
              ins, how they're managed, doing versions. Go modules are really easy
            
            
            
              to navigate, really easy to add, to start up to use. You have an
            
            
            
              entire libraries at package go dev of
            
            
            
              modules. You can use the docs forum and start pulling
            
            
            
              things in, right? Using libraries that aren't part of the standard
            
            
            
              library. That could be the testify library. They could use a muck
            
            
            
              server. Me, I really like machine learning
            
            
            
              libraries. None of that's part of the standard library. So I pull in lots of
            
            
            
              machine learning libraries and use those in. So just build a tiny
            
            
            
              little project that doesn't use something from the standard library that
            
            
            
              requires go modules and that can really get them used
            
            
            
              to things. Idea of looking
            
            
            
              for tools that somebody's already made, right? Like these next obviously is
            
            
            
              going to be contributing to open source, right? If there's not a library that does
            
            
            
              chat you need, then create that library and maybe somebody will use it later.
            
            
            
              The next important thing is this idea of checking your code. People who are in
            
            
            
              the go ecosystem tend to be very,
            
            
            
              very particular about this. People I interact with or have always been very particular
            
            
            
              about it. First one is linters go. The standard library
            
            
            
              has like govet built into it, has the format
            
            
            
              tool, but thumped built into it. It has the import tool built into it,
            
            
            
              and the community has really piled on that and they've established really
            
            
            
              strict linting guidelines, just as de facto standard in
            
            
            
              the community for maintaining certain kinds of code that can be read by
            
            
            
              any go developer that can last forever, that anyone
            
            
            
              can get up and use. And it's oftentimes and companies
            
            
            
              will implement linters, right. For certain coding and standard practices.
            
            
            
              So it's a good idea for them to get familiar with linting, get familiar with
            
            
            
              the idea of coding standards, and to be able to use that and leverage that
            
            
            
              to the best of their need, right? Whether it be in the CLI or in
            
            
            
              their text editor. A lot of people do it in CI
            
            
            
              CD. We're not quite there yet, but next, testing, right?
            
            
            
              This idea that you can write unit tests, that you can
            
            
            
              test your code, that you can validate that certain pieces
            
            
            
              of logic of your code, right? Things is where we like one of
            
            
            
              my favorite concepts when it comes to unit testing, ins writing testable
            
            
            
              functions, right? You have business logic that you want to be able to
            
            
            
              test, right? So that really helps you simplify your functions, make them
            
            
            
              compact and make them handle one piece of logic that can be easily
            
            
            
              tests and chat. You can have multiple test cases for, and then you
            
            
            
              can test using the Go test tool that's part of the standard library. Then you
            
            
            
              could start running the test coverage tool suite that also exists
            
            
            
              in the standard library and really do things that
            
            
            
              are just cool. You'll look at Go libraries and
            
            
            
              they'll tell you how much of it has test coverage. And this is all built
            
            
            
              into the standard library. These are just essential things that come part of Go
            
            
            
              that they need to be familiar with to really be effective. Go developers
            
            
            
              and then tacking intro that writing a project
            
            
            
              will allow them to implement tests to use test
            
            
            
              coverage, and writing a project that will let them branch kind of off of this
            
            
            
              idea of APIs and grow bigger. I actually did this
            
            
            
              project myself recently on my Twitch stream, and it was
            
            
            
              really good. It was a really good way for me to practice testing. It was
            
            
            
              a really good way for me to explore do I want to use
            
            
            
              an external library? Do I want to write it to myself?
            
            
            
              It's really simple web crawlers, super basic,
            
            
            
              almost as basic as an API, but it's a really good way to illustrate
            
            
            
              these concepts and use these tools and just get familiar
            
            
            
              with the things around you. And probably the last thing that I put in here,
            
            
            
              maybe not necessary, but just this idea of
            
            
            
              deploying a service, right, like deploying is not hard,
            
            
            
              but it's also not trivial. And with the Waco works,
            
            
            
              right, you're using binaries or executables or little
            
            
            
              compiled functions, and it's not hard to be able to just put
            
            
            
              that in a little Docker container. Get that docker container running on your machine,
            
            
            
              put your dependencies in Docker and start using Docker and Docker files.
            
            
            
              It's really basic. I didn't really go much farther than that because then
            
            
            
              you get into, well, do you want it on a server? Do you want it
            
            
            
              on a website? Are you doing different kinds of deployments
            
            
            
              you want on the cloud? And it was like at a certain point
            
            
            
              they just need to experiment and do it themselves. But Docker seems pretty
            
            
            
              fundamental and everywhere I've looked it's almost
            
            
            
              standard anymore. And I feel by this point, once you get familiar
            
            
            
              with Docker and how it works, you can put a service,
            
            
            
              run it through a docker container, you're pretty employable.
            
            
            
              I've seen people with fewer skills trying to get go jobs,
            
            
            
              so it's a good step out there and
            
            
            
              it's definitely a way to get forward. And like I said, there's probably a lot
            
            
            
              more we can get into with deploying a service. And that's why this
            
            
            
              is an open resources tutorial, right? Anybody can contribute.
            
            
            
              They can contribute things that are required, things that are optional, things that are good
            
            
            
              to learn, and little tutorials that can help a person really gain,
            
            
            
              develop and augment these skills. So if you've liked what
            
            
            
              you've seen so far, I encourage you to get involved.
            
            
            
              Feel free to reach
            
            
            
              out to me, look at the code on GitHub,
            
            
            
              really do anything. You can sponsor the
            
            
            
              project on GitHub, right? That way anybody who works
            
            
            
              on that project will get funded, get a little bit more motivation. They can
            
            
            
              work on it with more of their time, right? Go ahead and just take the
            
            
            
              course, run through it, no issues that have come up. Feel free to
            
            
            
              reach out to me on Twitch. I do a couple of times a week.
            
            
            
              I've been trying to get on there and work on this course, really get it
            
            
            
              out there. The next big thing will be implementing the
            
            
            
              go playground into a site
            
            
            
              so that the person can start doing those intro
            
            
            
              to code things right there with the text. They don't have
            
            
            
              to go to a different site, they don't have to export to the GoPro ground,
            
            
            
              they don't have to watch a video. They can just read and interact and
            
            
            
              go from there. And that's my talk. Thank you so much for listening to my
            
            
            
              ideas of using go as a first time
            
            
            
              programming language. I really hope that I might have inspired some of
            
            
            
              you to get involved and contribute to open source learning through
            
            
            
              courses through meetups. Feel free to
            
            
            
              contribute to this course on GitHub. I can use all the help I can
            
            
            
              get and to really enable people to start developing
            
            
            
              and getting more tools. And I hope to see you guys again soon
            
            
            
              at another conference on Twitter, on Twitch or wherever,
            
            
            
              and enjoy the rest of the conference.