This week was the first week where I came in and it felt like the last week. It’s kind of a strange feeling that I haven’t felt since I worked at the BAL laboratory last summer. Nothing against the job, but bacteria mostly remains the same. Here the code I’m working on is changing, and I have probably not typed the same line of code twice. This is a good thing, but I guess when a long bit of work keeps dragging on, it feels repetitive, even if it is vastly different
This is more than 2/3 of the way through the internship, and next week is the ‘end of summer’ intern event. I can’t believe that summer is fleeting, and school is coming again. I’m quite excited to switch gears, after watching myself transform here at the internship. I’ve seen myself change from an intern that had no knowledge of the code base, to a software developer that works on some of the same features as my coworkers.
What I did
This week was mostly user story work, pushing out this big code cleanup/conversion I have been working on. Honestly, I didn’t think it would take me so long, but it did, and I’m glad because I learnt a lot on the way.
Cleaning a code base is a lot of work and requires dedication. When working with old code bug fixes and impromptu features have accumulated, converting what once was a clean, well defined function, into a big jumble of bug fixes and conditionals. Not all of the code is bad. It usually works, contains many fixed mistakes, and contains error handling for errors you didn’t think of. Most of the work cleaning up the code is just rearranging blocks, and making functions. Then later on checking to make sure it works as intended. This is fun because I get to ‘re-freshen’ the code, and make it semi-clean again.
Good code tests will bring up errors that you haven’t even considered yet, and will push you to write better code. From running the tests that I do, I learned that the system can fall into a state that is very unlikely to happen. After a bit of investigation/debugging, the problem can be caught and fixed. I try to write the best error preventative code possible, and always log enough so I know what the system is doing. It will never stand up to real tests though. There will almost always be a flaw in the code.
Code takes a phenomenally long time to write correctly. I will certainly to learn how to estimate better. Estimating too low may also be due to pride. “Of course I can finish that in a week!” Coding isn’t just typing. It involves lots of reading, testing, and investigation. Giving myself extra time when planning out a user story is something I will need to do in the future.
I learned to roughly check bounds on multiplication and bit shifts. In a data structure that stored capacity the code stored numbers a 64 bit integers, which are pretty long, but aren’t infinite. There was a possibility that two 50 left bit shifted 2’s could be multiplied together which created an overflow of that integer type. It was hard to notice, but is one of the hazards of working as a developer.
Someone else has most definitely encounter the problem you are having. Normally this knowledge manifests as me doing a google search to find answers. Sometimes google doesn’t have all the answers though, especially when working on proprietary products or software that may not even be released to the public yet. When I run into a problem that is difficult, I can usually bring it up to a coworker, and within minutes they can offer a suggestion, or point me in the right direction.
The video card, VRM cooler, and cables that I ordered from Dell are coming in this Friday. I am stoked. (Obligatory #IWork4Dell). For those who are interested, I sold my RX-480 during the bitcoin boom, and bought a GTX 1080 reference card. I have a Kraken G10, and Kraken x40 to water cool it. Anyway, I enjoyed a slow week at home this week. Not too much going on really. I feel everyone needs time to relax every once in a while, so I certainly have been doing so. I think I may have taken writing up as a hobby. I enjoy writing for others, its’ quite exciting.