Week 2 — Polyglot Programming
The path of a software engineer is misunderstood by the media and unknown to the general public. Successful software engineers don't just consist of technician knowledge and coffee. They also have to develop a bunch of soft skills such as communication and flexibility during their careers. This engineering is more about dealing with people than we usually think.
There are many myths around programming, but Brain Fitzpatrick and Ben Collins-Sussman exposed the truths about the job of a programmer during their conference. I learned that there is no genius, and nobody should expect it. Programmers should not be afraid to fail instead, they should keep constant practice, embrace failure and criticism, always be open to asking, be influenced, and be vulnerable. A real genius collaborates early and often, pay attention to tools and timing.
In the next conference, they described beneficial soft skills in software development. I listed the most useful pieces of advice that I considered.
- Thing feedback loop.
- Design, prototype and collaborate.
- Take responsibility, don’t wait around for orders.
- Express what do you think.
- Give people a reason to care and give them autonomy, mastery, and purpose.
- Buildup trust.
- Learn to talk to non-technical is an important skill.
- Culture conflict is recurrent. Try to protect your culture.
I appraise these pieces of advice because they seem logical, and they are given by people who are very experienced in the field.
In the last conference The art of organizational manipulation, Fitzpatrick and Collins-Sussman describe the differences between the ideal work environment and reality, and how we could find the balance.
Then, Brain and Ben provide a list of actions that we could use to manipulate the situation in your work environment. These actions stimulate a better labor culture among the employees, but primarily they help to boost our career in the organization.
Dave Thomas in his conference explains about how to develop expertise. According to Dreyfus model, there are 5 stages that consist in the journey from being a novice to an expert. In order they are novice, advanced novice, competent, proficient and expert. I learned that most of the people is unfortunately advanced novice in any field, because the “Never Fail” culture doesn’t allow people to make mistakes. It’s the reason that innovation and improvement occasionally occurs, due to the obvious risks. But Thomas give some advices about how to apply the model:
- Imitate.
- Watch one, do one and teach one.
- Embed learning in practice.
- Practice gives experience.
- Invest in practice privately.
I could use all these advices during the Academy and the rest of my career. Practicing every topic that I learn, trying to teach my knowledge and imitate the good programming practices.
According to the videos Everything is a remix, the basic elements of creativity are copying, transforming and combining. In the music, movies, arts and technology, these actions are constantly repeated. Getting inspiration (copy) from other’s works is inherently in human nature. No one likes been copied (or ideas stolen), but this is only way to evolve. I could incorporate this truth to my mindset. It could help me to improve things around me. And I may copy code or ideas, and then adapt them to my need.
The best programming language doesn't exist. Every programming language have advantages and disadvantages, but we could use certain criteria to choose the “best” one.
- Productivity.
- Performance.
- Reliability.
- Portability.
- Community.
- What you already know?
The next time when I start a new project, I will consider this criteria to choose the “best” programing language.
In the videos of Dr. Linda, she explains a lot of useful information. She talks mainly about the agile mindset, but also she relates it to human behavior. In the talk Perfection is an unrealistic goal, Linda gives some interesting advices. Productive doesn't means to work during long terms with no breaks. She explains we need to sleep enough (90 minutes cycles) and to do recreational activities, because these actions will improve our performance. In her talk The agile mindset describes how an agile mind is. For an agile person:
- The goal is to keep learning.
- They embrace challenges.
- Failures don’t define identity instead, they provide valuable information.
- The effort is the path to mastery.
- Resilience remains in moments of crisis.
Also, in this video she explain how society damages girls. Society enforces fixed mindsets to the little girls, so they doesn’t develop their full potential. Dr. Linda resumes Agile software development in failing early and often and to learn constantly.
Who do you trust? is an very interesting talk.Dr. Linda explains how society unconsciously labels others and continually sorts others into in-groups and out-groups. Labels and stereotypes are bad, because of them we are losing talent and meaningful interactions. Using agile we could help to overcome this issue. Daily standup, pairing and retrospective are good actions to apply. And we have to understand something, each person’s outcomes are affected by the actions of others.
Finally, in the reading, called collaboration, bonobos and the brain. Linda provides good advices and useful information about what makes agile successful. The first piece of advice is “Data gathering, then go to sleep”, it is how we take advantage of the unconscious and get better results in problem-solving. The second piece of advice is to keep small groups. Groups that consist of 10 persons or less, helps to maintain good communications and relationships. Bonobos are animals with complex and lovely interactions, and as humans, we can get this kind of interaction through practices as pair and daily standups. Pair programming has been helping women to keep in the field, Dr. Linda believes that pairing exposes our inner bonobos and it creates an optimal environment for women. And the last piece of advice is “Food is a very strong and powerful influencer”, this means that sharing food is the only action that demonstrates caring and trust.
Dr. Linda’s ideas are powerful and put them into practice will make any individual and group remarkable. I’ll try to implement her ideas in my daily life. Data gathering and then go to sleep, pair programming, embracing agile actions, and taking breaks often.
In week 2, Colt McAnlis videos were required to watch. Perfmatters is a good video that talks about the need to improve the performance of web applications. McAnlis describes the performance tuning loop: 1) Gather. 2)Insight. 3)Action. Then he shows the three pillars of web performance: 1) Network. 2) Render. 3) Compute. On these pillars is where you need to focus your performance time.
Optimizing the critical path of your web will improve the Network pillar, decreasing the number of paints as part of the render pillar and reducing Js execution time.
In variable-length codes, Colt explains the need of utilizing compression algorithms to effectively reduce the size of the content. Variable-length codes (VLC) assign a variable length of characters. Entropy represents the best estimate of the minimum number of bits, so using VLC entropy decreases, but it just works when we assign the shortest codes to the most frequent symbols. When we are using VLC is important to consider the prefix property, this concept refers to once a code has been assigned to a symbol, no other code can start with that pattern.
The third video is The LZ77 Compression Family, Colt explains that is need a balance between the longest chains and the smallest entropy and it is a pretty difficult problem. LZ family is such a dynamic and efficient algorithm. This family is the backbone of the most popular and aggressive compressors. During this video, McAnlis explains the basics of the Markov Model. It consists of a token, which its parts are offset (ofs), length (len), and next token (nt).
The last video of Colt McAnlis is about Markov chain compression. Unfortunately, it’s not easy to write about this video, because the topic was too difficult to understand. The main ideas I got were that Markov chains help us answer questions about associative probability. It is used from cancer research, weather prediction to modeling consumer behavior.
There is too much to study and understand. I feel very passionate about these topics because I can see how relevant they are. I’ll still be looking for information. So I could understand these fascinating concepts and methods.
This week I learned about containers “Queues” and “Stacks”. These concepts are related to data structures. Queues behave as a line, where the first element is the first to get out. Enqueue refers when you insert a data in queues, meanwhile dequeue is about removing an element (always in order that they were added)of the queue. Stacks behaves as a box, where the last element that you inserted is the first one to appear. So the function push will insert the item in this container, and the function pop will remove the last element added.
The talks by Encora were very interesting. They gave information about how we could use it to develop our soft skills. I learned how to approach people and meet new persons. Also, I understood the importance of feedback and its positive impact on Encora. I want to incorporate feedback in my daily day, so I could improve my soft and technical skills.
In conclusion, this week was very challenging. I learned about soft skills, data structure, and Java. Software engineering is a career full of surprises and challenges. Because this week, I understood the importance of keeping good communication and early collaboration. Next week, I’ll try to implement this week’s pieces of advice and good practices to improve my performance and group collaboration.