Programming has several branches, and it can be said that none of thesebranches has an end. Different technologies, ideas, tools, and architecturespread more quickly every day and we, as programmers, must always spendconsiderable time studying to stay in this strange world, otherwise, theacceptable knowledge that brings us good income today may not help us tomorrow.
In this article, I will give you examples of what concepts we need to befamiliar with as a back-end programmer, regardless of what platform andtools we use.
It is very important to master some of the above, but some cases mayonly be needed for projects with specific dimensions. Also, similar to thisarticle can be found in abundance on the Internet, and I will mention a summaryof them with my own experience.
1- Basics of network, internetand important protocols
Maybe we can write a small and cool app for ourselves or manage studentprojects without the knowledge of the network and the internet, but to build asoftware product in the real world, it is very important to master the basicsof networking and the Internet.
· TCP / IP protocol
· HTTP protocol concepts
· SSL certificates and HTTPSprotocol
· DNS service and DNSpreferences
· Familiarity with theconcept and function of Firewalls
· Familiarity with howbrowsers work
2- Basics of operating system
When we talk about back-end programming, we are talking about the lowerlevel of a system. A level that interacts primarily with the web server andsecondarily with your operating system. Consequently, an acceptable generalknowledge of the operating system is needed, both to write optimal programs andto avoid errors that we do not know where they originate.
· Familiarity with thegeneral use of the target operating system
(For example, if we do not know anything about working with Linux andhost our service on Linux, we will have a problem one day)
· Familiarity with theimportant commands of the target operating system terminal
· Memory Management (RAM)
· Manage storage and recoveryoperations (I / O)
· How the operating systemdeals with threads and possible synchronizations (Concurrency)
3- The main issue is masteringa programming language
All languages are good and each has its strengths and weaknesses .Instead of getting involved in switching technologies, go deeper into your technology.
There is a lot of debate on the comparison of programming languages, andeach language is always supported in different dimensions by its fans. However,these issues are not related to our main discussion and we can only say that wedo not have good and bad language. There are manyexamples of successful programs worldwide for every programming language.However a back-end programming can be done with one of the languages C #, php,Go, Java , Python, Node.js, and .....
There are many concepts that we need to learn the proper ways toimplement them in that particular language. Such as Error Handling strategies,Logging strategies, type of memory management in that language, and...
4. Git, the staff of every programmer
The requirement for a tool to manage the source code and its versions isso vital that I do not think a clarification is needed. From the simplest pointof view, providing a permanent backup of codes to more complicated sourceoperations, rollback, code splitting, and collaborative project teamwork, theseare obvious explanations why familiarity with resources such as github, gitlab,or TFS is important.
Even with very simple commands of git, we can cover a wide rangeof needs
5. Database, an integral part
Maybe if we were talking about mobile appprogramming, a brief introduction to small databases like SQLite would meetmany of our needs. When we enter the field of back-end programming, the issueof storing, maintaining, and providing customers with accurate and optimal datais almost equal to all the goals of the web service. A back-end programmer,therefore, needs to have a good mastery of databases from basics to design,optimization, query language, etc.
As a back-end programmer, we need to know howto use both relational databases and document-based databases or NoSql.
The structure of RDBMS is largely the same inmost instances of relational service databases such as MS-SQL, MySQL,PostgreSQL, and….
However, there are many options for NoSQLdatabases, each with its UseCases, and we should use them as needed.
6. We are going to write APIs, so we need toknow about APIs
When the output of our software is supposedto be a series of APIs, we need to know what APIs are and be very familiar withcommon architectures such as REST. If we do not write RESTful APIs, at leastwrite REST APIs. Relative familiarity with more unconventional methodologiessuch as SOAP is not without merit. Obviously, to implement APIs, you must befamiliar with the types of request content structures such as json, XML, forms,and so on.
APIs that are not welldocumented are completely useless. learn working with tools like Swagger to create metadatacontaining documents
7- Caching strategies; where optimism makessense
If we want to be a great programmer, we mustalso be prepared for the challenges of being a big system. One of thesechallenges is definitely the efficiency of the system when loading and hightraffic.
Where system optimization makes sense. Systemcaching strategies have different usesCases and we need to read about them andrelated tools.
Be familiar with client-side caching conceptsand mechanisms, and master server-side caching concepts and tools
8- Security, security, security
Having a vulnerable system does not pleaseanyone. Imagine the moment when you realized that due to security negligence,bad damage was done to the system you were creating, or even worse, because ofthese negligences, the business has suffered irreparable damage. Therefore, asa software developer, we need to be familiar with the basics of security andhow to implement it at different levels. Such as operating system, web server,database, the content of requests, SSL certificates, Hashing, and Encryptiondifferences and useful algorithms for each, security in the API layer, andsecuring requests (methods such as Basic, Oauth, Jwt, etc. )
9 – Delivery of untested service? Never!
The first tester of any program is itsprogrammer. Therefore, we must know different methods and strategies fortesting the system, with the aim that the test results are standard andreliable.
10- Webservers, the host of our system
Finally, the service we publish is usuallysupposed to be hosted on a specific web server (I say usually because manyservices can be self-hosted).
The web host server is closely related to oursoftware and certainly its configurations and policies can have a great impacton the performance of our system. Therefore, we must have anacceptable familiarity with the web service on which we hosted the system. Themost popular are IIS for Windows, Nginx, Apache, etc. for Linux.
11- At higher and more advanced levels
The amazing world of programming has no end,and when we get involved in more serious and bigger issues, sometimessimplicity does not answer our work. We need to be more familiar witharchitectures and design patterns. Architectures such as SOA, Microservices,CQRS Event-Based, etc., which have many applications in today's world to solvespecific problems. Who knows about tomorrow? :)
12- Operation DevOps, You must grin and bearit
DevOps is basically a separate specialty thatinvolves many processes for publishing code. Also, usually, DevOps responsibilitiessuch as configuring the required servers and services, direct distribution ofcode, etc. will be the responsibility of a specific person with thesespecialties.
Nevertheless, unfortunately, or fortunately,the responsibility for carrying out these processes in many small andmedium-sized projects lies with the back-end programmer. Therefore, it is notbad to have a relative familiarity with the concepts, tools, and servicesavailable in this field.
The last letter is taken from the first post
If you are a beginner programmer and recentlyentered this field, do not worry at all. You are not going to learn all theseconcepts and items in a short time and parallel and together and master all of them.These are stations in the Back-end programming roadmap and will be acquired ina considerable time. It is enough to have interest and perseverance and not gettired of learning.
If you are a skilled and relativelyexperienced programmer, please leave a comment and complete the content.