3 Best NodeJs Courses & Certification 2020 Online[Feb]

nodejs

Looking for Best NodeJs Courses, this 3 courses will teach you to combine the ultra-popular NodeJs ,React, Redux, Express, and MongoDB technologies to build a fullstack web application.

1. Node with React: Fullstack Web Development

Build and deploy fullstack web apps with NodeJS, React, Redux, Express, and MongoDB.

What you’ll learn

Here’s what we’ll learn:

  • Learn the architectural considerations of building a full stack app
  • Connect a front-end Create-React-App server to a NodeJS and Express backend
  • Communicate data from your Mongo database to your React application
  • Understand how to route user requests on the front end with React Router and on the backend with Express
  • Build reusable user inputs with Redux Form, complete with navigation
  • Handle credit cards and receive payments from your users with Stripe
  • Engage your users with automated emails
  • Enhance authentication flows in your app with Google OAuth authentication
  • Separate production and development resources with advanced API key handling techniques
  • Educate your users on how to use your app with custom build landing pages
  • Create boilerplate starter projects with React, Redux, Express, and Mongo
  • Understand common web technologies and design patterns to connect them together
  • Master deployment techniques between the production and development environments
  • Make an app with Google OAuth authentication
  • Learn to effectively create and send emails from a backend server
  • Accept and process credit card payments from users

During eight chapters you’ll learn:

1. Node.js 2. Npm 3. Asynchronous programming 4. ES6/ES7 5. MongoDB 6.Express 7. Socket.IO 8. JWT Authentication 9. Mongoose 10. File and image uploads 11. Email sending 12. Application deployment with Heroku 13. Version control with Git 14. GitHub  15. REST API Design 16. Code testing 17. Debugging 18. Jest 19. Many more tools

 

Course Details

– Course Overview – Start Here!
– Server Side Architecture

  • Application Architecture
  • Relationship Between Node and Express
  • Generating Express Apps
  • Express Route Handlers
  • Heroku Deployment Checklist
  • Installing the Heroku CLI
  • Verifying Heroku Deployment
  • Followup Deployments

– Authentication with Google OAuth 14 lectures
– Adding MongoDB 19 lectures
– Dev vs Prod Environments 7 lectures
– Moving to the Client Side 8 lectures
– Developing the Client Side 30 lectures
– Handling Payments 21 lectures
– Back End to Front End Routing in Production 6 lectures
– Mongoose for Survey Creation 26 lectures
– Back to the Client! 30 lectures
– Handling Webhook Data 22 lectures
– The Home Stretch! 8 lectures
– Extras 1 lecture

 

2. The Complete Node.js Developer Course (3rd Edition)

Learn Node.js by building real-world applications with Node, Express, MongoDB, Jest, and more!

 

What you’ll learn

  • Completely refilmed for 3rd edition
  • Build, test, and launch Node apps
  • Create Express web servers and APIs
  • Store data with Mongoose and MongoDB
  • Use cutting-edge ES6/ES7 JavaScript
  • Deploy your Node apps to production
  • Create real-time web apps with SocketIO

 

3. Learn and Understand NodeJS

Dive deep under the hood of NodeJS. Learn V8, Express, the MEAN stack, core Javascript concepts, and more.

 

What you’ll learn

  • Grasp how NodeJS works under the hood
  • Understand the Javascript and technical concepts behind NodeJS
  • Structure a Node application in modules
  • Understand and use the Event Emitter
  • Understand Buffers, Streams, and Pipes
  • Build a Web Server in Node and understand how it really works
  • Use npm and manage node packages
  • Build a web application and API more easily using Express
  • Connect to a SQL or Mongo database in Node
  • Understand how the MEAN stack works
  • Be the coder that explains NodeJS to everyone else because you understand it better than anyone else

 

Who this course is for:

  • Those looking to build a career as a NodeJS developer
  • Those desiring to become MEAN stack developers
  • Those who don’t have server technology experience but wish to gain this skill
  • Those coming from other server technologies (like PHP, ASP.NET, or Ruby on Rails) and want to learn Node
  • Those who want to only have to write both client and server code in one language: Javascript
  • Those who want to grasp Express

 

{ Node.js Application + Docker }  Development On DigitalOcean

This tutorial will walk you through creating an application image for a static website that uses the Express framework and Bootstrap. You will then build a container using that image, push it to Docker Hub, and use it to build another container, demonstrating how you can recreate and scale your application.

For a more detailed version of this tutorial, with more detailed explanations of each step, please refer to How To Build a Node.js Application with Docker.

Prerequisites

To follow this tutorial, you will need:

  • sudo user on your server or in your local environment.
  • Docker.
  • Node.js and npm.
  • A Docker Hub account.

 

Step 1 — Installing Your Application Dependencies

First, create a directory for your project in your non-root user’s home directory:

mkdir node_project

Navigate to this directory:

This will be the root directory of the project.

Next, create a package.json with your project’s dependencies:

nano package.json
Add the following information about the project to the file; be sure to replace the author information with your own name and contact details:

~/node_project/package.json
{
"name": "nodejs-image-demo",
"version": "1.0.0",
"description": "nodejs image demo",
"author": "Sammy the Shark <sammy@example.com>",
"license": "MIT",
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"nodejs",
"bootstrap",
"express"
],
"dependencies": {
"express": "^4.16.4"
}
}
Install your project’s dependencies:
npm install

Step 2 — Creating the Application Files

We will create a website that offers users information about sharks.

Open app.js in the main project directory to define the project’s routes:

  • nano app.js

Add the following content to the file to create the Express application and Router objects, define the base directory, port, and host as variables, set the routes, and mount the router middleware along with the application’s static assets:

~/node_project/app.js
var express = require("express");
var app = express();
var router = express.Router();

var path = __dirname + '/views/';

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

router.use(function (req,res,next) {
  console.log("/" + req.method);
  next();
});

router.get("/",function(req,res){
  res.sendFile(path + "index.html");
});

router.get("/sharks",function(req,res){
  res.sendFile(path + "sharks.html");
});

app.use(express.static(path));
app.use("/", router);

app.listen(8080, function () {
  console.log('Example app listening on port 8080!')
})

Next, let’s add some static content to the application. Create the views directory:

  • mkdir views

Open index.html:

  • nano views/index.html

Add the following code to the file, which will import Boostrap and create a jumbotron component with a link to the more detailed sharks.html info page:

~/node_project/views/index.html
<!DOCTYPE html>
<html lang="en">
   <head>
      <title>About Sharks</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <link href="css/styles.css" rel="stylesheet">
      <link href='https://fonts.googleapis.com/css?family=Merriweather:400,700' rel='stylesheet' type='text/css'>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
   </head>
   <body>
      <nav class="navbar navbar-inverse navbar-static-top">
         <div class="container">
            <div class="navbar-header">
               <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
               <span class="sr-only">Toggle navigation</span>
               <span class="icon-bar"></span>
               <span class="icon-bar"></span>
               <span class="icon-bar"></span>
               </button>
               <a class="navbar-brand" href="#">Everything Sharks</a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
               <ul class="nav navbar-nav mr-auto">
                  <li class="active"><a href="/">Home</a></li>
                  <li><a href="/sharks">Sharks</a></li>
               </ul>
            </div>
         </div>
      </nav>
      <div class="jumbotron">
         <div class="container">
            <h1>Want to Learn About Sharks?</h1>
            <p>Are you ready to learn about sharks?</p>
            <br>
            <p><a class="btn btn-primary btn-lg" href="/sharks" role="button">Get Shark Info</a></p>
         </div>
      </div>
      <div class="container">
         <div class="row">
            <div class="col-md-6">
               <h3>Not all sharks are alike</h3>
               <p>Though some are dangerous, sharks generally do not attack humans. Out of the 500 species known to researchers, only 30 have been known to attack humans.</p>
            </div>
            <div class="col-md-6">
               <h3>Sharks are ancient</h3>
               <p>There is evidence to suggest that sharks lived up to 400 million years ago.</p>
            </div>
         </div>
      </div>
   </body>
</html>

Next, open a file called sharks.html:

  • nano views/sharks.html

Add the following code, which imports Bootstrap and the custom style sheet and offers users detailed information about certain sharks:

~/node_project/views/sharks.html
<!DOCTYPE html>
<html lang="en">
   <head>
      <title>About Sharks</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <link href="css/styles.css" rel="stylesheet">
      <link href='https://fonts.googleapis.com/css?family=Merriweather:400,700' rel='stylesheet' type='text/css'>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
   </head>
   <nav class="navbar navbar-inverse navbar-static-top">
      <div class="container">
         <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Everything Sharks</a>
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav mr-auto">
               <li><a href="/">Home</a></li>
               <li class="active"><a href="/sharks">Sharks</a></li>
            </ul>
         </div>
      </div>
   </nav>
   <div class="jumbotron text-center">
      <h1>Shark Info</h1>
   </div>
   <div class="container">
      <div class="row">
         <div class="col-md-6">
            <p>
            <div class="caption">Some sharks are known to be dangerous to humans, though many more are not. The sawshark, for example, is not considered a threat to humans.</div>
            <img src="https://assets.digitalocean.com/articles/docker_node_image/sawshark.jpg" alt="Sawshark">
            </p>
         </div>
         <div class="col-md-6">
            <p>
            <div class="caption">Other sharks are known to be friendly and welcoming!</div>
            <img src="https://assets.digitalocean.com/articles/docker_node_image/sammy.png" alt="Sammy the Shark">
            </p>
         </div>
      </div>
    </div>
   </body>
</html>

Finally, create the custom CSS style sheet that you’ve linked to in index.html and sharks.html by first creating a css folder in the views directory:

  • mkdir views/css

Open the style sheet and add the following code, which will set the desired color and font for our pages:

~/node_project/views/css/styles.css
.navbar {
        margin-bottom: 0;
}

body {
        background: #020A1B;
        color: #ffffff;
        font-family: 'Merriweather', sans-serif;
}
h1,
h2 {
        font-weight: bold;
}
p {
        font-size: 16px;
        color: #ffffff;
}


.jumbotron {
        background: #0048CD;
        color: white;
        text-align: center;
}
.jumbotron p {
        color: white;
        font-size: 26px;
}

.btn-primary {
        color: #fff;
        text-color: #000000;
        border-color: white;
        margin-bottom: 5px;
}

img, video, audio {
        margin-top: 20px;
        max-width: 80%;
}

div.caption: {
        float: left;
        clear: both;
}

Start the application:

  • npm start

Navigate your browser to http://your_server_ip:8080 or localhost:8080 if you are working locally. You will see the following landing page:

nodejs1

Click on the Get Shark Info button. You will see the following information page:

nodejs2

You now have an application up and running. When you are ready, quit the server by typing CTRL+C

 

Step 3 — Writing the Dockerfile

In your project’s root directory, create the Dockerfile:

  • nano Dockerfile

Add the following code to the file:

~/node_project/Dockerfile

FROM node:10

RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app

WORKDIR /home/node/app

COPY package*.json ./

RUN npm install

COPY . .

COPY --chown=node:node . .

USER node

EXPOSE 8080

CMD [ "npm", "start" ]

This Dockerfile uses an alpine base image and ensures that application files are owned by the non-root node user that is provided by default by the Docker Node image.

Next, add your local node modules, npm logs, Dockerfile, and .dockerignore to your .dockerignore file:

~/node_project/.dockerignore
node_modules
npm-debug.log
Dockerfile
.dockerignore

Build the application image using the docker build command:

  • docker build -t your_dockerhub_username/nodejs-image-demo .

The . specifies that the build context is the current directory.

Check your images:

  • docker images

You will see the following output:

Output
REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
your_dockerhub_username/nodejs-image-demo          latest              1c723fb2ef12        8 seconds ago       895MB
node                                               10                  f09e7c96b6de        17 hours ago        893MB

Run the following command to build a container using this image:

  • docker run –name nodejs-image-demo -p 80:8080 -d your_dockerhub_username/nodejs-image-demo

Inspect the list of your running containers with docker ps:

  • docker ps

You will see the following output:

Output
CONTAINER ID        IMAGE                                                   COMMAND             CREATED             STATUS              PORTS                  NAMES
e50ad27074a7        your_dockerhub_username/nodejs-image-demo               "npm start"         8 seconds ago       Up 7 seconds        0.0.0.0:80->8080/tcp   nodejs-image-demo

With your container running, you can now visit your application by navigating your browser to http://your_server_ip or localhost. You will see your application landing page once again:

Application Landing Page

Now that you have created an image for your application, you can push it to Docker Hub for future use.

Step 4 — Using a Repository to Work with Images

The first step to pushing the image is to log in to the your Docker Hub account:

  • docker login -u your_dockerhub_username -p your_dockerhub_password

Logging in this way will create a ~/.docker/config.json file in your user’s home directory with your Docker Hub credentials.

Push your image up using your own username in place of your_dockerhub_username:

  • docker push your_dockerhub_username/nodejs-image-demo

If you would like, you can test the utility of the image registry by destroying your current application container and image and rebuilding them.

First, list your running containers:

  • docker ps

You will see the following output:

Output
CONTAINER ID        IMAGE                                       COMMAND             CREATED             STATUS              PORTS                  NAMES
e50ad27074a7        your_dockerhub_username/nodejs-image-demo   "npm start"         3 minutes ago       Up 3 minutes        0.0.0.0:80->8080/tcp   nodejs-image-demo

Using the CONTAINER ID listed in your output, stop the running application container. Be sure to replace the highlighted ID below with your own CONTAINER ID:

  • docker stop e50ad27074a7

List your all of your images with the -a flag:

  • docker images -a

You will see the following output with the name of your image, your_dockerhub_username/nodejs-image-demo, along with the node image and the other images from your build:

Output
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
your_dockerhub_username/nodejs-image-demo            latest              1c723fb2ef12        7 minutes ago       895MB
<none>                                               <none>              e039d1b9a6a0        7 minutes ago       895MB
<none>                                               <none>              dfa98908c5d1        7 minutes ago       895MB
<none>                                               <none>              b9a714435a86        7 minutes ago       895MB
<none>                                               <none>              51de3ed7e944        7 minutes ago       895MB
<none>                                               <none>              5228d6c3b480        7 minutes ago       895MB
<none>                                               <none>              833b622e5492        8 minutes ago       893MB
<none>                                               <none>              5c47cc4725f1        8 minutes ago       893MB
<none>                                               <none>              5386324d89fb        8 minutes ago       893MB
<none>                                               <none>              631661025e2d        8 minutes ago       893MB
node                                                 10                  f09e7c96b6de        17 hours ago        893MB

Remove the stopped container and all of the images, including unused or dangling images, with the following command:

  • docker system prune -a

With all of your images and containers deleted, you can now pull the application image from Docker Hub:

  • docker pull your_dockerhub_username/nodejs-image-demo

List your images once again:

  • docker images

You will see your application image:

Output
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
your_dockerhub_username/nodejs-image-demo      latest              1c723fb2ef12        11 minutes ago      895MB

You can now rebuild your container using the command from Step 3:

    • docker run –name

nodejs-image-demo

    • -p

80

    • :8080 -d

your_dockerhub_username

    • /

nodejs-image-demo

$ docker ps

List your running containers:


Output

CONTAINER ID        IMAGE                                                   COMMAND             CREATED             STATUS              PORTS                  NAMES
f6bc2f50dff6        your_dockerhub_username/nodejs-image-demo               "npm start"         4 seconds ago       Up 3 seconds        0.0.0.0:80->8080/tcp   nodejs-image-demo

Visit http://your_server_ip or localhost once again to view your running application.

 

Server Error status Codes

 

Server Error status codes

Server error status codes indicate that the request was valid, but an error on the server is preventing its fulfillment.

Table Of Contents
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage (WebDAV)
508 Loop Detected (WebDAV)
510 Not Extended
511 Network Authentication Required
598 Network Read Timeout Error
599 Network Connect Timeout Error
500 Internal Server Error
Definition: The request can’t be fulfilled due to an unexpected condition encountered by the server. This error response is a generic “catch-all” response, given when no more specific message is suitable.

500 Internal Server Error is defined in RFC 7231.

501 Not Implemented
Definition: The request can’t be fulfilled because the server does not support the functionality required to fulfill it. A Retry-After header can also be sent to tell the requester when to check back to see if the functionality is supported by then. 501 Not Implemented is the appropriate response when the server does not recognize the request method and is incapable of supporting it for any resource. The only methods that servers are required to support (and therefore that must not return 501 Not Implemented) are GET and HEAD. If the server does recognize the method, but intentionally does not support it, the appropriate response is 405 Method Not Allowed.

501 Not Implemented is defined in RFC 7231.

502 Bad Gateway

Definition: The request cannot be fulfilled because the server was acting as a gateway or a proxy and received an invalid response from the upstream server.

502 Bad Gateway is defined in RFC 7231.

503 Service Unavailable

Definition: The request cannot be handled by the server because it is overloaded or down for maintenance. In other words, the server is not ready to handle the request. This response should be used for temporary conditions and the Retry-After HTTP header should, if possible, contain the estimated time for the recovery of the service. Caching-related headers that are sent along with this response should be taken care of, as a 503 Service Unavailable status is often a temporary condition and responses shouldn’t usually be cached.

503 Service Unavailable is defined in RFC 7231.

504 Gateway Timeout
Definition: The request cannot be fulfilled because the server was acting as a gateway or a proxy and it did not receive a response in time from the upstream server.

504 Gateway Timeout is defined in RFC 7231.

505 HTTP Version Not Supported
The request is using an HTTP version that is not supported by the server.

505 HTTP Version Not Supported is defined in RFC 7231.

506 Variant Also Negotiates
Definition: The request was made in the context of Transparent Content Negotiation, a protocol that enables a client to retrieve the best variant of a given resource, where the server supports multiple variants. The 506 Variant Also Negotiates status code indicates an internal server configuration error in which the chosen variant is itself configured to engage in content negotiation, so is not a proper negotiation endpoint.

506 Variant Also Negotiates is defined in RFC 2295.

507 Insufficient Storage
Definition: The request cannot be fulfilled because the server is unable to store the representation needed to complete it.

507 Insufficient Storage is defined in RFC 4918.

508 Loop Detected
The request cannot be fulfilled because the server detected an infinite loop while processing it. This status indicates that the entire operation failed.

508 Loop Detected is defined in RFC 5842.

510 Not Extended
Definition: The request was made in the context of the HTTP Extension Framework and cannot be fulfilled because one, many or all the described extensions are not supported by it.

510 Not Extended is defined in RFC 2774.

511 Network Authentication Required
Definition: The request was made without proper identification. The client needs to authenticate to gain network access. This status is not generated by origin servers, but by intercepting proxies that control access to the network. Network operators sometimes require some authentication, acceptance of terms, or other user interaction before granting access (for example in an internet café or at an airport). They often identify clients who have not done so using their Media Access Control (MAC) addresses.

511 Network Authentication Required is defined in RFC 6585.

598 Network Read Timeout Error
Definition: This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network read timeout behind the proxy to a client in front of the proxy.

599 Network Connect Timeout Error
Definition: This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.

Developer Learning Through His Development Life Cycle

My learning curve over the last ten years of doing development was not only about success. Most of the time, I was failing (hard). But if you never fail, you will never experience growth! So I’m a happy failure in that sense.

I had the pleasure of working with many smart people in small and big organizations. If I hadn’t worked with them, I would have never become who I am today as a developer.

So in this post, I would love to tell you about the seven biggest lessons I learned from being a developer for more than 10 years. Sit back, relax, enjoy, and hopefully one or more lessons will help you.


1. You Need to Fail 1,000 Times More to Reach Success

I still remember that time when I was 14. A friend of mine was building a website, and I was inspired by his ability to write code and that cool page full of creativity.

So I asked him, “How do you build a website?” But his response was more frustrating than helpful. He replied, “With your notepad.”

Fast-forward to my first year as a developer. My friend’s answer at the time motivated me to try many things with HTML and CSS. Looking back, I made so many silly mistakes:

  • Building a website with only <frame> or <iframe>
  • Building a layout with <table>
  • Using position: absolute for almost everything

I could go on and on. But making more of these mistakes helped me learn why those were not good ideas.

When I started to work as a developer, all of those things were smashed out of my system through my teammates who gave me that feedback time and time again.

I learned that practicing was key to getting better in my work.

To reach success, you have to do a lot of things wrong. Failing is not a bad thing! It’s part of the process to do it better next time!


2. Everyone Can Learn to Code!

In my first two years, I doubted if being a developer was my thing. Because at that time, I did only work with HTML, CSS, and a little bit of Jquery. I found JavaScript too complex!

I thought I wasn’t smart enough to learn JavaScript.

Years later, I discovered that I didn’t have to be that smart! I just had to learn the basic stuff very well. I discovered that I had to try to practice those things often — for days or even weeks.

But because of that practice, I learned why things worked as they did or why I got errors and did stuff wrong.

So if you think that you can only be a developer if you’re super smart, you’re wrong! Well, it is helpful to have smarts of course. But you become a developer by practicing a lot.

If you compare it to an athlete, it sounds very logical. That athlete has to train for days, weeks, months, and years before they can reach the Olympic Games.

Be easy on yourself and practice a lot!


3. Senior Developers Are Just As Insecure

I always had the image that those smart and experienced developers are not insecure about their skills.

But I learned that they are just as insecure as junior developers. A lot of senior developers deal with importer syndrome — some more often than others. I admit I deal with this myself now and then.

I think senior developers don’t have to be ashamed about that! We are all humans, we don’t have a hard drive where you put in a stick of knowledge. And we don’t have to!

I learned a lot when one of my lead developers was also not able to solve a certain problem after hours and hours of trying. At that moment, I thought, “Ah, it’s not bad to say I don’t know right now!”

A senior developer becomes a senior developer because they made a lot of mistakes over their career. If a junior developer asks us anything and we don’t know, we are allowed to say, “Sorry, I don’t know.”


If you think that writing code is the most important skill in software development, then guess again!

In all those years of working as a developer in small and big scrum teams, every retrospective session, someone was saying, “Yeah, we have to improve our communication because this and that went wrong. If we would have communicated better, we could have prevented that issue.”

If you are working alone, this is maybe less the case than when working on a team. But when working on a team, communication is a top priority.

The success of a team or business depends on communication (next to programming skills). If you work on a great team full of top developers who don’t communicate, there is a huge problem.


As developers, most of the time, we don’t like to test. Yeah, testing a bit here and there is fine, but we’re not into that deep scenario testing.

If you frequently have errors or bugs in your code, spend more time on testing! You can do this manually, but if you invest time in automatic testing by writing tests (unit tests, integration tests, penetration testing, etc.), it will save you from unneeded problems to solve later.

It’s maybe not as fun as building new functionality, but if you write those tests, it will help you get more time to build new awesome features!


One of the things about my personality is that I enjoy helping people, but I’ve seen senior developers who are rude to junior developers. I hate that behavior!

I still remember when a great lead developer helped me grow and guided me along the path to becoming a cool JavaScript developer. Over and over again, I didn’t grasp how some concept was working. Still, he would come sit next to me and only left when I fully understand it!

So at the moment when you become a great senior developer, try to remember how you got started. Think about who helped you and what you learned from that!

Because if you give good things, you will get good things. If you are rude, you will receive that back!


At school, I was very bad at learning. I did not have very high marks.

But when I started as a developer, I learned what my method of learning was! I was so happy that I discovered that.

I think many people have read a couple of my JavaScript-related posts on Medium or my website. Well, those posts are the result of my learning process.

When I try to get a complex concept into my head, I try to write an article as if I’m explaining it to someone else. I start with a code example to try out. I try to make it work and break it again. I want to fully grasp why it works as it does and what I can change when it doesn’t work.

Well, that works quite well for me. I regularly visit my posts to remember how a certain concept works.


Thanks

Thanks for reading. I did my best to put as many details into the biggest lessons of my last ten years as a developer. Hopefully, you can take those lessons with you and remember them over your entire career.

But I’m wondering what your biggest lessons are from your time as a developer. So it doesn’t matter if you’re a student, junior, or senior developer. Let’s learn from each other!