One common question for software developers is how to progress from "intermediate" to "senior"—whatever those titles mean. A lot of the journey is how you position yourself and stay confident, but in terms of taking these leaps in your own capacity as a technologist, I have a thought on the subject.
My biggest leaps on my "main competency" have been when I have taken opportunities to learn a different one. My "main competency" is as a Rails developer, and while I feel comfortable transitioning technologies, this environment remains my bread and butter. But my leaps and gains have always been when I have learned something different altogether.
Knowing how Go handles a use case gives me a lot of context into why and how Ruby does it. Depth and breadth are not at odds in this sense. Learning a new and different thing will increase depth. This has always been my experience. I don't necessarily want to use a bunch of different technologies. It would make my head spin. But as a matter of developing my career, this has been a useful pattern.
Functional programming helps you better understand OOP. Type systems help you understand typeless. Schemaless helps you understand schemas. And on and on and on.
Consider learning new things as an exercise in perspective. Whether or not you're captivated by the new thing, the exploit will have been worth it.
Top comments (15)
I agree with this sensation, Sometimes I like to reinvent the wheel like 4-5 times on different tech, it always makes me understand why people had taken those approaches, I pretty much understand now days why Vue is so appealing as well a why Aurelia is not as popular in the mainstream current but why it is appealing to people with enterprise use cases.
also creating the same REST API in different languages gives me an insight of many "why's" and also I end up more confident when I need to give an opinion on a matter I've already put my hands on before, not because someone told me to do it but because I felt "it was cool to learn" just by mere curiosity
This is a really great article!
One thing that has helped me has been pushing myself out of my comfort zone. For example, if you know several multi-paradigm languages like Python, JavaScript, Ruby, Java, etc. reasonably well, try something like Haskell. Having played around with Haskell a bit, I can't say that I love it, but it was definitely an interesting experience in getting into another headspace, and as you said, I think it has deepened my overall sense of what programming languages are about.
I haven't tried it yet, but I think another good example would be Rust. It's different enough from a typical language that I think it's worth looking into.
Of course getting into other domains is also a good idea. If you're a Web developer, look into graphics programming, or AI, or something along those lines; if you know more about server-side programming, try something that is focused on the UI experience; if you mainly know about high-level programming, learn a little bit about the Linux kernel, or programming on embedded devices (or vice-versa for any of these scenarios).
I don't think you have to become an expert in a new area. Even if you can do something small that's just a toy or a proof of concept, I think it's really a great feeling to have that sense of appreciating new ideas.
I 100% agree. My core competency is front-end work (focus is on react at the moment) and been looking to get more into Elm because of that focus.
IMO networking is a great additional area for front end web devs to dive into. A slightly deeper appreciation of how the bits and bytes cross oceans and land on the screen was a huge inflection point for my ability to make good websites, even if those things can all be abstracted away.
But yeah, taking an Elm workshop was amazing for me even though I haven't used the language since. Perfect example.
haha exactly 😆, every single team interprets skill levels differently on 2 things if not more: experience and the exact team role. Also, the team internally probably has totally different vision from the people doing HR :).
I agree completely with the post. Single most valuable thing for me to try to learn, not even finish with it(even though you can't really ever say your done with learning a language) was functional programming languages. Haskell, Clojurescript, Elm and playing with functional reactive programming concepts. Gives you a completely new perspective and a few new tools in your toolbelt, even if you don't work in a completely functional language. But, most of the languages do have support for at least some functional concepts these days.
Learning JavaScript functional programming using hyperapp has help me known about pure functions/components. I am coming from a programming background of OOP (Java) where side effects and strict typing is almost inevitable as a Beginner.
it's tedious once you know how to write it in the language you are going to target, but before that, you are really blind to the usual gotchas you already know in your mainstream language, if you know node, try to build the same API in python, or .net, or even rust!
then you'll see it isn't tedious! you can even feel the design choices for specific communities based on the language!
of course you must want to do it for learning purposes or else it won't work and feel tedious :P
Redux for React was inspired by stuff from other languages before it came to JS.
This is great and I do agree with this. I've to ask though: how do you personally make time for this? Do you allocate time for it during the weekends? Evenings/Mornings during the week? I've tried several times in the past but I just can't find the energy to work on these things during the week. I'm just dead tired from work, gym and social life.
You are spot on. I preach this all the time.
It is all about layering up your cumulative knowledge. Not just in seeing how to do new things, but in seeing how not to do them too. It is humbling to be a master of one language, to have another language kick your butt because the syntax is different, idioms are different, etc.
Same goes beyond languages. Play with frameworks. Compare how they do MVC/IoC/factories/whatever. Play around. Learn learn learn. You will be a better dev/engineer/scientist/everything.
So true.
I tried Reason for a few times and it somehow helped to get a better understanding on typing in JavaScript.
lol