I am a 22 years old recent university graduate. I have a keen interest in programming, computer networks, algorithms, information security during my study years and after. Before completing my degree, I was selected in an interview in university placement for Android developer in a small company (of about 150 people) and I accepted their offer. Everything worked nicely. I first learned about how professional programming is different than we do in colleges and it was very much exciting. I loved my job for some months. After some months of training, I got the chance to work on actual products, too.

After 4-5 months, I was assigned an existing app alone to add more functionality and it came with full of gotchas. The people who developed the app have left the company and I suffered a lot in adding new features and missed many deadlines. My team lead was not happy with me now and took it as my incompleteness.

Now that project is almost about to complete and the team is about to assign a brand new project. But my team lead refused to take me in. I missed the opportunity to work.

That was not all my fault. I realized that the work environment in the company is now not very good (at least for me). I do not want to make any arguments from my side. When I was in college, I always dreamed of being a great programmer. Besides the company, I do spare a little time on my personal projects.

I have signed a bond for 1.5 years and no option to switch for at least next 10 months. Also, Even if I would crack the bonds, I will be called fresher outside since I completed graduation just 5 months ago.

How to survive and do something awesome in this kind of situation? How do I build an awesome programming career even in completely opposite and negative environment?

closed as off-topic by IDrinkandIKnowThings, gnat, enderland Oct 9 '15 at 20:21



  • The project is nearly complete and they will hopefully assign you to another project. Make the best you can of whatever is assigned. – paparazzo Oct 9 '15 at 20:16
  • 1
    I'm sorry for being off-topic but I find your word usage really entertaining, especially "crack the bond" which I would guess "break a contract". Anyway, since you just graduated (undergrad, I presume), chances are, they did not teach you design patterns, version control systems, and the value of conventions. These would greatly help you in understanding the code you've inherited, and would help you better architecture and manage it. – Mickael Caruso Oct 9 '15 at 21:07
  • @MickaelCaruso I learned about version control systems there; naming conventions and some simple design patterns like singleton myself. I really wanted to learn more about design patterns and i just wanna ask you is it hard to learn and apply design patterns by simply googling? – Fenil Oct 10 '15 at 4:49
  • I recommend getting books on design patterns. Google results should only be secondary help (that is, for additional examples and explanations). Get a book about design patterns in the programming language you need. – Mickael Caruso Oct 11 '15 at 11:46
  • @xyz my suggestion is to go to devpressed.com and ask your question there – Rudolf Olah Oct 11 '15 at 15:07

It doesn't really matter what the work environment is like if you want to be highly successful at your profession (or awesome as you put it). Sure a great environment is preferable, but good and great people exist in almost every type of organization and they have a few important characteristics that have little to do with programming techniques or other technical skills. What I am going to say is more about how to be awesome no matter what your profession is.

If you want to be great, yes you do indeed need to have competence at your job, first. But really most employees have basic competence. They possess the technical skills to do their jobs. If you want to be great, you need much more.

First great employees deliver what they promised and often a bit more than they promised. If they can't deliver for reasons outside their control, they immediately inform higher ups of what is blocking them and take steps to get the block removed. Great employees never passively wait for someone else to do something.

Great employees know their technical specialty in more depth than just what is needed day-to-day. They also under stand the business domain they work in and understand how other people's roles relate to what they do. They are the people who solve the difficult problems, who pitch in and learn what they need to in order to get the job done. They are also the people who help out other people even when it is something beyond their normal responsibilities. Every great employee I have ever worked with will move furniture or make copies if need be to get the job done and never whine about how it isn't their responsibility.

Developing in-depth expertise is a critical part of becoming a great employee but the type of expertise that makes you great takes 10,000 hours or more to develop. So they also don't expect to be great 1 year out of school. They may be working on great but not nearly there yet. They read and study their profession and, most importantly, they learn the details and don't keep throwing information away. You can't learn depth if you don't know basics without having to look them up. They learn to make connections between project B that I did five years ago and problem C that I am facing today. They know how to look beyond the obvious. They know how to get information in more detail and push back when what information they are given is not adequate to solve the problem. They ask questions instead of making assumptions (in the programming world this is especially true with requirements which are rarely adequate the first time you receive them).

Great employees have accomplishments not just responsibilities.

People who are great at their jobs own their mistakes. When they mess up (as 100% of all employees will), they come up with plan to fix it and get it fixed. They also recognize that they can't change other people, they can only change themselves.

Great employees have great attitudes. They are not prima donnas. They show when they are supposed to; they do tasks they aren't wild about in order to get to do the interesting ones. They learn from experience, they never have one year of experience repeated 10 times! They have increasing responsibilities over time. They are flexible, what the company needed yesterday is not what they need today and they can take those sudden changes of plans and work them into advantages for themselves and the company. Even when they didn't like the direction of the change. They have social and political skills because it doesn't mater how great you are technically if no one wants to listen to you. Sure there are political people who have great political skills and bad technical skills, we have all seen them. But great employees blow them out of the water because they have both.

Great employees work with people even people they don't like or respect. They understand that unless people can work together very little will get accomplished and they are paid to accomplish stuff.

Change is inevitable in all companies. Great employees drive change rather than being victimized by it. They have great ideas for what to do and they learn how to sell those ideas to upper management.

If the environment is toxic, great employees may move on, but only after they have learned what they need to learn from that particular position and only after they find something else that is better. Great employees don't run away from problems by finding new jobs; they find new jobs to get new challenges. Great employees also use their skills to make each place they work a better environment before they leave. They recognize that sometimes the worst environments are the ones where they can experience the most growth and that will lead to a much better job later.

In the programming world they recognize that good technical skills go far beyond the syntax of a language. That is basic entry level stuff. They know how to debug, they know how to track down the root cause, they know how to get information from the users that will help them get their jobs done, they know how to architect the database and how to understand the meaning of the data they are storing. They know how to make sure that their work is comprehensible to others a few years down the road when a change is needed. They know how to make sure that the project moves forward and that they don't just get stuck. They know when to ask for help and when to push through the problem on their own. They develop professional judgement (Maintaining bad code is great for learning what not to do!) They understand how to work with instead of against QA and how to work within the system but gradually refactor to make things better.

  • 1
    I have a very strong urge to print this out and nail it to the door of my workplace... – Hazel Oct 12 '15 at 13:37
  • 2
    I want to vote to delete this question... But I wont because this is a great answer. – IDrinkandIKnowThings Oct 12 '15 at 19:33

The way you build an awesome career is to build awesome skills -- on your own time if work doesn't provide the opportunity.

  • 2
    I have a little time that remains after work. – Fenil Oct 9 '15 at 19:10
  • 1
    Hey Keshlam, not sure if this question will get reopened or not, but if it does, can you see if you can expand on this post a bit. There's definitely room to talk about the how as well as the what, and it sounds like you may have some knowledge and experience that could be valuable to the asker and future visitors. – jmort253 Oct 10 '15 at 8:13
