2018 has been a wild year for me, it was the first year of my professional career as developer, before that I dealt more with networking infrastructure and administration. How I went from a career towards SysAdmin to Developer is another story for another day. Before starting really working with development I've never dived deep into the development world, I was still at college studying to get graduated, there wasn't much space, specially because it was not my first choice at first. But I was caught by the development world and here I am, one year ago, writing a retrospective and somewhat asking for advice about my eagerness to learn a lot of things at the same time.
Let's start from the beginning, I was hired for a Java Web Developer position, and, I have to confess that days before the interview I had no knowledge of Spring Framework at all, I mean it, I'm not ashamed for saying the truth. I knew Java from college and has developed simple web applications in the past, but it was in C# despite the MVC concepts are the same. That was what helped me in understanding Spring, JAX-RS and other frameworks from Java quickly. Fortunately, I was hired and I started to study Spring deeply while at work and outside of the company. Spring Boot, Spring Security, Spring Data, Spring Session, etc. I still have a lot to learn though.
In the meantime, the company is also a AWS partner, we usually deploy our applications on AWS and the knowledge of its services is paramount. So, I also started to study AWS with the goal of getting certified. After some months of study, I was able to pass the certification exam and I'm now a certified developer. It helped me a lot in having confidence to propose improvements to what we already had on AWS and it has been great to see this come to fruition.
Only that is already a really good amount of knowledge to swallow, Spring and AWS have some things in common: they are huge, with a lot of modules, services, complexities and details, they range from simple web applications to security, data handling, etc. I also put some effort on understanding DevOps on AWS, which was not really part of the exam that much. I also took a liking for serverless and for that reason spent a long time making experiments with AWS Lambda and DynamoDB.
Since I was doing experiments with DynamoDB, I also took a look at MongoDB to see what differences they had, I saw that DynamoDB had some limitations during my experiments and I had to take a look at other solutions to see if they were more compatible with my user case. Right now I'm experimenting with Elasticsearch and Logstash and enjoying a lot as well, it can have a very good impact in future projects in my opinion.
However, before I enter into the current Elasticsearch vibe I also had the front-end vibe, I was worried about my knowledge of HTML, CSS and frameworks such as Angular, VueJs and React, I also made a post about Full-stack development, I was and I am still worried about how to become a full-stack developer. My first adventures with Angular was not that pleasant, but recently, after so much time making web applications, many of the experiences I had with Spring and template engines such as JSP and Thymeleaf, proved to be very useful in understanding Angular better, right now I going back to Angular and developing an UI for a personal project, maybe soon I will talk about that here.
Besides all that, I'm also right now experimenting with Flutter, the newest and shiny framework for mobile development by Google. This year I also played around with native Android development with Java, NativeScript and Xamarim! Flutter has been a pleasant surprise and I think this vibe will last through next year.
So, after all that I think it is possible to understand what my worries are: I'm all over the place! I experiment with a lot of things from databases, mobile and web frameworks, cloud providers and so on, without going deeper into any of them, excluding Spring and AWS, which actually makes part of my daily professional life.
What are your takes about this? Should I focus more? Is it all right to experiment so much without going deeper? What are your experiences on dealing with the huge amount of technologies we have at our disposal nowadays and the curiosity IT guys like us naturally have?
Happy holidays! :)
Top comments (15)
I in no position to tell you with a voice of experience, I'm just new as you are in my career, but that doesn't mean that I have no thoughts about that, since I wondered about that too.
My final thoughts were that we should find balance over both sides, be specialized and being diverse.
If we specialize too much in one thing and know pretty much nothing about others areas, when the market changes and the tech we know means nothing anymore, we'll lost our jobs.
If we get all over the place and know the basics of everything, we will have jobs, but always low hierarchy ones, and we may never get up at the workers pyramid.
In the end, and what I'm planning to do is to specialize in one or two tech/areas, keep track of tech/areas, choose some that have good chances of going mainstream and learn at least a intermediate level of this new tech/area
It sounds a reasonable plan, it is true that if you want to be good at everything you end up being good at nothing, but the market has been very demanding, you have to be good at everything by what we see position descriptions. It makes everybody anxious, principally us who are just starting and want to be in a better place in the future.
There is an old saying in software development, one must be a "jack of all trades, master of some".
I can read your experience, but I cannot understand why you would be worried? How would you feel if you didn't have that diverse experience? Would it be good that you'd be ignorant of all those things?
Awareness of things is always good. If you have never mastered something, go now, do not wait. Find something you love and master it.
Your networking background is going to serve you very well. You would be surprised how many software developers have no idea how a network works. They have no idea how packets get from point A to point B. Some don't even know about packets that aren't HTTP over TCP.
Your diverse background is a strength, not a weakness.
It is great to hear that! :)
I was worried because maybe I could end up not mastering anything, but now I think I know what I should do. Keep experimenting, but trying to master Java web development, which is my main skill right now. What comes beyond that is a welcome extra, always.
Yes, I understand that, it was very helpful to understand AWS and get me certified, my networking background. Now I use this knowledge to solve performance issues, configure applications better and so on.
To be honest, you're best served by picking a given tech-category and learning it well. And by "well", I mean, get rock-solid on the fundamentals. Once you're solid on fundamentals, moving on the the flavor-of-the-week is a lot easier to do.
As popular as they are, IDEs and frameworks can subvert your ability to well and truly learn the fundamentals. They're optimized to get you going quickly (or at least more quickly than working "closer to the metal" does), not so much for getting you versed in fundamentals. This is broadly-true of any given abstraction-layer. Further, the more reliant you are on a given abstraction-layer (absent versing in the fundamentals), the more pain it can be to move on to a different abstraction-layer.
I think you are in the right way and all that experience comes handy. The difficult task is to start from nothing. And yes, sometimes we need to focus on one thing to master that area.
Just do what you love and what makes you feel comfortable.
My problem it's that I love everything! I work as a fullstack developer, I do many projects alone and I like frontend, backend, databases, web, desktop, mobile, sysadmin, networks, QA, IT, learning and teaching 😅
I have the same "problem", I find everything interesting and worth learning, back then when I was in school I was terrible in making summaries because everything sounded important. hahaha
Came across this Twitter thread the other day. It's not exactly about programming but overall same thing:
It's OK to try many things to figure out what interests you the most. But don't confuse being informed with true knowledge. It sounds like it's time for you to settle down with one tech stack, grow your problem-solving skills with it and go deep on timeless fundamentals (books like these).
I don't try out all those things because of a sense of accomplishment, it is simply because I'm curious. hahaha
But yeah, you are right, I will need to focus on more Java, web development and AWS in 2019, this is the main subjects I need to take care of.
I will take a look at the books, thanks! :)
Great advice Marko! I really like what Julien says here:
What do you like doing?
You're at your first year as a developer, why do you feel you need to know everything already?
I don't think you have to become a fullstack developer.
I perfectly understand FOMO (fear or missing out) and I think we all struggle with it a bit, I do even after many years. Software developers are naturally curious animals so it's a given that you want to knowledgeable in as much as possible.
But do you really want to?
My strategy lately is Ben's (last sentence):
I think the DB layer is probably the least optimized area of dev.to right now. We’re smart enough to keep things simple, but we need to improve so we can hang our hat on this part of the work.
We overcome some naive queries with caching. But it’s not ideal. We may have some budget to hire more in this area, but I think it’s important to personally improve here as well.
My education is generally motivated by need. 😄
I like making the backend of web applications, that's I like to do the most.
One part is curiosity, the other is that even for less experienced developers like me, the market already expects a lot. I've seen positions that requires all the technologies I mentioned (except for Flutter, too young for that), then, yes, FOMO strikes.
I'm starting to feel that way about full-stack development although I'm just not that good at creating layouts, it is a creative work that I was never good at, but dealing with Angular is not uncomfortable for me. I think now that know HTML and CSS a little bit is good enough.
That's true what Ben said and I think that's what makes me test a lot of databases. I realized that our company's applications have the database as bottleneck most of the time, I'm trying to solve this problem, including changing the database if necessary.
I'm interested in the entire stack too but I specialize on the server side of things.
It's always a struggle :D
Optimizing (and hence saving money) your company's data layer seems a good goal for 2019 ;-)
That's the key "motivated by need" and it's really important to define "this is what I love?"
And be confident to build an entire software by yourself always. (front, back, arch, database...)