Inclusive software engineering
3 subscribers
6 links
This channel is made so that anyone can take up software engineering. Even if they are non-engineers who don't have basic math knowledge but want to learn basic math and software engineering fundamentals. Stay tuned for actionable tips and guidance
Download Telegram
Do you want to know how to follow tutorials better?

Here are some 2 tips that you can follow to improve your learning experience while following tutorials or courses.

Tip #1: Don't just listen and see, follow the tutorial instructor

If you have time to follow the instructor, then definitely follow him/her. This will give you better insights and learning on how to apply what you are just learning. The point is to just follow EXACTLY what he/she does.


Tip #2: Innovate after a video or a section is over

Once you have followed the tutorial well, either by listening or preferably doing it along with the instructor, it's time to do it yourself. Think of what modifications you can make. It can be as simple as changing the value of a variable and running the code and as complex as changing an entire class structure. The point is to innovate and do something that the instructor didn't do with the knowledge that you learned. This will not only improve your coding skills but will also improve your creativity and in a very small way also train you to use software engineering skills for your use case. Which is exactly what companies pay for these days.

Did you find these tips useful? If so then hit the like button and subscribe to this channel if you haven't already :)
Do you want to know which programming language you should start learning as a beginner?

Starting with the right kind of programming language can literally be the ace in the hole. The thing that can fast track your programming journey and help you land jobs and be very good at adapting changes in programming too. And money only goes to people who are good at adapting to this industry.

Then consider the following:

1. Will learning the programming language enable me to learn other programming languages more quickly?
A lot of people just start directly learning something like HTML, CSS, or even Javascript as their first programming languages. That is fine, but in this day and age and in this industry, versatility is the key. You need to be jack in many things, or capable of being jack in many things and master what is required.

Why? Because you don't know when you have to work with something that you never even dreamt of.

Personally, I have worked with Python in AI research, then jumped to pure Python programming and development, but then I made a switch to full-stack development. In full stack development, I was working with C#, and then after 1.5 years, I had to switch to Java. I have seen more programming languages than I have worked on big projects frankly. And yet I was able to keep up.

Why? Because my first programming language experience allowed me to pick other programming languages more quickly. Read the post till the end where I will disclose which programming language helped me learn other programming languages.

2. Is my choice of first programming language popular? Or enable me to learn popular programming languages?
Now this is a very crucial question. These days three of the most popular programming languages are: Java, Python and Javascript. Due to this, many people start taking up Javascript. Now is Javascript a good choice for a beginner? My honest answer: NO, PLEASE NO.

Why am I giving you such a strong answer? Is it because I hate this programming language? NO.

Then why? Because Javascript is good at its place but isn't a great programming language for a beginner in my opinion. It will not enable you to truly understand how programming languages work and how to best work with them. And it will confuse you when you start working with a programming language like Java or C++. So, in my opinion, if your choice of programming language isn't that popular then its fine. It should be decently popular and allow you to learn other programming languages.

Some decently popular programming languages are: C++, C#

So, based on these two questions, my advice for absolute beginners in programming is to start with C++. Not saying you have to become advanced with it, but to the point where you can work with objects and templates(don't worry if you don't know these terms yet, its okay).

My first programming language was C++. And after that, I never felt any resistance to learn other programming languages. Why? Because learning and practicing basics of C++ will enable you to work with other object oriented programming languages like C# and Java, and also enable you to easily learn simpler programming languages like Python and Javascript. No programming language would feel difficult after learning C++.

If you liked this post, please share some love by reacting or commenting on how this helped you. Also, stay tuned for more!
👍1
FREE EBOOK GIVEAWAY

I have worked with Python in AI research and got a research paper published in Reinforcement learning, the very thing that drives ChatGPT, have contributed to an amazing pure Python based open-source project, I have been working as a full stack developers for 2+ years now in the best companies in the world and have been getting offers from other companies from time and time again! (Check my linkedIn profile if you don't believe me!)

Why am I sharing all this? Because I want to share why have I been fortunate to gain this kind of experience and skill. It is because of three things: Foundations, Consistency and Practice. And I have culminated all my knowledge and tips in one eBook.

If you are a non-engineer or a non-CS graduate who is looking to enter this field. And not only get a job but become so desirable in the market that offers come to you, then I have an eBook ready for you.

If you want to get this eBook
, then all you have to do is give just 5 minutes of your time to do the following:
1. Subscribe to my YouTube channel (link here).
2. Subscribe to this telegram channel.
3. Fill this survey form (link here).
4. Connect with me on LinkedIn (link here) and share me the screenshots of you following me on YouTube and Telegram and that you have filled the google form.

Do the above 4 steps, which will hardly take less than 5 minutes, and the eBook will be yours!!

I am sure that if anyone, and I repeat anyone, diligently and consistently follows the eBook well, then they will be able to not only become good in software engineering, but also get a job and eventually have job offers coming at them :)

SO, WHAT ARE YOU WAITING FOR? In just few clicks, you can get the breakthrough in this field that you want! Hurry now :D
Inclusive software engineering pinned «FREE EBOOK GIVEAWAY I have worked with Python in AI research and got a research paper published in Reinforcement learning, the very thing that drives ChatGPT, have contributed to an amazing pure Python based open-source project, I have been working as a full…»
🚀 Discover the Power of Algorithms and Data Structures! 💻🔍

Hey there! As a beginner in software engineering, it's time to unlock the secrets of algorithms and data structures. 🌟 These foundational skills are crucial for efficient, scalable, and elegant code. Embrace the challenge, explore their significance, and unleash your potential as a problem-solving wizard! 💪💡

Dive into the algorithms and data structures world. You can do the following for getting into these topics:

1. Theory: First you have to go through the theory. There are many resources out there for algorithms and data structures. But here is one of the classic and one of the most effective playlist https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb

2. Practice: After you have gotten some hold over theory or let's say you are learning theory but you also want to practice too, then you can look for the websites like: hackerrank, leetcode, codechef, geeksforgeeks
My advice on how to start your programming journey is:
1. Learn a programming language like C++ or Java(my vote to C++) as your first or one of the first programming languages.
2. Actually practice using the choice of your programming language chosen in step 1. By practice, I mean get some problems that get you to use the programming concepts that you learned. Practice is the key in this field.

This is what I suggest to my mentees as well. Because in the short run you may learn Python easily I agree. But, in the long run, its much more advantageous to have an initial experience with a programming language like C++ or Java.
Are you learning something new in coding? Instead of just starting with a course or working on a project immediately, its more advantageous to set your goals.

How to set your goals?
1. Write down your goals
2. Be very specific and realistic with your goals
3. Keep reminding yourself of your goals every time before you start working on them.

Doing the above will increase your chances of completing your goals that you set for yourself. Because you are making your mind see that these goals are important.

Lets see some examples.

Examples of non specific and unrealistic goals:
1. I will learn all of Python: This goal is not specific
2. I have no experience with programming. I will learn programming in one month only and get a job: This is unrealistic.

Examples of specific and realistic goals:
1. I will start learning math foundations for software engineering till the main topics of permutations and combinations and logarithms in 6 months time: Specific and realistic goal
2. I will learn programming from scratch, get experience with building software and get a job in this sector within 2 years time: Specific and realistic
3. I will learn Python programming with 100 assignments and learn how to build basic backend infrastructure in 6 months time: Specific and realistic.

I hope you liked this advice. If you did, then like this message and subscribe to this channel if not done already!
If you are beginning in this journey to become a software engineer, and lets say that you are a non engineer, then the below are the two things that you may lack:
1. Clarity on how to start
2. Math foundations

You have to get good at both of them to have good foundations. So that you become a great software developer in future!

I will add on both the points in future posts. Stay tuned!

P.S: This is a short excerpt from my upcoming book.
What is open source?

Open source refers to a specific approach to software development where the source code of a program is made freely available to the public. This means that anyone can view, modify, and distribute the code as per the terms of the open source license.

Contributing to open source not only improves your skills as a developer, as you get to work with great developers, but your profile also improves and becomes desirable in the marketplace.
I have met two people in this industry who switched to IT.
1. One of them didn’t focus on the foundations and just got in for the sake of it. He usually gets stuck at many places when given work outside his direct expertise
2. One of them focused on learning foundations while switching, along with learning specific skills. He is very adaptable in the job and often helps people get unstuck.

Now, which of the two do you want to be? It’s obvious, the one who has strong foundations. Because flexibility and long term stability is greater than just knowing a skill in this field
When you are working on gaining skills in this industry, you don’t just need hard work alone. You need to do the right kind of work.

This includes working on all the three:
1. Practice: How much are you practicing for each skill or part
2. Technique: How are you learning the skill or how are you practicing
3. Discipline: How regularly do you practice the required skills

Working on all three becomes important when growing your skills
Introduction to Algorithms and Data Structures

Algorithms and data structures form the backbone of software engineering and are essential components for building efficient and reliable software systems. An algorithm can be thought of as a step-by-step procedure or a set of instructions designed to solve a specific problem. Algorithms are like recipes that guide the computer in performing tasks and making decisions. They are fundamental to the field of computer science and are used to solve a wide range of problems, from sorting a list of numbers to searching for information on the web.

Data structures, on the other hand, are mechanisms used to organize and store data in a computer program. They provide a way to efficiently store, retrieve, and manipulate data, ensuring optimal performance and scalability. Think of data structures as containers that hold data in a structured manner, such as arrays, linked lists, stacks, queues, trees, and graphs. Choosing the right data structure for a particular task is crucial, as it can significantly impact the efficiency and speed of the algorithm that operates on it. Understanding how to select and use appropriate data structures is vital for designing efficient and robust software systems.

As non-engineers aspiring to become software engineers, delving into the world of algorithms and data structures is a key step towards gaining a solid foundation in software development. By learning about algorithms, you'll acquire problem-solving skills and gain insight into how to tackle complex tasks methodically. On the other hand, understanding data structures will empower you to efficiently organize and manipulate data, leading to more efficient and scalable programs. With algorithms and data structures as your building blocks, you'll be equipped to write clean, optimized code that can solve real-world problems. So, whether you want to create mobile apps, develop web applications, or dive into artificial intelligence, a strong grasp of algorithms and data structures is an indispensable tool in your software engineering journey.
For all the beginners here, learning programming languages and frontend like HTML, CSS and stuff is fine. But you also need problem solving skills to be really good in this field. This is the bare minimum. And you also need some programming foundations to go ahead in this field.

A neat way to develop both is to learn algorithms and data structures topic. Learning this topic will not only hugely enable you in terms of the minimum foundations for software engineering, but it will also help you gain problem solving skills, once you start practicing questions around this field.

A good way to learn algorithms and data structures is:
1. Learn the theory parts of algorithms and data structures first. For this, you can learn from MIT's algorithms and data structures free youtube playlist. You can also check out their assignments, but that is too mathematical in my opinion(nothing wrong in that, its just that not everyone wants to go that deep, which I understand)
2. Practice the topics of algorithms and data structures that you learn on websites like leetcode.

Not only your problem solving skills and foundations become clear, but it also makes you capable to clear coding interviews in big tech companies. Also you don't have to learn highly advanced topics or just learn algorithms and data structures and nothing else. Its more like you have to learn the bare minimum topics that everyone in this industry expects you to know and have enough practice on those topics!
Let's see what is backend in a website.

The backend is a part of a website that works behind the scenes. It's like a helper that does all the work that you can't see when you use a website.

Let’s first take a real world example: Let’s say you go to a restaurant. The place where you sit, order food and eat is the frontend. Its what you see.
But the kitchen, where your order goes, is cooked and then sent towards you, that is the backend.

Now, lets transition to an example which is technical: When you fill out a form on a website, the backend takes that information and checks if everything is okay. If it is, it figures out what to do next, like how to save the information you entered or how to show you something new on the website.

The backend is important because it makes sure everything on the website works correctly, even if lots of people are using it at the same time. Without the backend, the website wouldn't be able to do much at all!

Let’s see with an example:
Imagine you're using a website to order a pizza online. You fill out a form with your name, address, and pizza toppings, and then click "submit."
Sure, I'd be happy to simplify that part further.

When you click "submit" on the pizza order form, the website sends the information you entered to the backend. The backend then looks at the information you provided and checks if everything is okay. For example, it makes sure your address is in the delivery area and that the toppings you chose are available.

If everything is okay, the backend uses that information to figure out how much your pizza will cost and how long it will take to deliver. It does all of this behind the scenes, without you seeing any of it.

Then, the backend sends a message back to the website's frontend with the information you need to know, like how much you need to pay and when your pizza will be delivered. The website's frontend then displays that information to you.
Steps to understand a new project (open source ones are more applicable):

1. Read through the high level description of what the project is all about and what the software does.

2. Use the software if you can. You will get good idea of what problem the software is trying to solve once you play the role of a consumer a bit.

3. Go through the README or equivalent(GitHub projects usually have README). This ideally should give you clarity on how to work with the code of the software itself.

4. Setup code on your local system if it is possible. Try to understand how to run the code on your own local computer and if possible how to run it with a debugger(search it if you don’t know about it yet).

5. Try to read different parts of the code and test on your local computer. See how you can make the code run on a specific line of code. But you don’t have to read the entire code all at once. Just see how code is structured in different folders, which folders have what type of code and what code files have what kind of code. Just see the high level pattern that is followed.
Practicing coding requires regular practice.

If you are doing it everyday, then you will learn coding sooner than you doing coding 10 hours one day once a month and no coding rest of the month.

So, make coding something that you do regularly.

Set a specific time for yourself when you learn just coding, even if its just for 90 minutes in the beginning
🔧 Mastering Problem-Solving in Code 🔧

Hey fellow coders! 🖥️ Facing bugs in your code is a rite of passage. But fear not, for with the right approach, you can conquer them like a pro! 🦸‍♂️ Here's a quick guide to tackle those coding conundrums:

Google It Up! 🔍
When in doubt, Google is your best friend. Someone out there has probably faced the same issue before. Search for error messages or specific problems – chances are, you'll find a helpful Stack Overflow post or a forum thread that'll shed light on your conundrum.

Print to the Rescue! 🖨️
Sometimes, a well-placed print statement can work wonders. Strategically place them at key points in your code to trace the flow and values of variables. It's like leaving breadcrumbs in the forest – they guide you through the code's journey.

Debugger Delight! 🐞
Debuggers are a coder's superpower. Set breakpoints, step through your code line by line, inspect variables – it's like having x-ray vision for your program's execution. Embrace it, and you'll unravel mysteries faster than Sherlock Holmes.

Rubber Duck Technique 🦆
Don't underestimate the power of explaining your problem to a rubber duck or a friendly colleague. Voicing your thoughts can often lead you to the root of the issue. And if the duck nods, you're onto something!

Code Review Crew 👥
Share your code with peers for a fresh pair of eyes. They might spot something you missed, offer suggestions, or even point out a better approach. Teamwork makes the debugging dream work.

Revisit the Basics 📚
Sometimes, it's the simple stuff that trips us up. Double-check syntax, variable names, and logic. It's okay to revisit the fundamentals – we all do it!

Break it Down
Divide and conquer. If the problem seems overwhelming, break it into smaller chunks. Debug each part separately, and gradually piece it all together.

Stay Patient
Debugging requires patience and persistence. Rome wasn't built in a day, and neither is perfect code. Keep a cool head, take breaks, and come back with a fresh perspective.

Remember, coding is a journey of growth. Embrace the challenges, celebrate the victories, and enjoy the thrill of problem-solving. You're not just writing code – you're crafting solutions! 💻💪 Happy debugging!
Giving sometime to learn code editor productivity tricks like using various shortcuts and applying those at work can lead to an amazing productivity. Look for increasing your productivity as a software engineer!
Will AI Replace Programmers?
In recent times, the technological landscape has been abuzz with the explosive advancements of Artificial Intelligence (AI). From recommending your next song on Spotify to assisting doctors in medical diagnosis, AI's omnipresence is undeniable. As this AI wave crashes onto various industries, the software industry can't help but ponder: "Will AI replace programmers?"

1. The Early Stages of AI
To answer the question, it's imperative to grasp where we currently stand in the AI timeline. Contrary to popular belief that we're amidst a full-fledged AI era, we're in fact only scratching the surface. Most AI implementations today, including those making headlines, are based on deep learning — a subset of machine learning that excels in pattern recognition through vast amounts of data. However, it doesn't "understand" or "think" in a way humans do.

Programming, at its core, is not just about writing syntactically correct lines of code. It's about understanding problems, crafting solutions, optimizing processes, and sometimes, a dash of creativity. AI, in its current form, lacks the comprehension and the intuition needed to replicate these nuances. While AI can write lines of code, it doesn't truly 'understand' the problem-solving essence behind programming.

2. AI's Impending Takeover: Is Programming Safe?
It's undeniable: AI is automating tasks, streamlining processes, and even replacing certain jobs. Jobs that are repetitive or have consistent patterns, like data entry or basic customer support, are indeed susceptible. However, when it comes to programming, the waters are murkier.

Programming isn't linear. It's filled with complexities, intricacies, and occasional eureka moments. Even though tools like OpenAI's Codex showcase capabilities to assist in coding, it's essential to remember that they're just that: assistants. They can offer code suggestions, detect bugs, or even automate mundane coding tasks, but they don't replace the need for a human behind the keyboard.

3. The Real Threat: A Human Augmented by AI
While AI replacing programmers is a distant reality, there's a more immediate paradigm shift. Instead of AI taking over jobs, the future landscape will likely be dominated by humans who utilize AI to enhance their capabilities.

This symbiotic relationship between humans and AI is where the real 'threat' lies. A programmer using AI-powered tools will be more efficient, make fewer errors, and likely deliver more optimized solutions than one who doesn't. Here, the differentiation is not between human and machine but between a traditional programmer and an AI-augmented programmer. Those who adapt and leverage AI's strengths will lead the charge in the software realm, leaving others to play catch-up.

Conclusion
The contemplation of AI replacing programmers is valid but perhaps a tad premature. While AI will reshape industries, engulf tasks, and redefine roles, the essence of programming — the art and science of problem-solving — remains a distinctively human trait.

For programmers, the key is not to resist the AI wave but to ride it. Embrace AI tools, integrate them into your workflow, and let them amplify your skills. In the software symphony of the future, AI might be the instrument, but humans will always be the maestros.
If you want to get C++ fundamentals while also learning programming with hands on assignments, then you can check this playlist:

https://youtube.com/playlist?list=PL3Qk742HgQd6HPUC7rAaMOwNGusGFy8ZJ&si=wPWChuoQhHMD9Dp5