What I learned from my 8 months of professional experience as a junior developer

Rebai Ahmed
10 min readApr 1, 2020

Introduction:

In this post, I will list all the technologies and tools with which I work during my first professional experience in be-softilys Tunisia, I will also mention the skills that I’m trying to learn in my free time.

Environment:

Nodejs:

“Node.js is a framework for writing server-side JavaScript applications. It is built on top of the V8 JavaScript runtime and uses an event-driven, non-blocking I/O model that makes it perfect for data-intensive, real-time applications.”

  • We are not a JS stack in the enterprise However it’s needed that’s why it’s installed in each machine (environment for Angular).
  • Used for client-side applications

Npm:

npm, short for Node Package Manager :it is a command-line utility for interacting with a said repository that aids in package installation, version management, and dependency management

What’s new for me ?? 😂😂😂😂

npm run command_name (defined in package.json)

(I tried it before hahaha)

.npmrc: ⛔️⛔️⛔️

“npm gets its config settings from the command line, environment variables, and npmrc files.”

  • we have npmrc file to help us install packages from trusted sources defined by the IT team

Maven (New) :

“Maven is a build automation tool used primarily for Java projects”

Commands learned :

  • mvn clean: it’s a really useful command, for instance in case a class is renamed, the previously compiled version will remain in target/classes until you run clean.
  • mvn install : Installs the package into the local repository, to be used as a dependency in other projects locally

Frameworks :

Angular :

“Angular is an app-design framework and development platform for creating efficient and sophisticated single-page apps”

-we are using Angular in our apps on the client-side, trying to get exactly like the User interfaces provided by the designer and apply all the best practices (component-thinking, services, pipes, custom directives, Ngrx in some projects …)

Spring boot :

Spring Boot is a project built on the top of the Spring framework. It provides a simpler and faster way to set up, configure, and run both simple and web-based applications

bootstrap :

Bootstrap is the most popular HTML, CSS, and JavaScript framework for developing responsive, mobile-first websites.

Priming:

“PrimeNG is a rich set of open-source native Angular UI components.“

We are using custom angular UI components based on PrimeNG and that respect our main (graphical charter )

Databases :

MongoDB :

“MongoDB is a document-oriented NoSQL database used for high volume data storage”

-@DBREF (New) :

Is used when the references are to be made to the documents present in the different collections.

Test:

Unit Tests (New):

“UNIT TESTING is a level of software testing where individual units/ components of a software are tested”

Honestly, I have not worked with unit tests throughout my academic journey, neither during my internships nor in my freelance jobs, but I think it is a useful tool to learn.

Integration Test (New):

“INTEGRATION TESTING is a level of software testing where individual units are combined and tested as a group”

  • I’ve always heard about integration test from experienced developers that are working on massive projects (production mode) but I never tried it before. I think integration test is a concept that we should learn and apply as junior developers.🕖 🕗

Junit (New):

“JUnit is an open-source Unit Testing Framework for JAVA. It is useful for Java Developers to write and run repeatable tests”

I tried this framework to write my unit tests scenarios and it was very helpful

While working with JUnit, I have learned some annotations like (@BeforeClass, @Test ,@RunWith, etc ..)

Mockhito (New):

Mockito is an open-source testing framework for Java released under the MIT License.(@Autowired , @MockMVC )

Whats the difference between mockito and Junit ???❓ ❓ ❓

Still searching… 🤔🤔

Design Patterns:

  • Builder pattern :

“The builder pattern provides a build object which is used to construct a complex object called the product. It encapsulates the logic of constructing the different pieces of the product”

not yet understood I implement it in unit test scenarios and I used it to build different instances of a class for each test scenario. ✍️✍️

  • DTO :

DTO is a pattern and it is implementation (POJO/POCO), independent

. DTO says, since each call to any remote interface is expensive, response to each call should bring as much data as possible. So, if multiple requests are required to bring data for a particular task, data to be brought can be combined in a DTO so that only one request can bring all the required data

Data Transfer Object Design Pattern is a frequently used design pattern. It is basically used to pass data with multiple attributes in one shot from client to server, to avoid multiple calls to a remote server

Tools :

For code-editors used, I think the first thing that we should learn is “shortcuts”.

Intellij IDE

(shortcuts ):

  • Double-Shift → Search Everywhere
  • Ctrl+F →Find…
  • Ctrl+/ → Comment/uncomment with Line Comment
  • Ctrl+Shift+/ → Comment/uncomment with Block Comment

vscode

( shortcuts ):

  • Double-Shift → Search Everywhere
  • Ctrl+F →Find…
  • Ctrl+/ → Comment/uncomment with Line Comment
  • Ctrl+Shift+/ → Comment/uncomment with Block Comment

Eclipse :

(shortcuts )

  • Double-Shift → Search Everywhere
  • Ctrl+F →Find…
  • Ctrl+/ → Comment/uncomment with Line Comment
  • Ctrl+Shift+/ → Comment/uncomment with Block Comment

Open-stack :

“OpenStack is a cloud operating system that controls large pools of computing, storage, and networking resources throughout a datacenter”

For our infrastructure, we are using Open stack as a private Cloud solution

Keycloack :

“Open Source Identity and Access Management For Modern Applications and Services”

Git commands:

Through my professional experience, I have learned many useful git commands that are so helpful and I think most developers should know how to use them. Another main skill in our work ( I’m very grateful to the previous team leader that I learned from him these commands and how to apply each one switch situation)

  • git rebase origin/branchName ( — continue, — abort ,— skip):

-the rebase command integrates changes from one branch into another (always rebase the dev branch LOL )

  • git pull — rebase :

pull: when collaborating with others on the same branch. You are in your work → commit → work → commit cycle, and when you decide to push your work your push is rejected, because there’s been parallel work on the same branch

rebase to avoid the extra merge commits.

📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗📗

  • git squash :

With git it’s possible to squash previous commits into one. This is a great way to group certain changes together before sharing them with others

squash advantages:

  1. Clean timeline: The development of features is clearly visible because every commit is a feature.
  2. Commits representing work in progress (WIP) broke builds on CI-server.

🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎🔎

  • git stash (save/apply/pop):

git stash temporarily shelves (or stashes) changes you’ve made to your working copy so you can work on something else

Other options :

  • )” git stash list” (List the stash entries that you currently have)
  • -) “ git stash pop stash@{2}” (apply for example stashed work index 3 in the list )
  • -)” git stash clear” (Remove all the stash entries)

🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊🖊

  • git checkout (-b to create new One ) — branchName

Switch branches or restore working tree files

🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨🔨

  • git fetch/merge

)git fetch: It will download the remote content but not update your local repo’s working state

-)git merge: Join two or more development histories together

CI/CD Model:

What is CI (New) ?
Continuous Integration is the practice of merging all the code that is being produced by developers. The merging usually takes place several times a day in a shared repository. From within the repository, or production environment, building and automated testing are carried out that ensure no integration issues and the early identification of any problems”.

What is CD (New) ?
Continuous Delivery adds that the software can be released to production at any time, often by automatically pushing changes to a staging system.”

Continuous Deployment goes further and pushes changes to production automatically.”

Gitlab-CI(New) :

Ansible (New) :

“Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration,”

I didn’t practice it yet, but I think it’s an awesome tool that’s very helpful in DevOps operations and it’s used in our CI/CD model

 ansible-playbook web-server.yml

Docker (New) :

“Docker is a tool designed to make it easier to create, deploy, and run applications by using containers”

“Containers allow a developer to package up an application with all of the parts it needs,”

Commands learned!

docker images #List all docker images 
docker start CONTAINER_ID ##start your docker container
docker ps #List docker containers
and many other commands !

Terraform (New):

“Use Infrastructure as Code to provision and manage any cloud, infrastructure, or service”

“Deliver infrastructure as code with Terraform”

terraform apply

I didn’t practice it yet! but same for ansible it should be learned and searched even further

Teamwork :

Jira: software development tool used by agile teams

I think the necessary point for a project to be successful should be forming and providing the team with a good specification and description with UI mockups for front-end tasks and all necessary details ( we are using jira as a project management tool, and it’s mandatory to use such as tool )

Skype :

Skype for team communication, daily with external team members, or from remote work these days 🏫💻

Gitlab: GitLab is a complete DevOps platform, delivered as a single application

we are using Gitlab as a source code management!

Things currently trying to Learn :

Topics :

GraphQL (New New !):

“GraphQL is a query language and server-side runtime for application programming interfaces (APIs) that prioritizes giving clients exactly the data they request and no more”

I’m currently making an advancement with this topic. I understand the concepts, the popular tools and I started working in this repo to implement some pocs with different technologies (spring boot, react, node, angular )

Microservices (New):

“Microservice architecture, or simply microservices, is a distinctive method of developing software systems that try to focus on building single-function modules with well-defined interfaces and operations. The trend has grown popular in recent years as Enterprises look to become more Agile and move towards a DevOps and continuous testing”

I’m still reading some blogs about it daily, and I’m trying to collect good pieces of information about them to use them in future projects

“April Blog Introduction to microservices”

NgrX (New):

“NgRx is a framework for building reactive applications in Angular. NgRx provides state management, isolation of side effects, entity collection management, router bindings, code generation, and developer tools that enhance developer's experience when building many different types of applications.”

Still planned as a topic that I want to learn and master but I haven’t start searching it yet 🤔🤔.

Conclusion

“The minute that you’re not learning I believe you’re dead.”

Jack Nicholson

(March Blog)

--

--