A series of recent events has forced me to give another long hard look into my future, my goal, and my next step. While this will be a very personal post, I hope that some of my thought process might help someone to find their path.
What do I want to learn: technical level
Be a better Android Developer
Being an Android Developer (or just any type of client-facing position) often feels like a tug of war, but instead of fighting against another team, imagine you are in the middle, and you have to pull against 3 groups: Design, Platform, and Backend, and the goal is just to not get torn apart.
Sometimes the design is way out of your league, and you have to figure out how to modify the platform view to make it look like the design; Sometimes the platform API is so ridiculous, you have to find some workaround so that you don’t have to make so many trips to the backend, and sometimes the backend can’t provide certain data back, you have to deal with designers to figure out if some parts can be omitted.
So how can I be a better Android Developer under this kind of conditions? I think what I need to do is to improve my communication skills, namely how I express my thoughts and ideas, and how proactive I am to get the conversation started. While I know that I am not the worst speaker in the crowd, I definitely still say too many irrelevant things, jump to completely random topics, and not to mention cringy and bad jokes when talking to people. So I will need to find a way to be more prepare for discussions, and be more focus during discussions. And I also need to be more willing to initiate conversations, not always relying on other’s or when it’s too late.
There are also basic stuff like more hands-on practices, read more articles on the internet, and keep up with the latest industry trend, but everyone knows that already.
Know the basics of building backend (GraphQL focus) with Go
I don’t see myself being an Android Developer forever, and backend would be one of the logical next step forward, since I already have a basic understanding of how things work, and I am interested in it. Currently I would like to focus on Go and GraphQL, since both of them are suitable for the type of opportunities I would like to look for in the future.
Go is a weird language: it’s so bare-bone, yet design to be a higher-level language, and I especially like how the team behind is actually proposing well-thought-out solutions to every problem, no matter how trivial they are, and they don’t mind taking some time to get it right. While JVM is crazy powerful and performance, and a lot of the languages running on it are powerful and scalable, it’s also not hard to run into language design pitfalls (billion dollar mistake), weird APIs (Any date/time API before Java 8), and all the inherent problem of needing a JVM, which in 2019 can probably be done better with container. While Go don’t solve all of those problems (e.g. null can still be easily achieve with a null reference), it feels like a medium-size step to get me off the impending doom of being an Android developer.
While Go is simple and fun to use, GraphQL is complex but also fun. In the last 2 years, I have seen a fair share of REST API that represent the same type of object in multiple ways for legacy or compatibility reasons. What GraphQL forces me to do is to have a comprehensive look into what types of resources is available, and by doing that, it make it a lot easier to maintain a certain level of consistency. Bonus point: it also makes life for deserializing it with statically-typed languages easier, which is great 👍
Be a better programmer in general
Algorithms, Architectures, System Design, Design patterns, best practices, language design, and even a bit of history of how programming become what it is today. While a lot of them won’t have a direct impact on my ability to do my job (after all, all I do on a daily basis is to slap data from a REST API onto the screen), they will probably pay off in a long run:
- Algorithms and system design will be very useful for me to move into more backend-focus positions. It also helps to understand what technical challenged limits the backend team and why something is/is not possible/feasible.
- Architecture, design patterns, and best practices are quite common for most languages and frameworks, and I’m kinda sad that there not a lot of them I got to use on a daily basis. Knowing how to turn
Get started in Data, Engineering, and ML
Like it or not, we are moving towards a data-driven world, bit by bit, every single day. And to keep up with the industry, I need to know more about the world of data, dynamically-type languages, how to manipulate all those data, and what information can be extracted from it. I am not gonna be an expert in the next 12 months, that’s for sure. All I want to do is to get myself a basic understanding of how to manipulate data, so that when I got a more backend-end focus opportunity, I can use that basic knowledge to get to the next level.
What do I want to learn: personal level
Be more proactive & a better team member
Like I mentioned above, I need to learn how to be more proactive and discuss with team members to get my job done. And beyond that, I also need to be more proactive in my life in general: keep in touch with friends, be more open about what I like and don’t like about the work environment and let my boss know, and more open to criticisms and mistakes, and actively get feedbacks to become a better version of myself. All of these sounds straight forward, but I’m sure my brain is gonna hate all of these, so the next 12 months is gonna be fun……
Get my shit together
There are so many things that are broken about me and my life that I just can’t keep ignoring: my stupid knee, lack of exercise, the (good flatmates but) bad share flat situation, lack of self-control regarding personal finance, and just lack of motivation in general. This one is probably the hardest to deal with, since I still don’t really know what will motivate me at this point, but still, I have to try.
What would the next step be like
One very timely video that I just watched is the latest Q&A from CGP Grey, and if here’s what flip a switch for me:
Saying you want to do more X without also saying what you want to do less of is a recipe for failure. In life, there are no solutions, only trade-offs.— CGP Grey
As you can see, I have a long list of things that I would like to learn more, but time is limited, especially considering how much time I wasted on re-watching random YouTube videos, reddit, RSS feed, and more. And in order to accomplish all of those, there are a lot of things I have to learn to say no, including (but not limited to):
- Flutter & Dart (next year)
- Rust & system programming in general. I looks fun, but I just don’t have the need to do it in the next 12 months.
- Latest frontend development best practices (I just need enough knowledge to re-write my portfolio, that’s all)
- Backend that’s not Go or GraphQL related (There’s an infinite amount of backend technologies, and if I don’t draw a line, it will never end.)
- iOS development (next year with Flutter, let’s see who wins)
- AWS, GCP, and Azure. All I need for now is Heroku and maybe Zeit.
If all of the above are Objectives, I still need to find a bunch of concrete key results to make sure I have something to measure again by the end of the year. But right now, this should be enough of a starting point for me to start focus on the important stuff, and hopefully next year, instead of just ranting about yet another company, my job, or my life, I will be able to share what I have actually accomplish!