15/10/2022

The skills needed for a backend engineer

The following are the most required skills for a backend engineers from my point of view.

Programming Languages

  • Java
  • .NET (C# and VB.NET)
  • Python
  • Ruby
  • PHP
  • TypeScript
  • Golang
  • Kotlin (As a server side language)
  • Scala
  • Elixir

Java, .NET, Kotlin (Compile type languages)

Python, Ruby, PHP (Inpterpreted type languages)

Package Managers

At the moment, a lot of languages use a package management method that combines ◯◯ File and ◯◯ File.lock, so I think it's enough to get used to this method to some extent. (Recently, a package manager called Pipenv, which uses the above method for Python, seems to be gradually spreading.)

However, regarding npm, considering the importance of JavaScript (TypeScript) in the web industry (used for server-side, front-end, and application development), I think it would be beneficial to know about it. I think it's better to study personally even if you don't have a chance to use it for business.

Regarding Scala's sbt and Java (Kotlin)'s gradle, if you are not particularly interested in these languages, I don't think you need to study them privately.

Security Measures

I think that it is impossible to understand everything about security, but it is enough to take the countermeasures against basic vulnerability attacks such as SQL injection, XSS, CSRF, etc.

Important information should not be stored in plaintext in databases, etc. (always encrypted)

Do not upload confidential information to source control services such as Github (use .env and environment variables)

On the cloud (AWS and GCP), perform access control using IAM etc. as finely as possible

Always use and enforce SSL

If the security is not properly set, it will lead to the bankruptcy of the service or the company. On the other hand if the security requirements are too strict, the development efficiency will be very bad (it will also lead to the departure of engineers), so It is necessary to set security settings according to the importance of the service. For example a security measure for a blog should not be the same as for online banking service.

Testing

  • Rspec (Ruby on Rails)
  • unittest (Python)
  • testing (Golang)
  • ExUnit (Elixir)
  • ScalaTest (Scala)

Try to understand as much as possible how to use the standard test frameworks of various languages that are used in the project you are in charge of (for example, how to set fixtures, the scope of setup and teardown, etc.) However, all test frameworks basically have similar parts, so if you are familiar with one test framework, it will be relatively easy to use test frameworks for other languages.

Besides that, it is important to understand the difference between unit test and integration test, and I think that the concept of DI (Dependency Injection) and the test method using it are essential education for engineers. I think you should have some understanding of Test Doubles, mocks, stubs.

RDBMS

I think even today, with the emergence of many NoSQL services, but relational databases are still extremely important, and MySQL in particular will continue to play an important role in the future. I think that it is highly likely that it will continue to be an important RDB, so I think that it is necessary to know the basic management methods and commands of MySQL.

As for SQL, at least

  • Basic DDL (CREATE TABLE, ALTER, DROP etc.)
  • Basic DML (SELECT/INSERT/UPDATE/DELETE)
  • Basic DCL (GRANT, etc.)

It is necessary to understand the above areas, and I think it is necessary to understand also encodings, indexes, transactions, deadlocks, the meaning of master/slave, etc.

Recently, I think that most people use fully managed RDB such as RDS, so I don't think it is necessary to understand the very detailed parts of RDB, and there are few opportunities to need such knowledge. However, compared to before, it seems that young engineers' knowledge of RDB and SQL has declined considerably, so it seems that there are more and more cases where RDB is used rather wastefully. Or, I often think that I want you to study a little more about the basic part of RDB.

Web Frameworks

  • Ruby on Rails (Ruby)
  • Django, Flask (Python)
  • Revel (Golang)
  • Phoenix (Elixir)
  • Finch (Scala)
  • Vert.x (Kotlin)

I think that sticking too much to one framework is a big disadvantage, so avoid a such attitude like "I only want to do Ruby on Rails" and stick to a "modern framework." If that's the case, then let's try anything," I think it's better to try various frameworks with a flexible attitude, and you'll be able to obtain more knowledge.

Cache/NoSQL

  • memcached
  • Redis
  • DynamoDB
  • Cassandra

I think it is better to have some knowledge about NoSQL services on various clouds.

REST API

I think it's good to understand the REST-like API definition method and the tools used there, and the API definition method that almost follows the REST guidelines.

No comments:

Post a Comment

MySQL vs PostgreSQL

What is Mysql? MySQL is the world's most popular DBMS - it is used by 39% of developers in 2019. MySQL is a fast, reliable and versa...