For us who work on the field of software engineering (and its neighbours), it is no secret that we constantly learn new things. Driven either by need or curiosity, it seems like learning is a never ending quest for us. Some of them have direct impact to our craft, like how using Xcode’s debugger could save us from headaches, or how side menu reduces user engagement with your app. Some of them are just for fun – like how TrumpScript is making Python great again (duh), or how a build engineer automates everything using bash scripts, ranging from scanning e-mails to ordering the coffee machine (!).
As a software engineering company, Ice House has a diverse learning scene. We have two main diets in our learning materials:
- Knowledge in our main craft, e.g. iOS or Android. To deliver the best quality, we always strive to know better about our own backyard.
- Specific knowledge which needed in client project’s domain, such as geolocation or image processing. Sometimes, our client requests more than a simple mobile app to compete with current market.
Outside of that, each of us has our own preferences. Some of us love to venture outside of our comfort zone, such as playing with Arduinos, explore new programming languages / concepts, or tinkering with new game development tools. As for me, I found myself learning much more general topics, such as clean code, test-driven development, or design patterns. Sometimes I’m afraid a new platform-specific knowledge would quickly obsolete – especially on today’s tech pace.
Last week, I joined a design-and-define workshop for a new client. I had a chat with our software architect during a session’s coffee break. He has more than ten years of experience in software engineering, and had several years working as Senior Director of Engineering for Citrix’ mobile platforms. I always knew that he has a vast knowledge about a lot of things, but I witnessed it myself up close on the workshop sessions. Wondering if he’s still learning new things these days, I asked him straight away:
M (Me): So, what are you learning about these days? Got anything new?
H (Him): Hmm… nothing much. I currently playing around Kotlin and Swift.
H: Yeah. You know, the new language from JetBrains – some people build Android app on top of it.
M: Whoa. Do you also planning to build Android app with that? Or perhaps using Swift for backend?
H: Maybe – as a software engineer, it’s always a good thing to keep up with today’s technologies. At least, I’ll learn new paradigms that might be useful later.
I found myself agreeing with his last statement, but I also start wondering how he picked his learning plan. He’s an architect, and it’s his job to keep being updated with general software growth. Why did he chose Kotlin and Swift? Why not Haskell, Node, or others? Curious, I continued our discussion with this:
How do you choose what to learn next?
I told him that I found myself overwhelmed with the abundance of learning options. Knowing our break time is running out, he pointed out three main points to be considered:
- What’s important to my current job / craft,
- What’s related to my hobby / interest, and
- What’s the community increasingly deem as important.
He then continued to explain his points. The first point was clear enough – it’s on our common learning diet, after all. Our hobby or interest serves for our motivation to keep learning (read: survives boredom). For him, it’s AI-related topics – I remember him saying that he still uses Python as his main language. The last one is important to catch up with nowadays tech pace – and preventing us from being obsolete.
Few days passed by, and I’m still thinking about the second and third point. As for community’s standpoint, I think I got enough leads (for now). Our office’s Slack channels is always full of interesting articles and discussions, tech scene’s opinion leaders always share interesting thoughts via Twitter, and if all else fails, there’s always Hacker News. Regarding hobbies or interests, I’m always interested on solving daily issues using technologies, but I have no concrete idea until now. Maybe I’m not looking hard enough, but I believe God has one for me in store.
Perhaps there are still more variables that need to be considered than those three, but I think I’ll try to utilise those first. I’m almost finished implementing samples for GoF’s Design Patterns’ book in Swift, and I’m looking for something new to learn for. There are some paths that came in mind:
- Read Vaugh Vernon’s Implementing Domain-Driven Design. We got one in our office, or
- Play with Google’s Go and create a pet REST server for my own. Our software architect suggested this for me, or
- Take my senior years’ text mining book and play around IBM Watson’s iOS SDK.
There’s also a good chance I’ll found other interesting subjects along the way… there’s a vast field of knowledge awaits! 😆 I also hope I could give some positive impact with what I have right now… one can always hope, right? 😄
P.S. : I purposely didn’t mention the software architect’s name in this article, since he seems like shying away (?) from public’s eye. I’ll update this post if he let mention it, though 😄
Special mentions for Fauzan and Taufik for being terrific mentors for my early years! 😆 Both taught (and modeled) a lot of important aspects as a software engineer – and I’m truly thankful for them. You should check them out! 😉