Why Blockchain is the Future, What is Bitcoin and How to Invest and Short It and Why Ethereum Is Better than Bitcoin in 1000 Words or Less

Bitcoin price was rising like a crazy and that’s why more and more people are interested in it. I did my informal survey every time I was at a restaurant or taxi by asking waiters and taxi drivers if they invested in Bitcoin. Most of them said no or “what is bitcoin?”, so this article is for them.

Continue reading “Why Blockchain is the Future, What is Bitcoin and How to Invest and Short It and Why Ethereum Is Better than Bitcoin in 1000 Words or Less”

All Things Open 2017, Serverless and State of JS

I recorded my conference presentations last week. The conference was All Things Open and had 3200 attendees. Huge!

Watch my serverless talk at https://www.youtube.com/watch?v=2HMuTVOmX_U.

And watch my State of JS at https://www.youtube.com/watch?v=ay7SlPkENeA.

Also, I brought 50 books of React Quickly and gave them all away. The line of people to get a free copy was huge. I met a few of my fans there. Fun stuff.

7 Tech Job Which Don’t Require Coding

Technology is the fastest growing sector in the job market. Software, cloud and automation replace traditional jobs of factory workers, secretaries and service workers. Software and technology companies are the most valued by the stock market and investors. Founders of these companies are one of the richest people in the world. Startup founders and nerds are new role models for kids.

But what if you are not coding prodigy like Mark Zuckerberg or Bill Gates who started coding in their teens. What if you don’t really enjoy coding that much or maybe you are more of a peoples or a liberal arts type of a person? Do you prohibited from a tech industry? Most people don’t know that they are plenty of jobs in the tech industry which do not require coding.

Of course, you cannot be a clueless pumpkin and know nothing about tech. You still have to be technically literate and know what is a database or an API is, but you’ll mainly be leveraging your existing skills from another industry, not starting from a scratch learning coding. (Learning coding when you are in 50s are still possible. I saw it happen a Hack Reactor where I taught. But let’s admit, on average the wits become duller with age, not sharper.)

Here are seven (7) such jobs which do not require coding or deep technical expertise but can be interesting, fulfilling, and well-paid.

  1. Program Manager
  2. Product Manager/Owner
  3. Scrum Master
  4. Designer
  5. User Researcher
  6. Recruiter
  7. Tech Writer

Let’s me give you some brief insight into each of them.

Continue reading “7 Tech Job Which Don’t Require Coding”

Learn Amazon Web Services

Over the past few months, I have been focusing on teaching cloud technologies with Amazon Web Services and other providers. I created a rather a large collection of resources which will help you to learn Amazon Web Services.

First of all, here’s a series of blog posts for total beginners with Amazon Web Services:

Then, here’s a more advanced blog post on ECS and Docker: Deploying Node and Mongo Containers on Amazon Web Services Elastic Container Service (AWS ECS)

Lastly, make sure to checkout some free preview lectures of these Node University courses:

Amazon Web Services is de-facto a standard of cloud computing. Every software engineers should know at least its basics if not know it to an intermediate level.

Ideal Technical Interview for Software Engineers

Here’s an ideal I strive to achieve when I conduct technical interviews for software engineering positions.

  • I start with introducing myself
  • I provide a take home assignment instead of making people perform coding at the interview and, what’s even worse, on a white board instead of a computer.
  • I ask attitude questions more than skill questions to see if a person has the right mentality to learn and solve problems instead of just knowing certain skills. There’s a good book called Hiring for Attitude.
  • I dig deeper into what exactly the candidate’s role were in his/her prior projects.
  • I ask questions which are closely related or mocking the real work situation for this position. For example, a member of the Capital One Tech Fellows Program is often asked why X is better than Y or what framework should we use in our new project.
  • I leave enough time at the end of the interview to answer candidate’s questions about the role, team and the company or anything else they want to ask
  • I say a few things to create enthusiasm in this role and possibilities

In an ideal tech interview, you would just skim through the candidate’s code on GitHub, chat about recent happenings around the tech you use, and talk about life. That’s it. You don’t even need a resume in most cases. LinkedIn has the job history and GitHub (or HackerRank) is a living (almost fool-proof) evidence of the skills.

 

On Managing: The Main 3 Areas to Focus On

The more I work in tech, the more I see the most successful management being at the core about these three separate and often conflicting areas:

  • Company: Contributing to your companies bottom line by understanding the business value and long-term strategy
  • Customers: Taking care of your costumer by delivering product they want and love
  • Culture: Growing your engineers as well as positively impacting engineering culture in the company as a whole

At the intersection of these areas, there are two often conflicting axis which create a healthy push and pull if used with a right balance:

  • Short-term vs long-term, e.g., delivering projects on time vs. doing what will scale better in the future
  • Us vs. them, e.g., caring about your team vs. company or the entire engineering population

A good manager in the information-based working environment will find a way to combine the aforementioned areas and axis to form a win-win situation. It’s not always possible, but I find that it’s possible more often than not when I just push a little bit more and don’t give up early, when I try to come up with just one more creative solution.

PS: To continue musings, there are two books on the topic worth mentioning. I wrote a short summary on one of them which is called Managing Humans. I really liked that book, but recently I read another book called The First-Time Manager which seems to be the source of inspiration for Managing Humans, to put it mildly. I’m not accusing the author of Managing Humans in plagiarism, but I had a strong feeling of deja vu. It felt like Managing Humans borrowed the outline and a lot of ideas and concepts from The First-Time Manager. Interesting…. So go for “original” (The First-Time Manager). It’s not as specific and tailored to software engineers but a useful perspective. Then follow up with The 48 Laws of Power for a completely different view. :)

Terrible Kickstarter UI

Recently, I launched a Kickstarter campaign to fund my new book and make it “open source” (basically, write the book in the open on GitHub). The campaign was funded in 2.5 days. You can still support it. We strive for 200% goal to open another book!

While the support and backing of JavaScript and Node community were AWESOME, the Kickstarter UI was terrible. I did two other campaigns before (about React and Mongoose) and the Kickstarter UI didn’t change a bit. It’s a simple web app, so I’m surprised and annoyed that they didn’t care to iterate on the UX and UI in the last 2-3 years. 

Continue reading “Terrible Kickstarter UI”

Node.js at Capital One: Node Foundation Enterprise Case Study

Node Foundation published an enterprise case study about Node.js usage at Capital One. The title “After Call For Innovation from C-Suite, Node.js Pops Up All Over Capital One” and you can download the full case study from nodejs.org.

Continue reading “Node.js at Capital One: Node Foundation Enterprise Case Study”

One Technique Guaranteed to Improve Your Coding Skill FREE

What if I told you, there’s a one technique which will GUARANTEE an improvement in your coding skills and… it’s FREE. There’s no need for a partner, or expensive equipment, or supplements/nootropics. I’ve been using it for many years now and I became much better software engineer as a result. I was able to write 14 technical books while having a full-time job coding, speaking at conferences and teaching workshops all over the world.

More over, a lot of people outside of tech and coding use this technique to gain great advantage and improvement in their work: actors, writers, athletes, etc. It’s one of the best kept secrets and has been for many hundreds of years and probably longer. But hundreds of year ago, only select few people knew about this technique. Now anyone can tap into its power… but will you be the one to rip the benefits of this awesome technique for your career?

But let’s get back to coding.

Let me ask you: What is the most important important skill in coding?

What allows you to dig deeper into a problem and come up with a solution? No. Programming languages and apps are just tools.

To make it more specific, what allows you to track a function call and keep in memory three different variable values while also applying methods on an array and noticing places where you can refactor the code to make it better?

Let me give you the hint: experienced programmers (10+ years) have this skill in abundance. This is why they can solve complex problems and work with technologies which make any one else on their team cry like small baby. Senior programmers are masters of this skill and I won’t be surprised to find out that most of them use this productivity-boosting technique.

Do you know by now?

Can you guess?

It’s focus! Focus is the most important skill for a programmer. If you can focus more, then you can solve very complex problems. If you can change your focus from one thing to another faster, then you can be more productive. Most coding tasks require focus, e.g., finding bugs or find abstraction patterns to improve code and systems.

And what is a free technique to improve the focus? It’s meditation. It’s free. There’s no need for equipment. There’s no need for a partner. It’s affordable to anyone!

Any excuses like “I’m not good at meditation” just means you need meditation the MOST to calm your monkey brain. In our world of Slack, Facebook, Twitter, Snapchat and open offices it’s the people who can perform deep work that will be value and will get ahead.

Not convinced? Meditation is popular in India and look how many programmers from India are out there! I’m not saying I have hard data to prove anything. It could be just a coincidence, but my gut feeling is that there must be something to it.

Also, programming itself is a state of a blissful flow or trance. The more you do it the better you become at going into the flow state. Programming itself is like a meditation!

I paid more than $3,000 for my yoga teacher training. That’s an expensive way to learn meditation which basically what yoga is. Luckily, you don’t have to pay as much unless you want to have a motivation from spending all that money.

You can start just by counting from one to four for FREE. Start with 5 minutes per day for 1 month, then increase to 10 minutes. Give it a few months. Notice any improvement in your ability to focus while coding. Leave a comment here or write me an email about your results.

Node v8 and npm5

It’s finally here. Node v8 which is based on Chrome V8. Got the pun? Haha.

What’s new? Here’s a gist:

  • Better native (C/C++) modules support with N-API
  • V8 v5.8: better performance and dev-facing APIs
  • util.promisify(): improved support for Promises in the core
  • Newer CLI debugger: replacement of the debugger
  • WHATWG URL Parser
  • Buffer improvement

For full list of changes, check Node’s blog.

Coincidentally, npm also published a new release. Here are the changes and they are rather big:

  • Faster… like 5x times faster!
  • Default lockfiles: all npm installs are now reproducible
  • SHA-512: prevents corruption or malicious attacks
  • Summary report: less clutter without showing you the entire tree
  • Save dependency by default: when you npm install something it’s like npm install with  –save before

More changes on npm’s blog. Upgrade npm to npm v5 with “npm i -g npm@latest”. If you get Node v8, then npm v5 is already bundle in it.

Node Toolchain for Newbies: The Best Node Apps and Libraries to Increase Productivity

I get this question very often: “What tools would you recommend for Node development?” Software engineers love to optimize and increase productivity instead of wasting their time. I bet you are one of them! Read on to find out the best Node tools for development.

  • IDEs/code editors
  • Libraries
  • GUI tools
  • CLI tools

IDEs/code editors

When it comes to your primary tool, the code editor, I recommend sticking with lighter and simpler editors like Atom or VS Code instead of full-blown IDEs like Webstorm. Of course an IDE will do more for you but this comes with a learning curve and the need to configure. Node is interpreted, thus there’s no need to compile it. The files are just plain text files with the .js extension.

title
title

Here’s my list of the best Node editors:

  • Atom: created and maintained by GitHub; uses Electron, HTML, JS and CSS under the hood which makes it very easy to customize or add functionality; allows to have Git and terminal support via packages. Price: free.
  • VS Code: a newer addition; uses similar to Atom web-based tech; was created from Azure’s Monaco editor; comes with debugging, smart autocomplete based on types, Git and terminal support. Price: free.
  • WebStorm: more of an IDE than an editor, developed by JetBrains and based on IntelliJ platform; has code assistance, debugging, testing, Git. Price: starts at $59/yr for individuals.

There are more options like Brackets, Sublime Text 3 and of course IDEs like Eclipse, Aptana Studio, NetBeans, Komodo IDE, and cloud-based like Cloud 9, Codenvy.

What to pick? Any of the three in the list is good choice. I have heard good things about VS Code and their smart autocomplete is a nice thing, but I didn’t find it a good enough reason for me to switch from Atom. So try VS Code and Atom and see which one you like more. Both of them offer a wide variety of packages and themes.

The most popular and useful libraries and project dependencies

Here’s the list of the most used and most popular modules which you would install as dependencies of your projects. Node developers use most of these modules (or alternatives) in almost all of their projects.

The libraries are listed with the npm names, so you can execute npm i {name} substituting {name} with the name of the package/module:

  • webpack: Builds static assets like browser JavaScript, CSS and even images. It allows to use node modules in the browser.
  • babel: Allows to code in the latest versions of JavaScript/ECMAScript without having to worry about your runtime by converting the new code to the code compatible with older versions of ECMAScript
  • axios: Makes HTTP requests
  • express: the most popular Node web framework
  • mongoose: MongoDB object-document mapper library
  • sequelize: PostgreSQL object-relational mapper library
  • socket.io: Real-time library with support of Web Sockets and others.
  • cheerio: jQuery syntax for working with HTML-like data on the server
  • node-oauth: Low-level but very mature and tested library to roll out any OAuth integration
  • passport: OAuth library to quickly integrate with major services
  • yargs
  • shelljs
  • mocha: Testing framework
  • async: Controls flow by running function concurrently, sequentially or any way you want
  • concurrently: Allows to execute CLI tools (local) as multiple processes all at the same time, e.g., webpack and node-static.

Note: Some of the libraries/tools listed above like webpack or mocha, can be installed globally instead of locally in your project folder. However, installing them globally is an old practice and currently is an anti-pattern because local installation allows developers to use multiple versions of the tool with different projects in addition to have these tools specified in package.json.

 

Of course there are a lot of different options in each category. For example, request and superagent are also extremely popular HTTP agent libraries. However, I don’t want to give too many options and confuse you with the differences, I listed only one tool (typically the one I use the most currently).

CLI tools (global)

pm2 in action
pm2 in action

Unlike the previous section, these tools are okay to install globally since most likely their version won’t affect or break your project.

  • node-dev: Monitor and restart your Node app automatically on any file change within the current folder
  • node-static: Serve files over HTTP web server
  • node-inspector: Debug Node code in a familiar interface of DevTools (now part of Node starting with v7)
  • docker: Build and run Docker containers to isolate app environment, speed up deployment and eliminate conflicts between dev and prod (or any other) environments
  • curl: Make HTTP(S) requests to test your web apps (default for POSIX but can get for Windows too)
  • nvm: Change Node versions without having to install and re-install them each time
  • wintersmith: Build static website using Node templates and Markdown
  • pm2: Process manager to vertically scale Node processes and ensure fail-tolerance and 0-time reload

GUI tools

MongoUI in action
MongoUI in action

A good share of Node developers prefer GUI (graphical user interface) tools at least for some of the tasks because these tools require less typing and have features which makes them more productive and the development easier and simpler.

  • Postman: HTTP client with ability to save requests and history, change formats (JSON, form, etc.) and do other things
  • MongoUI: Modify and inspect your MongoDB data in a web interface. You can host this web app on your server to enable the database management.
  • Chrome: DevTools is a great way to inspect your requests, network, traffic, CPU profiles and other developer related data which is very useful for debugging
  • iTerm, itermocil and zsh: A better alternative to a native macOS Terminal app which together with itermocil and zsh increases productivity greatly
  • SourceTree: Visual git trees and histories

If you liked this post, next step is to understand the Node platform better. For this reason, check out this FREE course You Don’t Know Node.

On Tech Leadership: Managing Humans Summary

Managing Humans
Managing Humans

Here is the summary for Managing Humans, a book on software engineering management along with my interpretation and comments. Text in quote are direct excerpts from the book.

  • People on your team have different needs, e.g., promotion, challenge, less stress. By filling their needs, you can make them content and productive. Your job as a leader is to listen to them and mentally document how they are wired. This is the essence of a software manager’s job.
  • Manager is connector between the team and the rest of the organization. The main way for an engineer to show the work to the company is to communicate to the manager. Hence should balance external and internal focus.
  • “Schedule one-on-ones with direct reports, keep them on the same day and time, and never cancel them.” One-on-ones are paramount. Keep them regular and at least 30 min. Maybe 45min is better. Not 15min. Avoid missing scheduled one-on-ones and doing status reports. Weekly is the best. These meetings are for managers to listen 50%+. If no issues, then focus on career building and needs of your reports.
  • Know your boss’ place… and yours, in the food chain besides just the title of the org chart. “Politically active managers are informed managers. They know when change is afoot and they know what action to take to best represent their organization.”
  • In a meeting, if someone is doing anything else except listening (open laptop? iPhone?), he is not listening. Ban laptops from your meetings altogether. Paper notebooks still work for notes (info can be digitized later), and they don’t require charging unlike laptops.
  • In conflict resolution, listen to both stories. Preferably in-person not over email. People prone to unconsciously augment memory, misinterpret and twist facts to make a story in their favor. “If the story can’t stand up to the first three questions that pop into your mind, then there’s an issue”
  • Two pizza team rule. With more than 10–15 direct reports it becomes extremely hard to really listen people.
  • Sometimes just listening helps to vent a frustration. If communication is broken, then listen and repeat to understand.
  • Meetings must have an agenda at the beginning, and a clear set of actionable steps at the end.
  • Incrementalist vs. perfectionists. In a deadlock, it’s better to make an “executive” decision to move forward.
  • “In the absence of information, people will create their own”. Kill gossips in your staff meetings. Don’t spread them yourself and prevent others from spreading them. Also, don’t tell too much. “As a manager, your job is that of a bullshit umbrella”.
  • “The point of a performance review is not the review itself but the conversation that stems from it”. Send the report a few days in advance so it’s not a shock to the team member. Aim to mitigate any boredom and complacency by giving directions, i.e., learn Elixir.
  • Speak the same language as the person you’re talking to: managerial (managementese) with other leads and technical with coders.
  • Off-sites help remove day-to-day distractions and focus on strategic.
  • If you want to progress as a manager, you need to stop coding while still coding but on prototypes, research, proof-of-concepts, i.e., no core products. This way you are still in the latest trends but not an impediment if you fail to deliver a critical feature or worse delivered a bug which crashed other parts (and your team had to fix it). “Stay flexible, remember what it means to be an engineer, and don’t stop developing”.
  • Always allow your team to question your decisions but once the decision is made—all hands on board.
  • Process must be a documentation of the engineering culture and value so it can be passed along to new members when engineers leave or company grows. Process must NOT be a way to control.
  • Humans are bad at estimations. It becomes a bit better once they start working on a task.
  • Project manager makes sure to ship the product; product manager makes sure that the right product is shipped; while program manager makes sure multiple (typically interelated and dependent) products are shipped, generally at the same time.
  • Rotate your engineering between boring tasks like bug fixes, tests or tech debt.
  • Each new engineer bring overhead of communication, decision, and error correction. (Read The Mythical Man-Month). Ensure the cultural fit. All things equal, it’s better to hire for attitude than skill. Know about strategic vs. tactical visions.
  • Engineers treasure consistency, predictability, and efficiency.
  • There are mechanical (data oriented) and organic (human oriented) managers. Make sure you speak with them on their level not yours.

Continue reading “On Tech Leadership: Managing Humans Summary”

ES 7 and ES8 Features

Recently I wrote a blog post and even created an online course on ES6/ES2015. Guess what? TC39—the mighty overseer of JavaScript—is moving forward with ES8 so let’s cover ES7 and ES8 (or ES2016 and ES2017 officially). Luckily, they are much, much, much smaller than the best of a standard that was ES6. Really! ES7 has only two (2) features!

ES7 features:

  1. Array.prototype.includes
  2. Exponentiation Operator

ES8 is not finalized yet as of this writing (Jan, 2017) but we can assume all finished proposals (stage 4) and most of stage 3 (more on stages here and in my course). The finished 2017 (ES8) proposals are:

  1. Object.values/Object.entries
  2. String padding
  3. Object.getOwnPropertyDescriptors
  4. Trailing commas in function parameter lists and calls
  5. Async Functions

I won’t include stage 3 proposals in this post, but you can check the status of proposals from stage 1 to 3 here.

Let’s dive deeper into the proposals and features…

The rest of the article: https://node.university/blog/1621685/es7es8.

How Node Event Loop REALLY Works: Or Why Most of the Event Loop Diagrams are WRONG

When Bert presented his keynote at Node Interactive Europe 2016 on Event Loop, he started by saying that most of event loops diagrams are WRONG. I’m guilty of using one of them in my talks. :)

This is it. In it, event loop is spinning data back at clients like hot-cakes.

His diagram is closer to the real stuff. In it, event loop starts, works and then quits eventually (pun intended).

Continue reading “How Node Event Loop REALLY Works: Or Why Most of the Event Loop Diagrams are WRONG”

Beautiful Node APIs

This post is on how to build beautiful APIs in Node.js. Great, and what is an API? The definition says Application Programming Interface, but what does it mean? It could mean on of the few things depending on the context:

  • Endpoints of a service service-oriented architecture (SOA)
  • Function signature
  • Class attribute and methods

The main idea is that an API is a form of a contract between two or more entities (objects, classes, concerns, etc.). Your main goal as a Node engineer is to build beautiful API so that developers who consume your module/class/service won’t be cursing and sending you hate IM and mail. The rest of your code can be ugly but the parts which are public (mean for usage by other programs, and developers) need to be conventional, extendable, simple to use and understand, and consistent.

Let’s see how to build beautiful APIs for which you can make sure other developer

Continue reading “Beautiful Node APIs”

Preact

Preact is a lightweight (just 3kb) alternative to React which has same interface (ES6), but better performance. Preact also has a few new features, i.e.,

  • Arguments props, state and context are passed to render()
  • Standard HTML attributes class and for
  • React DevTools right out of the box

There is a migration guide at the https://preactjs.com/guide/switching-to-preact which is basically replacing react and react-dom with preact npm packages.

I imported my AnalogDisplay component (original in React) into preact JSFiddle code, and they worked well. I can either use this.state or just state in render(). Here’s the JSFiddle code: http://jsfiddle.net/gz7L59mn/1/ and the source code:

Continue reading “Preact”

Node.js in Containers Using Docker

Container technology is one of the best options for software development and deployment. It allows you to share some of the OS resources while encapsulating the code and other concerns. You can think of containers as virtual machines but with less footprint.

Containers are great for micro services where you replace monoliths with many services. Each of them works in isolation and communicates with other services via a well defined interface (typically REST).

Docker is one of the most popular implementations of containers. Docker’s What is Docker? page has a a neat comparison of containers with VMs. In a nutshell, VMs use hypervisor and each VM has it’s own OS while containers share OS and only separate libraries, bin, executables, etc.

Continue reading “Node.js in Containers Using Docker”

Autocomplete Widget with React

This project will guide you through building an autocomplete function similar to the one that you might see in Slack (a popular messaging app), as shown in figure 1, when you type something in the search box. For simplicity, our widget will work with room names (the rooms in a chat application).

Figure 1
Figure 1

The autocomplete widget will have (figure 2):

  1. An input field
  2. A list of options filtered according to the entered characters
  3. An Add button (figure 3)
Figure 2
Figure 2

The filtering of the matches will be done using the entered characters as the first characters of the option. In other words, there is a simple comparison that allows us to autocomplete the name of the room (figure X). For example, if you type “mac” and you have “Mac OS X” and “Apple Mac,” then only “Mac OS X” will be shown as a match, not both options.

Continue reading “Autocomplete Widget with React”

10 Things You Should Stop Doing When Giving a Conference Talk

I’ve spoken at over a dozen conferences this year and seen my share of bad presentations. Yes, for the most part geeks aren’t expected to be great at public speaking. That’s why they called geeks.

However, I noticed certain patterns: most of the times presenters were making it harder for the audience to get their material. They were doing some easy to fix things which hampered their delivery greatly. The tech talks are boring anyway (generally speaking). Why make it even hard on your listeners?

If you need to present soon at a conference (even if you are not a geek or techie), here are 10 sins you should never do when you give a conference talk (more of a note to myself than anything else):

Continue reading “10 Things You Should Stop Doing When Giving a Conference Talk”

Node Interactive Europe 2016 Recap

I went to Node Interactive Europe which happened in September in Amsterdam, the official Node conference—the real deal. Organizers invited me to present on React, so I taught a workshop on Universal Web, and also participated on a panel discussion about containers and Node with folks from nearFrom, IBM, Zeit and Netflix. You should watch the panel recording on YouTube. It was a good one.

Continue reading “Node Interactive Europe 2016 Recap”