This week I finally finished the core functionality of my team project for the mobile app and spent some time looking through all of the code that went into this process. I tend to put on my blinders when programming and focus heavily on the task immediately before me. This provides me the ability to break through almost any obstacle I come across, but also blinds me toward thinking more holistically. While I have achieved every goal my team decided upon, and the app has a solid UX experience, underneath lies an ugliness that must be addressed. I am a contradictory perfectionist, in the fact that I strive fore a perfect end result, I often take a winding, messy, chaotic journey there. I will need to spend significant time in refactoring my code for readability and modularization, and to reduce inefficient repeating of logic. This is my burden to bear, since I demand high expectations from myself, but I do so in an ‘ends justify the means’ method.
These thoughts occurred to me as my wife and I were finally getting around to Spring cleaning, which is usually demarked in our house by the installation of air conditioners. Since we live in CT, we went from heating our homes to blasting ACs within a single week. While we were digging through piles of clutter, forgotten toys, and outgrown clothes, I realized that we accomplished a lot this past winter, but at what cost? Furniture and holiday toys were built, the living room reorganized but messes were compartmentalized into out of sight, out of mind locales. While this tactic allowed us to get things done during an incredibly busy Winter (I was working overtime and taking difficult courses), we pushed other goals aside in a scrambled attempt to finish what we deemed as a priority.
Obviously it makes sense that I would approach programming the same as any challenge in my life. I am a logical person, often to a fault, so my logic applies to all aspects of my life. Unfortunately, my logic tends to over prioritize certain goals at the expense of others. This is why I am approaching graduation but feel woefully unprepared for interviews, since my immediate high-priority goal has been completing this program. While I have begun a mentality shift from academia to professional, I must also improve my approach to programming. Therefore, my methodology is on the list of critical improvements to be made before I begin interviewing.
This past week I hot a major milestone in my final course, as well as my final academic project. I finished all of the mandatory functionality for the mobile app that my team set at the outset of the course. By some standards the mobile app is a complete product, fully functional and capable of performing all of the tasks required of it. By my standards it is far from finished though, requiring significantly more attention to design, style and cross-platform testing. While there are apps I use that are full of excellent features but lacking in aesthetics and usability, I want to push this project to be better, and more well-rounded. I’ve never settled for good enough, because I am a perfectionist and I always poor myself into any endeavor I embark upon.
My team has refined our list of stretch goals regarding optional functionality that we now have the time to incorporate. They have been hard at work getting the website security and authentication running, and I will begin adding quality of life and usability features to the mobile app. I have enlisted my wife and daughter as usability testers to try to uncover features or UI design choices that excite users, so they want to use the app, not just because they have to. I even dug up my notes and prior assignments from my Usability course to help with this process.
All that said, I can’t help but feel like a massive weight has been lifted off my shoulders. Although there is still significant work to be done on this project, the heavy lifting is over, and the end is in sight. Everything that I’ve worked for these last 2 years is coming to fruition. In a mere month I will have completed my final course and graduate, with a degree that means more than just completion of an academic program. It means opportunity and hope for me and the family that depends upon me to provide them a life they deserve.
This week marked the midpoint in my final semester at OSU and the “nervousited” feeling is ramping up. We had to present a compilation of our current project files alongside individual demonstration videos. I have been taking each week at a time, but seeing how much of our project has been implemented, it’s beginning to resemble an actual product. As I’ve said before, I haven’t had the time to work on meaningful side projects of my own, so this is the largest scale project I’ve worked on. I have always had pride in my projects in the various coursed I’ve taken at OSU, but this is on another level.
While wrapping up our files and code for a viable midpoint representation, we bumped into a myriad of issues. Since I am solely responsible for the mobile app, I haven’t had much direct interaction with my team’s code. Our interactions thus far have been relegated to sharing the same database where we post and retrieve relevant data for use within our particular application. Just as I was about to compile my work into a ZIP file one of my teammates asked if I knew why the website was having errors with one of our test cases. I was unsure, since I had tested the mobile app several times to make sure the midpoint presentation was ready. We went over the errors together and we realized I had altered some of my code, which worked wonderfully within the confines of the mobile app, but was breaking the website after the changes she recently made. Two worrisome hours of troubleshooting later and we were good to go.
Two days later I was preparing to record my demonstration video for the mobile app. After several false starts where I stumbled over my own words during the intro, I found my rhythm and was on a roll. While demoing the app my virtual Android device crashed, and I frustratingly started over after rebooting the device. I had never had it crash like that before, but flukes happen, so I soldiered on. Then it crashed two more times at various points in the demo. It seemed random and I couldn’t replicate the crash at the same spots. I eventually rebooted the device as well as my IDE and had a successful demo, but I couldn’t help but feel like lightning struck twice. I realized that this was probably a relevant experience to remember once I start my professional career. Things going smoothly up until a major deadline approaches, then all hell breaks loose. Thankfully my many years as a husband and father helped me maintain my composure through these anxious events.
During this past week I delved deep into my mobile app project, which required some significant research to supplement my current, novice level mobile dev skillset. I spent hours learning about working with Firestore and how to interact with the database to retrieve any relevant data. I learned several quirks about the Dart programming language regarding asynchronous functions, which were very unintuitive and at first frustrating. I hit several speedbumps that I didn’t expect, regarding aspects I believed would be simple to implement, but on the flip side, I cruised through several of my tasks with relative ease. To summarize, I had a very familiar, run of the mill week of programming. Expectations are never reality when coding. The parts you anticipate being challenging are often defeated with ease, while unseen, lurking challenges leap out of dark like a predator ambushing its helpless prey.
I managed to meet most of designated tasks, but fell short on a few, while also being forced to implement aspects I had set for future weeks. This week gave me a sense of what sitting in the role of software engineer will actually feel. Although my mindset has been shifting over the weeks towards that of a professional, this week triggered some alarms. I am approaching the midpoint in this final semester, which means in a short 5 weeks, I will be a certified computer science degree holder. This also means that I will be at the point to start thinking about applying to actual professional positions. Following this logic train led to me to realizing that I am not even remotely prepared for the interviewing process.
With this terrifying revelation at hand, I reached out to a friend who already went through this a few years ago. A while back we had discussed a friendly competition where we would each tackle the same LeetCode problems, using our preferred language (Python for me, C++ for him) and compare our approaches. This was put on the backburner as he got married and I began a full time job alongside school. Well, I reissued the challenge this week and we are going to begin very soon, hopefully immediately after the midpoint project assignments are due. He also offered to guide me through the interview process and even act out a few mock interviews. My mindset has officially shifted towards a more professional than student view and my excitement can hardly be contained.
This past week was the first week of actual development for my part of the Science Sleuth team project. I got my hands dirty with some coding, which is always a comfortable place for me. I have enjoyed much of the different aspects of studying computer science at OSU, but nothing compares to the thrill of programming. Equal parts challenging and rewarding, frustrating yet cathartic. Although I have minimal experience hunting, especially since I haven’t been since childhood, I equate the experience of programming to being on the hunt; each coding hurdle that I overcome is like catching my ever so elusive prey. It’s what compelled me to change my career path from education to computer science…Although the salary and benefits are a welcome side effect of course.
I am in charge of developing the mobile app that students will utilize for working on the project their teachers assign them. I spent most of my time setting up basic frameworks for each screen and tab, alongside reacquainting myself with Google Firestore, which is the database we agreed upon for our project. Although I just took a mobile development course last semester, I am still a novice when it comes to programming for mobile platforms.
Due to my relative inexperience with mobile development, but my interest in learning something new, I am finding myself in my element. I look forward to every challenge I face, because that gives me an opportunity to learn, grow and overcome. As an added bonus, I am finding mobile development not only interesting, but also very relevant in today’s market. I have added mobile dev as a potential career path once I graduate, making this final project fulfilling in several ways.