Hi, I'm Anbarasi (Anbu for short) and I've been working as a Software Engineer from 2011. I follow wherever my curiosity leads and have worked across domains like banking, insurance, fintech, retail, SRE operations, cannabis tech, etc. Along the way I've picked up skills in mobile app and web app development as a full stack developer, while also leading teams. Currently I work as an Engineering Manager after having built products in early-stage startups as a founding engineer. I have learnt from many different people in my career and wish to pay it forward. Like Tyler Cowen says "you can raise the aspirations of other people significantly, simply by suggesting they do something better or more ambitious than what they might have in mind" (https://marginalrevolution.com/marginalrevolution/2018/10/high-return-activity-raising-others-aspirations.html). And I hope I can offer a little bit of perspective to somebody else.
My Mentoring Topics
- - Software Engineering
- - Operating as an engineer in early and mid stages of a startup
Anbarasi didn't receive any reviews yet.
You need to be logged in to schedule a session with this mentor. Please sign in here or create an account.
Understanding Distributed Systems
Roberto Vitillo
Learning to build distributed systems is hard, especially if they are large scale. It's not that there is a lack of information out there. You can find academic papers, engineering blogs, and even books on the subject. The problem is that the available information is spread out all over the place, and if you were to put it on a spectrum from theory to practice, you would find a lot of material at the two ends, but not much in the middle. That is why I decided to write a book to teach the fundamentals of distributed systems so that you don’t have to spend countless hours scratching your head to understand how everything fits together. This is the guide I wished existed when I first started out, and it's based on my experience building large distributed systems that scale to millions of requests per second and billions of devices. If you develop the back-end of web or mobile applications (or would like to!), this book is for you. When building distributed systems, you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, and much more. Although you can build applications without knowing any of that, you will end up spending hours debugging and re-designing their architecture, learning lessons that you could have acquired in a much faster and less painful way.
ViewThe Pragmatic Programmer - From Journeyman to Master
Andrew Hunt, David Thomas
Key Facts and Insights from "The Pragmatic Programmer" Pragmatism: The central theme of the book is pragmatism in programming. This involves practical, flexible, and adaptable methods to produce effective software. Software Entropy: The book discusses the concept of "software entropy," which describes the natural tendency of software to become more chaotic over time. It emphasizes the importance of maintaining and refactoring code to combat this. DRY Principle: The authors introduce the DRY (Don't Repeat Yourself) principle, which advocates for reducing duplication in all aspects of software development. Orthogonality: The concept of orthogonality is discussed, which states that components of a system should be designed in such a way that changing one does not affect the others. Automation: The book emphasizes the importance of automating repetitive tasks in programming to minimize errors and increase productivity. Metaprogramming: The authors delve into the concept of metaprogramming, discussing how code can be self-referential and can generate or modify other code. Software as a Craft: The book treats software development as a craft, encouraging continuous learning, mastery of tools, and pride in one's work. Code Generality: The authors advocate for making code as general as possible to increase its reusability and adaptability to changing requirements. Testing: The book discusses the importance of testing, including unit testing, integration testing, system testing, and acceptance testing, to ensure high software quality. Refactoring: The authors emphasize the importance of refactoring, or improving existing code without changing its behavior, to maintain clean and efficient code. In-Depth Analysis and Summary "The Pragmatic Programmer" by Andrew Hunt and David Thomas is a seminal work in the field of software development, addressing a holistic approach to programming. The book emphasizes the importance of a pragmatic mindset, one that embraces change, values flexibility, and strives for practical, effective solutions. The concept of software entropy is one of the critical insights of the book. It describes the natural decay of software systems over time, as changes, bug fixes, and new features increase complexity and decrease understandability. To combat this, the authors introduce the DRY principle, which stands for "Don't Repeat Yourself". They advocate for reducing duplication in all aspects of software development, from code to data to system architecture. This reduces complexity, minimizes the chance of inconsistent changes, and makes the system easier to maintain and understand. The authors also introduce the concept of orthogonality, borrowed from mathematics. In an orthogonal system, components are independent, and changes to one do not affect the others. This approach increases the system's resilience to change and reduces the chance of bugs. The book strongly emphasizes the importance of automation in programming. By automating repetitive tasks, programmers can minimize errors and increase productivity. This includes everything from code generation to testing to deployment. The concept of metaprogramming is another fascinating insight in the book. The authors discuss how code can be self-referential and can generate or modify other code. This allows for a high degree of flexibility and adaptability in the software. The book treats software development as a craft, encouraging programmers to continuously learn, master their tools, and take pride in their work. The authors advocate for a culture of excellence, where programmers continuously strive to improve their skills and the quality of their work. In terms of code design, the authors advocate for making code as general as possible to increase its reusability and adaptability to changing requirements. They also emphasize the importance of testing at all levels, from unit testing to system testing, to ensure high software quality. Finally, the authors emphasize the importance of refactoring, or improving existing code without changing its behavior. This helps to maintain clean and efficient code, makes it easier to understand and maintain, and can often reveal and fix hidden bugs. Overall, "The Pragmatic Programmer" offers a comprehensive, practical guide to software development, blending technical advice with philosophical insights. It encourages programmers to be pragmatic, flexible, adaptable, and to view software development as a craft to be mastered.
View