Monday, February 20, 2023

Apprenticeship Pattern Blog 4

Chapter 4 of the apprenticeship mentions about developing new technical abilities, honing existing ones and building a strong foundation of technical knowledge. The authors mention that “The talented and hard-working apprenticeship must not become self-satisfied with his success”.  It is exciting to be proficient in a technology environment and build things while having fun with it, however, it’s more important that we do not become complacent in our abilities and stop learning about other frameworks. Versatility and flexibility are attitudes the craftsman should always possess. An example where I’m currently applying this is the containerization using Docker. For long I misinterpreted containerization to be the same as git version control but they’re actually different. In basic terms git is more about collaborating with others on a project while docker is more about applying the same development environment specifications across multiple end devices.
 
We also learn that the software craftsman should look out for opportunities to collaborate with exceptional developers in strong teams. Surrounding yourself with developers that are better than you helps identify areas you need to work on and introduces you to new ideas. I plan on attending coding hackathons in order to experience and see ideas other developers are working on.
 
The authors also mention about working on open-source software projects as a vital method for gaining technical knowledge. This also gives the opportunity to collaborate with seasoned engineers, learn about various technologies, and take part in a projects that will actually have an influence on the world. Newcomers start by contributing to simpler tasks as they learn and become more skilled, then slowly graduate to larger, more complex tasks. In Thea’s Food Pantry project, we’re continuing where other students left off. This is giving me an opinion of how future open-source projects could look like. We don’t have to start from scratch as the building blocks have already been put in place.
 
We also learn that humility and exposing our ignorance are great foundations of being a successful craftsman who's open and honest about what we don't know so we can learn from others.
 
To summarize the chapter, it goes like this: it’s important to continually learn and improve to gain the skills expected out of software craftsmen, to seek challenging projects, work on open-source projects and receive feedback and criticism from senior developers.

Monday, February 13, 2023

Apprenticeship Patterns Blog 3

Software development is a long-term pursuit that requires lifelong commitment towards learning and continuous improvements. This is what I learned from Chapter 3 from Dave’s story. His certificates were like medals that he had earned that showed his competence in the job he was doing. It’s interesting how after he collaborated face-to-face with exceptional software developers who were miles ahead of him and discovering that they kept on learning, he too started taking on side projects and reading anything he could get his hands on to be proficient in his crafts. I can relate this with the group that I'm currently working with, the scrum master is clearly ahead of us technically and I'm learning from him things that I didn't learn else where.
 
The chapter goes on to emphasize the importance of patience, persistence and having a long-term vision which I'll talk about later in this blog in the career of a software developer. Overtime software platforms and frameworks change, and this could lead to things breaking in several products. It’s therefore the developer’s responsibility to adapt to these changes and making the user’s experience seamless. An example I’ll give was the release of Angular 2, it was an overhaul of its predecessor Angular 1 which used vanilla JavaScript. Angular 2 on the other hand used TypeScript, a flavor of JavaScript with better performance, readability and easier to learn. I immediately decided to jump on the train and teach myself Angular 2 after hearing a youtuber say it did not make sense to learn Angular 1 since it wasn't going to be useful in the future. Easier to learn does not mean overnight or over a week but rather fewer weeks or months to come up with a relatively medium level application. If we couple this with the ten thousand hours rule which is close to three years taken learn to master a skill, we can agree that it’s traits such as passion that would maintain one’s desire to perfect their craft.
 
Moving on the idea of developers having long-term vision, it also helps developers in making short-term decisions. My interpretation is if you aim to be a Senior C++ developer for example, starting with learning to master how arrays and pointers work would be a great starting point for you. As we all know the wise saying, journey of a thousand miles starts with the first step, so this is that step. Day after day, a new framework is created for instance in the JavaScript world, having a long-term goal of what the craftsman wants to master, it’s easier to stick to a path that leads there with the most reasonable amount of time whether it's back-end or front-end. 
 
Just like the previous chapter, we are reminded again of the importance of seeking mentors to collaborate, guide and give feedback to the software developer. I’ve tried this and it never fails, many times an experienced developer will point you to look in a direction you didn't know was possible in achieving a task and it ends up working in your best interest.

Monday, February 6, 2023

Apprenticeship Patterns Blog 2

Chapter two of the book talks about “Emptying the cup” and what that means in a programming context is our willingness and readiness to put aside our prior knowledge and take in the new that’s being taught or learned. I found the story of the young philosopher meeting with the master zen interesting and of great value. In summary, the young philosopher couldn’t keep his mouth shut to listen to what the master zen was sharing because he believed that he had already been taught those concepts and there was therefore no need for repetition. In my opinion, this is totally wrong that because it eliminates the fact that there could potentially be a newer or better way to achieve something and there always is. One company that has been doing this for quite some time is Apple Inc. Each year during their Word Wide Developer Conference they introduce new concepts and tools in their programming platforms such as Swift programming language that replaced Objective-C for developing iOS applications.
 
Moving on to your first language, the author advises that one picks a langue, become fluent in it and hone as much skills as possible. They recommend this choice be weighed correctly as it’s upon this foundation that one’s early carrier will be built on. Build a toy project in this language where you can experiment with ideas. There is however a caution to this, and I will quote from the book, “One danger of digging deep into your first language is getting stuck”. It is crucial to consistently improve our skills by taking on smaller projects from different platforms that we may not be familiar with. I agree with this since there are known problems with some programming languages such as memory management above a certain quantity or performance issues that need to be addressed. However, for the most part, there is also work-around these types of events. I hope to use this pattern to learn as much as I can in the languages that I'm currently experimenting with.
 
Object oriented programming concepts are pretty much the same regardless of the platforms and this facilitates the learning of other languages for example if you’re comfortable programming in java, it is relevant to apply those skills in C++. Software craftsmen need to be dynamic in exploring diverse approaches to come up with solution.
 
The authors recommend developers to collaborate on projects with more experienced developers while also receiving feedback from peers. As the saying goes, “birds of the same feather, flock together”, it is imperative that the apprentice spend time working on small projects with senior developers to build their skillsets before moving onto bigger projects. The authors caution on overly depending on experts and rightly so, as this may slow the learning process.

Apprenticeship Pattern Blog 7

 This blog is an extension of chapter 6 of the apprenticeship patterns which talks about creating your own curriculum. The message is that t...