The internship is picking up more and more which is good, it’s challenging, and it’s flying by. I can’t believe I’ve already been here for 5 weeks. It’s strange the more work I have to do, the faster the 8 hours goes by. The fact that as a software engineer the work changes every day only speeds up time. My favorite part about this job so far is that I can come in on Monday and be partially excited, because I got an idea on how to do something better over the weekend.
I got to talk to my mentor this week about the company. I learned a lot about how the company works internally and how they encourage you to better yourself. Every employee gets one on one time with a superior to talk about their work, and their future. For example there are different paths to go down, becoming a manager, consultant, system architect, etc.
I am just learn about those different roles now, so I’m not exactly sure where I see myself in 5, 10, 20 years. I do not think I’ll be a software engineer till the end of my career, but only time can tell.
What I did
This week the next PSI (Potentially Shippable Implement) planning has been going on. I’ve gone to meetings and helped plan what we are going to do next as a team. I also get assigned to do more complex work which is good, as it exercises the creative part of coding.
A lot of work goes into planning the direction of the team. Meetings may be a hassle, but they ensure everyone in the group has one view of the project goals. This is also the most important part of development in my opinion. Without a plan there would be overlapping commits, terrible code structure, and no information on the state of the project.
Donuts make meeting better. Being part of a team is important, and random acts of kindness do make a difference. So an employee bringing in donuts for everyone is a good way show that the team is one. That may sound like a load of cliché junk, but it really does work.
Tooling is also something I didn’t notice at first about Dell, because it was very similar to what I had worked with before. The company itself is not very restrictive as far as developer tooling goes, which can be a good or bad thing. I believe it is a good thing as it allows developers to feel comfortable.
As a developer I am given install privileges on the company laptop, which cannot be taken for granted. We are allowed to use whichever IDE, text editor, version control client, and miscellaneous tools we want. This is great for CLI (Command Line Interface) people who don’t want to be tied down to a GUI, and it works for GUI people, who don’t want to use CLI commands. So far this is almost exactly like school. The part where it differs is the VCS (Version Control System). Currently my department uses git ( which I very much enjoy), and it is a bit strict. Every PR ( Pull Request ) must be met with 2 approved code reviews, and a full build must be complete. While this may take some time, it ensure there are no headaches in the future with corrupted branches or broken code. I like the company’s stance on the issue.
Performance is relative. I was writing a new function that had to find open blocks that were not in use, and I was given a list of LBA Ranges as input the function. I was trying to stay away from a Linked List data structure, and doing linear searches of that Linked List because as a Computer Science Student would know, they are not optimal data structures or algorithms for the problem at hand. After a component of boost library failed to compile, I was looking up ways to implement interval trees.
I talked about the boost problem with James, another software engineer on the team. During that conversation we talked about interval trees and time complexity of the operations involved, since he was rewriting code that might be able to use that. Then he commented that the typical list size is about 500 elements. So creating a tree, and using a fancy algorithm would probably not yield that good of a performance result. We both decided that a simple linked list, and a slower search algorithm was the way to go as the code is not complex, and it is good enough. Use the right tool for the right job I guess.
Code can become ugly really fast. Especially if it goes unchecked. According to Linus Torvalds, good taste in coding requires eliminating edge cases, and applying a general process to everything.
In writing a new function I wrote some pretty junk code, and by identifying that it was junk allowed me to see it differently. I was able to eliminate an edge case, and comment it better. The code still seems bulky, but maybe I can get some advice on it during code review.
If it ain’t broke, don’t fix it. This came up on two occasions today. The first one was when I first walked in. I could not log onto my laptop, which is a big issue, because that is what my work is. I called IT support, they filed a ticket and after waiting for some time I decided to try and fix it myself, and after restarting without internet, it allows me in. Afterwards I plugged in my internet and I was able to get work done, hurray! But the ticket was still in, and someone from remote support was helping me. After a while, they said that I needed local support, they transferred me and told me to reboot. After the reboot I was locked out with no way back in. I was once again unable to do work.
Eventually that got fixed, I met a nice man working for IT named Jeff, and I was able to do work again. Then a host I was using was acting up. So I decided to restart it. Lo and behold, it never came back up. I was once again blocked from doing work and frustrated. I filed a ticket, and hopefully next time something like this happens, I will remember to just let it be.
In preparation for a sail boat race this Saturday, I went out for sailing practice this Thursday after work. I got more practice and learned that my role during the race will be trimming the main sail. This means that I will be the throttle of the ship. The Dell EMC soccer game this Monday was fun, although I didn’t feel as though I played as well as the first game, I am getting back into shape, at least a little bit, which is good.