Author Archives: hpnguyen27

Sprint Retrospective

The first sprint was the very initial experience of me being a Scrum Master. It was an astonishing experience, and I have learned many things from this Sprint as well as from my teammates. From a personal perspective, I think things that worked well with us were being able to finish the entire issues that we had listed out during Sprint Planning. In addition, our team worked very efficiently as a group and barely had any conflicts during this first sprint. Everyone had the opportunity to express their ideas and to be able to ask questions. From that point, we had been able to work out the issues as a group rather than individually which was also a good point. Our team was also exceptional at listening to each other. This is a plus point, by listening to other people we would be able to learn more about that person along with the ideas.
Despite all the good things that we had during our first sprint, there were also some key issues that we would need to work on. First, although we communicated well and didn’t have any collision during the first sprint. We need to improve the communication on Gitlab. This was also mentioned by the professor in the Sprint Review. We did not show enough participation in Gitlab which led to our group losing one point for Sprint Review. Second, we did not split the amount of work equally and did not organize the work effectively. Hence, team members occasionally were confused about who was working on what part. During the first Sprint Planning, there was only one team member who contributed most of the issues and as a Scrum Master, I do not think I have done enough and contributed enough as I took on this big role.
The changes that I think we would need to do is to communicate on Gitlab by commenting on each other issues and contributing more to the issue board. Also, I think that every time we change the code, we need to inform our team members so that they could review changes that others have made to ensure that the code would not break the initial system. Another point is that our team needs to communicate more outside of the classroom such as Discord. During the first sprint, the only time that we talked and solved the issues was during class time.
As an individual, I think I would need to be more productive and do a better job as Scrum Master. During the first sprint, I did not have much idea of how to be a Scrum Master and specifically is how to be a good Scrum Master. As a scrum master, I did not do well with bringing everyone onto the same page and did not split the work evenly for every member. Also, I failed to keep track of the work that every team member had contributed. This to me in the future would not be a good thing because a good scrum master should be able to maintain and keep track of everybody’s work to make sure the products would be delivered on time.
The first sprint was such an interesting experience for me at I started working as a team compared to the previous semester. Even though there are many things that need to be improved individually and also as a team. Overall, the first sprint was not as bad as I thought it was going to be.

From the blog CS@Worcester – Hung Nguyen by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Pattern

The Apprenticeship Pattern: Guidance for the Aspiring Software Craftsman book of Adewale Oshineye and Dave Hoover is the book that I recently have the opportunity to read and explore. What I like about this book, unlike typical software development books, this book’s focus is on how to develop and maintain a solid mindset as a software developer.

Apprenticeship is the state of evolving and looking for better ways and seeking out people, companies colleagues that force us to learn better and smarter. It’s the first step on the road toward becoming a different kind of software professional and to learn is the most skilled software developer. That includes looking out for good teachers and taking opportunities to learn by practicing and working with them.

This chapter showed me that to be a better developer, we need to seek out bits of help from others, learn from others, and grow together. Therefore, the ability to express ideas and to communicate are two essential skills that every developer needs to have and maintain.

People say you cannot judge a book by its cover. However, in my opinion, a good book would have good first few pages to attract readers. This book is one of them. The first chapter showed me different approaches and mentalities to be a successful developer. It taught me that efforts make successful developers and failure is just a way to try on a different approach. Also, another lesson I have learned was a belief that you can be better, and everything can be improved if you’re willing to put the work in. A good developer needs to maintain an inward focus to cultivate their skills. It means that a willingness to learn new technology and a humble attitude will help us go further in this industry as in the story about “Emptying the cup”.

Although, I’m just at the beginning of this book but I’m really looking forward to read the rest of this book to learn more about apprenticeship pattern for me to become a good and a better developer.

From the blog CS@Worcester – Hung Nguyen by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

Libre Food Pantry Mission

Libre Food Pantry was created to help and support local food pantries. Its mission is simple that to bring computer science and its software to enhance and support local needs. This is what I found interesting about Libre Food Pantry. For every piece of software today, the main reason is to profit its developers and organizations rather than to support the community necessity. It’s critical to think of software that created is to assists the needs of the community, not the need of the pocket. As software developers nowadays focus so much on the cash and paybacks that we sometimes forget what our initial intention and mission is. I chose to write about the mission of Libre Food Pantry because I hope that they would keep doing what they’re doing, let aside the business and help expand the community and support the people.

From the blog CS@Worcester – Hung Nguyen by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

JavaScript Quirks

As time goes on and I have learned more about JavaScript and its use in the back-end and front-end. I have found many surprises about JavaScript compared to other programming languages. The more I interact with it, the deeper I get to know the language and the framework inside. This article is to point out some of the odds about JavaScript.
Semicolon (;)
Java requires a semicolon at the end of every single statement, in case we don’t put a semicolon at the end the compiler would give us errors. Unlike Java, JavaScript does not have a compiler hence if we, unfortunately, missed out on semicolon, there’s not going to be any warning, but it might result in breaking our code or it would simply refuse to work. That is because of JavaScript’s automatic semicolon insertion rule. The rule states that a valid program ends with a (;) if it does not end with a (;) then JavaScript will automatically insert a (;). Therefore, it will not ask us to insert a semicolon.
Strict Equality (===)
Java has two types of Equality; one is single equality (=) means it’s used for numbers and the other is double equality (==) which is used for String. Move on to JavaScript, it has 3 types of equality. Two are similar to Java but there is also another one, it’s called Strict Equality (===). The Strict Equality checks if the data types are the same and if it is not, it returns false. Complicated, isn’t it?
Let and Const
It would be best not to use “var” to declare variable because it is not block-scoped and allows for mutation. Being block-scoped means a variable does not pass its boundaries, unlike var that does not respect borders. Professional users advise newbies to use “let” or “const” to declare the variable. Usually, developers would use “let” unless they don’t want that variable to change then they would use “const”. On the other hand, Java gives users a variety of variable declarations such as int (Integer), String, double (2.9), or boolean (true or false). So, simple but not simple at all.
Fixing Errors
About fixing errors, since JavaScript does not have a compiler, therefore, it’s harder to fix errors unless we type something that is absolutely not making any sense. The only way to fix the error is to run the code on localhost and figure it out from there. However there’s a fix for that, it’s ESLint. This extension uses command lines to tell us where the problem lies but also could fix the errors if we run.
Now we have learned some JavaScript quirks and there are many more that we should spend more time to look. But JavaScript still dominates the market despite all things above and is one of the most popular languages in 2021 and undoubtedly 2022. So, deal with it.

From the blog CS@Worcester – Hung Nguyen by hpnguyen27 and used with permission of the author. All other rights reserved by the author.


While I was seeking an internship, I had run into a great friend who currently works as a software developer. He mentioned this method which is called CI/CD and told me that this is a great way to develop, deploy and maintain software that developers should know about. Following his world, I’ve done research about this topic and found what he said was entirely true. For developers who want to learn more about the software development process, this blog is for you. This blog is going to focus on what is CI/CD and what it does to the software development life cycle.

CI/CD is a method to frequently deliver apps to customers by introducing automation into the stages of app development. There are three main concepts developed to CI/CD are continuous integration, continuous delivery, and continuous deployment. CI/CD is a perfect solution along with Docker to solve the problem that new code can cause for development and operation teams. CI/CD introduces automation and continuous monitoring throughout the life cycle of apps, from integration and testing phases to delivery and deployment. This practice is referred to as “CI/CD pipeline” and is supported by development and operation teams working together in a responsive way to have the best approach.

CI/CD is also a software engineering practice where members of a team integrate their work with increasing frequency. To do so, teams strive to integrate at least daily and even hourly, approaching integration that happens continuously. CI emphasizes automation tools that help build and test, finally ultimately focusing on achieving a software-defined life cycle. CI is successful, build and integration effort drops, and teams can detect errors as quickly as practical. CD is to be packaging and deployment what CI is built and tested. A team can build, configure, and package software as well as rewrite its deployment to fit with its budget at any given time. As result, customers have more opportunities to experience and provide feedback on changes.

Continuous integration helps developers merge their code changes back to a shared branch, more frequently- sometimes even daily. Once the changes are merged, those changes are validated by automatically building the application and running through many levels of testing to ensure changes have not broken the app. CI makes it easier to fix bugs as quickly and often as possible.

While in continuous delivery, every stage-from the merger of code continuously changes to the delivery of production-ready builds-involves test automation and code release automation. The goal is to have a code-base that is always ready for deployment to a production environment.

Those things above are some benefits of CI/CD and personally, I found it very interesting to me as a future software developer. I think this method would help developers to maintain the best of their system as well as the foundation of security.


From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.


I’ve been seeing so many json files while working with Docker and cant help myself but wonder what is JSON? What do they do and why do we need them along with JavaScript. In this blog, I want to cover this topic to help myself and others to learn more about JSON.

JSON stands for JavaScript Object Notation, and is a way to store information in an organized, easy to access manner. Basically, JSON gives human-readable collection of data that can be accessed in logical manner. There are many ways to store JSON data but Array and nest objects are the most popular ones. However, I will not go into the details about those two methods but focusing more on JSON definition.

Why does JSON matter?

JSON becomes more and more important for sites to be able to load data quickly and seamlessly, or in the background without delaying page rendering. Also, it helps switching up the contents of a certain element within our layouts without refreshing webpages. This is convenience not only for users but also developers in general. Because of its popularity, many big sites rely on content provided by sites such as Twitter, Flickr, and others. These sites provide RSS feeds to minimize the effort to import and use the server side, but by using them with AJAX (a powered sites), we run into a problem that we would only be able to load an RSS feed if we’re requesting it from the same domain it’s hosted on. JSON allows us to overcome the cross-domain issue because using callback function in JSON would send the JSON data back to our domain. This capability makes JSON so useful as it solves so many problem that were difficult to work around.

JSON structure

JSON is a string whose format very much resembles JavaScript object literal format. We can include the same basic data types inside JSON as we can in a standard JavaScript object such as strings, numbers, arrays, booleans, and other object literals. This allows us to construct a data hierarchy. JSON is also purely a string with specified data format which means it contains only properties and it doesn’t have methods.

REST vs SOAP: The JSON connection

Originally, this kind of data was transferred in XML format using a protocol called SOAP. However XML was robust and difficult to manage in JavaScript. The reason is JavaScript already have objects, which are a way to express data within this language therefore Doughlas Crockford (JSON creator, also JSLint and JSMin) took a subset of that expression as a specification for new data interchange format and renamed it JSON.

REST began to overtake SOAP in transferring data. The biggest advantages of programming using REST APIs is that we can use multiple data formats which means you can include not only XML but also HTML and JSON. Since developers prefer JSON over XML so they come to favor REST over SOAP.

Today, JSON is the standard for exchanging data between web and mobile clients and back-end services. As I go deeper into the software development cycle, I feel like the need for JSON is essential. Let aside all advantages, there are disadvantages but the importance of JSON is undebatable.


From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

API (Application Programming Interface)

Applications such as Expedia, Amazon, Netflix or Facebook are using an API that facilitates the sharing data from one application to another. There are hundreds of APIs for many fields like finance, social network, payments and e-commerce. Nowadays, the fastest-growing category APIs is sharing and analyzing of data across various applications which is a place the characteristics of the API determine the value of the application or deem it untenable for use in the real world. But how could APIs connect each application together, let’s us take a deep dive into the world of APIs.

API stand for Application Programming Interface which includes three important components

  • Procedures: Known as routine which refer to the specific tasks or functions a program performs. For example: Facebook provides a search API for developers to examine data for analytical purpose
  • Protocols: The format is used to communicate data between applications. However application might not have the same format
  • Tools: Simply put – building blocks which is the recipe to construct new program

APIs are needed to bring applications together to perform a designed function which allows to use, share and execute data. APIs act as middle man, this allows developers to build new functions between applications and businesses use on a daily basis.

How APIs actually work?

Application: Enterprise businesses and corporation rely onto user financial data, inventory levels and purchase order confirmation back and forth between suppliers, customers and partners. Consumers and business depend on mobile application, spending much time per day on smartphone and tablet apps to exchange businesses with partner and customers.

Programming: Application relies on programming. The application does not make itself. In other words, we would not be able to make new application without developers who write the code to create, testing and design the application software and user interface.

Interface: This is where users and application interact with each other

API is important that without it we would not be able to order stuff from Amazon or personalize your favorite Google homepage. The simple way to understand APIs is to understand that API is an interface that let this application talk to another inside the application via commands designed by programmers.

Types of APIs

  • Rest APIs: known as RESTful APIs, stands for Representational State Transfer. It has grown in popularity of late, as an essential part of Web Services. It’s designed for developers to perform requests and receive responses via HTTP. There are four types of HTTP commands that REST is based on which are GET, PUT, POST, and DELETE. Instagram uses API for users to pull up information and pictures
  • SOAP APIs: Stands for Simple Object Access Protocol. SOAP is a protocol that is defined by a standard. It is dependent on XML-based systems and programming, has larger and more expensive data. Despite the disadvantages, SOAP provides better security for users.
  • RPC APIs: Remote Procedure Call was the earliest form of APIs. They are designed to execute the block of code on different servers.

APIs are running data for business every day. They give businesses and users the flexibility to increase productivity and improve security. Taking advantage of APIs can help them have innovative approaches. While the potential is undeniable, efficiency is still another matter.


From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

Command Line

Command-Line is essential to developers and I think every developer should master this skill. In my point of view, the command line is quicker than a regular click which saves developers much time along with effort, and the command line is one of the best tools at our disposal. Recently, I have had more opportunities to practice command-line while learning about Docker. It comes to my sense that using CLI fastens the Docker process than the original clicking method.
Knowing CLI gives you better accessibility to control the system. You can only access these kinds of commands via the shell on Unix/Linux and Power-shell on Windows. The basic commands only involve changing the directory, creating new files, and editing text files. The more advanced techniques could involve managing database systems like Apache/SQL. And elite users could use the command-line to do test penetrating to expose security vulnerabilities.
Developers spend an amount of time in Command Line Interface to execute codes or to run packages. Two essential programs are git and brew was designed exclusively for CLI though there is a way to use it without CLI interference, this is still much quicker and easier to use and work with the code base in it. CLI also allows us to do manipulations with your system internals. It offers better flexibility and control than regular GUI.
Front-end and back-end developers are better off with CLI. Since back-end developers will be dealing with servers, configuration files, and making sure the code for your site is working. Front-end developers don’t need as many CLI skill sets as back-end but knowing CLI serves them .better in the long run. After all, both developers use git and git functional based on CLI.
Talking about the bad stuff, CLI in Linux is popular among penetrating testers, meanwhile, hackers love CLI because of its flexibility. Using CLI to run Nmap to expose vulnerability is a powerful tool. It allows us to scan the network and discover not only everything that is connected to it but also much sensitive information. Besides Nmap is Metasploit, another powerful tool for penetrating testing. The problem with Metasploit is it makes hacking simple than it used to be. Nmap and Metasploit are two powerful for testers and developers and to people who use Linux, these are essentials, not necessarily for regular Linux users.
To summarize, the main advantage of using CLI is if you know the commands, CLI could be faster and efficient than other operations. It can handle repetitive tasks easily and CLI requires less memory than other interfaces.

From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

Software product development common mistakes to avoid

Software developers play a critical role in creating to deploying an application, the amount of works and effort that they have to put in is tremendous. Therefore, mistakes are inevitable. According to Hackernoon, a well-known blog for developers, there are seven pitfalls that developers should limit during the development and the solutions.

Planning fallacy (Time creep)
Time is essential while creating a product. Developers want to ship their applications on time and also not taking too much time to develop. The managers want them to meet the deadline without hitting any barriers. The best way to prevent time-consuming as the deadline loomed is to have the best time management. By doing so, we avoid running out of time at the end of the developing cycle and deploy the product on time.

Insufficient budget

Budgets, like time creep, can easily be overloaded if they are not kept in check. Time itself will exceed the cost since time is money. However, We don’t talk enough about this issue and it’s hard to find a good approach to solve the problem. Hence, limiting the time of development and the delays would eventually lead to narrow the cost of production.

Conflicting Communication

Since the pandemic started, we all feel like human interacting and communication have gotten less appreciated. We spent countless hours on video call conferences, did not have face-to-face interactions, and made the connection between us felt apart. As developers, we spend the entire day on laptops, and previously we already get so little human communication unless when we discuss the problem with our team. Pandemic widened that gap between developers and led to miscommunication between each team member. Working remotely makes it harder to express our ideas and thoughts to our team members. As the perception is not demonstrating enough, this might lead to communication breakdown and ultimately causes conflict among team members.


Security has always been a big deal in this industry and especially to developers. Security vulnerability always exists. It’s part of software developer life. Software is among one of the most important things when it comes to secure user’s data. Billions of users have been affected by massive data breaches each year, showing that even big companies can sometimes make mistakes in developing the product. All we can do to minimize the risk of data breaches is to ensure the credibility of that software. By testing as often as developers could, they help cut back that possibility.

Many of the things in this blog is what I think is consequential to developers. More topics need to be covered, but personally, time, money, and security are needed to deserve more attention than the rest while developing a product in the Computer Science industry or in any other industry.

From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.


As my journey to find my very first internship as a software developer. I’ve noticed that the majority of the posts require Docker’s experience. From there, I realized that Docker is an essential tool for Software Developers and their professional careers. This blog is about Docker of what it is and also why it is necessary nowadays.

Docker is a container running time. A container is a standard unit of software that packs up codes and all their dependencies so the applicant might run quickly and reliably from one computing environment to another. Docker container is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries, and settings

The good thing about Docker is it helps developers get their application to work on every machine. Also, the abundant app’s libraries and dependencies ready to be executed make Docker even better compares to its same category competitive. Besides that, Docker is lightfast and also very easy to maintain.

Also, running applications in a container brings many benefits to both developers such as:

  • Portability: Once developers run their containerized application on their machines they also would be able to deploy it to other operations and be assured that their applications would perform the same as on their own.
  • Performance: VMs are alternative methods for developers but Docker offers much more compared to regular VMs as faster to deploy, quicker to start, and smaller footprint than ordinary VMs
  • Agility: Containers offer portability and performance help reducing time-consuming and make the process responsive and agile. Such advantages provide a better way to deliver the right software at the right time.
  • Isolation: A Docker container that contains one of the applications also includes the relevant versions of any supporting software that the developer’s application requires. If other Docker containers have different versions of the same supporting software, that is not a problem because Docker containers are independent.

Most uses of Docker make developer life simply better while developing applications. But it does not mean that Docker could entirely replace the actual Virtual Machine. VMs are still much needed if we have to have a whole operating system for each customer or the entire sandbox. VMs are still being used as middle layers when you have a big server framework and many customers that using them. Despite many good things that Docker could bring to developers, VMs still has a firm grip within the industry and development cycle.

From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.