Discover Your Domain

Discover Your Domain

An introduction for newcomers regarding the various technical domains that they should explore

When I was new in the tech world, I was time and again advised the same thing, that is, to explore all the various domains available to see what all things I take an interest in, hence allowing me to start my developer journey.

I too have given the same advice to various others, newcomers and veterans alike, but have only just recently figured out the flaw in this approach.

Even after people get to know that they need to explore stuff, they get stuck on the crucial question of "What all domains are there to explore in the first place?".

This is something that is not covered a lot for newcomers for some reason, hence in an attempt to help out all the beginners in tech trying to figure out their interests, I have decided to write this blog which would contain a brief overview of all the major domains.

Benefits of Exploring?

As a developer there are various benefits of exploring and experimenting with different domains, of them, the most important is the fact that it allows one to understand exactly which branch of development are they most interested in and hence best suited for.

This will allow you to have a headstart in your journey as a developer as you would be able to focus your learning towards your interests more, any developer that works on a field of their interest is always guaranteed to excel because in that case you would be learning and doing things because you find it fun and interesting instead of because you need to.

The difference between "Want to learn" and "Need to learn" is what separates a great developer from a good one.

Another advantage of exploring domains is that let's say even after finding your interest you continue exploring the other fields (which is highly recommended btw), you might end up finding that you are interested in multiple fields instead of just one! If so, you could become a developer that is capable of working on multiple fields instead of one! This will make your reach in the developer community way stronger as you would be able to fill multiple roles in different organizations.

Moreover, even without interest, having a basic knowledge of the various fields and how they can work together is immensely helpful in the long run.

This process of exploring will help you to diversify your skills as a developer and at the same time also allow you to select the field(s) you would like to specialize in and build your career around.

How to Explore?

Let's say you pick up a single domain randomly, if you find it intriguing then great! You're extremely lucky that you were able to find your interest so quickly! In a majority of cases though, the process is not as simple.

A majority of the time you will only be interested in a very specific set of fields, what those fields are can only be figured out by trial and error.

You can think of the process as either "selecting fields I am interested in" or as "removing fields that I am not at all interested in". Both these approaches work while trying things out to understand if it is something that you are willing to spend your time and energy learning.

Even after going through some fields, if you are still unable to find your interest, KEEP GOING, you don't need to have an interest in ALL the fields, you just need to find your interest in ONE out of so many. So don't get discouraged and feel that being a developer doesn't suit you just because you haven't found your interest yet.

In my opinion, to explore a domain, you would at least need to spend about a month working on that domain and going through resources and projects/work regarding it.

If you spend less than about a month, then that simply means that most probably you have rushed through the domain and haven't delved deep enough to understand why that domain is important, what all things you can do with that, what all you would have to learn to work with that and what are its future scopes, so at least spend a month with one domain at a time, or at least genuinely try to, if even after a month you have no interest in that field, better to drop it for the time being and move on to the next one.

If you spend more than a month, well, that is mostly because you have grown an interest in that particular field and that is amazing! If after a month you don't want to quit working in that domain then congratulations are in order, as you have found your domain!

The most important advice would be to not waste a lot of time going over the theoretical concepts initially, but rather work on hands-on practical projects which you find COOL in that particular domain, or you can simply filter your domains based on what projects you find cool in the first place. Your developer journey needs to be fun and working on cool things is just the way to do that.

What Resources to Follow?

For each domain there would be different specialized resources for you to learn from, moreover, everyone has different ways of learning, some learn faster through videos, some through blogs, others through documentation etc.

But as a starting point, I would like to direct all developers, both new and old, to one of my favourite resources for learning anything tech-related, FreeCodeCamp.

FreeCodeCamp has articles and videos covering a huge number of topics across almost all if not all the domains! Just go to their channel and search for whatever tech or domain you wanna learn and I can bet there would be an amazing resource available for that.

Other than that feel free to look for resources on your own, I intend to write blogs covering each of the domains I discuss individually, but that is in the future, if you are reading this way after this was published, I suggest you go through my other blogs to check if I have covered your area of interest or not.

What Domains to Explore?

Now that we have discussed "why" and "how" you should explore different domains, time to get into the crux of the matter and start discussing these domains individually!

Another thing to note would be that all of these domains allow one to make a good amount of money and for the most part, the difference between them in terms of future payments is extremely less, so don't worry about that while making your initial decisions. All these domains offer amazing future opportunities.

Let's get started then!

Web

Web development is one of the most heard and popular domains in tech nowadays, mainly because it is so easy to get into and start with. It primarily deals with website development but in recent years has also started being used for other applications as well.

Moreover, web development is a field that can be used to complement any other tech field, it's a great way for building a UI (User Interface). Moreover, you will only understand the importance of a good UI once you transition from working on a project to a product instead, this will come way later.

If you want to get into web development you will have to learn things such as creating the website that users will interact with on the frontend, designing and styling the UI, and creating/managing the backend that will provide your website with data to be served to the user via APIs, managing the database and other components.

You won't have to do ALL of the above-mentioned things to be a web developer though, you could just work on parts of it if you want, such as frontend web developer, backend web developer and in case you DO want to learn all of it you would be what's called a full-stack web developer.

Some example technologies you should learn:

  • Html, Css, JavaScript

  • MERN, Other stacks and frameworks

  • Python, Django, Flask, FastApi

  • Golang, Gorilla/Mux

  • Tailwind, MUI and Other designing frameworks

Mobile App

Mobile app development in some ways is pretty similar to web development in that here instead of creating a website that users will interact with, you would be creating a mobile application instead.

Though here there are distinctions between methodologies and paradigms such as do you want to build native apps (which are specific to the platform you are building for, android/ios and are extremely optimized) or cross-platform apps (which can be platform-independent and can work on all platforms but lead to some performance issues).

Again here too you don't need to learn everything to become a mobile app developer, you could be an android developer, ios developer or a combination of both as well if you want or just use cross-platform development methods instead.

Mobile apps are an alternative to the web in terms of providing a UI experience to users, these two are the only major methods of having a UI for any piece of software or technology that you end up creating.

Some example technologies you should learn:

  • Dart, Flutter

  • Java, Kotlin

  • Swift, Objective-C

  • Jetpack Compose

Blockchain

Blockchain is a field that has in recent years been growing at a rapid rate, it is one of the most recent fields in tech and is currently blooming a lot, even though most of it is still under experimentation.

The entire concept of blockchain is "decentralization" i.e. moving away from a centralized system where there is a single source of truth which if altered could lead to catastrophic results as only a single body or person would be in control of such a centralized system, no one would be able to keep a check on them. On the contrary, a decentralized system is open to anyone and everyone albeit with some exceptions so all members can keep a check on each other and validate all changes to data and information. This is implemented via blocks of updates being connected forming a chain, a chain of blocks i.e. blockchain.

It is also essential to up-and-coming concepts such as BitCoins, NFTs and Web3 which are completely based on decentralization via blockchain.

You would be required to work on smart contracts for the most part and ensure integration with the web, i.e. knowledge of web development would be required to work with blockchain for the most part hence it's recommended to learn that first if you want to work on this.

Some example technologies you should learn:

  • Solidity

  • Truffle, Ganache

  • Ethers, Tools to connect with web frontend

Machine Learning

Machine learning is another such field that in recent years has taken the world by storm and is showing no signs of slowing down in the near future either. New work is being done on this every day and is a rapidly progressing as well as a promising field for both developers and researchers alike.

It deals with exactly what the name implies, ensuring that a machine can "learn" and be able to do things using this learning on its own without external intervention. It aims to provide machines with "intelligence" hence allowing them to "think" and make appropriate decisions based on their current situation.

AI (Artificial Intelligence) is a set of which ML (Machine Learning) is a part, there are various techniques to train these machines referred to as "models" ranging from supervised and unsupervised algorithms to further delving into ANNs (Artificial Neural Networks) and their variations for various tasks such as computer vision, natural language processing, generation etc.

Data science is another field that is directly or indirectly related to ML itself, it requires additional knowledge of math, statistics and probabilities as well on top of knowing ML.

You would be required to work on designing and optimizing various models, implementing new algorithms, processing large amounts of data, analyzing and visualizing lots of data etc.

Some example technologies you should learn:

  • Python, R, Julia

  • Sklearn

  • Tensorflow, Pytorch

  • Matplotlib, Data analysis and visualizing frameworks

  • Scrapy, BeautifulSoup, Data scraping frameworks

Cloud Computing

Cloud computing is a field that in recent years has become a necessity for any organization that is even remotely tech-based. Cloud is the future and the world has already started to move towards cloud-based solutions for their needs it has already become an integral part of our lives, knowingly or unknowingly.

On a basic level, it deals with using someone else's hardware to run your software instead of using your own over the web, so instead of running a server on your system, you would instead run it on someone else's system. This is mainly done in the form of cloud providers that offer hardware on "rent" for use by others, as it's not feasible to purchase massive amounts of hardware when required. This enables the use of various cloud-based technologies that are always up and running and ensure the safety of your application.

You would have to work on things such as IaaS, PaaS and SaaS and manage the entire infrastructure of your organization as a cloud architect and ensure that everything is working smoothly on the cloud and make appropriate improvements as and when requested or required.

Some example technologies you should learn:

  • GCP, AWS, Azure

  • Serverless, Cloud functions

DevOps

DevOps is another field that in recent years has garnered a lot of attention in the tech world, this is because it attempts to create a system and practices that ensure timely completion of code work by developers along with its deployment all the while trying to automate as many things as possible to ensure minimal human intervention in the entire process.

You would be working on building pipelines for CI/CD (Continuous Integration/Continuous Deployment or Delivery) which would automate the entire process of building and testing the code and then deploying it to cloud servers all the while maintaining the scalability of the project as well as maintaining the cloud infrastructure using IaC (Infrastructure as Code) concepts and monitoring the metrics of said infrastructure.

Some example technologies you should learn:

  • Python, Golang

  • Docker

  • Kubernetes/k8s

  • Jenkins

  • Terraform

  • Ansible

UI/UX

UI/UX stands for User Interface/User Experience which deals with how a user would be interacting with your application, primarily with the frontend. It aims to provide a fun and smooth experience to the users of the application in an attempt to get them to use the application more by improving its "beauty" and "presentability" all the while keeping the user's comfort at the highest priority.

This one requires the least amount of technical experience of all, instead, it is more inclined towards designing and styling different applications and is more favourable for those who are artistic by nature i.e. can display artistic creativity and capabilities.

Some example technologies you should learn:

  • Css, Styling frameworks

  • Figma, Designing tools

Game

Game dev is one of the most interesting domains on this list because let's be honest, who doesn't like playing video games? Since the world has started accepting games as a new form of entertainment media, demand for this field has skyrocketed along with it.

You would be working with a team in which there would be really few developers alongside you, as most of the people would instead be required for things such as animation, design, story etc. Your role would be to implement the gameplay mechanics and the logic behind all of it.

Some example technologies you should learn:

  • C#, Unity

  • C++, Unreal Engine

IoT

Internet of Things or IoT for short deals with how we can use software and integrate it with hardware, i.e. how smart systems work and how they can be improved further. There has been a lot of work on this in the past few years so much so that IoT devices have become commonplace in our lives and our homes.

You would be working with hardware a lot and spend time tinkering with it all the while thinking of new and creative solutions to problems that can be solved using such smart technologies and automation.

I'll also be including embedded systems into this very domain as well because to an extent both are conceptually interlinked to each other in terms of theory as well as for many practical purposes too.

Some example technologies you should learn:

  • Arduino

  • Raspberry Pi

  • Python, Automation and scripting technologies

Cyber Security

Cyber security as a field deals with finding vulnerabilities in software and hardware to exploit them which in turn can lead to various issues such as data theft, security breach, unauthorized system access etc. I.e. this is the field one would follow if one aspires to be a cybersecurity specialist or penetration tester or in simple words, a "hacker".

We aim to destroy/break into a system in cybersec, they why include it in a list of development fields? Simply because in order to break into or destroy a system you first need to understand how that system works internally hence development knowledge is crucial because, for the most part, you would be exploiting bugs that developers failed to remove either by mistake or by choice.

You would be working on the entire workflow of a security analyst ranging from reconnaissance/data gathering to finding vulnerabilities, creating exploits, using those exploits, gaining access to the system, escalating privileges, doing whatever you wanted to do, setting up backdoors and listeners then finally removing all your traces. All of this requires immense knowledge of scripting, networking and Linux.

Some example technologies you should learn:

  • Linux

  • Python, Ruby, Scripting languages

  • Various tools and frameworks for attacking systems

Other Fields?

Various other fields still exist apart from these as well, but for the most part, those are simply combinations of the above-mentioned fields or only include some minor additions to a field.

The above-mentioned fields are for all purposes the most important and major fields in the tech world as of now and will also continue to be so in the foreseeable future.

Special Mention

This blog is inspired by the GDSC (Google Developer Student Clubs) of our institute of which I am a Core Team Lead, we organize an introductory session every year for the freshers of the same name "Discover Your Domain" and inform them about all the various domains with some basic insights into each of them so that they could kickstart their developer journey as well.

I also urge other college students to host such sessions in their colleges as well since they are extremely helpful and important for newcomers.