In 2018, I had found that I had been working at some companies that weren't the most technology forward companies. It was one of those things, where the companies paid well, I could do the job and life was OK. Until I wanted to look for other opportunities.
Back in 2016 I picked up AngularJS and wrote a simple application. I thought it was pretty cool & easy to pick-up. I thought maybe this was going to be the vehicle to get me coding again as a side project, but then Google did the same thing that Microsoft did to me... AngularJS was not going to be backward compatible with the new Angular 2+... Once again, I had jumped on something that wasn't adopted. I had to start over...
I remember after that saying, "I'm done. I'm not sure I can do this anymore".
Looking back I was having a bit of a pity party. I was starting to feel old & I wondered if I was going to be stuck in legacy applications for the rest of my working life.
After this multi-year pity party and just coasting watching Netflix instead of coding... I found myself in 2018 with the same core competencies that I've had for years. As you know, the technology train stops for no one. I tried looking for a job and all these tech-bro dudes were asking me about things I had NO IDEA ON! I failed every interview. I wasted so much time and put myself under a TON of stress.
After about of month of looking, I told my buddy that I needed to retool. It was then that I set my sights back on the front-end. But where to start? There we so many new things. I was starting at ground 0 again!
At first I was overwhelmed, however, after thinking about it I began to come up with some items I wanted to learn.
The 1st one was GIT. I had never used it, and EVERYONE is using it. So that went on the top of the list. With GIT, I wanted to try to figure out what the command line was all about. So that went on the list too.
The next one was figuring out what some of these new front-end frameworks were all about. Angular pissed me off and it seemed too daunting, React has a reputation of being really complicated, but Vue was getting a lot of love from Twitter and everyone suggested that it was really easy to learn. So NodeJS & Vue went next on the list.
Another item I wanted to know about we DI (Dependency Injection). But I didn't know how I was going to learn it. Luckily my job offered some help there.
I probably could have added another 5-10 items, but I stopped here:
- GIT/Command Line for GIT
- dotNet Core/DI
Technically I started working on NodeJS/Express & vuejs in 2018. I rewrote ChoreManager from jQuery/webAPI to vuejs & Node/Express. That development & learning went into 2019. I never released it though. Mostly, because I found the UI/UX to be a little too much. I enjoyed learning vue & NodeJS/Express, it worked as expected & it was dead simple. I even got to do some vue at work. I also got to do some command line stuff with NodeJS.
I did start to work on PrayerSurfer that too is a vuejs & NodeJS/Express application. However, that project has also been put on pause. I may start that one over using Angular. As far as I'm concerned I've learned enough of Vue/Node/Express in 2019 to mark that as completed!
GIT & the CLI
This year at work I switched teams, and the project was written in Angular & dotNet Core webAPI. This year the IT department switched from TFS to GIT (using Azure DevOps).
Do to my switching of teams I was able to learn a lot this year. I've been working with GIT for about a year now and the commands I use in the CLI are:
- git branch
- git branch -D [BRANCH_NAME]
- git checkout -b [BRANCH_NAME]
- git pull
- git push -u
- git add .
- git commit -m "MESSAGE"
- git status
There are probably a few more. But these work for 99% of what I need it to do. So I'm checking off GIT & CLI for 2019!
dotNet Core & DI
As I mentioned before, my new project was written using a dotNet Core webAPI. I quickly found out, that there are some new features in Core but nothing really changed for me from my last project using 4.5.
Since this application was written by a former employee, he was no longer there to answer the WTF questions I had. The 1st one being is why did he roll his own DI code? He was doing some weird and overly complex generics code that would import the classes as needed. Yes, it was nice solution, but only he knew how to modify it. My teammate & I decided to undo that code and implement the DI that Microsoft suggested (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0)
This turned out to be a lot of modification as far as making sure it was in the startup and all of the dependencies were put into the constructor and the private variables set. But after a few weeks, the project was building and running as expected.
I would not say that I'm a DI expert. However, I will say that I know how to set up DI in a dotNet Core application. So... I'm checking that off.
This project is the gift that I have to keep on learning with. As a team we also implemented:
- Async/Await pattern - which is basically making sure every method is marked as Async and there is a corresponding Await in the method code.
- Started to implement Dapper - I had no idea what Dapper was when I came on to this project. I was introduced to it & when I was refactoring a small console application, I decided that EF was too bulking for what this application was doing. So I implemented Dapper, and I found it to be perfect for the application as well as pretty easy to implement.
- Integration Tests - since this application has 5 different databases with each one having its own EF contexts, we tried to implement UNIT TESTS but found that very difficult to do. So instead we basically mocked our DB with various contexts and wrote Integration Tests instead. These are proving to be very fragile, so one of our major next tasks is to implement the Repository pattern and remove Entity Framework and replace it with Dapper.
Although not on the list, Angular was front and center for me this year. I was pissed off at Angular for a long time, but I know that it isn't going anywhere. So, I switched teams specifically because it was in Angular. I figured it would be an excellent way for me to learn it.
I still have a bit to go, but there are a lot of similarities with vuejs (interpolation, 2 way bindings with properties, templates, components, yada yada yada). I am still in the camp of Angular gives you a lot of rope to hang yourself with, but once you get used to it, it does work. I've spent a lot of time updating controls in the application as the last developer rolled his own for everything. As a team we made the decision to utilize PrimeNg as our controls for the site. So I've been doing a lot of setting properties on the controls and making it work like it had been.
I had a scenario where I was doing a
setTimeout() and I originally set
const context = this;
However, someone pointed out that a fat arrow functions handles the different scopes of
As you can see, my learning journey continues. I wish that it wasn't always in fits and spurts. I would imagine after another year on this project I will be a lot more comfortable with everything.
Since I'm talking about what I've learned this year... This is whats on tap for 2020:
- Continuing in Angular
- Continuing in TypeScript
- Continuing in dotNet Core
- Learning about & Implementing the Repository Pattern
- Learning & Implementing Dapper
- Learning & Implementing Unit Tests (finally)
- More DevOps scripting
- More CI/CD processes
It looks like it will be another busy year in 2020!