Angular Tic-Tac-Toe

As a bit of Friday fun, I wrote a simple tic-tac-toe game using Angular. It can be found at https://still-ridge-62999.herokuapp.com/.

This time I practiced test-driven development while writing this small app. My first impressions of the practice are that I understand why people advocate for it; it helped me think through the requirements for each method that I wrote in a disciplined sort of way, and made sure that I kept my methods small, modular, and DRY. I also found that it made me more aware of edge cases and possible error states in my code. Finally, it was satisfying to watch each test go from failing to passing as I filled in the body of each method.

Of course, the real value of TDD will come through on much larger projects than this simple, one-component tic-tac-toe game. But everyone has to start somewhere, and I’m glad that I took this opportunity to start adopting the practice.

MEAN ToDo App

Naturally, my first app that I built using the MEAN stack was a todo list app.

This app can be accessed at https://nameless-harbor-94638.herokuapp.com/.

The following are some of the features of the app:

  • Adding todo list items to specific days
  • Displaying 5 days — by default, one in the past, and three in the future of the current day
  • Highlighting the current day
  • Dragging and dropping todo list items between days
  • Scrolling through days using the arrow buttons
  • Responsive design
  • Finished todo items move to the bottom
  • Edit todo items in place

Basically I tried to create the todo list app that I personally would want to use, and now that it is finished, I have begun using it to keep track of my learning and job search related tasks.

This was the first full-fledged application that I built using the MEAN stack, and I was pleased with how easy and quick it made development. In particular, the speed and efficiency of doing things with Angular is leaps and bounds ahead of the old way that I am used to doing things using jQuery. Writing http services with node and express is simple and intuitive, and adding features like drag and drop and the datepicker to Angular was simple, due to the robust ecosystem of modules that is available.

Another thing that I learned as part of this project was testing using karma and jasmine. I’m ashamed to admit that I have never done unit testing for javascript before, which is something that I knew I should remedy. I followed along with the Angular testing guide and practiced by writing tests for all of the components and services in the Hero Editor example app, and then wrote tests for the components and service in my todo list app. I found that once you get started, writing angular tests with karma and jasmine is fairly simple, and it was satisfying to be able to run the test suite and have that reassurance whenever I made changes. For the next app that I build, I am going to try doing it in TDD style, and see what that is like.

I am still working on coming up with ideas for my next app. I want to do something that involves calling upon 3rd-party APIs and incorporating the results, this time.

Education

Sometimes you don’t really know what you like until you stop doing it for awhile.

In 2015, I was a full-stack developer writing ColdFusion and jQuery, working remotely for a small company headquartered in Austin, Texas. I felt ready for a change, hungry for a new challenge. Rather than look for another web developer job, I decided to go for a much bigger change. I thought that I wanted to apply my programming skills to the field of science, by going to grad school for biomedical engineering.

I applied to Drexel University, and was accepted. During 2016 and the first half of 2017, I lived the life of a grad student. However, during this time, I gradually became disillusioned with my grand plan. I came to realize that the work of a scientist was not as glamorous as my (admittedly grandiose) dreams of making life-saving discoveries had led me to imagine. Due to the nature of the courses, I also wasn’t able to use my programming skills as much as I had hoped, although I did get some experience with Python and Matlab. Add to this the extremely high cost of the program and the length of time I would have to be in school before I could achieve my goal, and I began to see that it wasn’t worth it for me. I began to realize that I didn’t want what I had thought that I wanted.

I decided to leave grad school and look for a job as a web developer once more. I feel that I’ve come to appreciate programming more due to my time away from it. I enjoy the win of figuring something out and making it work, of running into an error message and searching the web for answers until I find exactly the thing that I need.

Since leaving school a couple of weeks ago, I have been working to get up to speed on technologies like the newest features of ECMAScript 2015, Angular 2/4, testing with karma and jasmine, node.js with express, and deploying to Heroku. I’ve decided to focus my learning on the MEAN stack for now, which consists of MongoDB, Express, Angular, and Node. In my next blog post, I will write about the first MEAN app that I have built, and what I learned from the experience.