Categories
Uncategorized

Week 8: A Recap

Wow! Time has completely flown by and I am now finishing up Week 8 in Capstone. Not only is this nearing the close of the course, but it’s also the close of my time at OSU. I want to hit a quick recap on my team’s project followed by a really quick recap of OSU.

My team’s project is almost complete, at least the minimum viable product (MVP) that meets all user requirements. The final user requirement being implemented this week is the algorithm that ‘grades’ a language learner’s answer against the answer submitted by the content provider. Another teammate worked on the code for the algorithm and it basically uses FuzzyWuzzy, a Python library, which is based on Levenshtein distance. Levenshtein distance is a method to measure the distance between two strings.

So, to summarize what my team was able to accomplish this quarter. We built a mobile app using Expo and React Native. Only 1 out of 4 of us had previous experience building mobile apps, and 1 member had never worked with React. We were able to implement the ability for a registered user to record and store audio files in Google Firebase and allow other users to playback these audio files in the app. Most of the group members, including me, had no previous experience with Firebase or making Firebase queries. We successfully implemented Google’s Speech-to-Text API to convert recorded audio to text. No one in our group had previous experience using this API. Lastly, after this week we will have implemented the ability to score a user’s answer against a stored answer. This was a learning experience for all of us and I think we succeeded.

Lastly, to summarize my time at OSU. It took me exactly two years to complete the program and I still can’t believe how much I’ve grown and learned. I came in with absolutely no programming or computer science experience. I was able to not only build projects to display on my resume, but I was also able to land a summer internship that extended into the school year and ultimately will convert to full-time employment.

Even though this program was fully online, I have enjoyed interacting with the OSU post-bacc community. There are so many involved students, professors, TAs, and alumni that I never felt ‘alone’. This program is certainly what you make of it so, it’s likely not for everyone. However, I would certainly recommend this to anyone interested in computer science and looking to change their career.

Categories
Uncategorized

Qualities of a Software Engineer

I thought it would be interesting to deviate from a focus on the technical skills of computer science and aspiring software engineers and focus on personal qualities instead. We all know that our jobs and careers are not just defined by our technical abilities, but also the ‘soft skills’ or our personal abilities. After all, that’s why interviews exist and why behavioral-type questions are asked.

Over the summer, I held a series of short coffee chats with employees in the company I was interning with. These were early career to senior-level employees. I picked their brains about their career journeys, how they define successful employees, how they approach their jobs, etc.. In this post, I will share some of what I learned.

A team lead within a research development engineering group once told me the top 5 qualities they look for in an ideal engineer. In their opinion, the ideal engineer:

  1. Knows how to plan
  2. Knows how to write code
  3. Knows how to triage defects
  4. Has the ability to do code reviews well
  5. Works within the environment that’s given

Another team lead shared with me their ideas of a successful employee. They believe that technologies can be taught and learned, but successful employees display:

  • Teamwork – ability to work with others
  • Initiative – volunteering to do things or taking control of own career
  • Learning Ability – know how to learn and what to focus on, how do you keep yourself current?
  • Collaboration (to me, this is similar to teamwork, but with outside groups)

Throughout my internship, I also heard from others about the value of mentorship. Below are some more thoughts that employees shared with me:

  • “Have confidence in yourself. Everyone is scared.”
  • When you don’t know something: “I wasn’t born with that knowledge.”
  • Knowing when to ask: “Help me figure out how to do it”
  • “When you have a task always try to do it better than the way it was previously done”
  • Value stream: “No task today happens in silos. Always try to connect the dots. ”
  • “Don’t be afraid of a hard ask. It’s an opportunity for growth if it’s hard”
  • “Be comfortable knowing that there will be change. Channel uncertaintly around change into excitment and motivation”

I believe all of these qualities and quotes are helpful to keep in mind. Particularly as I transition how of this phase of being a student and into a full-time employee. I’ve done this once before in my previous career and now I have a chance to do it again. However, this time I have a lot more experience and general business knowledge to bring to the table.

Categories
Uncategorized

Automating Workflows

In my internship, I’m starting a project in which the goal is to keep a record of files that store variables used in a system. Currently, the place where these files are stored does not maintain any type of changelog. User changes to these files are not recorded. My project develops a process to monitor and record file changes by utilizing GitHub for version control, Jenkins Pipeline for automation, and Snap Logic to build the files. Since a lot of this is new for me I thought it would be great to run through these technologies and how they could be used to maintain an automated system to monitor, record, and implement file changes.  

Most of us are familiar with using Git and GitHub for version control. Oftentimes remote repositories contain a ‘main’ branch that contains the reviewed and approved code. Source code changes made by users are housed in branches that are merged with the main branch upon approval. Depending on how the repository is set up, a user submitting changes must submit a pull request (PR). Within the pull request various workflow actions, as well as a code review(s), take place. Workflow actions could check for formatting, linting, etc…

Jenkins is a CI/CD automation tool for building, testing, delivering, or deploying software. In Jenkins, a Pipeline can be used to get software or code from a version control system like GitHub to an end-user. A Pipeline is built using a Jenkinsfile which can be written using declarative or scripted syntax. Jenkins declarative syntax is written using Groovy, an object-oriented language for the Java platform. Jenkins can be integrated with GitHub so that a Jenkins Pipeline is triggered when a user merges a PR to a particular branch.

SnapLogic is an Integration Platform as a Service (IPaaS) tool to connect data sources and automate workflows, like ETL (extract, transform, load) flows, through the use of pipelines. SnapLogic can connect and retrieve data from a variety of sources, transform the data, then write files or load data to end-user systems.

With regards to my project, the above-mentioned files will be housed in a GitHub repository so that a record of changes to files can be maintained. When a user wants to make changes to the files, they will submit a PR to merge their changes to main. Once the PR is approved, a Jenkins Pipeline will determine what files are newly added, modified, and/or deleted. These file changes will be mapped to a Groovy object and ultimately output as a JSON string to SnapLogic using the HTTP post method. SnapLogic pipelines will verify the data, then write or delete the files on the end-user.

Just a snapshot of some new technologies I’m working with and how they aid in automation.

Categories
Uncategorized

Google Firestore: A Game-changer?

This week my Capstone group discovered Google Firestore. This has significantly changed how we’re developing our mobile app. I have never heard of Firestore before so, there was a lot of information to take in. However, this really seems like a game-changer in the development world. First, let me explain some background information.

My Capstone group is developing a mobile language learning app. I’ll add that mobile development is new to 3 out of 4 of us. We’re using React Native for our frontend and planned to use Python/Flask for our backend API. Our database was going to be Google Datasore and Firebase to host images and audio recordings. This sounds like typical web development architecture which all members are familiar with. We divided our project into first implementing the static components of our frontend, then setting up our database, next implementing our backend API, and finally connecting the frontend to the backend.

What we discovered this week is that now Google Firestore combines Datastore and Firebase into one AND can essentially work as your API backend. So, instead of building the backend API with Python/Flask and having our frontend connect to our API, we should be able to connect directly to Firestore from our React Native app. This totally blew my mind. I’m very glad we first implemented the React App instead of implementing the Python/Flask API. I’m still processing and trying to determine what some of the downsides could be. To me, there appear to be so many positives. This enables our group to basically combine two weeks of work into one and possibly allow time to work on some improved versions of the app with increased functionality.

I suppose a possible downside is that by removing a backend API, we’re expecting data to immediately be in a usable form for the React App. If it wasn’t that would mean implementing a lot of data transformation on the frontend which could slow performance on the app. Having a separate backend API would allow a developer to aggregate several sources of data, manipulate, and transform the data before sending to the client. Since the database for our app is somewhat straightforward and simple, I believe we will be fine calling Firestore directly from React.

Again, much of Firestore is new to me. I may have more updates to add here as I continue on this adventure.

One last resource link comparing Firestore in Native mode vs. Datastore mode.

Categories
Uncategorized

Week 4: Relational or Non-relational?

For our capstone project, my team has decided to use Google Datastore to store the information related to our language app. Google Datastore is a type of non-relational or NoSQL (Not Only SQL) database. Most of my previous experience has been with relational or SQL (Structured Query Language) databases. When I took CS 290 – Web Development, the focus was only on relational databases. I believe the course now teaches both types allowing students to get some hands-on experience with NoSQL databases. Most of the projects in my internship use the NoSQL database MongoDB, and I’m slowly becoming more familiar with non-relational databases. This experience with Google Datastore will be great to add to my knowledge.

So, for my own educational purposes, I want to highlight some similarities and differences between relational and non-relational databases. This information was accumulated from my somewhat simple Google search. Please refer to the references at the bottom if you would like to dive deeper.

Relational (SQL) Databases *

  • Data is stored in tables, like a spreadsheet. Columns are attributes and rows are indivual entities composed of attributes. Relationaships between tables is a schema and this must be clearly defined
  • Examples of popular SQL databases:
    • MySQL, PostgreSQL, SQL Server, others…
  • Advantages:
    • ACID Compliance, Data Accuracy, Simplicity
  • Disadvantages:
    • Lacking in performance, flexibility, scalability

Non-relational (NoSQL) Databases *

  • Does not use a tabular schema of rows and columns to store data
  • 4 types of NoSQL databases:
    • Document – Oriented Database: every key is paired with a comlplex data structure document (similar to JSON)
    • Key-Value Stores: uses different key and each key is associated with only one value
    • Wide-Column Stores: data is stored in a tabular format, but column names and value formats can very from row to row (similar to SQL, but not as rigid)
    • Graph Stores: uses a graph structure where a node is data and an edge is an attribute about the relationship between nodes.
  • Examples of popular NoSQL databases:
    • MongoDB, Redis, Google Datastore, others…
  • Advantages
    • Scalable, Flexible, Document-Oriented databases can map to objects in objected-oriented programming languages

For this Capstone project, another teammate created the database model and my tasks do not include database setup. However, I will be implementing some of the backend endpoints. So, I will get my chance to interact with non-relational databases through queries. I’ve already started looking at Google Datastore documentation and it seems Datastore queries are more complex than MongoDB queries. It also appears that in Datastore a hashmap is not an allowed property for entities, but arrays are allowed. My team wanted to use a hashmap for one of our entities to quickly locate recording links for a specific language, but have determined a workaround. I’m curious as to why a hashmap cannot be used because it seems like if would be an efficient data structure to lookup a value. Maybe as I progress with implementing endpoints I will look into this.

To wrap this up, I’m somewhat disappointed I missed the revamped iteration of CS290 that included MongoDB. Learning about non-relational databases seems essential for industry especially with the move of data to the club and the need for fast and scalable databases. I’m looking forward to working with Datastore on this project. I’m curious to see if it is easier, harder, or about the same to work with as compared to Mongo.

* References:

Categories
Uncategorized

Week 3: Things Are Heating Up

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”

– Abraham Lincoln

The school quarter is solidly into Week 3 and things are ramping up! This week my Capstone group finished up our very detailed Project Plan. I believe we did a fantastic job that only sets us up for success. We spent quality time describing how a user would interact with our mobile app, detailing the frontend, backend, and database interactions, and assigning individual task assignments from now until project completion. It took a while to complete all of this, but it will definitely be beneficial in the long run. We have a schedule as well as an outline to refer to during this development cycle, which makes the goal of building the app less daunting. However, I’m pretty excited about all of the new technologies I will learn.

It seems like each week I will be pushing myself by learning a new technology. Although I have experience with React.js, I do not have experience with React Native. I do have some experience with Python/Flask to build a simple microservice, but I don’t have experience using Python/Flask to make database calls.

Something that really caught my eye this week was the tool Figma, used to build the mobile app prototype. Another team member built the prototype so I did not fully use the tool myself, but now I want to learn. The tool allows you to design all visual aspects of how a mobile app would look, even including the keyboard that appears when you need to input text into forms. Figma also allows you to simulate a user ‘walking’ through the app as if you were interacting with the buttons on a particular page. I believe having this prototype is critical to implementing our app efficiently.

To ensure our progress continues to flow smoothly, I’ll be working on setting up my React Native environment and completing some simple tutorials. I’m hoping my previous experience building a simple web app with React.js will transfer over. I’ve also been using React.js in my internship, which is a nice refresher for this project, especially since I was able to receive feedback from and work with more experienced professionals. In turn, I hope my experience with this Capstone project will benefit my progress at work. To conclude, I hope to report back next week with new skills I’ve acquired in React Native.

Categories
Uncategorized

Week 2: The Project

Things have really started to ramp up this past week with regards to the Capstone Project. I’m feeling excited and anxious all at the same time. I’m looking forward to working with my team to build something I’m really excited about. However, I’m feeling anxious about the amount of work to complete in a short amount of time.

The following is a summary of this week’s highlights followed by my overall thoughts.

  • Projects and groups were assigned. I will be working on the Crowd-Sourced Immersive Language Learning App with 3 other teammates located in Texas, California, and Oregon.
  • First team zoom meeting included finalizing Team Standards, discussing overall project goals, languages/technologies, and workflow, as well as general team introductions.
  • Started organizing the Project Plan and will meet before the weekend to discuss as a group.

There were several projects that interested me, but I’m really excited to work on the language learning app. I know several people that would be interested in using the app when we as a group get it published. I’m also excited to be working with my group members. Everyone seems to have a diverse background to offer including technologies for the project as well as spoken languages! I know we have the capabilities to produce something really cool.

I’m probably most excited to be building a mobile app. I have experience building web apps, but not mobile apps. Unfortunately, I was not able to take the OSU course elective Mobile Development due to schedule timing, so being able to build this project with my teammates is a great opportunity. I have some experience using React, but learning how to use React Native will be a great skill strengthener! I look forward to continue selecting technologies and languages with my team.

We’re currently at the stage of creating our project plan. The project description contained detailed project requirements and this is the time when we get to really organize and flesh everything out. I know that spending quality time at this step will be very beneficial to completing the project in 8 weeks. I’ve learned from past experiences that spending time researching and designing a plan rather than jumping in blindly saves so much time in the long run. It also helps to keep everyone focused on the same ultimate goal, preventing too many side-steps.

So, I’m ready to do this. Let the work begin!

Categories
Uncategorized

From Earth Science to Computer Science

“You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something–your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.”

— Steve Jobs

The start of my final quarter as a Post-Bacc student at OSU has begun! I’m really looking forward to this last leg and bringing together the culmination of my learning in my Capstone final project. Before diving into my project, I thought it would be great to look back on how this entire journey began.

Previously, I spent eight years working as a geologist in Houston, TX, where I analyzed core samples retrieved from oil and gas wells. I very much enjoy the field of geology and still enjoy keeping up with the science. However, I was itching to try something new and switch to a career field with more opportunities. So, a little over two years ago, I decided to explore my interest in computer science.

After much research into boot camps, online self-learning, and traditional bachelor’s programs, I finally stumbled upon OSU’s post-bacc degree. I realized this would be a perfect fit for my situation. I wanted to obtain a B.S. degree but wanted the flexibility to continue to work, attend classes asynchronously, and focus only on CS coursework instead of meeting other general education requirements. OSU checked all of these boxes and boasts a great online community of current students and alumni.

When starting the program, I continued to work full-time as a geologist, which proved very challenging. I applaud anyone that completes this program while working full-time and maintaining social relationships. Their time management skills must be insane. I eventually landed a summer internship working as a data analyst, which meant finally leaving my career as a geologist. I have continued this internship into the school year incorporating more engineer/developer roles. My goal is to sign on full-time with this company as an engineer/developer, and I hope the upcoming talks with management are successful. Please keep your fingers crossed for me!

I’d like to note that during my interview and internship journey, most people were impressed by my previous career and that I returned to school. I’m grateful for those responses because initially, being an older student and starting over in a new field was a concern of mine. If anything, I’ve learned that it’s never too late to pursue a new passion or dream.

As I bring this initial post to a close, I refer to the quote as the beginning. Looking back, everything that led me to this moment seems to have just lined up perfectly. It’s not without a lot of hesitancy and scared feelings on my end, though. So, I’m really looking forward to what the future holds. I’m very excited to work on this Capstone project with other talented students, especially since not long ago, it wasn’t even the tiniest idea in my mind that I might be doing this. Cheers!