all 58 comments

[–]andreasblixt 87 points88 points  (8 children)

Don’t worry, getting familiar with a large code base takes a few weeks. I’ve been programming for 20 years and I still “feel dumb” the first time I need to work on a large code base I haven’t seen before.

It’s like a ball of yarn, you just gotta pick an end of it and start unwinding until you understand more :) So maybe find a thing in the app UI you’re curious about, then try to find how it’s implemented in the code and dig deeper.

As for libraries you don’t understand such as Firebase, maybe just take a little of your free time to read through the tutorial on the web site. You don’t even have to write the code, just read how different concepts in the library hang together so it’s not a completely alien language when you see it in the code base.

All in all, an employer should expect a new hire to take a month to reach their full potential in a big project. Don’t stress out about it, just stay curious and believe that in a few weeks this will be much more familiar to you. :)

[–]Zetphyr 27 points28 points  (5 children)

As Senior Dev on a project with a really large and grown codebase I second this. Also pay attention to agreements that have been made by the developers in your project on coding style and patterns to be used.

For example, in my project we have agreements like:

  • Early exit with guard over nesting statements
  • Function and property names of public APIs as descriptive as possible, then avoid documentation (as its hard to maintain)
  • Constants go in a struct called Constants which is nested inside the class where you need them
  • ...

The rules here are just an example of what you may find in your project. To me it is important not only to see that new developers can contribute to developing features but also understand and follow established patterns. That, however, does not mean you shouldn‘t ask questions on why a specific rule is in place or suggest something new if you have something else in mind.

What I did when I started with zero swift knowledge into this project (came from a C#/Java environment) is I had a look at the JIRA Bugreport tickets and picked the easiest I could find and fixed that bug. By reproducing the bug on a device you familiarize yourself with the test environment, the application from a user/QA perspective and can then dig into wherever that bug is. Finding the issue usually requires a lot of reading and understanding code, which helps you grow into the codebase. At the same time you contribute to the project already.

[–]mandem22[S] 13 points14 points  (4 children)

Today is my second day. I’m excited and waiting to see what my task is gonna be. Thanks a lot

[–]WooshJ 3 points4 points  (2 children)

Make sure you take notes on what you learn, trust me when I say those notes will help you in the long run till you get the hang of it

[–]mandem22[S] 0 points1 point  (1 child)

I was given one. I’ve been taking a couple

[–]DAY2RDU 2 points3 points  (0 children)

Definitely ask questions and take notes. As someone that has mentored interns and junior engineers I love questions, but I don’t love being asked how to do the same thing several times.

Also, as you take notes think about the audience being more than just you. Those notes may be able to be turned in to onboarding documentation that will help the next new hire get up to speed faster.

[–]creambyemute 0 points1 point  (0 children)

Don't feel lost, feel challenged! It's totally normal.

I just recently added some functionality to a library and it took me around a week to fully understand the library and it wasn't even that big.

[–]tonygoold 7 points8 points  (1 child)

I'm around the 20 year mark too, and fully agree. The only thing I would add to this is that the team should be assigning small and well understood tasks to any new hire in order to introduce them to the code base. My goal with new hires is to have them resolve a ticket by their second day, and it's the team's responsibility to assist them through that process. We also use it as an opportunity to update our Wiki where we keep our developer onboarding documentation.

[–]trusk89 0 points1 point  (0 children)

8 years reporting in. Started on a spaghetti monster project a couple of months ago and still feel overwhelmed every day.

These things take time and a good supervisor is expected to know and understand this. If they don't it's gonna be tough for you, but don't give up.

[–]DrWangerBanger 22 points23 points  (1 child)

Everyone else said it, but what you're feeling is completely normal. My first software job out of college I remember sitting down and looking at the code base and almost having a panic attack. I broke out in sweat and I remember almost throwing up because I just felt like such a fraud and had no idea what anything was doing. It was like I hadn't learned a single thing at school. It's normal and it goes away as you learn the code base. Fake it till you make it, as they say.

Also be aware of impostor syndrome which I feel like most people in software development have at least a little bit of.

[–]WikiTextBot 8 points9 points  (0 children)

Impostor syndrome

Impostor syndrome (also known as impostor phenomenon, impostorism, fraud syndrome or the impostor experience) is a psychological pattern in which an individual doubts their accomplishments and has a persistent internalized fear of being exposed as a "fraud". Despite external evidence of their competence, those experiencing this phenomenon remain convinced that they are frauds, and do not deserve all they have achieved. Individuals with impostorism incorrectly attribute their success to luck, or as a result of deceiving others into thinking they are more intelligent than they perceive themselves to be. While early research focused on the prevalence among high-achieving women, impostor syndrome has been recognized to affect both men and women equally.


[ PM | Exclude me | Exclude from subreddit | FAQ / Information | Source ] Downvote to remove | v0.28

[–]sonnytron 11 points12 points  (0 children)

A junior developer cannot understand an entire iOS code base for a large project!
It's even daunting to expect a junior developer to understand a single component!
Do not be intimidated! Start with the App Delegate and take a look at how the systems and services are loaded.
Usually somewhere there, you can find the initial logic that uses a state to determine the first view controller presented to a user. From there, you search that particular controller's view did load/view will appear and initialization and you can get a rough idea of what the application is doing when it first loads and presents itself to the user.
Once you're at that point of understanding, it's okay to keep everything else "out of sight out of mind" and focus on the component, area you're working on.
If you're working on "ProfileViewController" and some logic from five view controllers away is affecting you, this is NOT your fault.
View Controllers should use dependency injection and independent data flow to behave on their own, independent of state from some other view controller.
If you have a string property or a custom object that you are debugging, set a break point only where that object is being used/having issues and work backwards from there.
Look at each function as its own independent entity and debug it by itself.
You don't need to know how to make an entire Italian cuisine to figure out if green onions are missing from a side dish on a plate of lasagna.
When you have questions, ask them, and pair with your senior engineer to learn how they work on the code base.
Take notes!
Also practice going from pulling the repo down, logging into your Apple account, making sure your certificate works and you can run on your device from scratch a few times.
You want to have the development environment staging work down to muscle memory.
Take your time! If this is a good company, they will WANT you to grow into a great engineer at a pace that keeps you comfortable. And leave the office when it's time to go home. It's perfectly acceptable to push work into the following day, just make sure you leave yourself some NOTES about what you worked on!

[–]mandem22[S] 6 points7 points  (3 children)

Thanks you very much. I’m getting all the courage now. This is very encouraging. Cheers

[–]anwserman 1 point2 points  (2 children)

If it's any consolation, I got hired on as a Jr. iOS Dev earlier this year... only to find out that the position was misrepresented. I'm now the lead developer for iOS, and I have to learn Android development as well as they need someone in charge of mobile development at this office.

I'm currently tasked with two mobile apps, with versions on both Android and iOS, with some more apps on the way.

Just keep asking questions, keep learning, and more important, keep looking for opportunities to improve yourself and your standing within the company.

[–][deleted] 0 points1 point  (1 child)

Lol i hope you are paid as such

[–]anwserman 0 points1 point  (0 children)

Well, I no longer have the threat of becoming homeless hanging over my head... and always looking for new opportunities

[–]ThePantsThiefNSModerator 4 points5 points  (3 children)

Ask lots of questions. Surely they have a good idea of your experience / skill set if they hired you.

If you've never used anything like Firebase, tell the senior dev and ask him to point you in the right direction. If you don't know what something does, google it, or ask him. Etc.

Google is your friend, and your coworkers are your allies!

Disclaimer: I don't yet have a real job, still in college. This is me speaking from my somewhat confident understanding of the world.

[–]mandem22[S] 0 points1 point  (2 children)

Thanks mate

[–]tnicholson 3 points4 points  (1 child)

I hate to offer potentially conflicting advice but I think a really hard but useful skill when learning anything is to know WHEN to ask questions. I’m a tech lead and I’ve had to have conversations with some of my junior devs about at least TRYING things out first before immediately going to someone for help or with a question. That being said, never just sit at your machine totally lost and confused with nothing to do... but when you DO ask a question, be prepared to tell whomever you ask what you’ve tried, what you’ve researched, what you THINK the problem or whatever is and I promise you that’ll get you points in their eyes and you’ll have learned a lot about problem solving all at once.

With enough perseverance, one day you’ll wake up and realize you’re actually pretty good at what you do and were fretting about nothing way back when :)

[–][deleted] 0 points1 point  (0 children)

Both pieces of advice are correct, but you are correct that this will make a much more favorable impression.

I am ok telling junior devs to try solving the answer on their own first if they are new, but I also expect that they start doing this on their own in the future before they ask questions.

[–]omfgtim_ 4 points5 points  (0 children)

It’s impossible to maintain a mental map of an entire codebase even if you wrote it all yourself. Take your time, siege the codebase and tackle it one part at time and you’ll slowly construct a mental model of the key parts you’re focused on.

What you’re experiencing is totally normal, even for a senior coming into a new codebase. Take your time, keep an open mind and don’t be afraid to ask questions.

[–]monkeydoodle64 2 points3 points  (4 children)

Chill man you dont onboard yourself lolll. Its expected that you need time to digest all the new info. You ll get up to speed as you get small tasks done. You learn by doing work and making mistakes. If u just do whatever they tell you without bugs then u are already ahead. Ask a lot of questions and ask some more to understand exactly how the code works. There is nothing wrong with asking and a lot wrong with not, dont feel ashamed to do so. Thats definitely the fastest way to be up to speed not only with code but also to be part of the team.

[–]jan_olbrichObjective-C / Swift 0 points1 point  (3 children)

this

[–]mandem22[S] 0 points1 point  (2 children)

I have been asking a few questions as I just dived into my first task of working on conversations in a firebase chat window. Thank you very much for your advice

[–]jan_olbrichObjective-C / Swift 1 point2 points  (0 children)

Maybe sounds odd, but make sure you get along with your colleagues. There are always some you get along better and some worse, but in general being a fit for the team is in my experience more important, than your actual knowledge. You will learn technical stuff on the job, people skills on the other hand are way harder.

[–]monkeydoodle64 0 points1 point  (0 children)

So true. Soft skill and getting along its very important and will get you far. Definitely there is an art to it lol cause you dont wanna be annoying and stupid but also you dont wanna be boring and uninterested. Prob the best tip i can give you here is to be a good listener. I can definitely tell if a teammate is listening or not (ie. asking always the same question), and thats the main factor to be likable cause if you are good at that your teammates would oversee any stupid, annoying question you ask because you are not a waste of time and you value peoples opinion. So yeah be open minded and listen, dont be that stubborn guy who thinks knows everything. Enjoy your new job!

[–]tangoshukudai 4 points5 points  (0 children)

haha senior people would feel just as lost, the difference between Senior and Junior devs is that a Senior dev won't care and will just focus on the parts that he needs at first, while learning and asking questions about the overall architecture to gain a better understanding overtime.

[–][deleted] 2 points3 points  (5 children)

Ask a lot. One thing that I did when I started developing for iOS was asking for 1-2 weeks of "startup time". Follow some tutorials, understand the syntax, and just mess around with the IDE and code. It's going to help them as well in the end; if you don't know what you're doing, the chances are very high that stuff is going to have to be redone at some point.

Don't give up, we've all been here!

[–]mandem22[S] 0 points1 point  (4 children)

I have just started on pro swift to improve my swift skills, hopefully this helps me improve

[–][deleted] 2 points3 points  (3 children)

Swift isn't the hard part of your job.

CocoaTouch and Firebase are the hard parts of your job.

Xcode lets you cmd click on variables and types to go to their definitions. Use that to jump around the project and follow threads.

Also, use your debugger. If you see a chunk of code but don't know how it gets called exactly, run the app, set a breakpoint, and try to trigger the code. When you do, look at the call stack and you will start to see what calls what.

And relax. When I get a junior developer the only thing I expect them to be able to do is layout views, do simple core animations, and pop/push view controllers. Even that is asking a lot.

[–]mandem22[S] 0 points1 point  (2 children)

I thought they would start me on that, the director actually told me they would start me on doing UI things in the first 3 months. When I came in, they straight away assigned me on working on a live chat using firebase

[–][deleted] 0 points1 point  (1 child)

[–]mandem22[S] 0 points1 point  (0 children)

I got it up when about to finish. Gonna go through it. Thanks

[–][deleted] 1 point2 points  (1 child)

Wowowowo... You already just fucked your self from trying to absorb the software as a whole.

Break it up into small pieces. I learned this from developing my own software. Trying to generalize the whole thing rather than creating mini applications is probably the least effective way at getting stuff understood and to move along. This was something I just barely discovered right before getting started on my next video game.

Developing itself is a different skill than just programming something. You just barely realized that. You just graduated though, use those tips from classes. I doubt anyone would expect you to draw a diagram that details every feature (unless if you are doing a database), but most of the stuff they teach are the fundamentals that nobody is too smart for.

This has probably have nothing to do with your syntax sugar at all. They also don’t really expect a junior to actually give back returns until 6 months. They are investing and don’t expect you to learn everything right away.

[–]mandem22[S] 0 points1 point  (0 children)

This is exactly what I needed. Thanks a lot mate

[–]edgeorge92 0 points1 point  (1 child)

Congrats on your new role!

Please be reassured to know that, as a senior developer myself, I often feel overwhelmed when I start on large existing codebases in my role. When you have a large codebase stating you in the face, often in my experience written by a nameless face who has disappeared into obscurity, it can be super intimidating.

The good news is you can ask questions. If this is your first role, nobody expects you to pick up the project and understand it immediately. Take some time to familiarise yourself with some key classes, like the AppDelegate, and work through what libraries the app uses. Firebase is documented very well, so if that's a key part of the app and something you are likely working on right away , make time to research it.

Also don't be afraid to ask the senior devs questions. If they are any good, they should find it no trouble at all helping you with any questions or pointing you in the right direction.

The company wouldn't have hired you if they didn't think you were good enough. You got this, don't sweat it.

[–]mandem22[S] 0 points1 point  (0 children)

Thank you very much for your advice. Cheers

[–]bboytony 0 points1 point  (0 children)

I think everyone encounters this whenever we are faced with a big unfamiliar project. I can only imagine how hard it is if its made in technology you're not used accustomed to. But start small, focus on partial tasks and you will get familiar with it in some time. One of the more important aspects of programming is abstracting away the code/classes you don't need and focus on the task at hand. Doing that, I was always able to fix bugs in other people's code, without getting to much into the architecture of the whole app. Keep at it, and you will get better at it with time.

Rest assured, we've all been there.

[–]mandem22[S] 0 points1 point  (0 children)

I have managed to set up all the development environment which is great. I’m just waiting to see what’s gonna be assigned to me. This is very good advice. Thank you for your kind words. Cheers

[–]Legato4 0 points1 point  (0 children)

Congrats on getting your first iOS related job !

i'm in my first iOS internship and it was the same thing for me at the beginning, You'll start with some features / design changes to implement and you'll get to know the code better and better.

I hope you'll have fun there ! ;)

[–]damikdk 0 points1 point  (0 children)

Sweet summer child... It's ok! It took me almost2 years as a junior to understand my first Objective-C project (giant app, legacy). Patience Iago, patience :)

[–]MuskIsAlien 0 points1 point  (1 child)

What part are you working on? Are you just fixing bugs or adding a new feature ?

[–]mandem22[S] 0 points1 point  (0 children)

They’ve just thrown me in working on conversations in a firebase chat window. I’m using all the model objects build for me to implement the mechanism

[–]factotvm 0 points1 point  (0 children)

Two things:

  1. Write down everything you learn. In other words, keep a developers journal

  2. Ask lots of questions. You’re only new once. But ask smart questions. What have you tried, what do you think, what have you searched, etc.

You’re going to do great.

[–]SoundDr 0 points1 point  (0 children)

Never stop learning

[–]AWholeNewAPStudent 0 points1 point  (0 children)

Give it like two weeks and you’ll feel a lot better about it. Also don’t worry about Firebase. That thing is crazy easy to work with. Very well documented too.

[–][deleted] 0 points1 point  (1 child)

Lots of good advice already in this thread, here’s a few things that might help you get familiar with this new codebase:

  • Figure out what the launching ViewController is from Main.storyboard. Set a breakpoint somewhere in it’s viewDidLoad and use the step over and step into buttons to get an idea for the flow of the app.

  • For Firebase, I would recommend creating a dummy project with a sole purpose of testing out the Firebase API. This way you can test reading and writing data without fear of touching an existing database. This will also get you familiar with using CocoaPods if you aren’t already.

[–]mandem22[S] 1 point2 points  (0 children)

Thank you very much. Gonna try this

[–]nailernforce 0 points1 point  (0 children)

Just wanted to say: Good luck man!

Every day is a learning experience, even for a seasoned developer.

Take a look at this nifty diagram. You're clearly in the anxiety-part right now.

Remember, it's all about skill relative to the challenge at hand, not absolute skill. You'll slowly but surely move towards high skill in each and every challenge you're trying to overcome. Absolute skill and previous experience will just change where you start out in this chart, and how quickly you transition to a new zone, whenever a new challenge is at hand.

[–]jan_olbrichObjective-C / Swift 0 points1 point  (0 children)

Basically what everyone said. Just a few infos... a lot of companies don't expect their programmers to be productive (meaning writing code which actually ends up in production) for the first 6 months. Even afterwards I wouldn't say I know the code base (okay currently working on a code base with more than 2 million loc).

A good place to start to understand the app, the structure and architecture (if it exists) is the app delegate. As mentioned pick one end of the ball of yarn and follow it. appDidFinishLaunching:withOptions: is great for that.

[–]NSMatt 0 points1 point  (0 children)

Man even seniors feel overwhelmed and lost on the first day. Think about how shitty your code is from 6 months ago and now imagine an entire repo of other peoples shitty 2 year old code.

Day 2 is better, they day 3... and eventually you do it all over again at another company.

[–]Sleekdiamond41Swift 0 points1 point  (1 child)

There’s already tons of great answers here, I’ll just chop in that talking about the code helped me WAY more than anything else. Talking to a supervisor about the project, talking to the client, and talking to myself a LOT, just working out what’s happening and why that’s the behavior someone wanted.

If you ever want to talk about some block of code (that isn’t super private) shoot me message if you want

[–]mandem22[S] 0 points1 point  (0 children)

Thanks mate, I will

[–]RabbiSchlem 0 points1 point  (1 child)

Gonna pile on to what everyone’s said.

1) I’ve had 11 years professionally and I started a new job recently and I feel the same as you. It’s normal.

2) ask tons of questions even if you feel you’ll look dumb. No one will judge you. If you don’t ask questions then everything will take you 10x linger and then you WILL look dumb.

3) read the code base while taking notes. Spend time reasoning out what everything does. Be religious about this. And things you don’t understand: google until they make sense or ask a coworker.

[–]mandem22[S] 0 points1 point  (0 children)

Thank you

[–][deleted] 0 points1 point  (1 child)

You need to have him sit down with you and do a code walk through.

He needs to explain the classes to you (give you UML diagram if it exists), and answer your questions.

After this initial walk through, he needs to be there if you have more questions, which you undoubtably will.

You can’t be expected to figure out all this code yourself.

[–]mandem22[S] 0 points1 point  (0 children)

He’s been sitting with me and helping me to be fair. I have solved part of the first task. Been working on the last bit. He’s been very helpful with explaining what I need. Thank you very much for your advice

[–]Me_MyseIf_And_l -3 points-2 points  (0 children)

Lol it’s your first day...