9

I'm a software developer and I recently began my first role out of university. I studied computer science and I have about 1.5 years of experience from internships, so I should have enough skills to manage this role: the expectations aren't crazy.

However, I'm not doing a good job at it. This isn't imposter syndrome: I truly have weak skills in most software development tools/topics, especially for someone with my amount of experience.

The reason I ended up in this position is that I didn't work very hard in most of my courses and internships. If you've ever had a teammate who was dead weight, that was me. I fully recognize now that I screwed myself over.

But I want to fix it. I want to take my work seriously and make strides in learning technical skills. But since I've never done that before, I'm not sure how to go about it. (Of course, I've learned a bit over the years. I've just never had an internship where I could say "Wow, I learned so much every day!".)

So, how can I go about doing that? How can I improve my technical skills as efficiently as possible? How does a successful developer break up the time in their 8-hour workday? How much time is spent doing tutorials on technologies versus reading documentation versus googling errors versus asking colleagues for help? How do you determine when you've spent enough time trying to problem solve on your own and now you need to ask a colleague for help?

Other things to note:

  • I'm scared/worried about asking too many questions at work. The vibe I get from my workplace is that they value self-learning over mentorship.
  • I have a huge "I can't do this" attitude when it comes to coding or anything technical. That's a big reason why I didn't learn much at previous companies.
  • I feel demotivated by my company's product and culture. It feels corporate and it's not like they're changing the world or anything.
  • I'm successful in other areas of my life, so it's not like I'm unable to learn technical/logical things or work hard. For example, back when I was taking university seriously, I studied hard and got high grades in math courses, despite having a weak math background.
9
  • 2
    "I'm scared/worried about asking too many questions at work." That is very wise. Software is the ultimate "figure it out yourself" field. Nothing is more annoying than someone asking "how to do" something. Use stackoverflow and figure it out yourself. – Fattie Jan 24 at 18:41
  • 1
    @Fattie, ironically, stackoverflow is just as likely to give a smug and dismissive response to someone trying to learn something new. Stackoverflow is specifically NOT intended for learning, it is for people who need to look up some details for something they mostly already know how to do. – teego1967 Jan 24 at 19:38
  • USING stackoverflow is not randomly asking questions with no prior research. I've learned plenty on SO over the 6 years, but I've only asked 6 questions, with only 1 getting more than 10 votes. If an obviously unresearched question is asked, then you will get smug and dismissive responses. – Nelson Jan 25 at 3:08
  • Answering "How do you determine when to ask a colleague": I ask myself the following: "Have I tried everything I can think of?", "Do I really understand the question?"<= This is important. Ask yourself repeatedly "why?" like little kids do. I always hated it if a younger colleague came to me with a question where I could send him back to his desk with only one counter question. But no one minds a question if you really know what you want to ask. – jwsc Jan 25 at 7:42
  • 2
    @Fattie, SO is even worse for people doing "totally new problems". It works best for filling in minor knowledge gaps for people who are already well oriented. Sadly, SO has long had deep-seated hostility issues against people trying to figure things out by asking questions. – teego1967 Jan 25 at 12:25
5

To get this out of the way first: Imposter Syndrome is real and can affect you whether you realize it or think it's at play or not. My first real software-professional job, I was not really prepared for but I "grew into it". The important thing I want to mention here: In a typical company, more than one person would have been involved in hiring you, and the consensus was that you were worth hiring. The people who interviewed you and decided to proceed saw potential in you that you may not see in yourself.

As far as your bolded question (which I understand is more immediately important to you) - you're part of the way there already and if you can keep up your motivation to learn and improve, you should be able to do so. Keep in touch with your immediate manager and get feedback on your progress. What I've done, and what I recommend:

  1. Immerse yourself in a technology community. Subscribe to blogs, join a Meetup group, check out Q&A in that area on StackExchange, take a class. You can learn a lot about any technology if you can immerse yourself in it and outside of academia this is a good way to do it.
  2. Your workload and tasks will give you direction on what to learn. Having a problem to solve will give you something to research. If you find yourself without an immediate task, try programming exercises in your language or area to practice and learn.
  3. If you're not already doing peer programming exercises, see if someone will work with you on that. A large part of joining an organization is fitting in with their tools, practices and workflows, and there's no one better to explain and guide you in those than a senior in your area. You mentioned the culture feels less "mentoring" and more "self-learning" so you may be stuck with just occasional peer reviews and not something like pair programming. The more interaction and feedback you can get from more senior team members, the better you'll fit in the organization.
  4. New team members don't get invited to all the meetings. This is actually a good thing, because it gives you a lot of time that senior members don't have, and you can spend it learning/practicing/progressing. Senior members may have to block off calendar time to join a webinar or learn a new tool. Junior members can just avoid meetings for an afternoon or two, take advantage of that.
  5. Your company may have a budget for classes. Find out what that is, and make a list of things you want to learn and the best local/remote/travel options to learn that. Companies have purchased books I wanted to read to get better at tech things, but they've also paid for trips to conferences and certification training courses, and everything in between. If you have these opportunities, take advantage of them.

As for how I spend my time: I have up to 4 hours a day of meetings. I attend 3 or so webinars a week on topics I want to be more familiar with. I work on projects mostly on my own, and I'm very reluctant to ask for help. I retain knowledge better when it's a hard lesson, so I'd rather spend 2 hours figuring it out than bother someone who might already know. If I do ask after the 2 hours, I have a stronger appreciation for what they share with me so it doesn't go in one ear and out the other. I take 2 or 3 certifications a year, and the way I study for those varies. I spent a lot of time on StackExchange reading questions about my technology and formulating my own answers (I wasn't fast enough to be the first or best answerer on many of them), practicing that way since I didn't have those problems in my work environment. I found a few podcasts in my area and listened to them weekly. I joined 3 local groups that have monthly meetings (outside of work hours).

Your manager may already have a sense that your skills aren't where they should be, if they bring it up you should emphasize that you're already working on the shortcomings and see if they have any recommendations. Keep track of your progress somehow, you'll be surprised how much you can learn in a couple years.

3

Put the hours in.

That's all there is to it.

Much like being a top musician, it takes 1000s of hours of focus to be a programmer. (Note that by "1000s of hours" I mean say 4,000 to 15,000.)

100% of top programmers, and almost all "merely good" programmers, start when they are 10-12 years old - exactly like musicians - because it takes so long.

Note that you mention for example doing well in undergraduate math courses. Unfortunately, it only takes ~50-100 hours of focus to pass any say 1, 2, 3 year undergraduate math course. "Becoming a programmer", much like becoming a pianist or guitarist, is totally unrelated, requiring another one or perhaps two orders of magnitude of hours.

If you feel it's not for you, avoid wasting a couple years and get out early.

There are 100,000 other things you could do to make more money, more easily, with more fun.

Beware of folks blowing smoke that if you just think! positive! and keep your underwear clean! everything will be fine. Again, there are 100,000 other things you could do to make more money, more easily, with more fun

Good luck!


read up on the "10,000 hour" idea in music

1

Gratulations first to realize where you f*** up in your studies and what you need to fix. Many do not realize it - make sure to tell everyone you ever met not to slack off in his studies. It is likely the most important lesson they can learn.

One thing that you seem to be stuck that makes no logical sense is this (and it may well solve the issue):

The vibe I get from my workplace is that they value self-learning over mentorship.

It is not self-learning OR mentorship. A mentorship is not there to TEACH you - it is there to GUIDE you. Otherwise it would be called a teacher, not a mentor. Optimally, you should have a team lead or something that will act as your mentor, and that includes working with you on directing your self study, realizing where you are weak, making sure you can participate with your strong points WHILE learning on your weak points, and answering the questions that you get stuck in your self-learning program. You may add some coursed together with self-learning (which I take more as RTFM - something that is always a core skill and that so many developers lack), but Mentoring is planning and helping you with your development, it is NOT teaching you.

And that is why junior developers should be assigned a senior as mentor-partner or a team lead should be there.

On the self learning side - your employers is not there to teach you thinks on their time that you should know and if they hire you based on your certifications then being unable to fulfill a job you should do is not "spend half a day learning" - it is "you are fired, we pay someone who did not slack off". Now, being a Junior developer with little experience (yes, that is what you are, despite internships - those generally are not worth a lot) gives you a lot of slack for some time, but you are expected to perform on the level appropriate for your shown time.

You obviously can not as per your own words. So, say welcome to 12 hour days 6-7 days a week. THAT is the price you pay for slacking. Say hello to very little holiday. You work in your contract, then you go home, grab a book and learn all the stuff you should have learned. Find a mentor, plan what to learn, but getting yourself into shape is not something any company will pay for unless they hired you for this exact purpose. So, you need to "go to the gym and get yourself in shape" - except that is not loosing weight, that is learning. On your own time.

You biggest problem is this: "I'm scared/worried about asking too many questions at work." - you need to get over that, find someone you can work with and work on a plan. Given that you lack skills as per your own word, here is a way how to deal with that: In pretty much every project team I ever was we had a guy who could not really pull his weight on anything complex. We never fired those we had because while they lacked skills, they totally made up on that with work ethics and willingness to do the crap work. Every project has boring work that still needs to be done. Non-exciting, grunt work. Your lack of skills count little when the goal is to write test cases to get the test coverage from 78% to 85% as mandated and most of those cases are boring as hell. Or when it is about fixing the styles on an internal web app because someone decided to change the look. Or keeping certain documentation up. THIS IS YOUR SAVING - if you become the go to guy for all that work, that in many teams means they will overlook your lack of skills because you ARE USEFUL. Now, this is obviously a "dead position" - no promotion here. But you do not look for that - what you look for is a place where you can contribute WILL LEARNING YOUR ASS OFF. Basically: Carry SOME weight so you are not dead weight, WHILE LEARNING.

And here is the bad news: No One will give you years to learn. You need to catch up, within half a year max. Now, good thing here is that what you need to learn is way thinner than your studies (not all is used on every project), but you must learn, fast. Goodbye to free time.

And learn how to learn from books. All your approaches speak "wasted time".

I attend 3 or so webinars a week on topics I want to be more familiar with.

Webinars are totally useless outside of giving you an overview of a topic. Well, mostly - some may demonstrate some arcane element, But in general they are TOO SMALL for being sensible.

I retain knowledge better when it's a hard lesson, so I'd rather spend 2 hours figuring it out than bother someone who might already know.

There is a time for that, there is a time for asking. Here is the problem: if you take 2 hours figuring it out, I pay for 2 hours instead of 10 minutes. Not good.

I take 2 or 3 certifications a year, and the way I study for those varies.

Those are again mostly useless. I have zero certifications and run circles around anyone I ever met with - they can not really test in depth, they are mostly "book learning". THAT SAID: they at least demonstrate this, and that has a serious value in itself.

I spent a lot > of time on StackExchange reading questions about my technology and formulating my own answers (I wasn't fast enough to be the first or best answerer on many of them), practicing that way since I didn't have those problems in my work environment.

I am not sure how much you get from that, given that most questions on Stackexchange in particular are QUITE low hanging fruits. It is a nice exercise on something, it is not a good approach on learning.

I found a few podcasts in my area and listened to them weekly.

That is, again, quite on the level of webinars - HARDLY worth the time. You just do not have the time to go into details.

I joined 3 local groups that have monthly meetings (outside of work hours).

Hate to say it, but you are on webinar territory again with even MORE overhead. If it is like any of the groups I ever joined, it is more for social gain than anything really in depth.

You know what is missing? READING BOOKS. Not blogs, books. Because a blog post is 4-5 book pages, and a book may be 400-600 pages on a specific topic, going in detail. Back when I was in school I was reading 500 page programming books on a weekend and developed a technique to memorize the table of content - I got the grasp, and knew what a book covered and roughly where any topic was and I trained looking things up FAST. And right behind me and in the living room are around 7 meters of books for relevant topics that I keep there as reference material. THAT is in depth knowledge, not some "90 minutes talk in a webinar". The moment you realize that RTFM and RTFB (read the f**** book) are where you really can gain insight, not by meeting people for a drink, is when you start making progress on getting in depth knowledge.

And if you think that is hard - that is how you become good and that is totally normal for medicine or law. And yes, I love blogs, I listen to webinars - but they are all "noise", checking interesting areas, getting a snippet here or there, NOT "learning structured".

Also, this:

I feel demotivated by my company's product and culture. It feels corporate and it's not like they're changing the world or anything.

First, that is YOUR problem for two reasons. One, you choose your company, second - you have expectations that are not realistic for 99% of the population. Now, the choose part is this: there are different areas of making software and if you know what you find interesting, why you do not look for a job that - meets this? The pay may be worse (as in: A TON of people want to make computer games - guess what, games programmers are the bottom of the barrel regarding pay for that one reason, most of them) and you may have to do real grunt work for some time (particularly because you wasted doing internships in interesting ares - wasted chance) because besides being a bad programmer most interesting work will require a lot of domain knowledge that you lack, but...

... in general: you will not have an exciting career, you will work for someone doing something that does not excite you because that is what 99% of the people do.

If you are REALLY lucky, you may have a talent that matches up with something that excites you AND you may find that this also does pay you well (i.e. not "making games"), but otherwise you will choose a job that pays as good as you can and work for money. Do you think any of the accountants on the planet are excited about their work?

I strongly suggest you adjust expectations and realize that "earning money" is an AMAZING motivator. It allows you to have a family and have children wasting their time in university WITHOUT wondering how to pay all those bills.

If you are one of the really few luckies, you may find that database work is something you really enjoy (VERY few real db specialists around, so - somehow the pay is QUITE good), or some other field. if you are EXTREMELY lucky you find you have a real hand for something that makes money, and the energy to push through for a job that pays a TON of money in IT. Yeah, those mythical jobs exist, but - well, rare is rare.

But your really need to adjust the attitude here. Or your job. I have i.e. always worked freelance - but then this requires a deep understanding of a specific area or you may not get a decent rate. And even then - I focused on building things to be able to choose my customers because large companies (which make large projects and pay accordingly for specialists) ALWAYS have a ridiculous amount of "corporate". This is how the game works - sadly. But guess what - startups generally lack the money to pay high, so, unless you go that way... or win the lottery - the corporate feel is there to stay, sorry.

0
1

Some of the other answers verge on condescending and preachy. Here's my attempt...

How do you determine when you've spent enough time trying to problem solve on your own and now you need to ask a colleague for help?

By trial and error, seriously. You need to at least make some attempts at a solution, be able to cogently state your understanding of the problem and identify the things which are blocking your progress.

I'm scared/worried about asking too many questions at work. The vibe I get from my workplace is that they value self-learning over mentorship.

They might. One thing you can do is to develop some rapport with the people who you ask questions of. For example, you can ask them about what they're doing in their own projects. Most people are proud of their work and respond positively to someone that is curious and interested about what they're doing. When you see how they approach their own work, you can usually apply that knowledge to your own work.

Sometimes it's better to discuss general strategies rather than deep details. People who are really good at what they do often don't rely on memorizing details but instead remember concepts and then re-learn the details as they work to implement the concepts. These concepts are something that people are generally willing to discuss because they're interesting. This sharply contradicts the "stackoverflow" approach that requires all questions/discussions to be super specific. They don't. Work is not like stackoverflow. You can discuss problem-solving approaches and then go back and work out the details yourself. It's less annoying than asking someone to "get lost in the weeds" with you discussing very specific details. Mentors enjoy working with mentees who are curious but then have the grit to work towards a solution.

But when you do have a very narrow detailed question, make it as easy as possible for someone to help you. That's where you need to take the "stackoverflow" approach.

I have a huge "I can't do this" attitude when it comes to coding or anything technical. That's a big reason why I didn't learn much at previous companies.

This is the most concerning statement that you made, in my opinion. If you really feel this way early in your career, you owe it to yourself to start exploring other career paths. Now is the best time. It will only get harder to explore options the longer you wait-- and you'll be miserable.

I feel demotivated by my company's product and culture. It feels corporate and it's not like they're changing the world or anything.

This is normal for large corporations. Almost everyone feels this way, even people at elite companies (like FAANG's).

5
  • Bad advice about asking questions. Asking about other people's projects (that doesn't concern you) would only waste time and paint you like nosy person. In real world, except perhaps few outstanding companies and startups, people are not too emotionally attached to their jobs. And looks like OP is in some average company, so it is much better for him to use question time wisely. – rs.29 Jan 25 at 8:44
  • @rs.29, there's a difference between nosy and curious. One excellent way to develop rapport with someone is to talk about what they do and not so much about your immediate needs. It's a basic social interaction that sometimes gets forgotten in workplaces. – teego1967 Jan 25 at 12:18
  • If you start nosing about other people's projects during lunch break, it is very likely you would simply alienate people. Social skills are necessary, and one of them is to know not to bring job into rest hours. – rs.29 Jan 25 at 18:41
  • @rs.29, not sure what you mean by "nosing", but it's totally normal for a junior to want to talk about projects and how things work in a new job. I suppose there might be some exceptionally dysfunctional gulag-style workplaces where this would be alienating, but those are rare. You definitely want the new people to be curious, of course all this depends on proper social skills. – teego1967 Jan 25 at 21:20
  • You just started your lunch and new guy comes in : "Hey teego1967, how are you doing ? Tell me everything about your latest project ." - "Sod off, kid" :P In real real world, most of workplaces are some kind of gulag . Majority of the people in the world come to work because they need the money, not because they particularly like the job. And a kid asking about your project is a potential replacement, not to mention annoyance. – rs.29 Jan 26 at 5:46
-1

Be self-reliant and specific when asking questions

First thing you need to remember is that you are not in the university any more. In your workplace, no one is hired to teach you. Sure, you may get some guy to be your mentor, but does not mean he could waste couple hours a day teaching you how to code. Simple rule of thumb is don't bother your colleagues with something you could find on internet. And when you do ask questions, keep them short and specific, so the one giving the answer could do so in less then a minute. Your questions should be mostly about the stuff like business logic, configuration of project, some specific in-house code or framework, occasionally some advanced programming technique . But remember, teacher is a finger pointing to the moon, not the moon itself. So, keep it short, and ask mainly for directions to knowledge, not the knowledge itself.

Second part of the question is what should you learn on your own. I highly recommend focusing on things that would keep you on your current job. By your own admission, you are not greatest developer in the world. You slacked at the university, and now have serious holes in knowledge. I would assume you are not entirely without certain mathematical (algorithmic) talent, that would mean that you wasted few years of your life and missed career entirely. What you need to do is to catch up fast, and without loosing your current job, because that would be tremendous psychological blow, and would hurt your chances with other employers. So focus on the things you are currently doing at your workplace. If that means bringing work home and doing unpaid overtime, so be it. Many would advise you to find some hobby pet project not related to your job (on GitHub or otherwise), but I think it is a bad idea in your current state. For you, best thing that could happen now is ability to finish your assigned tasks without too much strain. When you are confident enough that you are not imposter and that you deserve your wage, then you could move to next steps in your career.

5
  • Unfortunately I would simplify this further and more bluntly to "programmers who ask questions get sacked". – Fattie Jan 24 at 19:00
  • @Fattie Could be generalized to almost all professions. You are hired to do the job, not to learn it. – rs.29 Jan 24 at 19:46
  • @Fattie That really depends on the company. At my company, we'd prefer employees not to waste hours trying to find an answer that the colleague sitting next to them could answer in 2 minutes. (Of course, some caveats apply: we expect the junior dev to do some minimum research while waiting for their mentor to wrap up whatever they're currently doing, and sometimes the answer may simply be "check document X". But still, if a candidate indicates that they likely won't be asking lots of questions, that would be a yellow flag.) – Llewellyn Jan 25 at 20:50
  • @Llewellyn Key point "2 minutes" ;) And for a 2 minutes question junior developer (or any other junior personnel ) needs to have the knowledge to pinpoint the problem to more senior staff . – rs.29 Jan 26 at 5:39
  • @Llewellyn - cheers; I feel we are talking about different things. By all means, as you say, there is like "project knowledge", certainly! It drives me nuts when someone spends four hours figuring out how to blah and the other person then says "oh, we made a toggle for that, it's blah!" What I am referring to is "programming as such" issues, not issues about that project. (So, how to sort strings, how to move a window in [your device platform] etc !!) – Fattie Jan 26 at 15:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .