It's been less than a year since I joined 10Pines, and a little more than two since I started working officialy as a programmer. I don't like calling myself a junior developer because seniorities can be easily misused, as their meanings depend on what the person using these terms is looking for in a programmer and the context where they work at. What I can assure you is that I feel like a newbie developer. Maybe it's all in my head, since my fellow team members treat me as an equal at all times, but sometimes the lack of experience in some scenarios just gets me as frustrated as a kid learning to ride a bike. To fight this, I have gathered a couple of life-savers that help me keep on track when I'm about to call it quits.
Become friends with your tools
Someone once told me I should code as fast as I think. My fingers are not that fast, but trying to accomplish this is a satisfying process as I gain confidence in my environment. Learn your IDE shortcuts, create scripts for tasks you have to do often, or establish the way you will arrange your windows by default. Mastering the tools you use everyday will make your workflow more bearable and will make you feel at home on your computer.
Stop, breathe and write your ideas down
I can be a really anxious developer sometimes; I tend to get carried away by big domains and end up having headaches. If you ever start entangling your thoughts with the idea you are trying to craft, stop going from one class to another or staring at a blank test and grab a paper. Make a diagram or whatever can help you capture what you have on your mind; get it out of your head and see it in a static way. It is important that you do it by hand and not in a computer notepad, because at the time of representing thoughts technology can limit our expressiveness.
Actually learn from the domain
As a software developer, you have to solve the problems you are being asked to, but it isn't about doing it fast, counting the lines of code and moving on to the next thing. It is really important that you understand what you are working on. I cannot stress this enough. You are always modeling a bit of the reality we live on, so actually getting it helps you cover all posible workflows and suggest improvements to the solution. Ask for more context when you are not sure about something and go over whatever you are building as if you were a final user. Don't be a coding bot, be a person who develops his/her work consciously.
Don't get trapped inside a technology
Some people try to learn as much languages or frameworks as they can. Pablo talks about developing based on essence on his post and I couldn't agree more with him. Us newbies can get stuck on technologies just because we don't follow their syntax or other simple problems that take up a lot of time from our project. This should never get in your way if you remember that what matters most is creating good abstractions for the domain you are trying to represent. The rest can be solved by reading documentation, trying to follow some tutorials or asking someone from your team. This last part leads me to another good advice:
Don't wait until it is too late to ask for help
This might seem insignificant from our perspective, but I've heard it from a lot of people (and of course it has happened to me). Trying to do things by ourselves is the right way to grow, but debugging two hours the same piece of code with no results is degrading and makes you want to quit and study herbology. Learning to differentiate when the right time to call someone has come will reduce frustration and, by the way, will make you see receiving help is not a crime. Someday you'll be capable and willing to return the favor and give a hand to another newbie.
Embrace changes and challenges
A new procedure you've never done before? Having to work with new people? Maybe standing up for what you think is the best solution to a problem, even though someone disagrees with you? Don't panic, you are not the first and won't be the last to face these things. Pull yourself together and try to see this as an adventure, as cheesy as it may sound. I assume that you are a passionate developer -I actually can't think of someone doing this for other reason than loving it or being crazy-, so stressing out over this nuisances is a waste of time. With the advice I gave above, you should try to enjoy the process. If you don't, reach out to someone and ask for advice letting them know what is bothering you. But don't ever ever back up on a new experience!
Learn from your mistakes
As Toia explains on her post about learning programming, we all experience a lot of frustration in our profession. The key is to get something out of each childish tantrum, make your mistakes memorable in a good way. Be sure that you will get past this problems eventually, and that you will always learn something new because of this. Whether it is learning a new mechanism, or what not to do to avoid dropping the whole database, you should pin those new tips onto your brain to avoid repeating them or solving them quickly.
I hope that this helps out another insecure developer out there -at least this is a good note to myself for the stressing moments. I know that as long as I keep on programming, I'll face mistakes, challenges and debugging mysteries over and over again. What I also know is that every day I gain a little more experience and tools to handle these situations. Try to remember that, when you are about to break down, and also when you are feeling good about yourself for that nice new feature you just made. Make your own way through this and share your tips with another newbie!