Are your fundamentals of Software Engineering really strong ?
Mastering the fundamentals is the key to unlocking true expertise. Like sturdy foundations, they provide the strength and stability needed to build knowledge. Without a solid base, understanding remains shallow and fragile. By honing the basics, one gains the power to navigate complexities, innovate, and adapt. Fundamentals are the bedrock of mastery, enabling us to rise above challenges and reach new heights of proficiency. Invest in the fundamentals, and you invest in the future of your expertise.
Ok then let’s find out step by step what I mean by fundamentals in terms of software engineering. You can’t master software engineering in weeks or months or years. It’s a tedious process that requires a lot of rigour and discipline.
First Challenge
The first and foremost challenge to get into the space of tech is - learning a programming language in depth.
This is the most crucial step but most of them get it wrong in this step and rather lose their interest in this field or struggle in their upcoming journey.
Let us find out what are the mistakes done during learning a programming language:-
Skipping the fundamentals: Many beginners are tempted to jump straight into complex projects or advanced topics without thoroughly understanding the basics. This can lead to a weak foundation and hinder progress in the long run.
Lack of hands-on practice: Programming is a practical skill that requires practice. Merely reading or watching tutorials without actively coding and experimenting will limit your understanding and ability to apply what you've learned.
Not seeking help or guidance: Trying to figure everything out on your own can be time-consuming and frustrating. It's essential to seek help from experienced programmers, join communities, and utilize available resources to accelerate your learning and overcome challenges.
Neglecting to read and understand documentation: Documentation is a valuable resource that provides insights into the language's features, libraries, and best practices. Ignoring it can result in missed opportunities and inefficient coding practices.
Focusing too much on memorization: Memorizing syntax and code snippets may help in the short term, but true understanding comes from grasping the underlying concepts. Focus on understanding the "why" behind the code, rather than just memorizing the "how."
Problem-Solving Skills: Problem-solving is one of the crucial skills that you need to develop as a software engineer. Learning syntax is not the end of programming language. You have to practice a lot of problems ( be it algorithmic problems or making small projects) to grasp the core of that language.
Switching between languages: There’s a lot of free content available in the market and due to this many beginners try to switch between programming languages frequently in their very initial career. Please try not to switch rather stick to one and grasp it thoroughly.
Try avoiding these mistakes as a fresher. Don’t focus on a lot of content, rather pick one and stick to that and spend at least 5-6 months in this beautiful journey of learning a programming language.
But why is this step crucial? - Yes you will only notice your hard work during the initial phases of your career when you will be asked to work on multiple tech stacks at the same time. You can then take up any tech stack at a much faster rate than any other.
One quick suggestion for picking up a programming language:- If you are in a dilemma of which language to start with, pick one object-oriented programming language as this will not only help you in creating a good project but also help you in your interviews as well as in your career.
Object Oriented Skills
If you are done with mastering a programming language up to an intermediate level, the next important skill to master is object-oriented skills.
Now I think you can guess why did I provide you with a quick suggestion above.
Let’s first understand why does this object-oriented term exist? - While learning programming you have surely come across integers, strings and various other data types to define any variables. You have mostly encountered problems related to basic data types such as int, float, strings, and boolean. But let us say today you are dealing with a problem related to an image. Now you don’t have any data type to define an image, do you? Think about this problem for a little.
Yes, I think you are stuck now as the image has a lot of features such as size, image_type, image_colour and a lot of other pieces of stuff. But wait, a lot of smart guys will come up with this approach - “hum array bana lenge” for storing. Yes, that’s a good approach but there are a lot of problems in that approach. Think for a while about the problems and comment down.
I think by this time you have already guessed it. It’s object-oriented skills that will efficiently solve this problem.
But wait as I have done in the above process, again there are a lot of mistakes committed by freshers in this step too. Let’s find out what are those:-
Relying solely on theory: OOP is best learned by practical application. Reading about concepts and syntax is important, but hands-on coding and building projects are crucial for gaining a deep understanding.
Poor naming conventions: Choosing unclear or inconsistent names for classes, methods, and variables can make your code harder to read and maintain. Develop good naming habits early on to enhance code readability and maintainability.
Not planning: Object-oriented programming benefits from proper planning and design. Failing to think through the structure of your code and the relationships between objects can result in a messy and disorganized implementation.
Overcomplicating code: Beginners often try to include too many classes, methods, or features in their code, making it complex and difficult to understand. It's important to start with simple examples and gradually build complexity as you gain proficiency.
Lack of code reusability: One of the main benefits of OOP is code reusability. Beginners may miss opportunities to design reusable classes and methods, leading to redundant code and reduced productivity.
While learning and developing demo applications please try not to commit the above mistakes. These types of skills are seen during every tech interview too.
If you found something valuable in this post, try subscribing to my newsletter and share it with your connections who are preparing for a career in software engineering
Fundamentals of Database Engineering
Yes, you have read it correctly. One of the most undervalued skills by a fresher during their software engineering journey or their undergraduate days.
We study it only to clear tech interviews or to clear undergraduate exams also in the last night before exams. But sadly that’s not what the tech industry demands.
Truly speaking
” SELECT * FROM EMPLOYEE” or by memorizing “WHAT ARE ACID PROPERTIES” or “SQL vs NO-SQL” is not fundamentals of databases.
Things that you should know or learn during your initial career regarding databases are:-
Understanding database internals:- Database engineering relies on fundamental concepts such as tables, relationships, normalization, and SQL. It is also good to know how tables and columns are stored on disks, primary vs secondary vs foreign keys, row-based vs column-based databases and many more concepts.
Proper data modelling: Designing an efficient and effective database schema is crucial. Failing to properly model the data and anticipate future requirements can lead to a poorly structured database that is difficult to maintain and scale.
Understanding database normalization concepts: Database normalization is a process of organizing data to minimize redundancy and improve data integrity. Neglecting normalization can result in data inconsistencies, update anomalies, and inefficiencies in querying. Just not memorize the normal forms try to apply it in real-life scenarios too.
Good knowledge of indexing: Indexing is essential for improving query performance. Not understanding how indexes work and when to use them can lead to slow query execution and overall performance degradation.
SQL Queries: Yes I think most of you are aware of this topic and this is one of the evergreen skills as its applicable to many domains in software engineering. But here also we lack, we only prepare it for interviews. Don’t just mug up frequently asked queries (i.e. the most common one - second highest salary). Master the art of writing efficient queries - this will help you a lot in your career.
One important tip:- Don’t learn for the sake of learning. Focus on theoretical concepts as well as practical concepts. Try to develop a database schema and apply all the above-learnt concepts. It will be great fun. And also you can showcase this in your interview too.
Share the post with your dear ones if you find something useful
Fundamentals of Network Engineering
How many of you had the same thought of skipping this topic and giving an excuse during interviews “I am not confident about this topic“? Or have a backup preparation for a most commonly asked question “What happens when you hit google.com?”
Yes, this is the topic right, but, indeed, we don’t have the experience of the use case of networks in the initial years of our career but you will face it as soon as you work on high-end backend systems.
But as a fresher, you should understand some basic concepts which will help in your career moving forward:-
Networking Basics: Understand the fundamental concepts of computer networks, including the OSI model, TCP/IP protocol suite, network topologies, and network devices (routers, switches, etc.).
IP Addressing and Subnetting: Learn about IP addressing, subnet masks, and subnetting techniques. Understand how to allocate IP addresses and subnet ranges efficiently.
Network Protocols: Familiarize yourself with common network protocols such as TCP, UDP, IP, DNS, DHCP, HTTP, and SNMP. Understand their functions, characteristics, and how they operate within a network environment.
Network Infrastructure: Gain knowledge of the components that make up network infrastructure, including LANs (Local Area Networks), WANs (Wide Area Networks), wireless networks, and the Internet.
Network Security: Learn about network security principles, including firewalls, VPNs (Virtual Private Networks), encryption, access control, and common security threats like malware and unauthorized access.
Routing and Switching: Understand how routers and switches operate, including routing protocols (such as RIP, OSPF, and BGP), VLANs (Virtual Local Area Networks), and Ethernet switching concepts.
Network Address Translation (NAT): Learn about NAT and its role in translating private IP addresses to public IP addresses, enabling connectivity between private networks and the Internet.
Network Troubleshooting: Develop basic troubleshooting skills to identify and resolve common network issues. Learn how to use network diagnostic tools like ping, traceroute, and Wireshark for network analysis.
One tip for learning network concepts :-
Again as I said above don’t just focus on theory, always try to learn the practical side of it. You can do it by creating simple server-side programming and understanding the network calls by asking several questions such as:-
Why my application is so slow but after some time it behaves appropriately?
Why can’t I listen on the same port twice?
What happens when two external services make internal network calls?
Sometimes we try to send a request, but it’s too slow what’s the main reason for it?
and many more. I guarantee you, it will be a lot of fun too.
These four fundamentals are a perfect way to start your engineering career. And definitely with experience you will start to master more complex tech skills and you will get a taste of each fundamental concept that you will learn in your initial days.
Subscribe to my newsletter for more in-depth software engineering concepts.