Capstone Reflection

Looking back on my experience in the Computer Science Capstone course, the timeline and work load were both very accommodating. Dividing the project into week-long sprints gave sufficient time to coordinate with our teammates and deal with all the issues of working asynchronously and over long distances. I felt like I gained experience dealing with a lot of obstacles I will likely encounter in the work place.

I also appreciated the flexibility in structuring the planning and organizational methods we implemented in our teams. This allowed us to try out a few different methods and ultimately use what worked best for our team. Clear guidelines in the project requirements also made it much easier to picture our final product and write a fairly accurate project plan right fro the get-go.

I was at first uncertain whether I would find the weekly stand up meetings useful, but I grew to appreciate them by the end. The asynchronous model was simple, straightforward, and more useful than an actual in-person meeting. Having it saved as a discussion made it easy to go back and check everyone’s progress and goals for the week. Writing out my accomplishments once a week was an excellent exercise. It helped me to see anything I was behind on and it was nice to reflect on what I did accomplish. This last week it helped me realize that I actually accomplished a lot more than I had hoped for the previous week.

I also appreciated the regular list of interesting blogs. Reading others’ tech blogs provided insight into writing my own and also into what interests me in the technical articles I read. I even learned about aspects of my favorite languages that I hadn’t considered before.

This course was definitely a positive experience and has been a real motivator in tackling more of my own personal projects in the future.

Posted in Uncategorized | Leave a comment

The Reward of Coding

Recently I was talking to my younger brother who has just started some elementary coding for fun (we still haven’t convinced him he should have a solid plan-B to becoming a professional actor). Most of what he does is making small changes to an already enormous videogame-related code base. He mentioned to me that when he runs into a bug in his code it is overwhelmingly frustrating, but when he manages to fix the problem it feels absolutely incredible.

He isn’t the only one to mention this feeling. I experience it, many people I work with experience it, and countless programming memes online talk about it. When a bug seems unfixable it often spawns the emotion “I hate programming. HATE it.” But the moment you figure out what went wrong, write an excellent solution, and suddenly your code compiles or runs without any errors you are suddenly filled with the elated “I love programming. It’s the BEST. Everyone look at this beautiful thing I have created!”

I have heard it called the “Coder’s high” and the “Debugging drug,” and in my experience it is just as satisfying as creating a work of art or building something substantial with your hands. Knowing all the hard work you put into something and then being able to see the finished product is a great feeling. I would even say the feeling after debugging is even more powerful because it is usually immediately preceded by a contrasting feeling of frustration and despair. You go almost immediately from a deep low to an incredible height of emotion.

While working on the most recent leg of my project I implemented several small features and fixed a couple of small bugs in just one day. During that time I pretty much forgot to eat or do anything else because I was uninterrupted (the rest of my family went to the zoo) and after each task I felt like I was walking on clouds and was simply impatient to dive into the next task.

This is part of the reason that software is for me. When I’m coding it often doesn’t feel like work and my subconscious pounds away at problems even when I’m asleep in the hopes that the solution will come to me and give me the next “Coder’s high.” Obviously I also love a finished product and the satisfaction that comes from bringing something good and useful to the world, but it is rewarding to know that there is joy that comes from the journey as well.

Posted in Uncategorized | Leave a comment

Not Just for Nerds

One of the great things about studying Computer Science is how wide its applications are. Most majors have a variety of applications, but I believe that the opportunities that Computer Science makes available are particularly varied. Additionally, these options also happen to both be in high demand and pay well, often in the six-figure range.

Far from Perfect

Let me start by qualifying that this doesn’t mean I think everyone should go into CS. There are some downsides which I will list here:

  • While mid-to-high-level positions in CS are much in demand it can be difficult for a new CS graduate to get an entry-level position. That first job will likely be a big hurdle.
  • The CS job market and what required skills are popular change quickly and often. New jobs pop into existence, old jobs go away, and you will likely need to update your knowledge several times in your career.
  • A lot of learning CS is expected to happen outside the classroom. A degree helps a lot in building a foundation, but you likely need to study a great deal on your own to even be ready for an entry level position.
  • Interviews are hard, sometimes even harder than the actual job. Learning to pass a coding interview is a whole skillset on its own (completely different than just passing a job interview).
  • A lot of CS related jobs expect overtime. You get paid well, but you work for it.

There are probably more reasons not to go into CS than those above, but I also believe the field fits the talents and desires of more people than really know it.

Math

Those interested in Math are probably among the first that come to mind when programming comes up. There is a plethora of positions associated with CS. Careers like Data Scientists, Statisticians, and  Database Administrators are all very heavy in applied mathematics. Machine learning, Cyber security, and Computer graphics are all fields that need those who are exceptionally good at math.

Science

Most who think of computer careers first think of programmers and developers. It’s easy to forget that the study of computer science can actually lead to being a computer scientist. Or just a scientist. A CS degree can prepare you to become a specialized biologist, chemist, or medical coder. Labs and hospitals everywhere are looking for people with both science and computer science backgrounds to help them generate virtual models, process large amounts of research data, program medical devices, and build medical software. These some of these positions are in high demand and especially difficult to fill. Both medical professionals and experienced programmers are in high demand; imagine how difficult it is to fill a position that requires both programming expertise and a medical degree.

Art and Creativity

Maybe math isn’t your strong suite. Many CS fields put a high value on Art and Creativity. Front-End web developers apply a great deal of design and creativity in their work and many artists find designing web pages a fulfilling (and profitable) way to channel their abilities. Computer Graphics is naturally a very in-demand field where artists can apply their talents. Programmers of this kind are needed in movies, television, advertising, videogames, as well as in graphic design and various fields of science. Aside from graphics, videogames is another direction creative computer scientists can go, though it is significantly more competitive and has a bad reputations for being unstable and a poor work environment.

Being creative isn’t restricted to just art. A number of Computer Science related careers focus on design. Information researchers work on building new technologies. IT architects, systems analysts, database administrators, and network specialists build, maintain, and plan out large systems, sometimes from the ground up. UI and UX designers design systems, interfaces, and experiences to be more user-friendly. There is even a social component that can involve testing software in the field and interviewing those who use your product. Even QA testers require a certain degree of creativity as they imagine new and outlandish ways to break software and generate errors.

Hands On

A lot of people prefer to get their hands dirty and have a physical product at the end of the day. While computer engineering is a bit of a different field, students of computer science still have a place in developing AI, Machine learning, and robotics. Embedded software engineers specialize in code that runs hardware—their work is found in factories, businesses, hospitals, tools, farm equipment, construction equipment, electronic stores, computers, and even toys. In careers like these working with computers doesn’t necessarily mean sitting in a dark room in front of a computer all day.

These examples are far from the only Computer Science careers and in this digital age many more specializations are imagined each year. Regardless of what your interests are, there is probably a computer science career that fits you. There are lots majors and career paths and we need people in all of them, but if you haven’t considered it before, CS is a field definitely worth looking into.

Posted in Uncategorized | Leave a comment

Team Files and Folders

Working on this most recent team project has opened my eyes to how differently programmers think and work. I have worked on a number of group projects in the past, but for some reason this project has been especially varied. This could possibly be because it has very open-ended requirements and involves a much higher level of creativity than anything I have previously worked on.

Firstly, each group member has a different perspective on how the code should be organized. Multiple folders, multiple files, which functions are relevant to which module, etc. Especially when graphics are involved and each object has both a functional and aesthetic component, it can be difficult to draw the line where one module ends and another begins. In other graphic-oriented projects it was easy for me to make these distinctions and decisions on my own, but this time around it is apparent that the concept of ‘what makes sense’ is very subjective even when abiding by common guidelines.

Secondly, I’m seeing a variety of approaches to implement similar functionality. I’ve always known that code bases can get large, redundant, and chaotic, but it’s a real experience to see it first hand. And it goes both ways; sometimes I see code which I know needs to be fixed up, and other times I see a much better way of doing something than the approach I would have taken.

I see this current project as a great learning experience and I look forward to other collaborations in the future being a similar learning opportunity. I become more motivated each day to be more familiar with accepted programming standards and be an advocate for clean, practical code.

Posted in Uncategorized | Leave a comment

E for Effort

It takes me a while to get there, but this post is about being evaluated based on your own efforts versus things out of your control, one of the benefits of working in computer science.

The quest for 4.0

Growing up with an Asian mother, grades were always very important. If you have heard the joke that a ‘B-‘ is an Asian ‘F,’ it’s true. I’m really not kidding; as sure as my family used the dishwasher as a dishrack (it wasn’t even plugged in) I thought the standard for most kids was to bring home an A grade with only an occasional B+ if you struggled with a particular subject.

I’m not a nosy person and my friends didn’t really talk about it, so I had no idea what kind of grades my classmates were pulling. I just didn’t think about it. It genuinely came as a surprise to me when my friends and I were called into the office senior year and told that we were graduating in the top ten. First of all, I hadn’t even known that was a thing and, second, that I had done well enough to place fourth.

It was quite a revelation to discover that, unbeknownst to me, my friends had been planning their schedules and strategically taking TA assignments to keep form diluting their weighted GPAs. It was even a little disappointing to learn that if I hadn’t taken extra Spanish and Stagecraft classes for fun I might have scored second place. As a result, when I entered college I set a goal for myself to graduate with a 4.0. Unfortunately, I majored in an Arts degree.

Arts vs Science

Arts degrees get a lot of flack and usually aren’t considered as rigorous as Science degrees. I’ve now completed one of each, and I’m here to tell you that in a lot of ways my first degree was much more difficult especially in terms of getting a perfect score. I do want to clarify, though, that the degree was from a prestigious university so my experience may differ from a degree at a less rigorous college.

Here is the big difference: science degrees usually involve a lot of math, etc. where there is a correct answer. The grading is objective–either right or wrong. Art degrees are 99.99% subjective. With an easy professor this is great. Some of them will give you an A just because they are too lazy to read it. Others use a clear rubric with specific, useful feedback. But inevitably you get a crazy professor or, worse, a masters student teaching for a grade.

Crazy professors involve weird traditions into their subjective grading. One professor I had as never gave an A on a essay; the highest you could hope for was a B+. That was his actual rule in his syllabus. Others, especially masters students, do this: “A-, Great Job!” and when asked for feedback just say “Oh, the essay was good, but I give an A- because it can always be better.”

This isn’t a big deal in the big picture, but if your goal is a 4.0, it’s disastrous. If a teacher only gives an ‘A-‘ for every large assignment, an A- is only 3.7 on a 4.0 scale and just one of them puts you permanently at 3.8-3.9 with no chance for recovery.

A science degree, or at least a computer science degree, is much easier to score perfectly on. The concepts may be more complex and you have to learn advanced Calculus, but as long as you know the answer getting that ‘A’ is 100% under your control and not at the whim of some grad student.

Teaching and Evaluations

Why am I ranting about grades? Because this principle transfers to the work force and is one of the primary reasons I changed my career.

I spent some years working as a teacher for secondary education. In the same way that grades mattered to me as a child, my job performance matters to me. It also matters because it plays a roll in keeping your job, getting another one, and getting a raise. As a teacher you are evaluated mainly by the following: 1) How your students perform on standardized tests, 2) How many students fail your class, 3) Four 5-minute classroom visits by your administrator each year.

The funny thing is that recent studies in education are showing that what a teacher does has very little impact on a student’s academic success. As it turns out, when talking about external factors, a student’s success is roughly 30% having two parents at home, 10% having food at home, 10% having a home, 30% school environment/neighborhood, 20% how often they come to school. Teachers are known to have a high impact on individual students or classes of students, but actually a single teacher rarely makes a radical change to a student’s overall academic trajectory.

In practice, if a teacher teaches an AP class their evaluation is naturally higher than other teachers because high performing students are moved into their class and low performing students are moved out of it. Additionally, a teacher can spend hours preparing state-of-the-art instruction on a daily basis and not see a huge change in student performance because a) the students don’t show up to class or b) external factors (hunger, drugs, bullying, instability) are literally preventing the students’ brains from functioning enough to absorb the information. This is not to say that teachers are not necessary or that what they do has no impact on their success, but it is a fact that a great portion of their perceived job performance is often based on factors outside of their control.

Metrics and Logistics

The jobs I’ve had after (and a couple between) my years of teaching really showed me the difference when working a technical job. Although any job evaluation has subjective elements, technical positions have quite a lot of objective data to support how well you do your job.

While working in logistics, there were metrics containing easily measurable and observable numbers reflecting how many tasks I accomplished on a daily basis, the kind and difficulty level of those tasks, the number of errors associated with tasks I completed, etc. In computer science you can measure lines of code written, number of features contributed to, code reviews performed, bugs fixed. There can be situations where one’s effort isn’t accurately reflected in the numbers, but over a large data set when you do good work it is reflected in the numbers.

While working those kind of jobs there were frequent raises and promotion opportunities for me. I barely had to ask for them–they came naturally when my numbers told the company how much I was worth. In teaching, I was making just $1500 less than someone else who had been there 15+ years longer. And this doesn’t just apply to teaching; there are plenty of jobs where added effort doesn’t translate into increased return or better evaluations.

This is a great advantage for working in a technical field. Measurable outcomes are a powerful leverage in pushing a career forward. I wouldn’t trade my years of cultivating young minds and I sincerely believe teaching is an honorable and worthwhile career that does good in the world. The impact of a good teacher on a young life is immeasurable–but that is precisely why it is usually undervalued. Crafting new software, on the other hand, is easily monetized, measured, and recognized. Fixing a bug and running a program without any errors: instant gratification.

The world of 1’s and 0’s is different from more subjective realms (not better or worse–different) and I feel that it’s important to recognize that. Firstly, because when you do you can use it to your advantage to know your value and to advocate for yourself. Second, I hope that by recognizing how they are different we can see how they are the same and hopefully find a way to reconcile the two so that perhaps the undervalued can be better measured, appreciated, and, preferably, compensated.

Posted in Uncategorized | Leave a comment

Personal Projects

More than many other careers Software Engineers and Developers are expected to love their job so much that they take it home with them. By this I mean that in addition to coding on the clock, a good programmer is usually assumed to code as a hobby and have at least one personal project going on at any given time. In my experience this has so far held true, at least among my software-fluent acquaintances.

Since starting programming I have tried to make this expectation a reality. Much like my unending list of “books to read,” I now also have an ever-increasing bookmarks tab full of “tutorials to do later.” And though I firmly believe that a line should be drawn between work-time and family-time, I do highly recommend personal projects because, truly, to stay ahead in the tech world one must always be expanding one’s skills even more than a job demands in its day-to-day.

In my current academic project I found that my previous personal projects have been extremely helpful. I am in charge of designing multiple screens and their transitions through handling event transitions in a game loop. This is logic that had never encountered before in my classes. However, at the start of the pandemic in a previous personal project I designed my own game screens and level selects for an arcade game emulator. I figured out the logic of how to switch between animation loops and add or remove functionality based on the screen.

Even though my previous project was in a different language, the experience I gained was a big help in my current project and saved me quite a bit of time. Expanding the breadth (or depth) of knowledge a developer has is extremely beneficial. Personal projects can be a lot of fun, and you never know when that tidbit of knowledge will be an asset to your team or be what tips the scale for you to land that job.

Posted in Uncategorized | Leave a comment

Contingencies

A plan is not perfect unless it plans for imperfections.

During both of my undergraduate degrees I have been a dependable student and team member. I turn in assignments on time, stay ahead of deadlines, and am usually the one to pick up the slack if another member drops off. For my final project, however, I might be the one who needs to ask for help.

Do to unavoidable circumstances earlier this week, members of my family were exposed to Covid-19 and now the whole family is sick including our son who just turned two. Now instead of diving into research for a new and exciting project, I’m spending most of my time comforting a screaming child and hoping his unvaccinated body doesn’t develop any serious complications.

Fortunately, I have excellent team members. During our first week together we laid out clear steps and procedures of not only how to tackle our project, but what to do when one of our members struggles to keep up. Through our established network of clear communication I was able to inform the team of my difficulty and the unexpected road block won’t derail our project or the next deadline.

Just as our code should be designed to handle errors and exceptions, a project plan needs to account for failures from even the most dependable of developers. Safety measures such as code reviews and planning to finish ahead of deadlines prevent mistakes and relieves pressure when disasters eventually happen. Regular, quality communication within a team ensures that everyone knows what is going on and is ready to jump in if coverage is needed.

Life happens to all of us. It is foolish to pretend otherwise and disastrous not to plan for disaster.

Posted in Uncategorized | Leave a comment

Finding Footing on the Path to a Career

Growing up I was always “good” at math and eager to learn it. In kindergarten I found videocassettes at the library that taught me multiplication and division using gum drops. In third grade I spent math class working the textbook from cover-to-cover until my teacher had to borrow the fourth- and fifth-grade textbooks for me to use. In high school I took advanced courses, scored exceptionally well on exams, and was well into Calculus before I entered college. So naturally, I majored in English.

It wasn’t that I particularly wanted to major in English or that I particularly disliked the idea of a more technical degree; I just had no idea what the path to a technical job looked like. I knew how to be a doctor or a lawyer: college + med school or college + law school. I had seriously researched these careers and decided they weren’t for me. My dad was an accountant and I had a pretty good idea what kind of math knowledge and education that entailed, but he didn’t really make a lot of money and didn’t seem to love his job too much. But as far as anything else? It seemed so out of reach.

Growing up it seemed like to be a physicist, programmer, or rocket scientist required some level of scientific or mathematical genius. In high school I felt like I had learned basically nothing about those subjects and it seemed too daunting to choose a major in college I knew so little about and try to make a career from it. At my high school there was exactly one chemistry class, one physics class (apart from the remedial one), and precisely nothing about programming available at all. Math started with Algebra, went through Calculus, then kind of just ended? Anytime I heard of someone succeeding in a technical field, it was because they had checked out a book from the library and built a rocket, learned physics from their scientist parents, or built the internet in their garage.

Fortunately that is far from true, though I wish my younger self could have known it then. Ask anyone in the field and they will assure you that there are plenty of at least semi-successful software engineers of only average intelligence. There is a high bar for rocket scientists, but not every engineer is a certified genius or necessarily obsessed over physics at a young age. Here I am starting a career in software at age 30-something and I’m far from alone in this endeavor.

Perhaps a contributing factor to my early career-blindness was that back then internet was still on dial-up and far from as comprehensive in its content as it is now. A lot of the careers on the market now weren’t even dreamed of when I was a freshman and even the software I’ll be working with wasn’t around when I got my first bachelor’s degree.

It may be a bit of a roundabout way of saying it, but my point is that a lot of times we underestimate what we are capable of. We choose to go down paths because they are a little straighter or better decorated when the path that takes us to where we really want to go is muddy, turns just out of sight, and is mostly obscured by overgrown shrubbery (I mean, programmers aren’t well known for going outside, much less gardening). And this applies especially to the younger generation who have frankly spent most of their formative years in a box with windows and an underpaid, overworked educator who nine times out of ten is also looking to start a new career. So to the people who have found something they love, share what you know with young minds so they can find it too. And if you are stuck in something you don’t love, don’t be afraid to look down another path; you might have only one life, but you don’t have to have only one career.

Posted in Uncategorized | Leave a comment