Coding started this week for us interns, part of the nearsoft academy. Three problems in three languanges: Go, Scala and Dart. When I first saw the assignment I asked another intern, "What's Go, Scala and Dart?". Yep, that's how lost I was.
There were also 10 hours of videos, which was quite a stretch for this week, but it was fun to do nonetheless. I didn't quite finish the programs, and after writing a couple of them I realized I made a huge mistake, by writing them with input from the console instead of from a text file. Sadly I didn't have enough time to fix those issues, but the last program I wrote, I did it correctly.
From this experience I learned that it is important to take into consideration all requirements into the code that is being written. I wasn't aware of the requirement of being able to read text file input. Frankly, I had only used console input all my life. The other interns then explained to me that I did it wrong.
At the end of the week, this requirement was published in the skype conversation, but by that time it was way too late to change it. Like the talk I gave today, I failed writing these programs, but in failing I learned a valuable lesson: Requirements are extremely important! And if I don't know a requirement, I should immediately ask instead of doing the wrong thing.
Another lesson learned is that I write very inneffective code. I am well aware that the first program I wrote is very very bad code. Especially after reading the first few chapters of pragmatic programmer. I like to think that by the time I wrote that same problem in the third language, the code was better written. Not the best, most elegant efficient code, but granted not the crappy code I wrote at first. Especially because I included the requirement to read a text file. (Go was the first language, and Dart the third)
So having said that, there were several videos that we had to see. This time they were more “techy” than last week, but also very valuable lessons for working as developers.
The first one was called “the myth of the genius programmer” and explains a very important issue for developers. The Genius Programmer does not exist. It then goes on to explain some tips on how to develop effective software.
I would think that the most important part of this video is to lose the ego. An egotistic proud programmer will hide his code, be territorial, won't want to admit failure, and will not collaborate. All of these are terrible habits because they forget that no good software was built by one person.
The same guys that gave that conference give another one, called organizational manipulation. It explains how ideal companies work, how most companies work, and tips on how to change your company for the better. I found this video very interesting, because some (dare I say most) of the attributes that ideal companies have are implemented here at Nearsoft.
Another of the videos presents the importance of performance. In the society that we live in today most everything is mobile, and most people want everything immediately. People don't want to wait for websites to load anymore, especially not on mobile. A sometimes the users are on their mobile, and don't have WiFi access so they use their mobile phone internet service. This presents the issue of a slower network (maybe 3G) and data usage.
Clients don't want to wait for the web page to load, and they don't want to overpass their data limits. This is why performance matters in websites so much these days. Colt McAnlis explains this issue and explains how to use some tools to measure performance, find out exactly where the problem lies and what dependencies that need to be resolved before the web pabe loads causes the low performance.
There was a series of three videos explaining compression algorithms. It goes through the history of morse code, and the way that computers started implementing the variable length code that morse code uses.
It explains the way that Variable Length Code works and how it started to develop. It explained the probability functions used and how the most important algorithms were created. Where winrar, winzip, gzip come from, etc. It talkes about the most important ones, being the LZ family based on the LZ77 and LZ78, and Markov Chains.
The most interesting video this week for me was Developing Expertise, because Dave goes through the stages of learning a new skill. This was the most interesting one for me, since I'm learning a lot of new skills this week, and recognized several characteristics of the stages that I'm going/will go through. Going from Novice, to Advanced Beginner, to Component, to Proficient, to Expert. This model is called the Dreyfus Model. Several hilarious anecdotes were said during this video, about the speaker learning how to fly. A key phrase in that talk was “Don't try to race sheep, don't try to herd race horses”. Basically it talks about novices doing novice works, and experts doing expert things.
Another video was about the creator of CouchDB, how we didn't want to have this ordinary job where he's working for other people, and decided to go work on his own stuff. It worked pretty well for him, with IBM joining him on his project. At the end his conclusion about this whole journey that he took was “I'm the guy who gets paid to work on cool stuff”.
So to keep this short, cause the assignment was to write two page reviews, there were a couple other videos, by Linda who presented several ideas on agile software development. Speaking with my mentor, he explained that agile is a methodology that is used here at nearsoft. In the videos though, Linda explains that this is more of a mindset than a methodology. We are not to do agile, but to be agile.
There were also a couple videos where Linda is interviewed, although not necessarily on the same subjects on the previous videos. Linda speaks about prejudices and stereotypes. She explains that these stereotypes are unconscious, that it is the way that we perceive the world based on what we observe.
Therefore, two different people who share an experience have different memories of said experience. This is because we as human beings interpret everything based on what we know. Everything we see and perceive from the world is distorted by previous knowledge we have, which happens to be different from everybody else.
This is important, because it reminds me of a talk we had with Julio about perception and effective communication. What we perceive is not what the client or mentor perceives, and therefore we need to learn to communicate effectively what we actually want the receiver of the message to interpret.