General Questions:

How did I start?

I started with QuickBasic to develop DOS applications. After a while, I switched to developing applications in C language. After releasing VisualStudio 4.0, I also changed the environment and started to develop Windows applications.

What topics did I study?

Since I started to use my first computer, I was very interested in learning programming and gaming. So, I chose this way and graduated in Hardware Engineering in 2009 and got my Associate’s Degree. Then I continued to study in this field and graduated in 2012 and got my Bachelor’s Degree. And after a while, I started my Software Engineering Master’s Degree in Computer Science. Then I lost some of my close friends and as it was a hard time for me, I didn’t join classes. After about 4 years I decided to continue and finish my MSc.

But, self-study was the key to learning everything that I needed. Some of the hardware engineering topics that I studied by myself:

  • Microprocessor Programming
  • PLC Microcontroller
  • Robotic Arm
  • Humanoid Robot Simulation
  • ARM-based embedded boards
  • AVR Microcontroller
  • Industrial Networks
  • Aerospace Robotics
  • Sensors and Detectors
  • Signal Processing

And some software engineering topics:

  • Image Processing
  • Web Development Topics
  • VB.Net
  • Serial Port Programming
  • Software Engineering Architecture
  • Software Reverse Engineering
  • Voice Recognition
  • Windows Application Topics
  • C# and C++
  • Network Applications
  • Security and Cryptography
  • Hardware Reverse Engineering
What topics did I work on?

Somehow, all of the topics were useful for me but I really feel succeeded in web development topics more than in other fields. So, as I enjoyed this topic, decided to be more focused on this field.

What topics I am interested in?

As the software knowledge is extending every day, I really feel the need of learning new things. Web Development is still the best but as I felt the need, these fields are my new interests:

  • Machine Learning
  • Cryptography
  • IPFS
  • NFT
  • Image Processing
  • Smart Contracts Development
  • Metaverse
  • Blockchain-based Platforms
What projects did I participate in?

I’ve participated in many different projects but as I remember some of the old projects:

  • Booking Website: Hotel and Ticket
  • Car Rental Website
  • Parking Manager (UHF RFID)
  • Open Wifi Projects
  • Providing internet services Website
  • Taxi Platform (drivers and end-users)
  • Warehouse Management System
  • Real Estate Listing Platform

In the last few years, I have focused more on WordPress, so I was more involved in the development of plugins and themes:

  • WooCommerce-based Plugins
  • WordPress-Zapier Integration
  • WordPress-GoHighLevel Integration
  • WordPress-Agile CRM Integration
  • WordPress-Sugar CRM Integration
  • LearnDash LMS-based Plugins
  • All in One SEO-based Plugins
  • XML Sitemaps-based Plugins
  • ACF-based plugins
  • WooCommerce Integration
  • WordPress-Zoho Integration
  • WordPress-Salesforce Integration
  • WordPress-HubSpot Integration
  • WordPress-Keap Integration
  • Yoast SEO-based Plugins
  • Rank Math-based Plugins
  • Gravity Forms-based plugins
What challenges did I face?

The challenges that I am most involved with can divide into three main categories:

First: General challenges

1. Communication with the clients: In most cases, clients are looking for a new or updating their old websites that do not have enough knowledge about it. Researching for the client’s needs and preparing the right suggestions/solutions has always been one of the awesome challenges.

2. Communication with teammates: In most cases, communication with the team has not been challenging for me, but in my experience, sometimes people enter the team who cannot perform their defined and specific tasks for personal reasons. That’s one of the reasons that cause problems in the team. In some cases, this problem occurs due to the lack of accuracy in defining the tasks.

3. Updating and developing old systems: Sometimes systems are so old that solving their problems is so time-consuming. Implementing a new one will be more effective in terms of time and cost. But it is very difficult for the clients to accept this. Of course, business development and immigration from old to newer technologies also lead to such a challenge. That is why this has sometimes been a challenge.

Second: Technical challenges

1. Confliction: In large-scale or complex projects, it sometimes happens that some services or features are in conflict. Or when the client makes requests, and some requests are in conflict. In many cases, these problems can be solved by observing software engineering methods and creating an agile process. These are considered to be a challenge when this process does not exist or there is not enough time to go through this process.

2. Replacing a new technology: Sometimes it happens that a technology (programming language, library, package, etc.) becomes outdated and we need to migrate to a new system. So I need to implement the system’s maintenance steps step by step. Perform different tests on the test version, create a backup of the old version, and port the test version to the product version. Sometimes we need to convert the old data and move it into a new version so that the old data should be available in the new system.

3. Noises: Using unstable networks or low transmitting power will cause noise and this may interrupt the processing data and workflows.

What third-party services am I familiar with?
  • Zapier
  • AgileCRM
  • GoHighLevel
  • DocuSign
  • OpenStreetMap
  • Zoho
  • Keap (Infusionsoft)
  • Google
  • MapBox
  • Mailchimp
  • HubSpot
  • Salesforce
  • Amazon
  • Twilio

Technical Questions:

What operating systems did I work with?
  • DOS 6.2
  • Windows 98
  • Windows 2000
  • Windows 8.1
  • Ubuntu 18.04
  • CentOS 7
  • Symbian
  • Android 4.x
  • Android 8
  • iOS 13
  • DOS 6.22
  • Windows 98SE
  • Windows XP
  • Windows 10
  • Ubuntu 18.04
  • Debian 7
  • Android 1.5+
  • Android 5
  • Android 10
  • OSX 10.4+
  • Windows 3.1
  • Windows ME
  • Windows 7
  • Ubuntu 14.04
  • CentOS 5
  • Debian 8
  • Android 2.x
  • Android 6
  • iOS 9
  • Windows 95
  • Windows NT
  • Windows 8
  • Ubuntu 16.04
  • CentOS 6
  • Debian 9
  • Android 3.x
  • Android 7
  • iOS 11
  • Windows Mobile 6.x
  • Windows Mobile 8.0
  • Windows Mobile 7.x
  • Windows Server 2003
  • Windows Server 2012
  • Windows Server 2008
  • Windows Server 2016
What programming languages am I familiar with?

It always depends on the projects and platforms. I tried many different languages. When you program robots, you need to run your codes on small, limited hardware. Compiled program size, memory usage, and restrictions on access to registers have always been important. But in operating systems that exist on ordinary computers or large servers, these limitations are less noticeable. These computers are usually faster at processing data than small hardware, and there is usually no need to worry about data storage because we can always increase it. Increasing CPU size and power in small computers have usually been more difficult than in large computers. But in recent years, with the introduction of embedded boards with newer architecture, this problem has also been largely solved. The new compilers optimize by simplifying complex code, removing comments, and performing other operations, which helps speed up program execution, optimize memory consumption, and ultimately improve program execution. Regarding this, I tried:

  • GWBasic
  • VB.Net
  • Turbo C
  • BASCOM-AVR Basic
  • VHDL
  • VB Script
  • QBasic
  • C#.Net
  • C++
  • CodeVisionAVR
  • Pascal
  • Mathlab
  • VB 4+
  • Borland C
  • Java
  • Ladder
  • Delphi

And many other languages. These are the programming languages that I tried more than a decade ago.

What programming languages did I work on recently?
  • PHP
  • Angular
  • Node.js
  • MongoDB Query
  • Go
  • React
  • SQL
  • Bash Script
  • Python
  • Vue
  • CQL
  • R
Which Backend applications did I work with?
  • Apache HTTP
  • Varnish
  • MongoDB
  • Kubernetes
  • Gitlab CI/CD
  • Jenkins
  • RabbitMQ
  • Redis
  • Cassandra
  • Kafka
  • Open CI
  • GraphQL
  • MySQL / MariaDB
  • Docker
  • Docker Composer
  • Docker Swarm
What framework did I work with?

As you know, there are a large number of frameworks that can be used in web projects. Fortunately, because of the variety of projects I was involved with, I worked with many PHP and Node.js frameworks. The frameworks and CMSs I worked on professionally:

  • WordPress
  • PrestaShop
  • CakePHP
  • Slim
  • Express.js
  • Moleculer
  • Joomla
  • OpenCart
  • CodeIgniter
  • Lumen
  • Total.js
  • Drupal
  • Laravel
  • Symfony
  • FuelPHP
  • Loopback.js

I also worked with some of the frontend JS-based frameworks such as:

  • React
  • Vue
  • Angular
How familiar am I with writing tests?

Unfortunately, in many companies, due to the type of work, time limitations, lack of infrastructure, and knowledge, testing is usually not done. I was also involved in this problem for many years I worked as a developer.
In my opinion, preparing infrastructure for testing-based projects is one of the most basic things to do. This infrastructure helps to continue the system in the long run without a drop in productivity. On the other hand, the testing process helps to easily control the updates and changes and reduce human error.

My experience in testing is limited to PHP and node.js. In PHP I have used a variety of libraries for testing, but PHPUnit has been older, bigger, and has more special features for me than other libraries. In Node.js, I prefer to use libraries such as Jest or Mocha. But generally, I have experience in using these frameworks:

  • PHPUnit
  • Atoum
  • Puppeteer
  • SimpleTest
  • Jest
  • Vitest
  • Codeception
  • Mocha
  • Jasmine
How familiar am I with databases?

As I said before, the use of any software and technology in projects depends on the goals. Relationship databases are older than NoSQL databases and are usually more commonly used on a large scale. In some projects, due to increasing the speed of data transactions and the type and variety of data types, it is necessary to use other databases. For example, in messaging platforms, it is better to use databases that have high read speed. It should be noted that because this type of application does not require data sorting, you can use databases that do not support this feature. Cassandra can be used in this type of project. Similarly, there are other reasons for using other databases that after selecting the project objectives, the desired database or databases can be selected.

Most of the projects I was involved in, used only one database. I used NoSQL databases in a small number of projects where data speed and variety were important. In these cases, I usually used Cassandra if time-dependent data was used without the need for sorting, and MongoDB if it needed sorting and possibly a small number of relationships in the data. In general, MongoDB is a typical database that has all the features a database needs to implement any model of data. But Cassandra and several other NoSQL databases can be used if specific conditions are required. Of course, in large projects, conditions such as the possibility of clustering and the type of clustering are also important, and according to the importance of this condition, the database is selected.

I’m not a database administrator, so I have a general knowledge of database concepts and query writing. The knowledge I have in the field of query writing helps me to develop CMS, e-commerce, and messenger platforms.

As I mentioned I have general knowledge in using and writing queries with these database engines:

  • MySQL
  • MongoDB
  • SQLite
  • SQL Server
  • MariaDB
  • Cassandra
  • CouchDB
  • Neo4j
How familiar am I with cloud services?
  • Google
  • Amazon
How familiar am I with the file systems?
  • IPFS
  • HDFS