Learning to Code March 9, 2020

What is the best way to understand coding as a self taught programmer?

Allan Kimutai @kimutaiCodes

I've been learning through tutorials for the last three months and when I try remembering what I've learnt I feel I know nothing.

What should I do different?

  1. 6

    Learning through tutorials is great but I'd say you won't really understand it or remember till you start hitting rubber against the pavement. Start building a project and reference google or tutorials along the way. You will start remembering it once you have used it. It will help you tie concepts to actual features and functionality.

    1. 7

      My reply is only to reinforce what @noahwbragg already said. I'm the same as you, Allan, and I've been coding for years and years. Tutorials are an okay start, but they come at you with little-to-no real world context. I can do tutorials for hours or days, and when I come out the other side, I'm not much smarter for it. Personally, I start with a few tutorials, and once I feel good and dumb because of them, I start building something for me. It doesn't have to be big, but it has to be slightly meaningful. Something I want to do, not some random tutorial project (to-do list #1384).

      The epiphanies rarely come while copying a tutorial character-for-character into your IDE. Once you have to ask yourself, "Why isn't this working?!" a few times, you'll start to get some answers. Frustration is growth.

  2. 2

    You are a CS student so here's my laundry list-type advice I give anyone serious about becoming a solid software engineer, take what you will:

    1. Based on your personal goals and preferences, pick a domain of application (web development, computer graphics, game development, blockchain, backend dev, etc). This will decide the tech stack you should focus on.
    2. Based on 1) pick a language that's expressive, general and powerful but not super hard to get started with. Python is a great starter choice IMO.
    3. Start with general, lower-level concepts first; only then move to high level concepts. Doing the opposite is a mistake that will make you feel lost most of the time (a.k.a. tutorial limbo).
    4. Pick a project that feels interesting to you and practice your ass off. That'll let you rack up experience and have something to show for yourself afterwards.
    5. Transition to other tech stacks and projects to become more well-rounded.
    6. Realize that tech stacks and tools don't mean shit, it's all about the product and the value you create with them (in fact this is how I recognize a junior dev, they can't stop talking about how cool some language or feature is).

    Must-know elements:

    • Basic computer architecture (registers, instructions, interruptions, memory, I/O, etc).
    • Operating system fundamentals (processes, networking/sockets, thread, filesystems, etc.). Fuck Windows, focus on Unix/Linux.
    • Basic algorithms and data structures (applicable to any and all language).
    • Databases, at least basic notions like SQL, NO-SQL.
    • Networking concepts (DNS, IP, TCP/UDP, HTTP at a minimum).
    • Object oriented programming (plus, optionally, OO design patterns).
    • Programming idioms (language specific, for example async/await in JS, RAII in Rust/C++, etc). You don't really know a language until you understand its idioms.

    Of course there's more depending on what you want to focus on, but I think these are solid fundamentals for anyone serious about programming.

    Do you need all this to just "code"? No, you don't. But the above concepts are the foundation on which no new piece of tech will ever scare you because you'll be able to relate it to already well-known concepts. The names might change but the ideas are the same.

    I've seen many self-taught "coders" and they always come up short in terms of depth of knowledge which holds them back in a lot of ways. For one thing it really limits their range of application. They typically end up working on a narrow software category and can't really transition out of it. Not without a huge time investment plus the corresponding downtime.

    Hope it helps, best of luck.

  3. 1

    This is exactly the sort of problem that I'm working to solve: that context is as important to mastery as syntax and that tutorials are, by nature, limited in scope to solving reasonably trivial problems. Even after attaining a working understanding of the syntax of a language, it's quite difficult to understand how to proceed from syntax to actually building working software, especially when the problem you want to solve is more complex than can be implemented via a simple script.

    Here's the approach that I'm taking: learn software development through real-world projects and immersion. Rather than the simple projects defined in tutorials, we'll give you projects with some modest complexity: for a web application, maybe that's a project with between 10 and 50 source files. These are projects that are complex enough to be non-trivial and to actually implement useful features) but simple enough that they can be understood by the relative novice- at least at a high level. The projects will be code reviewed and written according to the language's style guide and other best practices.

    With these projects, learners will be given guidance and direction:

    • Detailed instructions to set-up and run the code (if you need it; maybe you don't!)
    • An overview of the software architecture and the rationale for its structure (so that you can understand why the code was structured the way that it was, including alternative approaches that might have been taken)
    • Quiz-style questions that require that the learner navigate the codebase to answer (e.g.: "What algorithm is used to hash user passwords?" or "What version of the database driver is used?")
    • "User-reported bugs" to diagnose and fix, with guidance (of course!)

    DM me if this is something that you're interested in; I'm working to gauge interest so that I can build-out projects that are of interest to the most people and, hopefully, build-out a community to contribute these type of projects and mentorship.

  4. 1

    When it comes to learning programming languages I can recommend https://www.hackerrank.com/ . They have a huge practice section with lots of easy tasks divided into categories. And what is important you can validate your code with predefined list of tests. And it works really well psychologically (at least for me) when you have confirmation that you have solved given task.

  5. 1

    Allan - I am a self-taught developer. I still feel like I dont know anything, but I have built a few side projects myself. The key to learning anything is curiosity, perserverance but most of all hands on. build something that you've always wanted to build. Start somewhere and the doors automatically open. If you want to talk about this more, I am happy to chat.

    1. 1

      Thanks for the invite.Chat on Twitter?

      1. 1

        yes lets chat on twitter. https://twitter.com/ChakrVyuh

  6. 1

    You learn to ride a bike for 3 months through reading online tutorial and working on cycling machines, guess what happen when you hit the road with an actual bike? Take your bike and go out to play, thats how you learn how to ride a bike.

  7. 1
    1. Take notes.
    2. Practice outside tutorials.
    3. Build something.
  8. 1

    The first thing is to know yourself.
    How do you perceive information? No two programmers are alike, be aware of that when asking programmers for help. Second what language are you learning? C++ tends to be more difficult than a language like python. Third when you do program, don't think about the biggest picture you can imagine, code in sessions. Do one small part of your project at a time. My last piece fo advise is understand the concept of each part of code before you dive into examples. Know what's a variable, input, output, conditional, and loop. why are they important. Programmers in the beginning don't memorize everything, part of being a programmer and a professional is knowing how to get the answer. Learn to do research as you create your projects. Hope these tips help.