It's all about creative ways to interact with the computer
That's what it is. Talking the computer to do something in a language it can understand. Steve Jobs' described it as "the bicycle for the mind".
Why I'm advocating this is primarily because of the equalization of impact-creating opportunities that software empowers us with - right from the students in the dorm room to the juggernauts on whose efficacy our world depends.
That's enough chatter. I'll talk about 4 amazing paths you can explore in this domain & will be sharing resources for the same.
More than anything, remember to give any learning experience an honest try before figuring the scope it carries for you. Never outright reject anything as an uninformed choice.
So here they are - Software Engineering, Software Development, Data Science, Newer technologies
Solve complex problems using code & math
Q. What do they do on a daily basis?
Algorithms, in the most broad sense. Efficiency, speed & optimization. Great examples of this would be route optimization for the Amazon delivery vans, speed of transaction in netbanking services, encoding & compressing large files when storing them or loading them - to save internet bandwidth. If you're curious about the inner workings here, read on.
Software Engineering, is that career path, which will require the most solid foundations in Computer Science - courses such as Data Structures & Algorithms (DSA), Object Oriented Programming, Database Management Systems, Operating Systems, Networking, Security - are really important here; primarily DSA.
DSA can be best compared to a building construction. Say you want to construct a large building. You get an "input" of cement, steel & other building materials. Now, you take all this "input data" i.e. building materials and arrange it into a tall "structure". This might take more time to build since workers have to build at a height but it'll occupy less floor space. Finally you define an "algorithm" aka a series of steps that will take this structure and interact with the data inside it to offer functionalities such as, in this case, shelter, sanitation etc.
Alternatively, we could have still built a really large building, by building it as wide as possible. This would be faster as multiple parts of the building are built in parallel, but it takes up more space. The end "output" in both solutions is still a large building, it's just a different approach will have different tradeoffs.
And that's what a software engineer does. They take any of the world's problems, map the data involved in this problem into an efficient structure & write algorithms to offer functionalities on top of these structures.
Eg : Waiting for your number at a fast food restaurant? They've put all orders in the data structure - "queue" which offers the "first in - first out" property, by its nature. Struggling to see which course is a prerequisite for which ? Arranging the courses into a "graph" helps understand how they interact with each other.
Thus, competitive programming - the process of competitively coming up with the best solutions to problems using DSA, is a great way to flex those thinking muscles. In terms of languages, you can choose to master any, although usually, a more low level language like Java or C++ is recommended to begin with, since they solidify your foundations really well on how each component works.
To know more - checkout T5E, IITM's blog on the same
Free resources that will help you grasp these concepts well are :
Build apps with code
Q. What does a software developer typically do?
Build apps that we know and love each single day. Right from the button on the screen to the 5TB data being stored.
Software Development is the art of looking at a problem, breaking it down into solution features & coalescing them into a useful application that can be used by someone to do a job better. Eg : Can't order food at 3am? Swiggy it. Can't find a cab? Uber/Ola. Instant communication? WhatsApp.
Building, improving & fixing errors in these apps, also called as SaaS (Software as a service) is the role of a software developer. The simplest piece of software has 2 ends to it - a frontend & a backend.
A "frontend" developer, works on the user interface from the buttons you click or the inputs you fill to live messaging & video streaming - on a website, a mobile app or that tiny display of your smartwatch. This frontend interface - basically anything that a user can see or play with - is colloquially called "client".
A "backend" developer, typically works on the business logic & the data being shown & exposed for interaction by the frontend. Eg : Calculating your bank account balance & breaking it down into spending categories such as food, TV, shopping etc. - details that are later shown on the "frontend". All the data for such logic is stored in a "database" (think of it as a collection of tables where each table is our row-column entry table). If I were ICICI Bank, I would have a "users" table, storing all information such as name, address, etc. of app users, a "transactions" table, storing information about transactions between accounts.
We write code on a piece of machine that takes this data from "database", performs some logic, and "serves" it to the client, hence, it is called the "server".
APIs - An important term here is API or Application Programming Interface, which is a common medium of communication between client & server. The best way to understand it is this - You are at a restaurant as a "client". You ask the waiter for something "spicy". The waiter understands what you said and relays this "request" to the chef. The chef searches the "vegetables" table for spicy options & fetches the stored "data" (ingredients) & performs some logic on them to cook up a delicious chilli soup. The chef acts as the "server" of this soup as a "response" to the "client's" "request", which then the waiter relays back to the client. If you caught on the analogy, the waiter is the API - an interpreter of messages offered by the server, that helps a client communicate with the server & get what they want.
Cloud Computing - As you build bigger applications, you will realise the need for more compute power, better fault tolerance & faster experiences for your customers. This is when you move to cloud computing - running your logic on someone else's servers. Kind of like giving your chilli soup recipe to a chef in France so that you can even serve a French customer really fast & charge them for it. Checkout our blog on cloud computing for more details.
Finally, since you'll hate repeating work - you will explore things such as DevOps - Developer Operations - to automate app rollouts, app testing, recovery from crashes & more.
Trust me, the more projects you build, the more fun it becomes. You have to be patient at the start, but this skill gives an all-round view of everything around building a software company from zero-to-one - a very powerful tool in your belt.
Here are some great channels and resources to help you get started with your journey :
Derive valuable insights from data to make effective decisions
Q. What does a data scientist do ?
Ideally, the job is to derive useful insights from really large amounts of data, that is important to make business decisions. It could also encompass automating this process by training a machine to analyze the data & suggest a step-wise method to increase chances of success. Want to unlock a phone ? How about scanning your face, mapping it to studied images of you to verify if its you & then unlock. Bored of browsing endlessly ? How about a recommendation algorithm to help you pick your tshirt to buy or movie to watch ? All this is possible through data science.
As we saw the advent of data, particularly with the rise of internet over the past 2 decades, it became a really important source of truth about how customers were interacting with your SaaS and how you can use valuable information from this data to build better features to provide better experiences to your users.
And as time went on, humans became lazier & so they "programmed machines to learn from this data" and suggest the next steps. That is what we call "Artificial Intelligence" today.
This, field requires good amount of understanding in Matrices, Statistics & Linear Algebra, since the entire framework is dependent on these 3 topics.
In the broad sense, what you usually do in software, involves "input" and your function that spits out an output. In machine learning, however, it involves having an "input" & "output" and the machine learning from the trend in multiple input-output pairs to spit out a function that reasonably maps an input to an output well.
A while back, I'd written a comprehensive blog on Machine Learning to understand & compare various algorithms and their applications.
There are some great industry-accepted frameworks such as TensorFlow (developed by Google), Keras, PyTorch - names you might have come across. These are nothing but ways to actually use best practices to prevent reinventing the wheel each time you want to solve an ML problem
Here are some useful resources (you should definitely do the 1st one)
More specific fields...
While the above 3 topics cover most of what is involved into coding, there are certain more specialized fields evolving, such as "blockchain", "ethical hacking" that have their roots in software engineering, but are starting to branch off as separate paths.
Typically, as a blockchain developer, you'd be writing code called "smart contracts" which is nothing but contracts that have trust so inherent, that they will fail as soon as trust is breached.
In a career as a cybersecurity engineer, you'll not only test & make your system fault tolerant, you'll also come up with methods to find possible vulnerabilities before they're rolled out.
⭐NOTE : Fun fact - Netflix built something called the "Simian Army", a set of code servers that continuously battle against Netflix's system, to improve its performance.
Here are some resources that can help you get started here :
This was the exhaustive set of resources through which anyone can get started with coding, irrespective of their background. It is difficult & frustrating to get used to 40 open Chrome tabs, a flood of feature requests & bug fixes, but the fulfillment majorly lies in having solved impactful problems.
In fact, fun thing is, you won't be coding as much as you will be making detailed plans & diagrams for landing upon the most efficient solution. My colleague used to say "20% of time invested in planning, saves 80% of the time while coding"
You gotta walk before you run. You'll search a lot, teach yourself a lot - now that's a superpower. You'll run the code, it won't work. You won't stop though. If anything, this art teaches you patience, that's for sure XD
while(!(succeed = try()));
Until next time.....