I have a Masters in Computer Science and have been working as a developer for 6 years. I am looking to help anyone who needs advice in my field of expertise. There are no Stupid Questions :)

My Mentoring Topics

  • Software development
  • Design Patterns
  • Working at a big company

Rohit 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.

The Pragmatic Programmer - your journey to mastery, 20th Anniversary Edition
David Thomas, Andrew Hunt

Key Facts or Insights from "The Pragmatic Programmer" Pragmatism: The emphasis on practical application of theoretical knowledge is a central pillar in the book. This pragmatism is conveyed through a variety of tips and strategies which are aimed at improving your programming efficiency. Code Ownership: The authors argue that programmers should take more responsibility for their code, treating it as a craft that requires continuous learning and improvement. DRY Principle: The DRY (Don't Repeat Yourself) principle is a cornerstone in the book. It's about reducing repetition of software patterns, replacing it with abstractions or data normalization to avoid redundancy. Orthogonality: The book discusses the concept of orthogonality - the idea that things which are not related should not affect each other. This prevents changes in one part of a system from breaking another part of the system. Automation: The authors advocate for automation of repetitive tasks to reduce errors, improve consistency, and free up time for more complex tasks. Testing: The book emphasizes the importance of rigorous testing, which should be carried out regularly throughout the development process, not just at the end. Continuous Learning: The authors encourage programmers to continue learning new technologies and techniques to keep their skills up to date and remain relevant in the field. Design by Contract: The concept of 'Design by Contract' is introduced, where software designers should define formal, precise and verifiable interface specifications for software components. Estimation: The book provides insights into the often complex task of accurately estimating how long it will take to complete a programming project. Code Generators: The book discusses the use of code generators to automate parts of the development process and increase efficiency. Refactoring: The authors propose that continuous refactoring - the process of restructuring existing code without changing its external behaviour - is key to maintainability and sustainability of a codebase. An In-Depth Analysis of the Book "The Pragmatic Programmer" by David Thomas and Andrew Hunt is a seminal work in the field of software development, which has left an indelible mark on the way programming is taught and practiced. Its focus on practical application of theoretical concepts is a departure from the traditional, theory-heavy approach to teaching software development. The authors draw on their wealth of experience to provide readers with a series of pragmatic strategies, tips, and best practices that can be directly applied in their daily work. The book begins with an introduction to the concept of a 'pragmatic' programmer, who is described as an early adopter, inquisitive, critical thinker, realistic, and jack-of-all-trades. This sets the foundation for the rest of the book, which is structured as a series of self-contained sections, each focusing on a specific topic and providing a set of tips related to that topic. One of the major strengths of this book is the emphasis on code ownership and treating programming as a craft. The authors encourage programmers to take a proactive role in maintaining their code, constantly learning and improving their skills, and taking responsibility for the entire lifecycle of their code. This can be seen as a response to the trend of 'code commoditization', where code is seen as a disposable commodity rather than a craft. Another significant insight is the importance of the DRY principle. By reducing the repetition of software patterns and replacing it with abstractions or data normalization, programmers can avoid redundancy, reduce the chance of errors, and make their code easier to maintain and understand. The book also introduces the concept of orthogality, which encourages separation of concerns in software design. By ensuring that unrelated things do not affect each other, changes in one part of the system will not break another part of the system. This is a key principle in software design and is related to the concept of encapsulation in object-oriented programming. Automation is another key theme in the book. The authors advocate for automation of repetitive tasks in order to reduce errors, improve consistency, and free up time for more complex tasks. This can be achieved through the use of scripts, build tools, and other automation tools. The significance of rigorous testing is also stressed in the book. This is in line with the modern development practices such as Test-Driven Development (TDD) and Behavior-Driven Development (BDD), which advocate for testing to be carried out throughout the development process, not just at the end. The authors also touch upon the concept of 'Design by Contract', which encourages software designers to define formal, precise, and verifiable interface specifications for software components. This can help to ensure that the components of a system interact correctly, reducing the chance of errors. The book also provides insights into the often complex task of estimating how long it will take to complete a programming project. This is a crucial skill for any developer, as it can have a significant impact on the planning and management of a project. The use of code generators to automate parts of the development process is another topic addressed in the book. While this might seem like a niche topic, it is actually quite relevant in modern development practices, where frameworks and libraries often come with their own code generators. Finally, the importance of continuous refactoring is emphasized. Refactoring involves restructuring existing code without changing its external behaviour. This can help to improve the readability and maintainability of the code, making it easier for other developers to understand and work with. In conclusion, "The Pragmatic Programmer" provides a comprehensive and practical guide to software development, covering a wide range of topics and providing a wealth of tips and strategies that can be applied in practice. Whether you are a novice programmer or an experienced developer, this book is sure to provide valuable insights that can help you improve your skills and become a more effective programmer.

View
Head First Design Patterns - A Brain-Friendly Guide
Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra

Key Facts and Insights Design Patterns: The book presents a comprehensive overview of design patterns, which are reusable solutions to common problems encountered in software design. Object-Oriented Programming: The book heavily emphasizes on object-oriented programming (OOP) and the four key OOP principles – encapsulation, inheritance, polymorphism, and abstraction. 'Head First' Teaching Approach: The authors use a unique teaching approach that makes complex concepts easier to understand through visually rich format, mind-bending exercises, and engaging narrative. Practical Examples: Each design pattern is presented with practical examples that demonstrate its utility and application in real-world software development. Brain-friendly Learning: The book focuses on brain-friendly strategies that include visuals, stories, activities, and challenges to stimulate learning and retention. Patterns Covered: The book covers a wide range of patterns including Strategy, Observer, Decorator, Factory, Singleton, Command, Adapter, Facade, Template Method, Iterator, Composite, Proxy, and State patterns. Hands-on Learning: The book encourages hands-on learning through coding exercises, quizzes, puzzles, and other interactive elements. Language Used: Although the examples in the book are written in Java, the principles and patterns can be applied to any object-oriented programming language. Understanding and Application: The goal of the book is not just to understand the design patterns, but also to apply them effectively in solving software design problems. Pattern Categories: The book categorizes design patterns into three types: Creational, Structural, and Behavioral patterns. UML Diagrams: The book uses UML (Unified Modeling Language) diagrams to visually represent the structure and behavior of design patterns. In-depth Analysis and Summary "Head First Design Patterns - A Brain-Friendly Guide" is a remarkable resource for anyone who wants to understand and apply design patterns in software development. The authors cleverly present complex concepts in an engaging, approachable manner, making it a valuable tool for both beginners and experienced software developers. The book's core focus is on design patterns, which are recurring solutions to common problems in software design. These patterns provide a standardized template that developers can use to solve design problems more efficiently. The authors cover a wide range of patterns, each with its own dedicated chapter. They provide clear, practical examples showing how each pattern can be used to solve specific software design problems. The authors place a significant emphasis on object-oriented programming (OOP). They cover the four key principles of OOP: encapsulation, inheritance, polymorphism, and abstraction. These principles provide the foundation for understanding and implementing design patterns. The authors use Java for coding examples, but the principles and patterns can be applied in any object-oriented programming language. One of the distinguishing features of the book is its unique 'Head First' teaching approach. The authors use a visually rich, brain-friendly format, filled with images, diagrams, puzzles, quizzes, and narratives to engage the reader and make complex concepts easier to understand. They also use Unified Modeling Language (UML) diagrams to visually represent the structure and behavior of design patterns. The book is designed for hands-on learning. It includes coding exercises and quizzes that encourage readers to apply what they have learned. The authors stress the importance not just of understanding the patterns, but also of being able to apply them effectively in solving software design problems. In conclusion, "Head First Design Patterns - A Brain-Friendly Guide" provides a comprehensive, engaging, and practical introduction to design patterns. It is a valuable resource for developers at all levels who want to improve their software design skills and apply design patterns effectively. The unique teaching approach, combined with practical examples and hands-on exercises, makes it a highly effective learning tool.

View