Why I am writing this post:
I just read a post in medium about how a 19 years old girl became successful developer which got myself into share some of my knowledge too. The first thing came into my mind is to share something about getting a job as a software engineer/developer in reputed companies and how to improve own skills. So, I am going to list some of the qualities recruiters and your lead/project managers expect from you. I will divide the post in two sections:
Section 1: PREPARATION FOR GETTING A GOOD JOB
1. Solve Problems
The most important requirement is the capability of solving problems. It doesn’t specifically mean solving problems of programming contests only. This refers to the capability of solving any kind of problems in real world. As a software developer/engineer, it is the only duty to solve client’s/user’s (specifically human’s) problem. Right?
How to test or improve problem solving skills? The most easiest way is to solve problems of programming contests. Because those problems are being prepared based on real life situations and also you don’t need to learn a lot of technologies to solve them. Just choose any one of programming languages and start solving problems. You will love how they judge your solution with “Wrong Answer”, “Time Limit Exceeded”, “Runtime Exception”, “Stack Overflow” etc. It will improve not only your problem solving skill, but also it will force you to think to find the best solution among thousands of solutions. Isn’t that cool? Let’s get started:
i. UVa
ii. SPOJ
Another option is to start developing few applications (desktop/web/mobile) on your own. Find some idea that can solve human problems. Or you can choose some existing problems. Then start developing them one by one in any of your favourite technologies (Java, Javascript, C#, C++, python, Android, iOS or whatever you want).
2. Be A Smart User
You will have to be a smart user of few things like the IDE you are working on, the Google, the technology you are working on. Let me explain these three:
i. The IDE
IDE stands for Integrated development kit. The tool you are using for writing your codes. For example, if you are a C# developer, it will be Visual Studio, if you work in PHP, it will be PhpStorm or WebStorm mostly, if you are a JAVA developer, it must be Netbeans or eclipse or android studio. Right? So, whatever the IDE is, you must have to be in good relationship with it. You must know basic features and keyboard shortcuts of them. For example, I am sure you will agree with me that debugging is a way to find out what a code snippet is really doing, and it can save a lot of time when something goes wrong. Even debugging will be useful when you need to understand codes written by someone else. So, you must be skilled in debugging in any tool you are using. For example: if you are writing a web application using C# and Javascript, you must know debugging in Visual Studio and also debugging Javascript using your browser.
ii. Version Control
You must use any version controlling tool for your development. For example, Git and SVN are widely used version controlling tool now-a-days.
iii. Issue Trackers
You must have use any issue tracker also. There are lots of issue trackers out there like bitbucket, jira, redmine, gitlab etc.
iv. Keep Pace With The World
Subscribe few technology related blogs or related facebook groups which might keep you updated with latest technologies. With knowing the name of a new technology, you must also know the features, drawbacks, and why this is better from existing techs.
3. Prepare a CV
In the CV you must be focusing on your skills, programming languages you know, tools you have worked on, projects you have worked on, Apps you have developed, Solved problems in different Online Judges and any other achievements you got. CV must not be lengthy with unnecessary informations and also it should be prepared maintaining standard conventions. You can contact with me directly if you need help about preparing a standard CV.
If you practice above items, you should be able to be good software developer in near future.
Section 2: GOT A GOOD JOB ALREADY, NEED TO IMPROVE YOURSELF?
Oh, you have got a job as a software developer/engineer (title may differ but your job is to develop applications). Now it’s time to improve yourself day by day.
1. Self-Evaluation
Yeah, you read it right. You need to be a self evaluator. Don’t wait for someone else (may be your boss (Lead)) to evaluate. Although, most of the good companies have tradition to evaluate workers based on few required criteria. For example: In the company I work on, the team lead evaluates each of the team member in 3 months interval on 23 established items. But still, before someone else evaluate you, you must evaluate yourself after you have taken every single decision, or after you have written every single line of code. Ask yourself following questions:
1. Am I doing the right thing to do?
2. Am I writing the best solution?
3. What other developers are doing in this situation?
4. What type of impact it can create in the existing features?
5. Because of this change, what can happen throughout the app?
6. Did I handled all situation and taken care of all types of exceptions? etc.
If you can make this a habit, you will be able to write beautiful codes too.
2. Become Lazy
You know what, a software developer is needed to be lazy. If you are lazy person, you must hate doing same thing more than once. You must hate to re-write same codes you have already written somewhere else in this application. When writing something, you will write it in a way so that it can be REUSED.
3. Follow Conventions
You must need to follow conventions and standards of existing app when writing codes. If you are developing an app from scratch, study about folder architecture, design patterns and other best practices.
4. Online Teachers (Documentation and Google) Are The Life Savers
So, if you are writing an app using XYZ technology, you must read their documentation at first. Take an idea about what they do, how they do, what APIs they are providing etc. When developing your APP, if you face any issues or may be you need something to do, re-visit the documentation at first. If the solution you need is common, you are going to get it there, believe me. Now if you need something to know (like how to do this in XYZ tech), let’s go to Google and ask it. Read what other peoples are saying about that. You will find a lot of answers. You have to evaluate those answers and find out the best solution. It’s not impossible that, after reading their solution, you can get an idea in your mind which is far better than existing solutions. Right?
5. Communication
Communication is the key. You have to be a good communicator. You will have to communicate with your co-workers or clients on regular basis to make them know about what you are doing, how you are doing, what troubles you are facing and how you have solved them.
I believe if we can follow above instructions in your daily life, we will be a great software developer in future. And also to keep our brain sharp, we need to read books on regular basis. I am gonna add some must-read book list in this post.
Thanks for your patience and reading this.
Ujjal Suttra Dhar