Algorithmic Rigor

Good morning! Decided to get a quick blog post out because I don’t have enough time to launch headlong into my Java exercises this morning before Mobile App Development class. Today, I’m going to touch base on the proverbial irons I have in various and sundry fires as I start ramping up to the last five or so weeks of classes leading up to Thanksgiving break and final exams.

So, in the wake of last week’s assessment failure, having taken a pretty good assessment of my strengths and weaknesses, I’m addressing blind spots in Java directly by really grinding out Java fundamentals. Where two weeks ago I was really acknowledging how my skills had lapsed, I’ve made some significant and tangible progress. I set my scope in the first week to regaining familiarity with data structures: lists, arrays, array lists, working with collections, engaging appropriate syntax, index traversals, decision structures, and things in that scope. This week, I’ve been moving into hash sets, hash maps, working with lists of objects inside of hash maps, and as of yesterday, had left off with working with sliding windows. During the last few days, I’ve had an eye towards optimizing time complexity as I’m performing operations, especially using hash maps and sliding windows. Over the next week, I’ll continue in this way by trying to develop better algorithmic rigor, and thinking critically about code as a way of solving real-world problems. I will also be intentional about working on creating more modular, elegant, and streamlined code. The things I think I’m strongest at, such as code documentation, creating readable code, and working with in-place test cases are really helping during this process.

I have been leveraging Gemini as a test medium and knowledge base. In the beginning of the process, I prompted Gemini to give me an overview of what I was working with, and then would try to replicate the code on my own. When I encountered errors, I’d screenshot the error and feed it into Gemini in an effort to better understand where I fell short. Over that first week, it was an incredible help to be able to quickly and easily access the information that I needed to regain my footing, increased my understanding of the subject matter, helped me redevelop my syntactical skill, and then I would continue to grind on that subject until I was able to work the code from scratch. After the first week, I pivoted to a code-first approach, which has helped me be able to evolve my work into assessing a problem or desired outcome, and then coding towards that. Then, if there was a gap, I’d leverage Gemini for some ideas on the best path forward, and would incorporate that into my approach. Sliding window algorithms and the two-pointer approach were extremely difficult for me to master in my algorithms class, but the fundamental understanding of many of those concepts are still there. It’s been especially helpful as I’ve incorporated an approach with more of an eye on time complexity and code elegance. This process has been significantly helpful, and I truly feel that I’m becoming a more well-rounded engineer as a result.

I’ve been pushing every exercise to my Java Practice Environment GitHub repository if you’d like to take a look.

The last five real class session weeks of the semester are here. It is insane how fast time has moved. I definitely haven’t left any time on the table. It’s now group project season, so I’m now juggling three active group projects as well. The most significant is the Chemistry II CURE project, in which our group is taking a look at water hardness and alkalinity. There’s much and more to do in that aspect, and I intend to be as far ahead of the curve with this work as possible. In Mobile Application Development, our group is creating a rock/paper/scissors game app that will use multiple fragments and other Android development disciplines, and will operate the game functionality using Java. The Capstone project group is doing extremely well, and our work on our GGC Pothole Detection App (now in Comic Sans font and with new clever branding as GGC SansPotholes) continues apace. We are working on the look and feel of the app. Since we have been working with Antigravity, we are engaging it directly to make the app look less AI generated, and are proceeding intentionally to give our app a more lived-in feel. Chemistry II is taking the majority of my focus at this time, as the workload is significant. This week covers Bronsted-Lowry acids and bases, Arrhenius acids, buffers, buffer range, and related aspects.

This morning, I’ll be leading my Mobile Application Development group’s presentation for our app proposal, for which I created the documentation and PowerPoint. Afterward, I’ll get into my Java exercises, in which I’m going to touch up once more on sliding window algorithms, and the two-pointer approach. I’ll also be working heavily on Chemistry II homework and beginning the first of the two CURE pre-lab write-ups. As I continue with Java, I’ll continue with an eye towards time complexity and code elegance. I’m also incorporating more command-line bash in my workflows. In Web Development, we’ve been working with regex and SQL, so I’m also reawakening my understanding of that. Currently, we are working with basic syntax as well as joins, which is hugely beneficial and incredibly relevant given the nature of the technical assessments. So, there’s much to do, and I will continue doing my very best over these next 5-7 weeks as I approach graduation on December 11th. The grind continues apace!

Next
Next

On HackerRank And The Way Forward