Unleash Your Enthusiasm

Most apprentices like me always face problems such as frustration and discouragement from peers and even their craftsmen sometimes. It is my dream as an apprentice to excel in my learning.  Some craftsmen will always intimidate their apprentices and it takes a brave and focus apprentice to stay on track. Sometimes, it is not just the craftsmen that will give you hard time. Being in a team that dictates your contribution can cause you a lot of damage in your learning. As a first comer, those who have been in the apprenticeship for years might have the mind set of you not knowing anything yet and will not value your contributions. Also, moment you have that feeling of fear and not able to speak out your ideas, you are on your way to failure.

However, this pattern has good information that can help me as an apprentice to figure out how to deal with most situations whiles learning.  One thing I have come to notice is that you cannot meet your desired expectation if you have no passion for what you are learning. Being happy or excited of what you learning or working on will actually enable you to put much effort into achieving your goals.

I am actually surprised of what makes a better team. Even though I am aware that a team of experience members can have problem due to everybody trying to be the leader, I usually think they will still have a better result. A team with varying levels of experience is the least I can think of being successful in its activities. I also think, believing in yourself that your contribution to a team will make a difference will enable you to openly speak out. Sometimes, I try to get as much as I could from my team members by listening to all they have to offer but very careful of what information I am taking from them because more often they are either misleading or conflicting with what I knew.

Again, I am not surprise craftsmen learn from their apprentices because a good apprentice will always search for knowledge outside his confined area and when his findings are openly embrace, craftsmen will benefit from it. Reading this pattern has impacted me with ideas that will help me focus on my apprenticeship journey. I will openly unleash my enthusiasm and would never allow others or circumstances around me to dictates what I can offer to my team.

 

 

Advertisements

Sprint Retrospective

This sprint session was really an exciting one and it start with individual student taking the CATME survey which enables the professor to place students in the appropriate group based on the students’ availability. Teams of five were formed initially and we named ours the gung of five. One of our team members could not make with us and our team ended up with four members. We again deliberated on changing the name from the Gung of Five and we settled on the Abstract Class. The team decided Rick Phillips should be our leader and since then Rick have been leading the team in all our discussions. Rick created a repository and cloned the class repository to it and the rest of the team members fork our own copy to our repository.

At the beginning, we tasked ourselves to have the environment setup for everyone. As we are all using web storm, I had it install on my laptop from the previous semester and the only thing I was to do hen was just to upload the ng2-amrs cloned to the desktop.  I had so many challenges as I tried to compile to project. Almost everybody in the team faces similar problems. We had errors coming from many difference angles including ladda.min.css file and styles.scss file. With the help of Rick Phillips and Jason, I was able to resolve all the compilation issues. After this stage of our setup task, I was at the login screen where almost all the team members were. Just before our next meeting, I encounter another problem that we spent the entire class time trying to resolve it. Among the step taken to resolve it was to delete the entire work and clone it again from the repository to the desktop.  At some point in trying to fix it, Rick Phillips also had the same problem then we tried to check our step and command because that seems unusual. We checked our step and realized we were using a wrong command for compiling the app; we were using ng serve to start the server instead of npm start.  We figure this out when Rick Phillips faces the same problem. I have learnt a lesson and I don’t think we will repeat that anytime.

Besides the setup task, we also tasked ourselves to do the things in the trello board.  By then we already have our github accounts setup and as directed by the team, I went through the tasks in the trello board one after the other.

One last thing I did was to watch that video posted on ampath slack channel which explains the instructions of connecting to the server built for this project. The steps in the instruction video were pretty much simple and straight forward so I did not have any difficulties in getting connected to the server.

So many things were leant including how we have to go into the app module and change some line to have the app working and how our own negligence causes us a whole meeting trying to figure out how to resolve issues. In the future, I will be paying attention to instructions done just trying to fix problems as they come.

 

Your First Language

As an apprentice or a developer, your career begins with you choosing one language and mastering it. This language will be the grounds at which your early development is going to be rooted and does not have to be big; all you need is taking a small step. The best way to learn a language is to work with an expert in it. This is because feedback for your work is very important aside you having someone who will boost your morale in learning such language. Your first language is not only the foundation of your career but the pivot at which you will learn other languages.

This pattern has taught me so many things and I am really happy for laying hands on such a materials. I totally agreed with every point made in this pattern. It is really important to have one language mastered before trying to learn another language. I have actually chosen one language I am working on. I previous had three languages that I was working with but after reading this pattern, I have decided to drop two of them and concentrate in one to become fluent in it. I think trying to learn two or more languages at the same time will only cause you to have shallow knowledge in all of them because I cannot boost of being fluent in one of the languages I have tried even though I have little knowledge across all three.

Also, choosing your first language will require you to have someone as your mentor who will give feedback to enable you improve on your studies. I really enjoyed this pattern because it has actually opened my mind toward many things. I   have never thought of trying to learn a different language when my job requires me to use a language which I am not familiar with until I read this pattern.

In conclusion, I will say this is a wake up call to me and my colleague students who want to excel in the programming industry; this pattern has boost my morale of choosing and mastering one language before trying to learn any other language and I am also reconnecting with the expert I have worked with in the past as a mentor for my career who will give me feedback regarding all my work.

Apprenticeship patterns – chapter 1

On a lay man point of view, craftsman is a person with a defined knowledge of doing something at its very best level. In this case the skills he or she posses and the ability to do well in his trade are very important to his clients. For instance, a building craftsman will be aiming at providing his client with the best and attractive finish building. To some extent, I am beginning to see how wrong I used to think about the term craftsman. If I was asked to define a craftsman without the knowledge after reading this chapter, I would not have think of software as a craft. I will describe craftsman as a highly skilled person who owned a workshop and have people called apprentice who are in the process of acquiring knowledge to enable them set up their own businesses. One may be surprised to see or hear that those practice in the 1900s where apprentices watch and imitate their master still exit. Only a few trades will allow or give the apprentice the chance to learn by doing it themselves. Doing it yourself will enabled you to learn and improve from your mistakes in the past. However, in the perspective of software the term craftsmanship have a deeper meaning attached to it that might affect the meaning. Even though term like craftsman, master, journeyman and apprentice are not new to many, they have difference meaning in difference field of study. In the light of software, many factors have to be taken in consideration; a professional developer who have been earning meet from his work for years will soon realize he or she is yet to undergo an apprenticeship process in his trade. One have to be prepared to learn or work hard for earn credit to his work. In this field, there is bound to be failure as in other trade and as a craftsman, you need to accept those failures as a motivation to improve in your next task rather than seeing them as mere failure or something discouraging. Again, to be successful, one need to be able to adjust to a changing situation and also able to accept criticism as a lesson for improvement.

besides, apprenticeship in this modern day is quit difference from the past where the apprentice just watch their master work for years and at some point learn by imitating what the master does. As an apprentice, you are given the chance to learn by trying it yourself then using your failures as a routine of mastery and improving your skills. In this modern world, even though an apprentice might be in small teams working under the supervision of the master, the outcome of their apprenticeship is solely their responsibility.

Also, a journeyman in this contest is a person with a knowledge in between the master and the apprentice and is able to lead the in the absent of the master. The journey man ideas in this chapter are something new to me and I am yet to see it practically.

Master in the other hand is the person with adequate knowledge of doing all the work of an apprentice or the journeyman and also keeping the trade alive. As a master, you should be very skillful and creative. A master as software craftsman, need to be able to create and share superior skills with his or her apprentice. In the other hand, apprenticeship is a process where new comers in the industry are trying to learn the requirement skills and knowledge that will make them function as developers and to earn living from it. These new comers need someone called the software craftsmen (Masters) or mentor to guide them through this process.

In conclusion, this chapter has been an interesting one I have read so far in this semester because I have drawn a lot of ideas from it and it will help me to take my destiny upon myself to explore the available resource and my professor as a mentor to achieve the necessary knowledge needed to survive in the software industry.

 

Encapsulation

Encapsulation is a technique in programming where the programmer hides the internal behavior of the object from the user. Encapsulation hide the inside view of the object from the user such that it only implements the behavior of the object. Usually the client does not need to know the detail of the program and that is exactly what encapsulation does.

Encapsulation hide the data for object and makes the variables as private, and expose only the property to access the private data which would be public. So, when you access the property you can validate the data and set it.

For example, let take a Mobile Phone and Mobile Phone company. Suppose you are a Mobile Phone company and you designed and developed a Mobile Phone design(class), now by using machinery you are making a Mobile Phone(object) for selling, when you sell your Mobile Phone the user only learn how to use the Mobile Phone and not how the Mobile Phone works.

Again, let consider a TV operation for example, the manufacturers encapsulate it with cover and we can only operate it with the remote and have no need to open the TV and change the channel.

In this regard, everything is in private except remote; so anyone can access to operate and change channel and not the things in TV.

Reference:

https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)

 

 

Code review process

A code review is a process where two or more developers visually inspect a code. The code review can be done on a method, a class, or an entire program.

Code reviews are carried out by personnel in four roles: author, moderator, reader, and scribe. I have not come across any restriction as to the size of the review team but depending on the size of your inspection team and the formality of your process; some people may have multiple roles at the same time. However, if you have a large enough team, it is useful to assign each role to a different person so each can focus on their duties effectively.

The team manager is the key role in a code review process. He or she is responsible for selecting team members, scheduling code review meeting, conducting meeting and working with the author to ensure that necessary corrections are made.

The author is part of the team and is responsible for starting the code review process by finding a manager. The role of Author must be separated from that of manager, Reader, or Recorder to ensure the objectivity and effectiveness of the code review. However, the Author serves an essential role in answering questions and making clarifications during the review and making corrections after the review.

The Reader presents the code during the meeting by paraphrasing it in his own words. It is important to separate the role of Reader from Author, because it is too easy for an author to explain what he meant the code to do instead of explaining what it actually does. The reader’s interpretation of the code can reveal ambiguities, hidden assumptions, poor documentation and style, and other errors that the Author would not be likely to catch on his own.

Lastly, the recorder records all issues raised during the code review.

Among the main objectives of a code reviews are:

  1. Error Detection. It is always important to discover logical or transitional errors during review sessions.
  2. Best Practice. We also want to establish more efficient, less error-prone, or more elegant way to accomplish a given task in a review process.
  3. Vulnerability Exposure. During code review, we also want to identify and avert common vulnerabilities like Cross-Site Scripting (XSS), Excessive Disclosure, Buffer Overflow, Injection, etc.

In order to have a successful cod review, the following technique must be observed.

  • Review fewer than 400 lines of code at a time.
  • Take your time.
  • Do not review for more than 60 minutes at a time.
  • Set goals and capture metrics.
  • Authors should annotate source code before the review.
  • Use checklists.
  • Establish a process for fixing defects found.
  • Foster a positive code review culture.

Research indicates that the brain have a limited among of time to effectively process information and as matter of fact, code reviewers need to speed reasonable among of time within one hour to process or review between 200 to 400 lines of code in order to obtain about 90% accuracy. This is because the ability to find defects in a given code will basically diminished after one hour.

A good review requires balance between strictly documented processes and non – threatening and collaborative environment and review managers are responsible for establishing good conducive grounds where the team can effectively work together and making room for open communication.

Also, checklists are the most effective way to eliminate frequently made errors and to combat the challenges of omission finding. This is because there is likelihood that each person on your team can make the same error several times.

Reference:

https://smartbear.com/learn/code-review/what-is-code-review/

https://smartbear.com/resources/case-studies/cisco-systems-collaborator/

https://smartbear.com/product/collaborator/overview/

https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/

 

 

 

 

 

 

Refactoring

After reading and doing factory pattern design, I was still not sure why we used it and its purpose in a code; I decided to do in-depth reading and also post this blog to outline the main ideas gotten from this reading.

First of all, what is refactoring? Refactoring is a name given to a collection of small individual learning techniques for improving code that has already exit. It implies the code has already been written, it is working and you are not changing it functionality. The purpose of refactoring is not to break down code and rebuild it. It is to improve on the exiting code for more clarity.

Again, what do we get for refactoring code? Refactoring is used to improve code design to make it easy to understand and extensible.

Besides, Refactoring also makes it easy and quicker to create complicated systems.

Refactoring makes code easy to read and eliminate duplication and make modification easy and minimizes complex conditional logic.

Refactoring removes excess code so that it is easier to understand and modify.

In other words, one of the main objectives of refactoring is to remove bad smell. Bad smells are common design problem and they are usually unclear, complicated or duplicated.

behavioral vs Structural Testing

Behavioral vs. Structural testing

After thoroughly reading of the chapter with the level of testing, I have seen the important of one understanding the difference types of testing, how to use them and more importantly what time or stages you are required to use a particular technique. In this regards, I am writing this blog to basically outline the major differences between behavioral testing and structural testing techniques. In my earlier postings for the level of testing, I tried to capture all the testing techniques. I have also talk of dynamic verse the static testing and it is now time to look at behavioral and structural testing in comparative perspective.

Both structural and behavioral testing techniques are used to ensure adequate testing.

First and foremost, Behavioral testing which is also known as functional testing is a kind of testing where the functionality of a software is been tested. This type of testing is often referred to as black box testing. Functional testing basically is test that happens during implementing requirements and design specification.

Also, Functional testing usually cares about only the results but not processing because the tester does not have to know anything about the code or program.

Structural testing however is a testing technique which is based on the internal structure of the program or code. Structural testing basically analyses the code to verify if there are errors in the design process. Structural testing which is often called white box testing is concern with both the result and process because knowledge of the code is very important; we need to understand the design code. This is a stage where design requirements and algorithm are discussed. White box testing technique often get work done and can be run every time part of the code changes, allowing issues to be resolved as quickly as possible.

The main objective of the structural testing technique is to ensure that the functionality of the code is as required and the design is readily acceptable to be implemented in the real world.

Again, I am inspired a lot reading this chapter and writing this blogs as they enables me to do in-depth reading into the topics and more to the point understand the various levels of testing, their unique terminologies and differences as a whole. I know very well that I did not only understands how and when to use a particular testing technique but it is also going to help me save time in my future testing as I will know in the fly which technique to use.

Reference:

https://www.seguetech.com/the-four-levels-of-software-testing/

http://www.coolinterview.com/interview/10760/