How to solve software design problems from any language?

I’m working as a junior developer at a company and working with Angular. A few days back, there was a task to break the monolithic app modularized by implementing Angular Library.
I worked for three days but couldn’t figure out how to access services from the main application to the library. I created Git issues, asked on StackOverflow and got a minus review! :stuck_out_tongue: No way was found!

The next day I took it to one senior developer. He saw the code (He is not even working with Angular! He works with Spring Boot of Java) and solved the issue by InjectToken and he said that he did that from Java concept.

I got both astonished and depressed. How can I develop when no senior ones there? Or, what can be the learning curve to get the core concepts of software development to solve an issue whatever the language is? Some suggestions will help me a lot. I want to go freelancing and I want to solve the issues by my own with the online help.

But the incident hit me hard!

He’s able to do it because hes seen things…:astonished: thats why hes a senior dev! He developed his knowledge and ability to understand code, even in a language he doesnt know, due to time and experience.

This experience really brings to the forefront the importance of collaborating with others with more skill and experience, that’s how you grow and progress. Kind of the big reason why, although I would love to work remotely and independently one day, that day is not today…I dont want to be the smartest person in the room. I have far too much to learn and too much room for growth.

So yeah, why would it make you depressed that a senior dev knows more than you, a junior dev? That should be encouraging and inspiring, he just gave you a glimpse into what the future holds for you as you progress in your career!

So yeah, my suggestion, if you want exposure to senior devs and be able to learn from them, maybe hold off of freelancing and working on your own. Its not clear if this senior dev works at your company or not, since you said there are no senior ones there…but…unless you are the only dev at your company, there are surely other devs at higher skill levels around you. Take advantage of that, talk to them, show interest in what they are doing, let them know what you are working on.

For sure, next time you hit a wall at work, ask someone for help…dont strugglie with it on your own, especially not for days. Its in the teams best interest to unblock you and keep the project moving.
Even if the person you ask doesn’t know the answer, they may be able to connect you with someone who does. You wont know what they know, or who they know, until you communicate with the people around you and ask. And for sure…you will learn something from them that will bring you that much closer to senior dev level.

1 Like

Thank you very much cndragn for your brief reply.

So yeah, why would it make you depressed that a senior dev knows more than you, a junior dev? That should be encouraging and inspiring, he just gave you a glimpse into what the future holds for you as you progress in your career!

I am not depressed because of his knowledge is more than me but for- I am not sure what are the topics of core software development/programming I need to know to be one like that senior developer. There is a saying that a good programmer is not afraid of another new language because they know the core thing. What are those? Data structure? Algorithm? OOP?

It’s not clear if this senior dev works at your company or not since you said there are no senior ones there

I wanted to say that how will I solve a problem when there are no senior ones there?

For sure, next time you hit a wall at work, ask someone for the help…don’t struggle with it on your own, especially not for days. It’s in the teams best interest to unblock you and keep the project moving.

I usually ask for help at the workplace when I hit the wall. There were no senior ones to ask for that time. And, I asked online help. But, that wasn’t enough!

I sort of answered many of your questions in my reply:

You mention there were no senior devs at work at the time to ask for help… don’t discredit the help that other devs may have been able to give you or their ability to guide you to the answer. Unless you mean there were no devs at all with you for 3 days? In which Id say you should definitely bring that up as a concern to your team. Theres no reason someone should be hired as a junior dev, yet be the only dev and with no way to collaborate with the other devs. There should be someone who has the skill level to help unblock you.

Im having a hard time I guess at understanding what about this is depressing…that you dont know how to get to the point that senior dev is at? You want to be like that one senior developer…reach out and ask them! Communicate…let them know you are in awe with their ability to solve the problem without knowing the language, they are the perfect place to start to ask for advice.

The reason why the senior developer knew how to handle this problem, even though he never had experience in Angular, is because he knew his design patterns Namely he knew how dependency injection works (it’s used in Spring) Dependency injection isn’t an Angular pattern, rather its own design pattern, and parts of it usually go with it.

I assume the senior developer knew of the general concepts of your problem, knew some basics of how Angular was designed (not necessarily how it works) and knew of the general approach of what to do.

Obviously it takes experience to get there and know these things, but this is where fundamentals come in. If you were stuck on this problem, but had no idea how Angular’s dependency Injection system works, or that the InjectionToken class existed you are going to end up digging into the problem without this sort of knowledge.

So now you are probably asking “Yea so how to I gain that knowledge and experience?” Well there’s 2 things.

  1. Find out what you don’t know
  2. Learn what you don’t know

Now that might sound confusing at first, but let me break it down. First there are things that are unknown unknowns things you don’t know that you don’t know, you want to limit these by seeking out knowledge to know you don’t know it. For example, in the above case you probably didn’t know the inner workings or ideas around how DI works in Angular, but once you realized “Hey I might not know WTF is going on with this concept” you’d know you didn’t know essentially, which brings in the second concept. Second there are known unknowns, like you knew you didn’t know how to fix this issue. Now its tough to figure out this issue, but it’s even more tough if your missing part of the key concepts around this issue (how the DI system works for example).
Finally there are the obvious known knowns, which are the easiest, its what you already know and can “lean on”. I assume you understand how OOP works, but you might now be 100% on DI.

So this all brings me back to the two points above. Its one thing to expand your horizons just enough and learn just enough to understand how much you actually do understand. I can talk about what the Gang of Four and the concepts built around an injection token, but without knowing about this book or the concept of design patterns in general you wouldn’t even know you were missing out on this possible experience.

Finally, even if you read the classic Design patterns book you might not even figure out this issue. (It doesn’t actually even go into Dependency Injection haha, since its a “newer” concept) and that’s where raw experience comes in. The senior obviously knew how to deal with the issue from his own experience. You can’t replace that, you can only realize your lacking it

So take this as a lesson of what can be, and a reason to continue expanding your knowledge even if you don’t need to. You wont know when you’ll need it :smiley:

2 Likes

Spring boot and Angular both happen to use dependency injection. It’s not language specific, he just identified the design pattern and had a better idea on where to find the solution

To be fair, Dependency Injection is a key concept for Angular as well, you might be using it without actually realizing it and may arrive at the solution earlier if the concept was in your mind.

You want to be like that one senior developer…reach out and ask them! Communicate…let them know you are in awe with their ability to solve the problem without knowing the language, they are the perfect place to start to ask for advice

Thank you for your input cndragn. I’ll try that :slight_smile:

1 Like

bradtaniguchi
Thank you very much for your suggestion. I am inspired by your effort to bring a descriptive scenario. Your two points are great leads to start from.

So take this as a lesson of what can be, and a reason to continue expanding your knowledge even if you don’t need to. You wont know when you’ll need it

This is one piece of great advice. I will try to continue continuous learning process along the way. Thank you again for your nice post.

Yeah it’s really a nice piece of information for me too…Thumbs up!!!