2/11/2018Time to read: 3 min
I have been working as a full-time software engineer for 7 months now. I think it's time for some reflections. For those who don't know, I work for a company called Veeva and we make software for the life science industry. I work in the UIPlatform team. I primarily work on the front end using JavaScript, but as I learning more about the system, I start to pick up some server-side projects in Java as well. It has been a pretty interesting journey so far. I am going to share something I learned from work.
Most of the school projects I worked on are one-man projects. The biggest team I had in school was 4. Now I am working with 2000 more engineers. It's much easier to make a change to a code when I wrote most of the code myself. Working in personal projects, I would found myself spitting out code rapidly because I knew the system quite well. Right now, before writing each line of code, I need to check if the same logic is written somewhere else, or if my changes will break any other code, or will my code be reusable by other people, etc. This is not a bad thing. It just means I have more decisions to make while writing code, but it does take some time to get used to.
At school, professor will assign projects with very clear specification. How much I want to extend on that is up to me. But as long as I meet all the requirement, I would get a good grade. In my database class, we needed to make a social media website. Our team just made a giant form with each input field matching a column in our database. True that no one would use this social media site, but it aligned with the requirement perfectly. At work, we are lucky if I have a very concrete specification from the start, but most of the time, drafting specification involves many discussions with team members. We may even change or redo the whole specification midway due to an unforeseen special case. In order to tackle the potential changes in specification, I am learning to write code in a clean manner that is easier to refactor.
In school project, it's relatively easy to find out why something doesn't work. However with the complexity of industry software, sometimes we will get bugs that seem simple but hard to diagnose the root cause. It's very easy to make assumptions about the cause and blame the respective developer. It might be that this feature depends on another feature that brokes. The developer might merge the code with another developer's code. Their code was not compatible but didn't show up as merge conflicts. Or perhaps under the original requirement, it was the best solution but it doesn't work with the changed requirement. There are a million reasons how a simple feature can break. Not blaming is hard. I know this from experience. I have also worked on something and got so stressful that I would like to blame the previous developer, but turned out it was some recently added dependencies that broke it.
I can't say 100% of what I learned in college is useful. I feel what college taught is fundamental, and what I actually use at work is very practical. I studied computer graphics in college but I don't think I need to deal with rendering pipeline as a front-end developer. I learned game programming, but again, I doubt we would incorporate a game in our enterprise app. However, some little sprinkles of knowledge that I acquired in each class turned out to be very useful. Like knowledge of command line from system programming class helps me navigating inside virtual machines at work. Finite automata from the theory of computation class turned out to be a great tool for designing front-end state...
I remember when I was in college, I always admired developers in the industry. They must be very smart to know everything about certain technology because they could build some robust apps that almost never break. Getting into the industry, I learned that, we are not smart and we make mistakes all the time. We don't know everything. We use StackOverflow all the time, and if we still can't figure out something, we will dig into the community for this technology and find someone who can answer the question. And most importantly, I start to see my belly gaining fat. Is that a sign of maturing?