Module Zero

Objective

By the end of this module, you would have achieved:

  • Introduce yourself, what you want/need to learn, and what you would like to build (your dream app).
  • Do it in developer style (great first step if you aren't yet a developer).

Welcome to App From Scratch, where you will learn to build your dream web apps "from scratch", no previous experiences necessary.

My name is Yinso Chen, and I'll be your guide at App From Scratch. I have been building web apps for two decades, and working with Node.js actively since 2012. I got the need and the itch to build at least one more app, and I'd love for you to join me for the journey.

The idea is straightforward. I'm going to build my app, specifically, this website, which will be a learning platform for you, and I'll show you how I do it at every step along the way. You'll then try to apply the knowledge toward building your app with your passion and perspiration.

As you go through the process, you'll run across challenges and have questions [1]. If you raise them, I'll do my best to get them incorporated into the lessons (and as more people participate, others will likely help answer as well).

If you have passion, commitment, and persistence to follow through, you'll find your dream app isn't that far away from being created by your own hands.

Ready to get started?

Our first lesson, module zero, is meant to get us ready for the long journey ahead. Building apps is equivalent to running marathons, and it means we have thousands and thousands of steps ahead of us, and we need to have the right preparation.

The most important first step, is to identify where we are going. If we don't know the destination, we can't get there.

The destination is the outcome - your app - what is the app that you want to build? Who will be the users? What would they do with the app, and how would they benefit from using the app?

You might or might not have thought your ideas through yet - but you should have some ideas, and the first step is for you to write them down, and we'll do this in developer style.

Your first assignment is to do the following:

(Prerequisites)

  1. Create a GitHub account if you don't have one yet.
  2. Install git.
  3. Configure SSH for GitHub access.
  4. Get a good code editor if you don't have one chosen yet. I am currently using Visual Studio Code. Other good choices are ATOM, Sublime Text, Notepad++ (Windows only), Textmate (Mac only), and of course, Vim and Emacs.

Assignment

  1. Fork the module-zero repo to your GitHub account.

    Fork button is toward the upper right

  2. Clone the repo locally.

    # choose a top level folder where you want to clone repos. I choose $HOME/projects
    cd <your top level project folder>
    # clone the repo
    git clone git@github.com:appfromscratch/module-zero.git
    cd module-zero
    
  3. Copy the template in the participants folder and fill it out with your profile (more detail below)

    # go into the participants folder.
    cd participants
    cp _FILL_ME_OUT.yaml <your name>.yaml
    # modify the file's content...
    
  4. Save and commit to the repo. Push it up.

    # ... save the file.
    git add .
    git commit -m "adding my profile"
    git push
    
  5. Open a Pull Request for merging back into the main repo.

    Open a Pull Request button

  6. (Optional) Like and watch the repo for changes.

If you are already a developer, this should be familiar and a breeze. If you are a complete beginner, congratulations, this will get you started on becoming a developer.

Filling Out The Template

As we said, we are going to do this in developer style. The template file _FILL_ME_OUT.yaml is a YAML file, which is a data format meant for ease of reading and writing by humans.

It ought to be easy to modify the template even if you haven't seen it before. However, definitely let me know if you find YAML to be difficult.

Use online validator tools by pasting in the whole file content to see if your YAML is valid before commit your changes.

As you make a copy of the template _FILL_ME_OUT.yaml, you'll notice the following questions.

Name

Your real name is preferred, because this is going to be a professional endeavor.

You are likely to meet others through this effort, possibly working together, and knowing each others' real name will help you network and potentially gaining referrals (how would people know that 1337hacka is you when you need it?).

However, it's certainly your choice of how you would like to be referred.

Public Profile

We did say networking, right? Feel free to fill out your social network profiles here - the ones you care to share anyway. Just keep in mind, anything that you share will be public and stay public, so be sure not to share things that you rather keep private.

Your Experience Level

By filling out your experience level, it can help prioritize the courses accordingly. For example, if 80% of the people joining have been working with JavaScript extensively, I can then de-prioritize the Intro to JavaScript module accordingly.

Conversely, if 80% of the people joining have not worked with JavaScript, then it tells me that I need to move the priority of the Intro to JavaScript module higher.

So be sure to vote accordingly.

Your Focus of Skill Areas

The same as above - this will help inform what you think is important for you to build your apps. If you are a complete beginner, you'll have to start from ground zero, but if you already have some experience and you know that you need to improve in some areas, please feel free to list them.

Your Development Environment (Operating System)

Although the goal is to support the 3 major development OS (Windows, OS X, and Linux), if the majority is on one platform then they can get prioritized accordingly as well.

Your Dream Apps

This is where you can talk about your dream apps, what you want to build in vivid details.

Knowing what your app does can potentially help shifting the course focus as well. For example, if a lot of apps are focused on utilizing real-time messaging, then it'd make sense for me to add a module about real-time messaging.

Beyond the utility for prioritization, the more you can describe your dream app in detail, the closer you are to understand what you need to build and hence closer toward start building it.

Furthermore, it can be a lead for you to find someone to work with together. People usually have similar ideas, and by having a detailed description others with similar ideas can find you.

Though, don't get bogged down by thinking too hard of what to write down though. You should time box this to no more than 1 hour for Module Zero. We'll come back and revisit this in future modules.

Here are a few questions that you can try to use to write down details about your app.

Oh, one last point, if you harbor the belief that ideas are best kept secret, it has been shown time and again that ideas are a dime a dozen, and usually the earlier they get polished by others, the better (this is what I'm doing by the way - App From Scratch will be polished by everyone from the very beginning).

But it's up to you of course. Feel free to share what you care to share.

That's it for Module Zero. Looking forward to receive your pull requests!


  1. Of course, as usual, "do my homework" types of questions are out of scope.