Insights From Week Four As A Software Development Intern
Quantum Computers and Machine Learning 🤖
Technology is one of the few science fields that doesn’t follow Planck’s principle. In computer science, innovation happens exponentially, and, within a generation, we have gone from Dial-up internet to High Speed Broadband internet service. To put this into perspective, 20 years ago it took from 30 minutes to a few hours to download a 3MB song. Now, it’s a matter of a few seconds.
However, this past week I learned about some challenges that this industry will face in the next years. If we overcome this challenges, it will allow people all over the world to break barriers and allow for further advancement in the Computer Science field. One of these exciting advancements is Quantum Computers.
Before this week, the only things I knew from Quantum Mechanics came from the movie What the Bleep Do We Know!?, which is a pseudo-scientific movie about the connection of quantum physics and consciousness. This was not at all compared to what I learned this week about superposition and quantum tunneling.
Overall, after some pondering I believe that technology will continue to improve and change fast and it will allow new software development possibilities. It is vital skill in this field to be comfortable with changing and continuous learning.
Also, this week I learned about Machine Learning (ML) with Google’s playlist about the topic. This was a very interesting and exciting experience because I was also able to implement ML models and relate them with a statistics course I had previously taken. For me, this is a vast field that requires far more than programming skills with Python. It requires, critical but also creative thinking to implement correct models and ask the right questions.
Finally, another of the assignments included readings of Test-Driven Development (TTD.) These articles allowed me to understand better the differences between different types of testing. This reading was also useful while implementing the programming code and overall, I enjoyed learning about this type of development and would like to have hands-on exercises.
Fail Fast 🚀
Last Monday, I set one main goal for this week: Be more vulnerable and ask for help. During the week, one of the assignments was to write an implementation of a movie recommendation using Big Data and Java. Before this, I had never coded in Java in my life so, needless to say, it was the perfect scenario for me to practice vulnerability. For the purposes of documenting the progress and my experiences, I wrote a journal and here I will share the most important insights.
Day 1: New coding problem. Looks promising but coding in Java will be a big challenge. I install Java and IntelliJ. I spend a couple of hours trying to fix a Maven dependency problem.
Day 2: Asking for help. I reach to my mentors and ask for help with using Maven. Within a few minutes one of my mentors helps me with the problem. This feels like a win and helps me get started with my day and I feel far more motivated.
Day 3: Implementing small-scale recommendation system. This is the first time I program with Java and I am constantly searching syntax and semantic details. Slow but steadily, I finish the problem.
Day 4: Big Data implementation. Time for the big leagues, I begin to examine the coding problem and search for a lot of things including: BufferReader, BufferWriter, Public class, Static, Main, CSV files, Exceptions. At the same time, I hear that some of my Academy peers already finished the problem and I wish I could finish earlier. Overall, I don’t feel discouraged because I have learned a lot these past few days.
Day 5. Fail fast. I finish the coding implementation (or so I thought.) I realize that the Recommendations Algorithm only processed Integers or Floats and the CSV file I created was not correct. I spend the rest of the day pondering ways to parse the information and consider using Hashing. Finally, I decide to turn back and redo the project differently.
Day 6. A fresh start. I start the day realizing that even though I didn’t solve the coding problem on the first try, I feel more prepared to start coding with Java. This time I decide to use HashMaps to solve the coding problem. At the beginning of the day I have a pair programming session and I ask for help about Writing a file in Java. My mentor helps me and I feel very motivated to continue with the problem.
Day 7. Collaborative work. I finish the coding problem and the time comes to do the tests. After a few trials and errors and asking for some advice from my peers, all of the tests pass.
Perhaps this journal doesn’t go into details but overall there were more than a couple of people from whom I asked for help. I still have a lot to learn about vulnerability (and Maven dependencies for that matter) but this week I felt happy with the balance of times I asked for help and times I tried to solve a problem on my own.
As a rule of thumb, I used an advice that one of my mentors gave me: Try to look for an answer on your own for a reasonable amount of time (one, two hours). If you still don’t have a solution, then ask. You will now be more prepared to formulate your question and the other person will appreciate you respecting their time.
Overall, this was a very fulfilling week with a lot of learning but, I feel specially grateful for the time that other people gifted me to explain, review or just talk with me. This conversations were very important for my development during the week and I am thankful for the willingness people have to lend a hand.
For the next week, I would like to work on improving the following skills:
- How to implement data structures
- How to effectively debug a program
- How to communicate technical details
Thank you for reading! 👋🏼