Posts

Your First Language

Image
The pattern I chose to explore is called "Your First Language" from Chapter 2, which focuses on the importance of choosing a primary programming language and developing proficiency in it. The pattern addresses a common concern for many aspiring software developers: the fear that job opportunities and success are contingent upon mastery of multiple programming languages. However, the pattern provides reassurance by emphasizing the significance of selecting a language and becoming fluent in it. This chosen language will serve as the foundation of your early career, and investing time and effort into mastering it will yield fruitful results. I found this pattern particularly relevant to my own journey as a computer science student. Like many others, I have dabbled in multiple programming languages during my studies. However, this pattern reminded me of the importance of honing my skills in one specific language, rather than spreading myself too thin across various languages. By ...

Apprenticeship Pattern: The Deep End

Image
The Deep End is an important pattern to consider in any profession, especially in computer science. It reminds us that the only way to grow and improve our skills is to take on new challenges that may be outside of our current abilities. This can be daunting, but it is essential to keep pushing us to continue learning and improving. One aspect of this pattern that I found particularly useful is the suggestion to break down tasks into smaller, more manageable pieces. This not only helps to make the task seem less overwhelming, but it also allows us to focus on making small incremental progress over time. By taking small steps towards a larger goal, we can see tangible progress and stay motivated throughout the process. Another important point made by the pattern is the need to seek help and guidance from more experienced colleagues. It can be easy to feel intimidated or embarrassed to ask for help, but it is crucial to remember that everyone starts somewhere. We all have areas where we ...

Expose Your Ignorance

Image
In the early stages of a career, it is quite natural to feel like you don't know enough and to be intimidated by the tasks ahead. As an apprentice, you may feel like you have to prove yourself to your colleagues and bosses, which often leads to pretending to know more than you actually do. However, pretending to be an expert can lead to disastrous results and can harm the project in the long run. The “Expose Your Ignorance” pattern is a solution to this problem that many apprentices face. The "Expose Your Ignorance" pattern emphasizes the importance of being honest about your lack of knowledge, especially when it comes to software development. Being transparent about your ignorance is a sign of strength, not weakness, and it allows your team members and managers to understand the scope of your abilities. This pattern encourages apprentices to admit their lack of knowledge, ask questions, and share their learning process with their team. What I found interesting about this...

Apprenticeship Patterns - Chapter 1 and more

I read Apprenticeship Patterns as per the syllabus and I found a lot of things that resonated deeply with me. Dave talks about giving up on learning to code, or rather to program after being unable to do anything compelling or significant, and only having had mastered Perl on his third attempt. I myself have on multiple occasions traded a language for another when I stop making progress. My thinking was – “Maybe, this isn’t the one for me”. So, I hopped from Python to JS to Scala to Java to C learning only the basics and just enough to satisfy any classes that might’ve required it. I was a jack of all trade, and master of none! Only upon revisiting Python again for a summer fellowship with a professor, and working on learning more than just the syntaxes, idiosyncrasies, and fun facts about the language, was I able to move on to being somewhat competent. Dave’s story tells us how he sought out mentors, took on challenging projects, and continuously challenged himself to improve and grow...

Technical Debt

Technical debt is a programming theory that refers to the necessary work that gets delayed during the development of a software project to meet a deadline or deliverable. It is an idea that shortcuts are taken to quickly deliver a product, but this decision incurs a "debt" that must be paid in the future when the work is eventually completed. Technical debt is often the result of a tradeoff between perfect products and the short timelines often required for product delivery. Developers may choose the easier route with messier code or design to deliver a product faster, but this can lead to technical debt that must be addressed later. Technical debt can accumulate "interest" over time, increasing the difficulty of implementing changes and leading to software entropy. It is important to manage technical debt to avoid these negative consequences. This involves identifying technical debt, accounting for nonfunctional requirements, and implementing best practices and...

KISS

KISS is an American rock band formed in New York City in 1973. The band is known for its elaborate stage shows, which often feature pyrotechnics, fire breathing, and other special effects, as well as the use of makeup and costumes by the band members. In all seriousness… The KISS principle, or Keep It Simple, Stupid, emphasizes the importance of simplicity in design and systems. By keeping things simple, you can better understand and meet the needs of customers and create products that are more user-friendly and effective. In the world of software and technology, the KISS principle is especially important, as people often have many options to choose from and may not understand complex technology. By following KISS, you can build a minimal viable product (MVP) that allows you to confirm or disprove your hypothesis with minimal work and deliver your product in a straightforward way that is easier for users to understand. Amazon, for example, lists the KISS principle as a core leaders...

Software Development Approaches

A software development approach is a methodology that is used to guide the processes involved in the development of a software system. Different software development approaches provide different ways of organizing and coordinating the activities and tasks involved in the development of software. Some of the most common software development approaches include Agile development, Extreme programming (XP), Lean development, Test-driven development (TDD), and Waterfall model among many much more. These are just a few of the many different approaches to software development. Each approach has its own unique set of principles and practices that help guide the development process and ensure the successful delivery of high-quality software. Agile development is a software development approach that emphasizes collaboration, flexibility, and continuous improvement. Extreme programming (XP) is a software development approach that emphasizes collaboration, simplicity, and feedback. Lean develop...