Just Graduated? Do Job in a Big Company for At Least 1 Year

After graduation in 2006 in BSCS, and I did software development job for 4.5 years, primarily using Java EE technologies. Almost 1.5 years back, I joined academia and serving as Computer Science Lecturer. I often find students in-love with freelancing and ignoring job market altogether. Here I want to share some points from my experience.

I often find average students dreaming to freelance just after the graduation. In some exceptional cases, joining freelancing as career may work well, immediately after your graduation. This hold true for students excellent not in (just) grades, but in development. Who have done really interesting and large development projects during their BS studies. Or if they have exposure of working with large code base e.g. working on some open source products in some semester or as final year project (aka: FYP). Freelancing immediately after graduation also makes sense, if you have done internship in some software house and you are very comfortable and well aware how things work in a software company. Or, your brother or very close friend had some software company, and you hold really great knowledge how software companies, specifically teams in software companies work. Such guys should pursue their dreams during the degree or join some incubation programs e.g. Plan 9. As they have good enough knowledge and enthusiastic about web business.

Courtesy of time.com

But a lot of students do not break their comfort zone by learning some very demanding technologies in great depth. When they graduate, they just know how to make almost-hello-world-level applications in different technologies. So by the time they graduate, they have no exposure how to develop real projects, the bigger projects. Mostly have no idea how software companies work. How projects are sourced by business development guys, what is the role of different people involved in software development life cycle. For example, the role of project managers, software architects, team leads, technical mentors, developers, designers, product managers and marketing resources. And how each fit into the life cycle.

Yea, you may be thinking, each role's responsibility is clear by their names. But as per my experience, their is a lot of difference what we know theoretically and what actually happens. If you step into freelancing without such experience, the guy on the other side of your computer (called client) is also part of some bigger team in some role, and you must be clear about bigger picture of software development life cycle. Definitely I am not talking about freelance projects of data processing, data entry, and 3 page website development. I mean, competing for bigger projects. Even in case of freelancing, most clients have teams of software engineer in different locations and they need to collaborate online using some appropriate communication tools.

Its not only limited to managerial exposure, but a few things hold true from technology perspective as well. For example, when you work on projects as students you mostly work alone or in clearly separate modules and each student have his own copy of software code. But in real projects, multiple people work on same project, and even multiple developers on single module. They all share common code repository serving from a central-server, and each member make updates to same code repository. There are different technology concepts here too, e.g. how such repository are made and connected to, what if some conflicts occur when two developers started working on same file in parallel. What is the concept of branching, code integration, etc. Different Software Configurations Managements solutions are used e.g. Subversion and Git, etc. Its recommended you learn these things before you join software company. But if you don't have good-enough knowledge, in software companies, you get some team leads or mentors with enough time to learn these things. If you don't have knowledge of such tools and technologies, and you directly bid some project online. Most of your clients would also be using some tool like this. At that time, you would be spending a lot of time. And if you are solo-freelancer, you may face some difficulty to learn these things in so tight schedule.

Please note, these skills are not difficult. All I mean is, if you don't know in advance, they may cause issues for you, when you have to use in projects with stringent time requirements by your client. Rather, I would recommend you to learn these things at college or university level.

The technology side is not limited to just software code management. At student level, most of students have no exposure of writing unit testing code. How performance optimizations can be performed applying different caching or software and database design improvements. But in team, with mentors you get some opportunity to learn these things as well. (again note, this not not difficult to do as student, given you have enough motivation).

1 year is just used as example in title, all you need is the confidence in knowledge and skills you already have and learned there. Mostly importantly, the ability to learn by your own what you don't know already. That is the right time to do whatever you want, whether its freelancing or working on your own ideas. If you graduation degree has helped you to achieve this mindset and skills, its just awesome.

Beside all these, when you work about 8-10 hours for some years with loads of work and deadlines pressure. You learn the value of freedom and how you are treated as machines who born to create value for others. It help you to think seriously about your future and make some plan to do something by your own, or hunting some really caring company who treat their employees like humans, believe they have family life too, and pay you handsome money that makes you free from worrying basic and some luxurious needs. Yes, you read it correctly, if you are great developer, you would not be satisfied with basic needs.


I talked about joining software industry, but shared nothing about the most important subjects for job interviews. It would have get too long, so I have written a separate article on it, please read below:
6 Required Skills to Join Software Industry


Popular posts from this blog

Task 12 - Create Java Program with MySQL Database Connectivity

Java Interfaces and Exception Handling - Practice Problem with Solution

Task 16 - Javafx Program to Create, Retrieve, Update and Delete records with Database