This week I there was an intern event on Tuesday. It was quite enjoyable there was various lawn games, ice cream, and networking. I went with the interns in the cubicles next to mine. All this week and last week I have been going to lunch with them. We have a good time, and it is a great way to break up the work day. It’s pretty good considering the alternative is eating in my cubicle and browsing reddit. Also lunch outside is such a treat, the sun is great.
From working here, I think I’ve remembered why I set out to be a programmer; the joy of figuring out a problem. And it doesn’t have to be an unsolved mystery, I still get the satisfaction from figuring out what a small piece of code does. I’m sure that many different kinds of engineers can relate to enjoying learning how things work. I can’t believe it is already the end of week 4 out of a 14 week internship. Time really flies when you are working on an interesting problem.
One of the bugs that I’ve been working on that is being solved this weeks is a bug that was a tough one to figure out. It was due to a threading issue, which means that it wasn’t easy to replicate. I affectionately called it a “quantum bug” because when I went to analyze it was gdb (a debugger) I could not get it crash and abort like normal. This was due to the threading issue, in gdb one child process thread would always beat the other which was not the case when run normally.
What I did
This week I did more development work, I helped triage more bugs, and helped determined their root cause. I’ve worked with the team, done some code reviews of my own and had a decent time. I’ve also been sifting through documentation and code in order to prepare for the next agile iteration.
Having lunch with other interns is good. It allows more understanding of other departments in the company in a causal setting. It also provides a sense that you are not alone in your journey of learning.
The build process is so complex that common bugging, building, and editing tools are less useful than normal. I’ve reverted to using print statements to help me debug.
Networking does not have to be stressful or anxious. It can be simple if you put yourself in the right place. For instance I decided to go to an intern event, and while waiting in line for ice cream with my intern friends we got to meet some people firm the Conservation ERG (Employee Resource Group). Also one of my intern ‘friends’ used emacs instead of vim. Eww.
Bug reports are such a big part of development (after product release). I never realized the scope to which they play a role. For an internal company tool, there are many reports being filed so we out one developer every agile iteration on triaging all the bugs that come in.
This is a good things, because I’ve seen many people in the company being helpful when it comes to this. I’ve been CC to a few email chains, and it is interesting to see how bugs move around the company. It is less of a blame game, and more of a dependency chain. For example this person is waiting on this person’s decision, who’s also getting a reply from so and so, etc. At least the work gets done in the end.
Being part of a team is what makes the internship most enjoyable. I get to say hello to team members every day, and every morning we have a 10-15 minute meeting where we discuss how everything is going. My code gets reviewed by the team, who are very experienced people. That helps me learn best practices. We truly build the project together.
No matter how long you are a software engineer you can never escape reading/writing documentation. I’ve had to read a lot of documentation recently and I notice that even Sr. Software engineers have to keep reading/ writing documentation.
I need to rebuild the entire project which can take up to 3 hours, so I’ve found myself reading more documentation while that occurs. I’ve noticed that reading code is much easier for me than reading documentation. The comments help clarify the intent of the code, and there are not as many acronyms. If I don’t understand something, code is literally algorithmic instructions that takes place every time the program is run. Eventually I will have to write/read documentation for a product or feature that has not been implemented yet, so I will keep practicing.
Some days are slower than others. Today I only had one task, read code for a better understanding of a specific part of the project. While this isn’t really a hard task, it does take a bit of mental stamina. I knew it was especially bad when getting an email was exciting because it was a distraction from the code.
Even when I went to lunch today with Aidan (another intern), there were about half the people that were normally there. It must be due to the fact it is Friday. From what I gather, some people work from home on Friday.
I’ve hit a spot of bad luck with my personal pc equipment. My new motherboard that I got in April fried a little while ago, and I found out Thursday that the hard drive on my webserver died. That made putting this blog up a bit tricky. I wrote the blog application this week using Django, BootStrap and a CSS template, but without a server to host it on the project has been sitting on my college laptop, waiting to see the light of day.