Reset phase at Encora Apprenticeship — Week 3

Ximena Sandoval
8 min readOct 25, 2021

--

This post is part of a weekly assignment at Encora Apprentice and in this series, I’ll share my journey as a Software Engineer Apprentice. I hope these stories help and motivate others on their tech journey.

This week at Encora

This week’s Encora Apprentice program was filled with fancy, miscellaneous topics, lightning talks, and some new tech skills.

Life lessons

With Carl Sagan’s Pale Blue Dot I started to be more mindful of the decisions I make and the impact they can have on the long run on an environmental scale. It also puts into perspective all human history and the goal to conquer a “single small dot” in the universe.

In The Future of Programming, it is mentioned that “people need to unlearn what they’ve already learned”, this is in order to create new things and keep improving, as we can see with the history of programming. It is explained that throughout programming history there was resistance to change, but this change was necessary to keep expanding knowledge frontiers.

This also applies to today’s scenario. If we aren’t open to exploring new ideas we won’t be able to improve and create new solutions because you believe everything is solved and everything has been explored.

The most dangerous though as a creative person is to believe you know what you are doing

I also got to learn about Moonshot Thinking, and how we need to have a clear, well-defined problem in order to solve it. Here is also implied to “shoot for the moon” when setting goals, even if don’t reach the moon, we will reach a much better place (like the stratosphere).

Moonshot thinking also encourages exploring ideas (much like we talked about in The Future of Programming), and in Google X Labs philosophy is to build solutions using this kind of thinking. Even if they don’t work, the idea is to fail quickly and move on into a new idea/solution.

In “La mejor presentación de tu vida”, it is shown the impact presentations can have (in and out of the working environment). The two main goals of a presentation are to:

  • Make people think things.
  • Make people feel things.

To achieve these goals there are some strategies we can follow:

  • Less is more. Don’t overwhelm the audience with tons of information. Simplify.
  • Give it order and structure. Organize the information you are trying to get to the audience.
  • Emphasize important concepts.
  • Audicence participation. Make them participate to feel part of the presentation.
  • Use images. They can evoke more than words and numbers.
  • Articulation and modulation of the voice and use of silences.

I also learned about how “creators need an immediate connection to what they create”, and as creators, we refer to anyone with new ideas. This talk also mentions principles, and how many of today's greatest inventions were created to solve a much bigger problem, to fight for a principle. I see this talk as motivation to start seeing a bigger picture, to recognize what is actually wrong although right now it can be invisible.

Finally, I got to learn a little bit about leadership skills, and how to be a good leader we should be able to coach and help people; as leaders, we should ask, listen, think, thank, respond, etc. I also learned about the Feed-Forward exercise, which consists of letting go of the past, listening to suggestions, learn as much as we can, among others. Of course, these skills are very important when working in a professional environment.

Learning fancy topics

Testing

This week I got to learn about Test Driven Development (TDD) workflow, alongside their good points and the not-so-good points. In TDD, the main idea is that at every stage we can test everything in order to make sure that we don’t break anything in production. As much as this is a good thing, it can also be a false sense of security. What if our tests don’t cover every scenario? What if they don’t work at all? We have to make sure that the tests that we are writing cover as much as possible.

Also, I got to read about Unit testing too. This approach takes testing to a much lower level, only focusing on a small piece of software at once. Unit testing rapidly leads to the creation of Extreme Programming (XP) and TDD.

One crucial aspect of unit testing is the time the testing needs and how they should run fast enough to not discourage programmers from running them frequently. If you have a set of tests that takes hours in running, they most likely won’t be used that much.

Finally, I got to know about a family of testing frameworks called XUnit, some of them being JUnit for Java, CppUnit for C++, among others.

Mockist vs traditional testing

Speaking of TDD, we can also see two different ways of implementing testing: the traditional and the mockist way. In a classic way, we use the actual object for testing and use state verification; in a mockist way, we use a test double and use behavior verification.

Both of these approaches have advantages and disadvantages, but when it comes to choosing one it is recommended to check if using the real object is “awkward” or way too difficult in the testing stage. If this happens, use a mock, if it doesn’t, use the real object.

Dependency management

When working with software projects, there can be problems when running the same software in a different environment, and this is most likely due to different dependencies of the same libraries. To deal with this issue we can use dependency management tools.

Dependency management tools can help with conflicts between dependencies (and transitive dependencies), and depending on the tool it will do it differently. We can also define version ranges to ensure that we are working with dependencies that can be different but within the same range of versions.

Infrastructure as Code and Terraform

I also got to learn about Infrastructure as Code (IaC) and Terraform. These were my lightning talk topics for this week. One of DevOps core values is automation and IaC’s objective is, as the name says, is to define, execute, modify and destroy infrastructure using code to automate this step in the release process. This can come as:

  • Ad hod scripts.
  • Configurations tools.
  • Server templating.
  • Orchestration tools.
  • Provisioning tools.

Terraform falls into the last category. With Terraform we can manage cloud infrastructure with just one tool instead of having to learn every CLI/SDK for each provider.

Hello World in Machine Learning

Machine learning (ML) is the study of algorithms that learn based on experience instead of programmer-defined rules. ML algorithms’ goal is to learn the underlying function of a set of data. There are libraries to help while developing ML classificators, like Tensorflow and scikit-learn. To make a simple classifier we need to follow three simple steps:

  1. Collect and clean data. Make sure you have quality data with good, independent features.
  2. Train model. Start showing your model lots of examples so it can pick patterns that help distinguish between classes. In this stage, it is important to test how the classifier is learning (with a separate testing set).
  3. Make predictions. Get predictions for new data samples.

There are a big number of classifiers that can be used, but in order to choose one, we should get to know about the data that we are working with first.

Knowing about the main ideas about ML is very important since we can come across some algorithms that we need to use and knowing a high-level idea of how and why they work can come in very handy.

There are other kinds of algorithms called Deep Learning algorithms. These work with neural networks as models and have multiple layers with multiple neurons each one.

Quantum computing

This week I also had the opportunity to learn a little bit about Quantum Computing and how it takes advantage of the behavior of electrons and the phenomenon we can observe with them. Quantum Computing also has consequences in modern cybersecurity, since it would make it easier to bypass current algorithms, but at the same time, it could serve to solve optimization problems that were thought impossible to solve in a reasonable time before.

Speaking of electrons, the double-slit experiment shows us that electrons behave like matter and also like a wave. This is the foundation of quantum mechanics and also quantum computing.

Hands-on

Vim

Vim is a powerful text editor in the terminal. Before this video, I was that person that would open Vim without knowing how to even start writing in the document, or even worse, how to close the editor. But now I learned about Vim's different modes (normal, insert, command, replace, visual) and some useful, basic commands for each of them.

I highly believe I’ll be using Vim more often, and for that, I made myself a little cheat-sheet of the basic commands (I also hope it can be useful for others too!).

One of the most interesting features of Vim is the fact of Vim itself being seen as a programming language, where you can type commands in order to make a program.

Git

Git is a version control system, a tool to keep track of changes in a collection of files. This is really helpful when working with software projects and also for collaboration since both persons can be working on the same project at the same time and merge their changes into the same repository of code.

Here is a handy cheat-sheet for basic Git usage!

Version control systems are a crucial part of every software project, that’s why I’ll be practicing and improving my skills using Git.

Movie recommender with Apache Mahout

Finally, I got to learn about Apache Mahout, which is a framework for distributed linear algebra operations, which are the core of many Big Data algorithms.

Using this framework we got to build and test a Movie Recommender using Java. Speaking of Java, I also got to know how to parse a .txt file into a .csv one!

Final thoughts

As a final note, I believe a very necessary skill for software engineers and any person working in the technology field is the desire to keep learning and expanding their knowledge.

Also, something that stuck with me was Moonshot thinking, and how shooting for the moon and not achieving that goal can still give us a better outcome than if we wouldn’t aspire for that much.

Sign up to discover human stories that deepen your understanding of the world.

--

--

Ximena Sandoval
Ximena Sandoval

Written by Ximena Sandoval

Cloud Platform Engineer at Encora. Currently learning about CI/CD, Kubernetes and watching Studio Ghibli movies✨

No responses yet

Write a response