My thoughts as an enterprise Java developer.

Thursday, February 18, 2021

Educational Pivot Points

Looking back at what brought me to where I am, there are many events that were important.

My older brother had trouble learning to read and I got the same 1st grade teacher as he had. She assumed I also would have trouble learning to read and refused to teach me. The special education reading teacher tested me and found that I didn't need to be in a special class. Since there was no place for me to learn to read, the special education reading teacher taught me individually. That individual instruction was better than the normal options and by the 3rd grade I was tested to be reading at the 10th grade level. My 1st grade teacher's negative attitude looked like it would hurt me, but someone else helped me do better then she could have likely done!

 

In 3rd grade, I remember being taught about rounding numbers. While it was being explained, I wondered what to do about the number 5. I was told to always round it up but in college (chemistry or physics), I was told to round 5 to get to an even number so that the rounding errors for 5 are canceled out. Over time you will find that it becomes more complex for figure out the right thing to do.

 

In 4th grade, I became friends with a boy who was interested in computers and did a little programming. I found that I also liked computers and programming. Seemingly accidental events can lead you on interesting paths.

 

In 6th grade, my teacher would sometimes play football with us during recess. Even though I never was a great athlete, he still occasionally threw the ball to me. I really appreciated that and you never know when a small act of kindness is meaningful.

 

At the start of 7th grade, we moved to a new state. I had been in an advanced math class but the new school wouldn't do that so I was bored with many of my classes that year. Sometimes you need to deal with setbacks.

 

In 7th or 8th grade, I started volunteering in the computer lab and was unofficially allowed to bring a computer home for the summer and got a summer job cleaning computers.

 

In 8th grade, they let me take 9th grade math. If you deal with setbacks well, that may open up doors. In that math class, I met a friend that I still talk with occasionally. He also introduced me to Boy Scouts which I enjoyed doing for many years and helped me become a lifeguard.

 

In 9th grade they upgraded the computer lab and installed the first computer network at that school. I volunteered to help install that and learned a lot. The computer coordinator even took me out of classes so I could learn when someone was brought in to teach him. Once that trainer told me to copy a file and I had to ask how to do that. Everyone starts with 0 knowledge so don't be embarrassed to ask for something to be explained. That new lab and network wasn't used for a semester so I got to explore it and help figure out how to use it. Because I had much more free time, I soon knew much more about it than the computer coordinator and he allowed me to have full administrative privileges. This included the ability to see and change any grades that teachers stored on the network but I never exploited that. With great power comes great responsibility. How you use power shows a lot about your character. I also learned a lot because I always stayed 2 hours after school in the computer lab working on homework, learning, and helping other students. I had to learn how to meekly help train my teachers and help them with any of their problems. I know some of the teachers and school administrators didn't like that I had that much power so I had to meekly show them that I was only doing good. Sometimes in classes in the computer lab, I had to lead part of the class or tell the teacher what to do. Some of my class homework was done with computers when none of the other students used computers. I suspect that my work somewhat dazzled the teachers and got better grades that other students who had better content. Don't be dazzled by flashy presentation that lacks good content. I also took 10th and 11th grade math, 10th grade science, and a German class usually taken by 10-12th graders so I had to learn to be humble to not make the students in higher grades feel bad. In my biology class, I was at a table with a student who didn't do well in that class. He used to gleek on me but I knew he must feel bad about looking bad compared to someone in a lower grade.

 

In 10th grade, my math class was for seniors and even had my older brother in it. That class was quite a bit different than my other math classes and at first I didn't do great so I had to put in a lot more work and studying than I used to.

 

In 11th grade, I was done with all of their math classes so they gave me a calculus textbook and put me in an Algebra 2 class (that I had taken 2 years ago). It was really hard to concentrate when the teacher was lecturing so I made very slow progress that year. Because of my good work with computers, the computer coordinator went to bat for me against the school board who didn't like my access.

 

For 12th grade, we asked the school board to pay for me to take a math, science, and computer science class at a nearby university but they only approved the computer science class. The district already had a policy allowing seniors to skip the last semester if they had completed enough work so I started college full time my last senior semester. When I took college calculus 1, my previous self study helped me for a few weeks but I had to work harder after that. When I started college, I looked at their computer network and found that it was the same type as I had used in high school (but more complex). While looking around, I found 1 department didn't have a password on the account with full privileges so I sent them a message warning them about that. They replied with a job offer! The department was the same department with my major so it was very convenient to mix working with my school work. While I was good at English, I wasn't interested in advancing that area so I signed up for the easiest English class required. After the first week, my teacher told me that I could take the honors English class and that it would involve less writing so I switched to that class.

 

When I was a sophomore, Mayo Clinic called the department looking for a summer intern. Because of my work in the department, they recommended me. That turned into summer and part time work the rest of my college career and a job offer after. During the first few weeks I had to speak up in a meeting to tell others I barely knew that they were wrong about a technology decision. You have to be meek and knowledgeable to make that work!

 

As a junior while working at Mayo I started using a new programming language that is still my primary language. Even though I never took any classes on that programming language, my first job was in that language. The class that was the most useful to my job programming was actually a math class with no programming -- it was about proofs and I've found that the proof process has been very useful when I program. One class had a semester project and I decided to use the new programming language. Because I liked programming and the new language had many features, I made quick progress. A few weeks into the class, the teacher gave help in the old language that I didn't use for problems that I had already addressed! Working on interesting problems can cause you to spend a lot of time on them and make quick progress.

 

It took me 4.5 years to graduate from college but I went a little slower because of working a lot at Mayo. That slowdown actually allowed me to start looking for a job with 2 years of experience. Since I lived at home during college, had the side jobs, and was frugal, I was able to graduate with no debt. When I was looking for a job, there were 3 related job types that I considered. One of those types doesn't exist anymore so I'm glad I didn't choose that.

 

When I interviewed at SPS Commerce, I interviewed for 2 different departments. After some thought, I picked one and the other was sold to a different company a few years later. After a few months, my manager gave me a problem that we didn't know how to reproduce, only happened in the production environment, only happened sometimes, and then left for a week to go to a conference. I had no idea how to fix it but I knew a step that I could take that might help. After a few times of just taking the next step, I finally was able to find the cause of the problem and figure out a fix. You don't need to know how to solve all problems if you just know the next step and continue taking each next step. A few months after starting, my manager asked if I would like to be moved to a new responsibility (production support). I wasn't sure if I would like that but I decided to give it a try. A few years later the company went through layoffs but the production support developer is the last person to be laid off so I was spared from all layoffs. After a year, I was promoted.

 

Early on I led a small team. Because I have a long-term focus, and don't want to get the same problem twice, I was able to eventually handle production without a team while handling new features. I have worked on small teams, and led small teams, but normally work alone. Because of this, I handle everything from architecture, design, coding, debugging, and research to working with quality assurance, customer support, and product management. I long ago decided that I didn't want to go into management because I saw that they usually couldn't spend much time solving technical problems and I really enjoy that. I like working on more complex and harder problems and features.

 

A decade ago, I started working on my master's degree. It took me a while to find a program that I thought would be applicable to my job and teach me new things. I stopped after taking only 2 classes because I couldn't find more useful classes.

 

Of my 22 years at SPS Commerce, 20 of them have been working on the same service but no one else has worked on that service for more than a few years. That level of experience allows me to know the service very well, quickly give very authoritative answers to questions about the service, see the service go through huge changes, make and execute long term plans for the service, quickly find problems, quickly make changes, help other developers efficiently work with the service, and advise others about their work in relation to the service (e.g. I often work with product management to improve their suggested changes). I am now an extreme outlier in my industry where most people only stay 3-5 years at a job.

 

When I started, most of my time was spent coding features or fixes that others gave to me but now I code 5% of my time. I now spend my time researching and planning changes, training others, and researching complex problems/questions others have about the service. In real life it is almost impossible to make something 1,000 times better, but I can occasionally make something literally 1,000 better (e.g. take a process that takes hours for customers and make it take seconds). Most of my time at SPS, I have telecommuted 1-3 days/week so I have actually enjoyed the move to 100% telecommuting during COVID-19. For me, the commuting time savings is equivalent to an extra 8 weeks of vacation annually! I live in a sparsely populated area so staying away from people isn't very constraining.

 

I would say that I'm almost addicted to learning. After formal education ended, I still sought out information on improving my skills but that information gets harder to find as my level of knowledge deepens. Looking back, the most useful parts of my education often weren't obvious until much later so it would be hard to know how to go back and be sure that a change would improve that. The things I liked best where when I could explore a new area -- from first learning programming to learning the computer network at school to learning a new service at SPS Commerce to learning new ways to solve problems.

 

No comments: